本文介绍如何使用Terraform模块批量创建多台ECS实例。
操作步骤
- 创建VPC网络和交换机。
本示例中Terraform的版本为0.11。
说明 Terraform 0.11及更早的版本,变量表达式使用示例为
vpc_id = "${alicloud_vpc.vpc.id}"
。Terraform 0.12版本进行了更新,变量表达式使用示例为
vpc_id = "alicloud_vpc.vpc.id"
。请根据您安装的版本修改相应的变量表达式的格式。
- 创建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 init
初始化环境。
- 运行
terraform plan
查看资源。
- 确认资源无误后,运行
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 = "22/22"
priority = 1
security_group_id = "${alicloud_security_group.default.id}"
cidr_ip = "0.0.0.0/0"
}
- 运行
terraform plan
查看资源。
- 确认资源无误后,运行
terraform apply
开始创建。
- 运行
terraform show
查看已创建的安全组和安全组规则。
您也可以登录ECS控制台查看安全组和安全组规则。
- 使用Module创建多台ECS实例。在本示例中,创建3台ECS实例。
- 在terraform.tf文件中增加以下内容。
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"
}
说明
- 在上述示例中,指定了
internet_max_bandwith_out = 10
,因此会自动为实例分配一个公网IP。
- 详细的参数解释请参见参数说明。
- 运行
terraform plan
查看资源。
- 确认资源无误后,运行
terraform apply
开始创建。
- 运行
terraform show
查看已创建的ECS实例。
- 运行ssh root@<publicip>,并输入密码来访问ECS实例。
操作样例
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"
}