Web サイトまたはアプリケーションをデプロイするときは、一連のノードをデプロイする必要があり、訪問数やリソース使用量に応じてそれらを自動的に拡大または縮小することが可能です。 SLB はリクエストをそれぞれのノードに分配します。 ここでは、Terraform を使用してWeb クラスターをデプロイする方法を説明します。

このタスクについて

この例では、アプリケーション全体が 1 つのゾーンにデプロイされており、"Hello, World" Web ページにはポート 8080 からのみアクセスが可能です。

手順

  1. VPC と VSwitch を作成します。
    1. "terraform.tf" ファイルを作成して、以下を入力し、現在の実行ディレクトリに保存します。

      resource "alicloud_vpc" "vpc" {
        name       = "tf_test_foo"
        cidr_block = "172.16.0.0/12"
      }
      
      resource "alicloud_vswitch" "vsw" {
        vpc_id            = "${alicloud_vpc.vpc.id}"
        cidr_block        = "172.16.0.0/21"
        availability_zone = "cn-beijing-b"
      }
    2. terraform apply を実行して、作成を開始します。

    3. terraform show を実行して、作成した VPC と VSwitch を表示します。

      VPC コンソールにログインして、VPC と VSwitch の属性を表示します。

  2. セキュリティグループを作成し、前の手順で作成した VPC に適用します。
    1. ファイル "terraform.tf" に、以下を追加します。
      resource "alicloud_security_group" "default" {
        name = "default"
        vpc_id = "${alicloud_vpc.vpc.id}"
      }
      
      resource "alicloud_security_group_rule" "allow_all_tcp" {
        type              = "ingress"
        ip_protocol       = "tcp"
        nic_type          = "internet"
        policy            = "accept"
        port_range        = "1/65535"
        priority          = 1
        security_group_id = "${alicloud_security_group.default.id}"
        cidr_ip           = "0.0.0.0/0"
      }
    2. terraform apply を実行して、作成を開始します。

    3. terraform show を実行して、作成したセキュリティグループとセキュリティグループのルールを表示します。

      ECS コンソールにログインして、セキュリティグループとセキュリティグループのルールを表示します。

  3. SLB ( Server Load Balancer ) インスタンスを作成し、それにパブリック IP アドレスを割り当てます。 この例では、SLB インスタンスは、フロントエンドポート 80 からバックエンドポート 8080 へのマッピングによって設定されています。 さらに、その後のテストのためにパブリック IP アドレスを出力するように設定されています。
    1. ファイル "slb.tf" を作成して、以下を追加します。
      resource "alicloud_slb" "slb" {
        name       = "test-slb-tf"
        vswitch_id = "${alicloud_vswitch.vsw.id}"
        internet = true
      }
      resource "alicloud_slb_listener" "http" {
        load_balancer_id = "${alicloud_slb.slb.id}"
        backend_port = 8080
        frontend_port = 80
        bandwidth = 10
        protocol = "http"
        sticky_session = "on"
        sticky_session_type = "insert"
        cookie = "testslblistenercookie"
        cookie_timeout = 86400
        health_check="on"
        health_check_type = "http"
        health_check_connect_port = 8080
      }
      
      output "slb_public_ip"{
        value = "${alicloud_slb.slb.address}"
      }
    2. terraform apply を実行して、作成を開始します。

    3. terraform show を実行して、作成した SLB インスタンスを表示します。

      SLB コンソールにログインして新しい SLB インスタンスを表示します。

  4. Auto Scaling ソリューションを作成します。
    この例では、以下のリソースが作成されます。
    • スケーリンググループ: テンプレート内の ECS インスタンスの最小数を 2、最大数を 10 に指定します。 その間に、スケーリンググループを、新しく作成した SLB インスタンスにバインドします。 スケーリンググループの設定要件により、SLB はリスナーを適切に設定する必要があります。 その結果、デプロイの順序はテンプレート内の depends_on 属性で指定されます。
    • スケーリンググループ設定: テンプレート内の ECS インスタンスの特定の設定を指定します。 初期化設定 (ユーザーデータ) で "hello World" Web ページを生成し、ポート 8080 でサービスを提供します。 操作を簡単にするために、この例では、仮想マシンにパブリック IP アドレスを割り当て、環境をその後削除するために force_delete = true を設定します。
    • スケーリングルール: 特定のスケーリングルールを定義します。
    1. ファイル "ess.tf" を作成して、以下を追加します。
      resource "alicloud_ess_scaling_group" "scaling" {
        min_size = 2
        max_size = 10
        scaling_group_name = "tf-scaling"
        vswitch_ids=["${alicloud_vswitch.vsw. *.id}"]
        loadbalancer_ids = ["${alicloud_slb.slb. *.id}"]
        removal_policies   = ["OldestInstance", "NewestInstance"]
        depends_on = ["alicloud_slb_listener.http"]
      }
      
      resource "alicloud_ess_scaling_configuration" "config" {
        scaling_group_id = "${alicloud_ess_scaling_group.scaling.id}"
        image_id = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
        instance_type = "ecs.n2.small"
        security_group_id = "${alicloud_security_group.default.id}"
        active=true
        enable=true
        user_data = "#! /bin/bash\necho \"Hello, World\" > index.html\nnohup busybox httpd -f -p 8080&"
        internet_max_bandwidth_in=10
        internet_max_bandwidth_out= 10
        internet_charge_type = "PayByTraffic"
        force_delete= true
      
      }
      
      resource "alicloud_ess_scaling_rule" "rule" {
        scaling_group_id = "${alicloud_ess_scaling_group.scaling.id}"
        adjustment_type  = "TotalCapacity"
        adjustment_value = 2
        cooldown = 60
      }
    2. terraform apply を実行して、作成を開始します。

      作成に成功すると、SLB のパブリック IP アドレスが生成されます。

    3. 約 2 分で、Auto Scaling は ECS インスタンスを自動的に作成します。

    4. 確認のために、コマンド curl http://<slb public ip> を入力します。

      "Hello, World" と表示されたら、SLB インスタンスを通じて ECS インスタンスが提供する Web ページに正常にアクセスしています。

  5. terraform destroy を実行して、テスト環境を削除します。 確認後、デプロイされた環境全体が削除されます。

    Terraform を使用して、簡単に環境を削除して再デプロイします。 再デプロイする場合は、terraform apply を実行するだけです。