全部產品
Search
文件中心

Auto Scaling:通過Terraform建立Auto Scaling資源

更新時間:Jun 30, 2024

本文為您介紹如何通過Terraform建立伸縮組、伸縮配置、伸縮規則等Auto Scaling資源。

前提條件

在使用Terraform之前,請您確保完成以下操作:

背景資訊

  • Terraform是一種開源工具,用於安全高效地預覽,配置和管理雲基礎架構和資源。主要體現在可以對基礎設施進行編碼,利用代碼來進行資源管理(例如建立、刪除、尋找或修改資源)。更多資訊,請參見Terraform概述
  • Terraform命令包括terraform applyterraform show等資源管理命令、狀態管理命令和其他命令,更多資訊,請參見資源管理常用命令。其中:
    • terraform apply:該命令用於實際資源的建立和變更操作,為了安全起見,在命令運行過程中增加了人工互動的過程,即需要手動確認是否繼續。
    • terraform show:該命令用於展示當前state檔案中所有被管理的資源及其所有屬性值。

操作步驟

本操作以通過Terraform建立伸縮組、伸縮配置和伸縮規則為例,管理其他Auto Scaling資源請參考該方法進行。

  1. 建立Virtual Private Cloud和交換器。
    本樣本中以在cn-hangzhou-b可用性區域建立了一個Virtual Private Cloud和交換器為例。
    1. 建立terraform.tf檔案,輸入以下內容並儲存在當前的執行目錄中。
      以下代碼中availability_zonecidr_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"  //選擇交換器的可用性區域。
      }
    2. 運行terraform apply命令,開始建立專用網路和交換器。
    3. 運行terraform show命令,查看已建立的專用網路和交換器。
      您也可以登入Virtual Private Cloud控制台查看專用網路和交換器的屬性。
  2. 在上一步已建立好的專用網路中,建立一個安全性群組,並為該安全性群組添加一個允許任何地址訪問的安全性群組規則。
    1. 在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"
      }
    2. 運行terraform apply命令,開始建立安全性群組和安全性群組規則。
    3. 運行terraform show命令,查看已建立的安全性群組和安全性群組規則。
      您也可以登入Elastic Compute Service控制台查看已建立的安全性群組和安全性群組規則。
  3. 建立伸縮組。
    本樣本中以建立最大執行個體數為100的伸縮組為例。
    1. 在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]
      }
    2. 運行terraform apply命令,開始建立伸縮組。
    3. 運行terraform show命令,查看已建立的伸縮組。
      您也可以登入Auto Scaling控制台查看已建立的伸縮組。
  4. 建立伸縮配置。
    1. 在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
      }
    2. 運行terraform apply命令,開始建立伸縮配置。
    3. 運行terraform show命令,查看已建立的伸縮配置。
      您也可以登入Auto Scaling控制台查看已建立的伸縮配置。
  5. 建立伸縮規則。
    1. 在terraform.tf檔案中增加以下內容。
      resource "alicloud_ess_scaling_rule" "rule" {
           scaling_group_id = alicloud_ess_scaling_group.group.id
           adjustment_type = "QuantityChangeInCapacity"
           adjustment_value = 1
      }
    2. 運行terraform apply命令,開始建立伸縮規則。
    3. 運行terraform show命令,查看已建立的伸縮規則。
      您也可以登入Auto Scaling控制台查看已建立的伸縮規則。

操作樣本

通過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
}