本文為您介紹如何通過Terraform建立伸縮組、伸縮配置、伸縮規則等Auto Scaling資源。
前提條件
在使用Terraform之前,請您確保完成以下操作:
- 您已擁有一個阿里雲帳號和存取金鑰(AccessKey)。請在阿里雲控制台的AccessKey管理頁面上查看您的AccessKey。如需建立AccessKey,具體操作,請參見建立AccessKey。
- 您已安裝並配置了Terraform。如需安裝Terraform,具體操作,請參見在本地安裝和配置Terraform和在Cloud Shell中使用Terraform。
背景資訊
- Terraform是一種開源工具,用於安全高效地預覽,配置和管理雲基礎架構和資源。主要體現在可以對基礎設施進行編碼,利用代碼來進行資源管理(例如建立、刪除、尋找或修改資源)。更多資訊,請參見Terraform概述。
- Terraform命令包括terraform apply和terraform show等資源管理命令、狀態管理命令和其他命令,更多資訊,請參見資源管理常用命令。其中:
- terraform apply:該命令用於實際資源的建立和變更操作,為了安全起見,在命令運行過程中增加了人工互動的過程,即需要手動確認是否繼續。
- terraform show:該命令用於展示當前state檔案中所有被管理的資源及其所有屬性值。
操作步驟
本操作以通過Terraform建立伸縮組、伸縮配置和伸縮規則為例,管理其他Auto Scaling資源請參考該方法進行。
- 建立Virtual Private Cloud和交換器。本樣本中以在cn-hangzhou-b可用性區域建立了一個Virtual Private Cloud和交換器為例。
- 建立terraform.tf檔案,輸入以下內容並儲存在當前的執行目錄中。以下代碼中availability_zone和cidr_block參數的取值僅供樣本,請您替換成實際的可用性區域或者自訂私網網段。關於選擇交換器可用性區域的更多資訊,請參見地區和可用性區域。建立Virtual Private Cloud和交換器之前,您需要先做好網路規劃,更多資訊,請參見網路規劃。
resource "alicloud_vpc" "vpc" { name = "tf_test_vpc" cidr_block = "172.16.0.0/12" //規劃Virtual Private Cloud的私網網段。 } resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "172.16.0.0/21" //規劃交換器的私網網段。 availability_zone = "cn-hangzhou-b" //選擇交換器的可用性區域。 }
- 運行terraform apply命令,開始建立專用網路和交換器。
- 運行terraform show命令,查看已建立的專用網路和交換器。您也可以登入Virtual Private Cloud控制台查看專用網路和交換器的屬性。
- 建立terraform.tf檔案,輸入以下內容並儲存在當前的執行目錄中。
- 在上一步已建立好的專用網路中,建立一個安全性群組,並為該安全性群組添加一個允許任何地址訪問的安全性群組規則。
- 在terraform.tf檔案中添加以下內容。
resource "alicloud_security_group" "security" { name = "tf_test_security" vpc_id = alicloud_vpc.vpc.id } resource "alicloud_security_group_rule" "allow_all_tcp" { type = "ingress" ip_protocol = "tcp" nic_type = "intranet" policy = "accept" port_range = "1/65535" priority = 1 security_group_id = alicloud_security_group.security.id cidr_ip = "0.0.0.0/0" }
- 運行terraform apply命令,開始建立安全性群組和安全性群組規則。
- 運行terraform show命令,查看已建立的安全性群組和安全性群組規則。您也可以登入Elastic Compute Service控制台查看已建立的安全性群組和安全性群組規則。
- 在terraform.tf檔案中添加以下內容。
- 建立伸縮組。本樣本中以建立最大執行個體數為100的伸縮組為例。
- 在terraform.tf檔案中添加以下內容。
resource "alicloud_ess_scaling_group" "group" { scaling_group_name="tf_test_scalinggroup" min_size=0 max_size=100 vswitch_ids=[alicloud_vswitch.vsw.id] }
- 運行terraform apply命令,開始建立伸縮組。
- 運行terraform show命令,查看已建立的伸縮組。您也可以登入Auto Scaling控制台查看已建立的伸縮組。
- 在terraform.tf檔案中添加以下內容。
- 建立伸縮配置。
- 在terraform.tf檔案中增加以下內容。本樣本以建立ECS類型的伸縮配置為例。
resource "alicloud_ess_scaling_configuration" "configuration" { scaling_group_id = alicloud_ess_scaling_group.group.id instance_type = "ecs.hfc7.xlarge" image_id = "aliyun_2_1903_x64_20G_alibase_20210120.vhd" security_group_id = alicloud_security_group.security.id scaling_configuration_name = "tf_test_scalingconfiguration" system_disk_category = "cloud_essd" spot_strategy = "SpotWithPriceLimit" force_delete = true }
- 運行terraform apply命令,開始建立伸縮配置。
- 運行terraform show命令,查看已建立的伸縮配置。您也可以登入Auto Scaling控制台查看已建立的伸縮配置。
- 在terraform.tf檔案中增加以下內容。
- 建立伸縮規則。
- 在terraform.tf檔案中增加以下內容。
resource "alicloud_ess_scaling_rule" "rule" { scaling_group_id = alicloud_ess_scaling_group.group.id adjustment_type = "QuantityChangeInCapacity" adjustment_value = 1 }
- 運行terraform apply命令,開始建立伸縮規則。
- 運行terraform show命令,查看已建立的伸縮規則。您也可以登入Auto Scaling控制台查看已建立的伸縮規則。
- 在terraform.tf檔案中增加以下內容。
操作樣本
通過Terraform建立伸縮組、伸縮配置以及伸縮規則的操作樣本如下所示:
resource "alicloud_vpc" "vpc" {
name = "tf_test_vpc"
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-hangzhou-b"
}
resource "alicloud_security_group" "security" {
name = "tf_test_security"
vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_all_tcp" {
type = "ingress"
ip_protocol = "tcp"
nic_type = "intranet"
policy = "accept"
port_range = "1/65535"
priority = 1
security_group_id = alicloud_security_group.security.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_ess_scaling_group" "group" {
scaling_group_name="tf_test_scalinggroup"
min_size=0
max_size=100
vswitch_ids=[alicloud_vswitch.vsw.id]
}
resource "alicloud_ess_scaling_configuration" "configuration" {
scaling_group_id = alicloud_ess_scaling_group.group.id
instance_type = "ecs.hfc7.xlarge"
image_id = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
security_group_id = alicloud_security_group.security.id
scaling_configuration_name = "tf_test_scalingconfiguration"
system_disk_category = "cloud_essd"
spot_strategy = "SpotWithPriceLimit"
force_delete = true
}
resource "alicloud_ess_scaling_rule" "rule" {
scaling_group_id = alicloud_ess_scaling_group.group.id
adjustment_type = "QuantityChangeInCapacity"
adjustment_value = 1
}