このトピックでは、Terraform を使用して Elastic Compute Service (ECS) クラスターを作成し、アプリケーションをスケールアウトしてデプロイし、アプリケーションを Classic Load Balancer (CLB) インスタンスにバインドし、アプリケーショングループを作成する方法について説明します。
このトピックのサンプルコードは、数回クリックするだけで実行できます。詳細については、「Terraform Explorer」をご参照ください。
前提条件
次のサービスが有効化されています。
このトピックの操作を実行するには、最小限必要な権限を持つ Resource Access Management (RAM) ユーザーを使用します。これにより、Alibaba Cloud アカウントの AccessKey ペアが漏洩するリスクを最小限に抑えることができます。最小限必要な権限を含むポリシーを RAM ユーザーにアタッチする方法の詳細については、「RAM ユーザーの作成」および「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 Explorer で Terraform を使用する: Alibaba Cloud は、Terraform のオンラインランタイム環境である Terraform Explorer を提供しています。Terraform をインストールすることなく、Terraform Explorer にログインした後に Terraform を使用できます。詳細については、「Terraform Explorer で Terraform を使用する」をご参照ください。この方法は、追加費用なしで迅速かつ便利に Terraform を使用およびデバッグしたいシナリオに適しています。
Cloud Shell で Terraform を使用する: Terraform は Cloud Shell にプリインストールされており、ID 資格情報が構成されています。Cloud Shell で Terraform コマンドを実行できます。詳細については、「Cloud Shell で Terraform を使用する」をご参照ください。この方法は、低コストで迅速かつ便利に Terraform を使用およびデバッグしたいシナリオに適しています。
オンプレミスマシンに Terraform をインストールして構成する: この方法は、ネットワーク状態が悪い場合や、カスタム開発環境が使用されるシナリオに適しています。詳細については、「Terraform のインストールと構成」をご参照ください。
特定のリソースに対して課金されます。リソースが不要になった場合は、できるだけ早くリソースをリリースまたはサブスクリプションを解除する必要があります。
使用されるリソース
alicloud_vpc: virtual private cloud (VPC) を提供します。
alicloud_security_group: セキュリティグループを提供します。
alicloud_vswitch: vSwitch を提供します。
alicloud_instance: ECS インスタンスを提供します。
alicloud_edas_cluster: ECS クラスターを提供します。
alicloud_edas_instance_cluster_attachment: ECS インスタンスをクラスターに追加します。
alicloud_edas_application: EDAS に ECS アプリケーションを作成します。
alicloud_edas_deploy_group: アプリケーショングループを作成します。
alicloud_edas_application_scale: アプリケーションをスケールアウトします。
alicloud_edas_application_deployment: アプリケーションをデプロイします。
alicloud_slb_load_balancer: CLB インスタンスを提供します。
alicloud_edas_slb_attachment: アプリケーションを CLB インスタンスにバインドします。
ステップ 1: ECS インスタンスの作成
作業ディレクトリを作成し、そのディレクトリに main.tf という名前の構成ファイルを作成します。次のコードは ECS インスタンスを作成するために使用され、ECS インスタンスの作成に必要な VPC、セキュリティグループ、および vSwitch も作成します。次のコードを main.tf 構成ファイルにコピーします。
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" } # 公式ダウンロードページからデモパッケージをダウンロードします。 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 } # セキュリティグループを作成します。 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 インスタンスを作成します。 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" }次のコマンドを実行して、Terraform ランタイム環境を初期化します。
terraform init次の情報が返された場合、Terraform は初期化されています。
Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary.次のコマンドを実行してコードを実行します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドが完了するのを待ちます。次の情報が表示された場合、コードは正常に実行されています。You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes Apply complete! Resources: 6 added, 0 changed, 0 destroyed.結果を検証します。
terraform show コマンドの実行
作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成された ECS インスタンスの詳細をクエリします。
terraform show
ECS コンソールへのログイン
ECS コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。上部のナビゲーションバーで、ECS インスタンスが作成されたリージョンを選択します。この例では、[中国 (上海)] を選択して、作成された ECS インスタンスを表示します。

ステップ 2: ECS クラスターを作成し、ECS インスタンスをクラスターに追加する
次のコードを
main.tfファイルに追加します。# ECS クラスターを作成します。 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 インスタンスを 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] }実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行してコードを実行します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドが完了するのを待ちます。次の情報が表示された場合、コードは正常に実行されています。Apply complete! Resources: 2 added, 0 changed, 0 destroyed.結果を検証します。
terraform show コマンドの実行
作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成された ECS クラスターの詳細をクエリします。
terraform show
EDAS コンソールへのログイン
EDAS コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。上部のナビゲーションバーで、ECS クラスターが作成されたリージョンを選択します。この例では、[中国 (上海)] を選択して、作成された ECS クラスターを表示します。

ECS クラスターの ID をクリックして、クラスターの詳細を表示します。

ステップ 3: アプリケーションとアプリケーショングループの作成
次のコードを
main.tfファイルに追加します。# アプリケーションを作成します。 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}" }実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行してコードを実行します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドが完了するのを待ちます。次の情報が表示された場合、コードは正常に実行されています。Apply complete! Resources: 2 added, 0 changed, 0 destroyed.結果を検証します。
terraform show コマンドの実行
Terraform で作成されたアプリケーションとアプリケーショングループの詳細をクエリするには、作業ディレクトリで次のコマンドを実行します:
terraform show
EDAS コンソールへのログイン
EDAS コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。上部のナビゲーションバーで、アプリケーションが作成されたリージョンを選択します。この例では、[中国 (上海)] を選択して、作成されたアプリケーションを表示します。

アプリケーション名をクリックします。表示されたページで、[インスタンス情報] タブをクリックして、アプリケーションが属するアプリケーショングループを表示します。

ステップ 4: アプリケーションのスケールアウトとデプロイ
次のコードを
main.tfファイルに追加します。# アプリケーショングループ ID を取得します。 locals { parts = split(":", alicloud_edas_deploy_group.this.id) group_id = local.parts[2] } # アプリケーションをスケールアウトします。 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]] } # アプリケーションをデプロイします。 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" }実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行してコードを実行します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドが完了するのを待ちます。次の情報が表示された場合、コードは正常に実行されています。Apply complete! Resources: 3 added, 0 changed, 0 destroyed.結果を検証します。
terraform show コマンドの実行
作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成されたアプリケーションの詳細をクエリします。
terraform show
EDAS コンソールへのログイン
EDAS コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。上部のナビゲーションバーで、アプリケーションが作成されたリージョンを選択します。この例では、[中国 (上海)] を選択して、作成されたアプリケーションを表示します。アプリケーション名をクリックします。表示されたページで、[インスタンス情報] タブをクリックして、アプリケーションのデプロイ情報を表示します。

ステップ 5: CLB インスタンスを作成し、アプリケーションにバインドする
次のコードを
main.tfファイルに追加します。# 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 インスタンスをアプリケーションにバインドします。 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 }実行計画を作成し、変更をプレビューします。
terraform plan次のコマンドを実行してコードを実行します。
terraform apply実行中に、プロンプトが表示されたら
yesと入力し、[Enter] キーを押します。コマンドが完了するのを待ちます。次の情報が表示された場合、コードは正常に実行されています。Apply complete! Resources: 2 added, 0 changed, 0 destroyed.結果を検証します。
terraform show コマンドの実行
作業ディレクトリで次のコマンドを実行して、Terraform を使用して作成された CLB インスタンスの詳細をクエリします。
terraform show
EDAS コンソールへのログイン
EDAS コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。上部のナビゲーションバーで、アプリケーションが作成されたリージョンを選択します。この例では、[中国 (上海)] を選択して、作成されたアプリケーションを表示します。アプリケーション名をクリックします。表示されたページで、[基本情報] タブをクリックして、アプリケーションの基本情報を表示します。

クリーンアップ
上記の Terraform によって作成または管理されたリソースが不要になった場合は、次のコマンドを実行してリソースを解放します。terraform destroy の詳細については、「一般的なコマンド」をご参照ください。
terraform destroy例
このトピックのサンプルコードは、数回クリックするだけで実行できます。詳細については、「Terraform Explorer」をご参照ください。
サンプルコード
より完全な例を表示したい場合は、GitHub の対応するサービスのディレクトリにアクセスしてください。
参考
Terraform の詳細については、「Terraform とは」をご参照ください。
CLB の詳細については、「CLB とは」をご参照ください。