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

Enterprise Distributed Application Service:Terraform を使用した EDAS の ECS クラスターの作成とアプリケーションのデプロイ

最終更新日:Sep 22, 2026

Terraform を使用して、Enterprise Distributed Application Service (EDAS) に Elastic Compute Service (ECS) クラスターを作成し、Java アプリケーションをデプロイし、クラシックロードバランサー (CLB) インスタンスをバインドします。これらはすべて Infrastructure-as-Code として定義されます。

説明

このチュートリアルの完全な例は、Terraform Explorer で直接実行できます。

構築するリソース

このチュートリアルの終わりまでに、Terraform 設定によって以下のリソースが順番にプロビジョニングされます:

  1. ネットワーキングとコンピューティング:Virtual Private Cloud (VPC)、vSwitch、セキュリティグループ、および ECS インスタンス。

  2. EDAS クラスター:ECS インスタンスがアタッチされた ECS クラスター。

  3. アプリケーション:EDAS アプリケーションとデプロイグループ。

  4. デプロイ:デモ JAR パッケージを使用してスケールアウトおよびデプロイされたアプリケーション。

  5. 負荷分散:アプリケーションにバインドされた CLB インスタンス。

前提条件

開始する前に、以下の準備が整っていることを確認してください:

必要な IAM ポリシー

RAM ユーザーには、次のポリシーをアタッチしてください。このポリシーは、このチュートリアルで使用される各サービスに対する最小限の権限を付与します。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "edas:CreateCluster",
        "edas:ReadCluster",
        "edas:DeleteCluster",
        "edas:ListResourceGroup",
        "edas:ListServiceGroups",
        "edas:ListSwimmingLaneGroup",
        "edas:ReadApplication",
        "edas:ListSlb",
        "edas:DeleteApplication"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ecs:CreateSecurityGroup",
        "ecs:ModifySecurityGroupPolicy",
        "ecs:DescribeSecurityGroups",
        "ecs:ListTagResources",
        "ecs:DeleteSecurityGroup",
        "ecs:DescribeSecurityGroupAttribute",
        "ecs:RunInstances",
        "ecs:DescribeInstances",
        "ecs:DescribeUserData",
        "ecs:DescribeInstanceRamRole",
        "ecs:DescribeInstanceAttribute",
        "ecs:DescribeNetworkInterfaces",
        "ecs:DescribeInstanceMaintenanceAttributes",
        "ecs:DescribeDisks",
        "ecs:DeleteInstance"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "edas:ManageCluster",
        "edas:SynchronizeResource",
        "edas:CreateApplication",
        "edas:ManageApplication",
        "edas:QueryMigrateEcuList",
        "edas:ReadApplication"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "slb:CreateLoadBalancer",
        "slb:DescribeLoadBalancerAttribute",
        "slb:ListTagResources",
        "slb:DeleteLoadBalancer"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "vpc:CreateVpc",
        "vpc:DeleteVpc",
        "vpc:CreateVSwitch",
        "vpc:DeleteVSwitch"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "vpc:DescribeVpcAttribute",
        "vpc:DescribeRouteTableList",
        "vpc:DescribeVSwitchAttributes"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "kms:CreateKey",
      "Resource": "*"
    }
  ]
}
説明

このチュートリアルでプロビジョニングされるリソースには料金が発生します。不要になったリソースは解放するか、サブスクリプションを解除してください。

使用されるリソース

Terraform リソース

このチュートリアルでは、以下の Terraform リソースを使用します。各リソースは Terraform Registry のドキュメントにリンクされています。

リソース

目的

alicloud_vpc

VPC を作成します

alicloud_security_group

セキュリティグループを作成します

alicloud_vswitch

vSwitch を作成します

alicloud_instance

ECS インスタンスをプロビジョニングします

alicloud_edas_cluster

EDAS に ECS クラスターを作成します

alicloud_edas_instance_cluster_attachment

ECS インスタンスをクラスターにアタッチします

alicloud_edas_application

EDAS アプリケーションを作成します

alicloud_edas_deploy_group

デプロイグループを作成します

alicloud_edas_application_scale

アプリケーションを ECS インスタンスにスケールアウトします

alicloud_edas_application_deployment

アプリケーションパッケージをデプロイします

alicloud_slb_load_balancer

CLB インスタンスを作成します

alicloud_edas_slb_attachment

CLB インスタンスをアプリケーションにバインドします

手順1:ECS インスタンスの作成

基盤となるネットワーキングおよびコンピューティングインフラストラクチャ (VPC、セキュリティグループ、vSwitch、ECS インスタンス) をプロビジョニングします。

  1. 作業ディレクトリを作成し、次の設定を含む main.tf という名前のファイルを追加します:

    主な設定の詳細:

    パラメーター

    値

    説明

    region

    cn-shanghai

    すべてのリソースが作成されるリージョン

    instance_type

    ecs.e-c1m1.large

    ECS インスタンスの仕様

    vpc_cidr_block

    172.16.0.0/16

    VPC の IP アドレス範囲

    vsw_cidr_block

    172.16.0.0/24

    vSwitch の IP アドレス範囲

    system_disk_category

    cloud_essd

    システムディスクのディスクタイプ

       variable "region" {
         default = "cn-shanghai"
       }
    
       variable "instance_type" {
         type    = string
         default = "ecs.e-c1m1.large"
       }
    
       variable "vpc_cidr_block" {
         default = "172.16.0.0/16"
       }
    
       variable "vsw_cidr_block" {
         default = "172.16.0.0/24"
       }
    
       # 公式 EDAS ダウンロードページにあるデモ用の Spring Cloud Consumer JAR。
       variable "war_url" {
         type    = string
         default = "http://edas-sz.oss-cn-shenzhen.aliyuncs.com/prod/demo/SPRING_CLOUD_CONSUMER.jar"
       }
    
       provider "alicloud" {
         region = var.region
       }
    
       # 指定されたインスタンスタイプとディスクカテゴリをサポートするアベイラビリティーゾーンを検索します。
       data "alicloud_zones" "default" {
         available_instance_type     = var.instance_type
         available_resource_creation = "VSwitch"
         available_disk_category     = "cloud_essd"
       }
    
       # グローバルに一意なリソース名のランダムなサフィックスを生成します。
       resource "random_integer" "default" {
         min = 10000
         max = 99999
       }
    
       # VPC を作成します。
       resource "alicloud_vpc" "vpc" {
         vpc_name   = "vpc-test_${random_integer.default.result}"
         cidr_block = var.vpc_cidr_block
       }
    
       # VPC 内にセキュリティグループを作成します。
       resource "alicloud_security_group" "group" {
         name   = "test_${random_integer.default.result}"
         vpc_id = alicloud_vpc.vpc.id
       }
    
       # 最初のアベイラビリティーゾーンに vSwitch を作成します。
       resource "alicloud_vswitch" "vswitch" {
         vpc_id       = alicloud_vpc.vpc.id
         cidr_block   = var.vsw_cidr_block
         zone_id      = data.alicloud_zones.default.zones[0].id
         vswitch_name = "vswitch-test-${random_integer.default.result}"
       }
    
       # ECS インスタンスを作成します。
       # 以下のパスワードはデモンストレーション用です。本番環境では、
       # sensitive = true を指定した Terraform 変数またはシークレットマネージャーを使用してください。
       resource "alicloud_instance" "instance" {
         availability_zone          = data.alicloud_zones.default.zones[0].id
         security_groups            = alicloud_security_group.group.*.id
         instance_type              = var.instance_type
         system_disk_category       = "cloud_essd"
         system_disk_name           = "test_foo_system_disk_${random_integer.default.result}"
         system_disk_description    = "test_foo_system_disk_description"
         image_id                   = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
         instance_name              = "test_ecs_${random_integer.default.result}"
         vswitch_id                 = alicloud_vswitch.vswitch.id
         internet_max_bandwidth_out = 10
         password                   = "Terraform@Example"
       }
    
       # ECS インスタンスの初期化が完了するのを待ちます
       # (通常 60 秒未満)。
       resource "time_sleep" "example" {
         depends_on      = [alicloud_instance.instance]
         create_duration = "60s"
       }
  2. Terraform 作業ディレクトリを初期化します。出力例:

       terraform init
       Terraform has been successfully initialized!
  3. 設定を検証して、構文エラーやサポートされていない引数を検出します。出力例:

       terraform validate
       Success! The configuration is valid.
  4. 実行計画をプレビューして、Terraform が作成する内容を確認します:

       terraform plan
  5. 設定を適用します。プロンプトが表示されたら、 yes と入力して [Enter] キーを押します。成功時の出力例:

       terraform apply
       Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
  6. 結果を検証します。 terraform show を実行して、作成されたリソースを確認します。または、ECS コンソール を開きます。左側メニューで、 [Instances & Images] > [Instances] を選択します。上部メニューで [China (Shanghai)] を選択してインスタンスを表示します。

       terraform show

    terraform show output for the ECS instance

    ECS console showing the created instance

手順2:ECS クラスターの作成とインスタンスのアタッチ

EDAS の ECS クラスターを作成し、手順 1 で作成した ECS インスタンスをアタッチします。

  1. main.tf に次のコードを追加します:

    リソース引数のリファレンス:

    引数

    値

    説明

    cluster_type

    "2"

    ECS クラスターを指定します。Swarm クラスターの場合は "1" です

    network_mode

    "2"

    VPC ネットワーキングを指定します。クラシックネットワークの場合は "1" です

    logical_region_id

    var.region

    クラスターが作成されるリージョン

       # EDAS に ECS クラスターを作成します。
       # cluster_type = "2":ECS クラスター ("1" は Swarm クラスター)。
       # network_mode = "2":VPC ネットワーク ("1" はクラシックネットワーク)。
       resource "alicloud_edas_cluster" "cluster" {
         cluster_name      = "tf-edas-${random_integer.default.result}"
         cluster_type      = "2"
         network_mode      = "2"
         logical_region_id = var.region
         vpc_id            = alicloud_vpc.vpc.id
       }
    
       # ECS インスタンスをクラスターにアタッチします。
       # depends_on は、インスタンスがアタッチ前に完全に初期化されることを保証します。
       resource "alicloud_edas_instance_cluster_attachment" "default" {
         depends_on   = [time_sleep.example]
         cluster_id   = alicloud_edas_cluster.cluster.id
         instance_ids = [alicloud_instance.instance.id]
       }
  2. 変更をプレビューして適用します。プロンプトが表示されたら、 yes と入力して [Enter] キーを押します。成功時の出力例:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. 結果を検証します。 terraform show を実行して、クラスターの詳細を確認します。または、EDAS コンソール を開きます。左側メニューで、 [Resource Management] > [ECS Clusters] を選択します。上部メニューで [China (Shanghai)] を選択します。クラスター ID をクリックして、アタッチされた ECS インスタンスを含むクラスターの詳細を表示します。

       terraform show

    terraform show output for the ECS cluster

    EDAS console showing the ECS cluster

    Cluster detail page with the attached instance

手順3:アプリケーションとデプロイグループの作成

クラスター内に EDAS アプリケーションとデプロイグループを作成します。

  1. main.tf に次のコードを追加します:

       # ECS クラスターに JAR タイプのアプリケーションを作成します。
       resource "alicloud_edas_application" "app" {
         application_name = "tf-test-app-${random_integer.default.result}"
         cluster_id       = alicloud_edas_cluster.cluster.id
         package_type     = "JAR"
       }
    
       # アプリケーションのデプロイグループを作成します。
       # デプロイグループを使用すると、インスタンスのサブセットを個別に管理できます
       # (例:カナリアリリース)。
       resource "alicloud_edas_deploy_group" "this" {
         app_id     = alicloud_edas_application.app.id
         group_name = "tf-test-group-${random_integer.default.result}"
       }
  2. 変更をプレビューして適用します。プロンプトが表示されたら、 yes と入力して [Enter] キーを押します。成功時の出力例:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. 結果を検証します。 terraform show を実行して、アプリケーションとデプロイグループを確認します。または、EDAS コンソール を開きます。左側メニューで、 [Application Management] > [Applications] を選択します。上部メニューで [China (Shanghai)] を選択します。アプリケーション名をクリックし、 [Instance Information] タブをクリックしてデプロイグループを表示します。

       terraform show

    terraform show output for the application

    EDAS console showing the application

    Application instance information tab

手順4:アプリケーションのスケールアウトとデプロイ

ECS インスタンスをデプロイグループに割り当て (スケールアウト) し、デモ JAR パッケージをデプロイします。

  1. main.tf に次のコードを追加します: time_sleep を使用する理由: EDAS は、ECS インスタンスにエージェントをインストールしてアプリケーションを起動するために時間が必要です。 time_sleep リソースは遅延を追加することで、依存リソース (手順 5 の CLB バインディングなど) がアプリケーションの準備が整う前に実行されないようにします。

       # 複合リソース ID からデプロイグループ ID を抽出します。
       locals {
         parts    = split(":", alicloud_edas_deploy_group.this.id)
         group_id = local.parts[2]
       }
    
       # スケールアウト:ECS インスタンスをデプロイグループに割り当てます。
       resource "alicloud_edas_application_scale" "default" {
         app_id       = alicloud_edas_application.app.id
         deploy_group = local.group_id
         ecu_info     = [alicloud_edas_instance_cluster_attachment.default.ecu_map[alicloud_instance.instance.id]]
       }
    
       # デモ JAR をアプリケーションにデプロイします。
       # depends_on は、スケールアウトとクラスターのアタッチが先に完了することを保証します。
       resource "alicloud_edas_application_deployment" "default" {
         depends_on = [alicloud_edas_application_scale.default, alicloud_edas_instance_cluster_attachment.default]
         app_id     = alicloud_edas_application.app.id
         group_id   = local.group_id
         war_url    = var.war_url
       }
    
       # アプリケーションの起動を待ちます (通常 60 秒未満)。
       resource "time_sleep" "example2" {
         depends_on      = [alicloud_edas_application_deployment.default]
         create_duration = "60s"
       }
  2. 変更をプレビューして適用します。プロンプトが表示されたら、 yes と入力して [Enter] キーを押します。成功時の出力例:

       terraform plan
       terraform apply
       Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
  3. 結果を検証します。 terraform show を実行して、デプロイを確認します。または、EDAS コンソール を開きます。左側メニューで、 [Application Management] > [Applications] を選択します。上部メニューで [China (Shanghai)] を選択します。アプリケーション名をクリックし、 [Instance Information] タブをクリックしてデプロイステータスを確認します。

       terraform show

    terraform show output for the deployed application

    EDAS console showing deployment details

手順5:CLB インスタンスの作成とアプリケーションへのバインド

内部 CLB インスタンスを作成し、アプリケーションにバインドします。

  1. main.tf に次のコードを追加します:

    リソース引数のリファレンス:

    引数

    値

    説明

    load_balancer_spec

    slb.s2.small

    CLB インスタンスの仕様

    address_type

    intranet

    VPC 内でのみアクセス可能な内部ロードバランサーを作成します

       # 同じ vSwitch 内に内部 CLB インスタンスを作成します。
       resource "alicloud_slb_load_balancer" "default" {
         load_balancer_name = "tf-test-slb-${random_integer.default.result}"
         vswitch_id         = alicloud_vswitch.vswitch.id
         load_balancer_spec = "slb.s2.small"
         address_type       = "intranet"
       }
    
       # CLB インスタンスを EDAS アプリケーションにバインドします。
       # depends_on は、アプリケーションが完全にデプロイされ、起動していることを保証します。
       resource "alicloud_edas_slb_attachment" "this" {
         depends_on = [time_sleep.example2]
         app_id     = alicloud_edas_application.app.id
         slb_id     = alicloud_slb_load_balancer.default.id
         slb_ip     = alicloud_slb_load_balancer.default.address
         type       = alicloud_slb_load_balancer.default.address_type
       }
  2. 変更をプレビューして適用します。プロンプトが表示されたら、 yes と入力して [Enter] キーを押します。成功時の出力例:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. 結果を検証します。 terraform show を実行して、CLB インスタンスを確認します。または、EDAS コンソール を開きます。左側メニューで、 [Application Management] > [Applications] を選択します。上部メニューで [China (Shanghai)] を選択します。アプリケーション名をクリックし、 [Basic Information] タブをクリックしてバインドされた CLB インスタンスを確認します。

       terraform show

    terraform show output for the CLB instance

    Application basic information with CLB binding

リソースのクリーンアップ

これらのリソースが不要になったら、料金の発生を停止するために削除します:

terraform destroy

プロンプトが表示されたら、 yes と入力して [Enter] キーを押します。

terraform destroy の詳細については、「一般的な Terraform コマンド」をご参照ください。

完全な例

説明

この例は Terraform Explorer で直接実行できます。

以下の main.tf ファイルは、手順 1 から 5 までのすべてのリソースを一つの設定にまとめたものです。

variable "region" {
  default = "cn-shanghai"
}

variable "instance_type" {
  type    = string
  default = "ecs.e-c1m1.large"
}

variable "vpc_cidr_block" {
  default = "172.16.0.0/16"
}

variable "vsw_cidr_block" {
  default = "172.16.0.0/24"
}

# 公式 EDAS ダウンロードページにあるデモ用の Spring Cloud Consumer JAR。
variable "war_url" {
  type    = string
  default = "http://edas-sz.oss-cn-shenzhen.aliyuncs.com/prod/demo/SPRING_CLOUD_CONSUMER.jar"
}

provider "alicloud" {
  region = var.region
}

# 複合リソース ID からデプロイグループ ID を抽出します。
locals {
  parts    = split(":", alicloud_edas_deploy_group.this.id)
  group_id = local.parts[2]
}

data "alicloud_zones" "default" {
  available_instance_type     = var.instance_type
  available_resource_creation = "VSwitch"
  available_disk_category     = "cloud_essd"
}

# グローバルに一意なリソース名のランダムなサフィックスを生成します。
resource "random_integer" "default" {
  min = 10000
  max = 99999
}

# VPC を作成します。
resource "alicloud_vpc" "vpc" {
  vpc_name   = "vpc-test_${random_integer.default.result}"
  cidr_block = var.vpc_cidr_block
}

# VPC 内にセキュリティグループを作成します。
resource "alicloud_security_group" "group" {
  name   = "test_${random_integer.default.result}"
  vpc_id = alicloud_vpc.vpc.id
}

# 最初のアベイラビリティーゾーンに vSwitch を作成します。
resource "alicloud_vswitch" "vswitch" {
  vpc_id       = alicloud_vpc.vpc.id
  cidr_block   = var.vsw_cidr_block
  zone_id      = data.alicloud_zones.default.zones[0].id
  vswitch_name = "vswitch-test-${random_integer.default.result}"
}

# ECS インスタンスを作成します。
# 以下のパスワードはデモンストレーション用です。本番環境では、
# sensitive = true を指定した Terraform 変数またはシークレットマネージャーを使用してください。
resource "alicloud_instance" "instance" {
  availability_zone          = data.alicloud_zones.default.zones[0].id
  security_groups            = alicloud_security_group.group.*.id
  instance_type              = var.instance_type
  system_disk_category       = "cloud_essd"
  system_disk_name           = "test_foo_system_disk_${random_integer.default.result}"
  system_disk_description    = "test_foo_system_disk_description"
  image_id                   = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
  instance_name              = "test_ecs_${random_integer.default.result}"
  vswitch_id                 = alicloud_vswitch.vswitch.id
  internet_max_bandwidth_out = 10
  password                   = "Terraform@Example"
}

# ECS インスタンスの初期化が完了するのを待ちます (通常 60 秒未満)。
resource "time_sleep" "example" {
  depends_on      = [alicloud_instance.instance]
  create_duration = "60s"
}

# EDAS に ECS クラスターを作成します。
# cluster_type = "2":ECS クラスター ("1" は Swarm クラスター)。
# network_mode = "2":VPC ネットワーク ("1" はクラシックネットワーク)。
resource "alicloud_edas_cluster" "cluster" {
  cluster_name      = "tf-edas-${random_integer.default.result}"
  cluster_type      = "2"
  network_mode      = "2"
  logical_region_id = var.region
  vpc_id            = alicloud_vpc.vpc.id
}

# ECS インスタンスをクラスターにアタッチします。
resource "alicloud_edas_instance_cluster_attachment" "default" {
  depends_on   = [time_sleep.example]
  cluster_id   = alicloud_edas_cluster.cluster.id
  instance_ids = [alicloud_instance.instance.id]
}

# ECS クラスターに JAR タイプのアプリケーションを作成します。
resource "alicloud_edas_application" "app" {
  application_name = "tf-test-app-${random_integer.default.result}"
  cluster_id       = alicloud_edas_cluster.cluster.id
  package_type     = "JAR"
}

# アプリケーションのデプロイグループを作成します。
resource "alicloud_edas_deploy_group" "this" {
  app_id     = alicloud_edas_application.app.id
  group_name = "tf-test-group-${random_integer.default.result}"
}

# スケールアウト:ECS インスタンスをデプロイグループに割り当てます。
resource "alicloud_edas_application_scale" "default" {
  app_id       = alicloud_edas_application.app.id
  deploy_group = local.group_id
  ecu_info     = [alicloud_edas_instance_cluster_attachment.default.ecu_map[alicloud_instance.instance.id]]
}

# デモ JAR をアプリケーションにデプロイします。
resource "alicloud_edas_application_deployment" "default" {
  depends_on = [alicloud_edas_application_scale.default, alicloud_edas_instance_cluster_attachment.default]
  app_id     = alicloud_edas_application.app.id
  group_id   = local.group_id
  war_url    = var.war_url
}

# アプリケーションの起動を待ちます (通常 60 秒未満)。
resource "time_sleep" "example2" {
  depends_on      = [alicloud_edas_application_deployment.default]
  create_duration = "60s"
}

# 同じ vSwitch 内に内部 CLB インスタンスを作成します。
resource "alicloud_slb_load_balancer" "default" {
  load_balancer_name = "tf-test-slb-${random_integer.default.result}"
  vswitch_id         = alicloud_vswitch.vswitch.id
  load_balancer_spec = "slb.s2.small"
  address_type       = "intranet"
}

# CLB インスタンスを EDAS アプリケーションにバインドします。
resource "alicloud_edas_slb_attachment" "this" {
  depends_on = [time_sleep.example2]
  app_id     = alicloud_edas_application.app.id
  slb_id     = alicloud_slb_load_balancer.default.id
  slb_ip     = alicloud_slb_load_balancer.default.address
  type       = alicloud_slb_load_balancer.default.address_type
}

より完全な例については、GitHub の EDAS ディレクトリをご参照ください。

関連トピック