本文为您介绍如何通过Terraform创建伸缩组、伸缩配置、伸缩规则等弹性伸缩资源。

前提条件

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

背景信息

  • Terraform是一种开源工具,用于安全高效地预览,配置和管理云基础架构和资源。主要体现在可以对基础设施进行编码,利用代码来进行资源管理(例如创建、删除、查找或修改资源)。更多信息,请参见Terraform概述
  • Terraform命令包括terraform applyterraform show等资源管理命令、状态管理命令和其他命令,更多信息,请参见资源管理常用命令。其中:
    • terraform apply:该命令用于实际资源的新建和变更操作,为了安全起见,在命令运行过程中增加了人工交互的过程,即需要手动确认是否继续。
    • terraform show:该命令用于展示当前state文件中所有被管理的资源及其所有属性值。

操作步骤

本操作以通过Terraform创建伸缩组、伸缩配置和伸缩规则为例,管理其他弹性伸缩资源请参考该方法进行。

  1. 创建专有网络VPC和交换机。
    本示例中以在cn-hangzhou-b可用区创建了一个专有网络VPC和交换机为例。
    1. 创建terraform.tf文件,输入以下内容并保存在当前的执行目录中。
      以下代码中availability_zonecidr_block参数的取值仅供示例,请您替换成实际的可用区或者自定义私网网段。关于选择交换机可用区的更多信息,请参见地域和可用区。创建专有网络VPC和交换机之前,您需要先做好网络规划,更多信息,请参见网络规划
      resource "alicloud_vpc" "vpc" {
        name       = "tf_test_vpc"
        cidr_block = "172.16.0.0/12"         //规划专有网络VPC的私网网段。
      }
      
      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命令,查看已创建的专有网络和交换机。
      您也可以登录专有网络VPC控制台查看专有网络和交换机的属性。
  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命令,查看已创建的安全组和安全组规则。
      您也可以登录云服务器ECS控制台查看已创建的安全组和安全组规则。
  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命令,查看已创建的伸缩组。
      您也可以登录弹性伸缩控制台查看已创建的伸缩组。
  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命令,查看已创建的伸缩配置。
      您也可以登录弹性伸缩控制台查看已创建的伸缩配置。
  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命令,查看已创建的伸缩规则。
      您也可以登录弹性伸缩控制台查看已创建的伸缩规则。

操作示例

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