This topic describes how to create multiple Elastic Compute Service (ECS) instances at a time by using Terraform.

Procedure

  1. Create a VPC and a VSwitch.
    Terraform 0.11 is used in this example.
    Note In Terraform 0.11 and earlier, the example usage of the variable expression is vpc_id = "${alicloud_vpc.vpc.id}". In Terraform 0.12 and later, the example usage of the variable expression is updated to vpc_id = "alicloud_vpc.vpc.id". Use the corresponding variable expression based on your Terraform version.
    1. Create the terraform.tf file, enter the following content, and then save the file to the current working directory.
      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. Run the terraform show command to view the created VPC and VSwitch.
      You can also log on to the VPC console to view the attributes of the VPC and VSwitch.
  2. Create a security group and apply the security group to the created VPC.
    1. In the terraform.tf file, add the following content:
      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        = "22/22"
        priority          = 1
        security_group_id = "${alicloud_security_group.default.id}"
        cidr_ip           = "0.0.0.0/0"
      }
    2. Run the terraform show command to view the created security group and added security group rule.
      You can also log on to the ECS console to view the security group and security group rule.
  3. Use a module to create multiple ECS instances. In this example, three ECS instances are created.
    1. In the terraform.tf file, add the following content:
      module "tf-instances" {
        source = "alibaba/ecs-instance/alicloud"
        vswitch_id = "${alicloud_vswitch.vsw.id}"
        group_ids = ["${alicloud_security_group.default. *.id}"]
        availability_zone = "cn-beijing-b"
        disk_category = "cloud_ssd"
        disk_name = "my_module_disk"
        disk_size = "50"
        number_of_disks = 7
      
        instance_name = "my_module_instances_"
        host_name = "sample"
        internet_charge_type = "PayByTraffic"
        number_of_instances = "3"
        password="User@123"
      }
      Note
      • In the preceding example, internet_max_bandwidth_out is set to 10, which will cause the ECS instances to be automatically assigned public IP addresses.
      • For more information about the parameters, visit ecs-instance.
    2. Run the terraform show command to view the created ECS instances.
    3. Run the ssh root@<publicip> command and enter the password to access the ECS instances.

Example

provider "alicloud" {}

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"
}

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          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = "${alicloud_security_group.default.id}"
  cidr_ip           = "0.0.0.0/0"
}

module "tf-instances" {
  source = "alibaba/ecs-instance/alicloud"
  vswitch_id = "${alicloud_vswitch.vsw.id}"
  group_ids = ["${alicloud_security_group.default. *.id}"]
  availability_zone = "cn-beijing-b"
  disk_category = "cloud_ssd"
  disk_name = "my_module_disk"
  disk_size = "50"
  number_of_disks = 7

  instance_name = "my_module_instances_"
  host_name = "sample"
  internet_charge_type = "PayByTraffic"
  number_of_instances = "3"
  password="User@123"
}