このトピックでは、Terraform モジュールを使用して複数の Elastic Compute Service (ECS) インスタンスを一度に作成する方法について説明します。
前提条件
Alibaba Cloud アカウントと AccessKey ペアが作成されていること。 AccessKey ペア ページで AccessKey ペアを作成または表示できます。
Terraform がインストールおよび構成されていること。 詳細については、「ローカル PC に Terraform をインストールおよび構成する」および「Cloud Shell で Terraform を使用する」をご参照ください。
手順
仮想プライベートクラウド (VPC) と vSwitch を作成します。
terraform.tf ファイルを作成し、次のコンテンツを入力して、現在の作業ディレクトリにファイルを保存します。
data "alicloud_zones" "default" { available_resource_creation = "VSwitch" } resource "alicloud_vpc" "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" zone_id = data.alicloud_zones.default.zones[0].id }terraform applyコマンドを実行して、VPC と vSwitch を作成します。terraform showコマンドを実行して、作成された VPC と vSwitch を表示します。VPC コンソールにログインして、VPC と vSwitch の属性を表示することもできます。
VPC のセキュリティグループを作成し、すべての IP アドレスからのアクセスを許可するセキュリティグループルールを追加します。
terraform.tf ファイルに次のコンテンツを追加します。
resource "alicloud_security_group" "default" { security_group_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 = "1/65535" priority = 1 security_group_id = alicloud_security_group.default.id cidr_ip = "0.0.0.0/0" }terraform applyコマンドを実行して、セキュリティグループとセキュリティグループルールを作成します。terraform showコマンドを実行して、作成されたセキュリティグループとセキュリティグループルールを表示します。ECS コンソールにログインして、セキュリティグループとセキュリティグループルールを表示することもできます。
モジュールを使用して複数の ECS インスタンスを作成します。この例では、3 つの ECS インスタンスが作成されます。
重要このトピックでは、モジュールを使用して一度に複数のリソースを作成します。 Terraform は Git を使用してモジュールのソースコードを取得します。そのため、事前に Git をインストールする必要があります。
alibaba/ecs-instance/alicloud モジュールを使用するには、Terraform のバージョンが 0.13.0 以降である必要があります。
terraform.tf ファイルに次のコンテンツを追加します。
data "alicloud_instance_types" "default" { availability_zone = data.alicloud_zones.default.zones[0].id cpu_core_count = 1 memory_size = 2 } data "alicloud_images" "default" { name_regex = "^ubuntu_[0-9]+_[0-9]+_x64*" most_recent = true owners = "system" } module "tf-instances" { source = "alibaba/ecs-instance/alicloud" region = "cn-beijing" number_of_instances = 3 vswitch_id = alicloud_vswitch.vsw.id group_ids = [alicloud_security_group.default.id] private_ips = ["172.16.0.10", "172.16.0.11", "172.16.0.12"] image_ids = [data.alicloud_images.default.images[0].id] instance_type = data.alicloud_instance_types.default.instance_types[0].id internet_max_bandwidth_out = 10 associate_public_ip_address = true instance_name = "my_module_instances_" host_name = "sample" internet_charge_type = "PayByTraffic" password = "User@123" system_disk_category = "cloud_ssd" data_disks = [ { category = "cloud_ssd" name = "my_module_disk" size = "50" } ] }説明上記のサンプルコードでは、
associate_public_ip_address = trueとinternet_max_bandwidth_out = 10が指定されています。この場合、各 ECS インスタンスにパブリック IP アドレスが割り当てられます。 パラメーターの詳細については、ecs-instance ページをご参照ください。terraform applyコマンドを実行して、ECS インスタンスを作成します。terraform showコマンドを実行して、作成された ECS インスタンスを表示します。ssh root@<パブリック IP> コマンドを実行し、パスワードを入力して ECS インスタンスにアクセスします。
サンプルコード
provider "alicloud" {
region = "cn-beijing"
}
data "alicloud_zones" "default" {
available_resource_creation = "VSwitch"
}
resource "alicloud_vpc" "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"
zone_id = data.alicloud_zones.default.zones[0].id
}
resource "alicloud_security_group" "default" {
security_group_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 = "1/65535"
priority = 1
security_group_id = alicloud_security_group.default.id
cidr_ip = "0.0.0.0/0"
}
data "alicloud_instance_types" "default" {
availability_zone = data.alicloud_zones.default.zones[0].id
cpu_core_count = 1
memory_size = 2
}
data "alicloud_images" "default" {
name_regex = "^ubuntu_[0-9]+_[0-9]+_x64*"
most_recent = true
owners = "system"
}
module "tf-instances" {
source = "alibaba/ecs-instance/alicloud"
region = "cn-beijing"
number_of_instances = 3
vswitch_id = alicloud_vswitch.vsw.id
group_ids = [alicloud_security_group.default.id]
private_ips = ["172.16.0.10", "172.16.0.11", "172.16.0.12"]
image_ids = [data.alicloud_images.default.images[0].id]
instance_type = data.alicloud_instance_types.default.instance_types[0].id
internet_max_bandwidth_out = 10
associate_public_ip_address = true
instance_name = "my_module_instances_"
host_name = "sample"
internet_charge_type = "PayByTraffic"
password = "User@123"
system_disk_category = "cloud_ssd"
data_disks = [
{
category = "cloud_ssd"
name = "my_module_disk"
size = "50"
}
]
}