部署一個網站或者API應用時,需要部署一系列的節點,並根據訪問數量或者資源使用的情況來自動調整,SLB對各個節點分配請求。本文介紹如何使用Terraform部署Web叢集。

背景信息

在本樣本中,整個應用部署在一個可用性區域,並且只提供8080連接埠訪問hello world網頁。

操作步骤

  1. 建立VPC網路和交換器。
    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. 建立負載平衡執行個體,為其分配公網IP。在本樣本中,為負載平衡執行個體配置了從前端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控制台查看建立的負載平衡執行個體。

  4. 建立彈性伸縮。
    在本樣本中,將建立以下資源:
    • 伸縮組:在模版中指定伸縮最小為2,最大為10,並將伸縮組與建立的負載平衡執行個體綁定。由於伸縮組的配置要求SLB必須有相應配置的監聽器,因此模版中用depends_on屬性指定了部署順序。
    • 伸縮組配置:在模版中指定ECS執行個體的具體配置。在初始化配置(user-data)中產生一個Hello World的網頁,並在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. 等待大約兩分鐘,彈性伸縮將自動建立ECS執行個體。

    4. 輸入命令curl http://<slb public ip>進行驗證。

      如果看到Hello,World,表示成功通過負載平衡執行個體訪問ECS執行個體提供的網頁。

  5. 運行terraform destroy刪除測試環境。經確認後,整個部署的環境將被刪除。

    使用Terraform可以便捷地刪除和重新部署一個環境。如果您想重新部署,運行terraform apply即可。