すべてのプロダクト
Search
ドキュメントセンター

Terraform:Terraform モジュールを使用して複数の ECS インスタンスを一度に作成する

最終更新日:Mar 07, 2025

このトピックでは、Terraform モジュールを使用して複数の Elastic Compute Service (ECS) インスタンスを一度に作成する方法について説明します。

前提条件

手順

  1. 仮想プライベートクラウド (VPC) と vSwitch を作成します

    1. 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
      }
    2. terraform apply コマンドを実行して、VPC と vSwitch を作成します。

    3. terraform show コマンドを実行して、作成された VPC と vSwitch を表示します。

      VPC コンソールにログインして、VPC と vSwitch の属性を表示することもできます。

  2. VPC のセキュリティグループを作成し、すべての IP アドレスからのアクセスを許可するセキュリティグループルールを追加します

    1. 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"
      }
    2. terraform apply コマンドを実行して、セキュリティグループとセキュリティグループルールを作成します。

    3. terraform show コマンドを実行して、作成されたセキュリティグループとセキュリティグループルールを表示します。

      ECS コンソールにログインして、セキュリティグループとセキュリティグループルールを表示することもできます。

  3. モジュールを使用して複数の ECS インスタンスを作成します。この例では、3 つの ECS インスタンスが作成されます。

    重要
    • このトピックでは、モジュールを使用して一度に複数のリソースを作成します。 Terraform は Git を使用してモジュールのソースコードを取得します。そのため、事前に Git をインストールする必要があります。

    • alibaba/ecs-instance/alicloud モジュールを使用するには、Terraform のバージョンが 0.13.0 以降である必要があります。

    1. 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 = trueinternet_max_bandwidth_out = 10 が指定されています。この場合、各 ECS インスタンスにパブリック IP アドレスが割り当てられます。 パラメーターの詳細については、ecs-instance ページをご参照ください。

    2. terraform apply コマンドを実行して、ECS インスタンスを作成します。

    3. terraform show コマンドを実行して、作成された ECS インスタンスを表示します。

    4. 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"
    }
  ]
}