部署一個網站或者API應用時,需要部署一系列的節點,並根據訪問數量或者資源使用的情況來自動調整,SLB對各個節點分配請求。本文介紹如何使用Terraform部署Web叢集。
背景信息
操作步骤
- 建立VPC網路和交換器。
-
建立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" }
-
運行
terraform apply
開始建立。 -
運行
terraform show
查看已建立的VPC和VSwitch。您也可以登入VPC控制台查看VPC和VSwitch的屬性。
-
- 建立安全性群組,並將安全性群組作用於上一步建立的VPC中。
-
在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" }
-
運行
terraform apply
開始建立。 -
運行
terraform show
查看已建立的安全性群組和安全性群組規則。你也可以登入ECS控制台查看安全性群組和安全性群組規則。
-
- 建立負載平衡執行個體,為其分配公網IP。在本樣本中,為負載平衡執行個體配置了從前端80連接埠到後端8080連接埠的映射,並輸出公網IP用於後續測試。
-
建立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}" }
-
運行
terraform apply
開始建立。 -
運行
terraform show
查看已建立的負載平衡執行個體。你也可以登入SLB控制台查看建立的負載平衡執行個體。
-
- 建立彈性伸縮。
在本樣本中,將建立以下資源:
- 伸縮組:在模版中指定伸縮最小為2,最大為10,並將伸縮組與建立的負載平衡執行個體綁定。由於伸縮組的配置要求SLB必須有相應配置的監聽器,因此模版中用depends_on屬性指定了部署順序。
- 伸縮組配置:在模版中指定ECS執行個體的具體配置。在初始化配置(user-data)中產生一個Hello World的網頁,並在8080連接埠提供服務。為簡化操作,本樣本中會為虛擬機器分配公網IP,並且設定
force_delete=true
用於後續刪除環境。 - 伸縮規則:定義具體的伸縮規則。
-
建立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 }
-
運行
terraform apply
開始建立。建立成功後,會輸出SLB的公網IP。
-
等待大約兩分鐘,彈性伸縮將自動建立ECS執行個體。
-
輸入命令
curl http://<slb public ip>
進行驗證。如果看到
Hello,World
,表示成功通過負載平衡執行個體訪問ECS執行個體提供的網頁。
- 運行
terraform destroy
刪除測試環境。經確認後,整個部署的環境將被刪除。使用Terraform可以便捷地刪除和重新部署一個環境。如果您想重新部署,運行
terraform apply
即可。