Todos os produtos
Search
Central de documentação

Enterprise Distributed Application Service:Use o Terraform para criar um cluster ECS do EDAS e implantar uma aplicação

Última atualização: Sep 17, 2026

Use o Terraform para criar um cluster do Elastic Compute Service (ECS) no Enterprise Distributed Application Service (EDAS), implantar uma aplicação Java e vincular uma instância do Classic Load Balancer (CLB), definindo todo o ambiente como infraestrutura como código.

Nota

Execute o exemplo completo deste tutorial diretamente no Terraform Explorer.

O que você construirá

Ao concluir este tutorial, sua configuração do Terraform provisionará os seguintes recursos em sequência:

  1. Rede e computação -- Uma Virtual Private Cloud (VPC), vSwitch, grupo de segurança e instância ECS.

  2. Cluster do EDAS -- Um cluster ECS com a instância ECS associada.

  3. Aplicação -- Uma aplicação do EDAS e um grupo de implantação.

  4. Implantação -- A aplicação expandida e implantada com um pacote JAR de demonstração.

  5. Balanceamento de carga -- Uma instância CLB vinculada à aplicação.

Pré-requisitos

Antes de começar, verifique se você tem:

Política IAM necessária

Anexe a seguinte política ao seu usuário RAM. Ela concede as permissões mínimas para cada serviço utilizado neste tutorial.

{
  "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": "*"
    }
  ]
}
Nota

Os recursos provisionados neste tutorial geram custos. Libere ou cancele a assinatura de quaisquer recursos que não sejam mais necessários.

Recursos utilizados

Recursos utilizados

Recursos do Terraform

Este tutorial utiliza os seguintes recursos do Terraform, cada um com um link para sua documentação no Terraform Registry.

Recurso

Finalidade

alicloud_vpc

Cria uma VPC

alicloud_security_group

Cria um grupo de segurança

alicloud_vswitch

Cria um vSwitch

alicloud_instance

Provisiona uma instância ECS

alicloud_edas_cluster

Cria um cluster ECS no EDAS

alicloud_edas_instance_cluster_attachment

Associa uma instância ECS a um cluster

alicloud_edas_application

Cria uma aplicação do EDAS

alicloud_edas_deploy_group

Cria um grupo de implantação

alicloud_edas_application_scale

Expande a aplicação para uma instância ECS

alicloud_edas_application_deployment

Implanta o pacote da aplicação

alicloud_slb_load_balancer

Cria uma instância CLB

alicloud_edas_slb_attachment

Vincula a instância CLB à aplicação

Etapa 1: Criar uma instância ECS

Provisione a infraestrutura básica de rede e computação: uma VPC, grupo de segurança, vSwitch e uma instância ECS.

  1. Crie um diretório de trabalho e adicione um arquivo chamado main.tf com a seguinte configuração:

    Detalhes principais da configuração:

    Parâmetro

    Valor

    Descrição

    region

    cn-shanghai

    A região onde todos os recursos são criados

    instance_type

    ecs.e-c1m1.large

    A especificação da instância ECS

    vpc_cidr_block

    172.16.0.0/16

    O intervalo de endereços IP para a VPC

    vsw_cidr_block

    172.16.0.0/24

    O intervalo de endereços IP para o vSwitch

    system_disk_category

    cloud_essd

    O tipo de disco para o disco do sistema

       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"
       }
    
       # Demo Spring Cloud Consumer JAR from the official EDAS download page.
       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
       }
    
       # Look up an availability zone that supports the specified instance type
       # and disk category.
       data "alicloud_zones" "default" {
         available_instance_type     = var.instance_type
         available_resource_creation = "VSwitch"
         available_disk_category     = "cloud_essd"
       }
    
       # Generate a random suffix for globally unique resource names.
       resource "random_integer" "default" {
         min = 10000
         max = 99999
       }
    
       # Create a VPC.
       resource "alicloud_vpc" "vpc" {
         vpc_name   = "vpc-test_${random_integer.default.result}"
         cidr_block = var.vpc_cidr_block
       }
    
       # Create a security group inside the VPC.
       resource "alicloud_security_group" "group" {
         name   = "test_${random_integer.default.result}"
         vpc_id = alicloud_vpc.vpc.id
       }
    
       # Create a vSwitch in the first available zone.
       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}"
       }
    
       # Create an ECS instance.
       # The password below is for demonstration only. For production, use
       # Terraform variables with sensitive = true or a secrets manager.
       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"
       }
    
       # Wait for the ECS instance to finish initializing
       # (typically under 60 seconds).
       resource "time_sleep" "example" {
         depends_on      = [alicloud_instance.instance]
         create_duration = "60s"
       }
  2. Inicialize o diretório de trabalho do Terraform. Saída esperada:

       terraform init
       Terraform has been successfully initialized!
  3. Valide a configuração para detectar erros de sintaxe ou argumentos não suportados. Saída esperada:

       terraform validate
       Success! The configuration is valid.
  4. Visualize o plano de execução para verificar o que o Terraform criará:

       terraform plan
  5. Aplique a configuração. Quando solicitado, insira yes e pressione Enter. Saída esperada em caso de sucesso:

       terraform apply
       Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
  6. Verifique o resultado. Execute terraform show para inspecionar os recursos criados. Alternativamente, abra o console ECS. No painel de navegação à esquerda, escolha Instances & Images > Instances. Selecione China (Shanghai) na barra de navegação superior para visualizar a instância.

       terraform show

    terraform show output for the ECS instance

    ECS console showing the created instance

Etapa 2: Criar um cluster ECS e associar a instância

Crie um cluster ECS do EDAS e associe a instância ECS da Etapa 1.

  1. Anexe o seguinte código ao main.tf:

    Referência de argumentos do recurso:

    Argumento

    Valor

    Descrição

    cluster_type

    "2"

    Especifica um cluster ECS. Use "1" para um cluster Swarm

    network_mode

    "2"

    Especifica rede VPC. Use "1" para rede clássica

    logical_region_id

    var.region

    A região onde o cluster é criado

       # Create an ECS cluster in EDAS.
       # cluster_type = "2": ECS cluster (as opposed to "1" for Swarm).
       # network_mode = "2": VPC network (as opposed to "1" for classic network).
       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
       }
    
       # Attach the ECS instance to the cluster.
       # depends_on ensures the instance is fully initialized before attachment.
       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. Visualize e aplique as alterações. Quando solicitado, insira yes e pressione Enter. Saída esperada em caso de sucesso:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. Verifique o resultado. Execute terraform show para inspecionar os detalhes do cluster. Alternativamente, abra o console EDAS. No painel de navegação à esquerda, escolha Resource Management > ECS Clusters. Selecione China (Shanghai) na barra de navegação superior. Clique em ID do cluster para visualizar seus detalhes, incluindo a instância ECS associada.

       terraform show

    terraform show output for the ECS cluster

    EDAS console showing the ECS cluster

    Cluster detail page with the attached instance

Etapa 3: Criar uma aplicação e um grupo de implantação

Crie uma aplicação do EDAS e um grupo de implantação dentro do cluster.

  1. Anexe o seguinte código ao main.tf:

       # Create a JAR-type application in the ECS cluster.
       resource "alicloud_edas_application" "app" {
         application_name = "tf-test-app-${random_integer.default.result}"
         cluster_id       = alicloud_edas_cluster.cluster.id
         package_type     = "JAR"
       }
    
       # Create a deploy group for the application.
       # Deploy groups let you manage subsets of instances independently
       # (for example, for canary releases).
       resource "alicloud_edas_deploy_group" "this" {
         app_id     = alicloud_edas_application.app.id
         group_name = "tf-test-group-${random_integer.default.result}"
       }
  2. Visualize e aplique as alterações. Quando solicitado, insira yes e pressione Enter. Saída esperada em caso de sucesso:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. Verifique o resultado. Execute terraform show para inspecionar a aplicação e o grupo de implantação. Alternativamente, abra o console EDAS. No painel de navegação à esquerda, escolha Application Management > Applications. Selecione China (Shanghai) na barra de navegação superior. Clique em nome da aplicação e, em seguida, clique em aba Instance Information para visualizar o grupo de implantação.

       terraform show

    terraform show output for the application

    EDAS console showing the application

    Application instance information tab

Etapa 4: Expandir e implantar a aplicação

Atribua a instância ECS ao grupo de implantação (expansão) e, em seguida, implante o pacote JAR de demonstração.

  1. Anexe o seguinte código ao main.tf: Por que time_sleep? O EDAS precisa de tempo para instalar o agente na instância ECS e iniciar a aplicação. O recurso time_sleep adiciona um atraso para que os recursos dependentes — como o vínculo CLB na Etapa 5 — não sejam executados antes que a aplicação esteja pronta.

       # Extract the deploy group ID from the composite resource ID.
       locals {
         parts    = split(":", alicloud_edas_deploy_group.this.id)
         group_id = local.parts[2]
       }
    
       # Scale out: assign the ECS instance to the deploy group.
       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]]
       }
    
       # Deploy the demo JAR to the application.
       # depends_on ensures scale-out and cluster attachment finish first.
       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
       }
    
       # Wait for the application to start (typically under 60 seconds).
       resource "time_sleep" "example2" {
         depends_on      = [alicloud_edas_application_deployment.default]
         create_duration = "60s"
       }
  2. Visualize e aplique as alterações. Quando solicitado, insira yes e pressione Enter. Saída esperada em caso de sucesso:

       terraform plan
       terraform apply
       Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
  3. Verifique o resultado. Execute terraform show para inspecionar a implantação. Alternativamente, abra o console EDAS. No painel de navegação à esquerda, escolha Application Management > Applications. Selecione China (Shanghai) na barra de navegação superior. Clique em nome da aplicação e, em seguida, clique em aba Instance Information para verificar o status da implantação.

       terraform show

    terraform show output for the deployed application

    EDAS console showing deployment details

Etapa 5: Criar uma instância CLB e vinculá-la à aplicação

Crie uma instância CLB interna e vincule-a à aplicação.

  1. Anexe o seguinte código ao main.tf:

    Referência de argumentos do recurso:

    Argumento

    Valor

    Descrição

    load_balancer_spec

    slb.s2.small

    A especificação da instância CLB

    address_type

    intranet

    Cria um balanceador de carga interno acessível apenas dentro da VPC

       # Create an internal CLB instance in the same vSwitch.
       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"
       }
    
       # Bind the CLB instance to the EDAS application.
       # depends_on ensures the application is fully deployed and started.
       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. Visualize e aplique as alterações. Quando solicitado, insira yes e pressione Enter. Saída esperada em caso de sucesso:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. Verifique o resultado. Execute terraform show para inspecionar a instância CLB. Alternativamente, abra o console EDAS. No painel de navegação à esquerda, escolha Application Management > Applications. Selecione China (Shanghai) na barra de navegação superior. Clique em nome da aplicação e, em seguida, clique em aba Basic Information para verificar a instância CLB vinculada.

       terraform show

    terraform show output for the CLB instance

    Application basic information with CLB binding

Limpar recursos

Quando esses recursos não forem mais necessários, exclua-os para interromper a geração de cobranças:

terraform destroy

Quando solicitado, insira yes e pressione Enter.

Para obter mais informações sobre terraform destroy, consulte Comandos comuns do Terraform.

Exemplo completo

Nota

Execute este exemplo diretamente no Terraform Explorer.

O arquivo main.tf a seguir contém todos os recursos das Etapas 1 a 5 em uma única configuração.

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"
}

# Demo Spring Cloud Consumer JAR from the official EDAS download page.
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
}

# Extract the deploy group ID from the composite resource 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"
}

# Generate a random suffix for globally unique resource names.
resource "random_integer" "default" {
  min = 10000
  max = 99999
}

# Create a VPC.
resource "alicloud_vpc" "vpc" {
  vpc_name   = "vpc-test_${random_integer.default.result}"
  cidr_block = var.vpc_cidr_block
}

# Create a security group inside the VPC.
resource "alicloud_security_group" "group" {
  name   = "test_${random_integer.default.result}"
  vpc_id = alicloud_vpc.vpc.id
}

# Create a vSwitch in the first available zone.
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}"
}

# Create an ECS instance.
# The password below is for demonstration only. For production, use
# Terraform variables with sensitive = true or a secrets manager.
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"
}

# Wait for the ECS instance to finish initializing (typically under 60 seconds).
resource "time_sleep" "example" {
  depends_on      = [alicloud_instance.instance]
  create_duration = "60s"
}

# Create an ECS cluster in EDAS.
# cluster_type = "2": ECS cluster (as opposed to "1" for Swarm).
# network_mode = "2": VPC network (as opposed to "1" for classic network).
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
}

# Attach the ECS instance to the cluster.
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]
}

# Create a JAR-type application in the ECS cluster.
resource "alicloud_edas_application" "app" {
  application_name = "tf-test-app-${random_integer.default.result}"
  cluster_id       = alicloud_edas_cluster.cluster.id
  package_type     = "JAR"
}

# Create a deploy group for the application.
resource "alicloud_edas_deploy_group" "this" {
  app_id     = alicloud_edas_application.app.id
  group_name = "tf-test-group-${random_integer.default.result}"
}

# Scale out: assign the ECS instance to the deploy group.
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]]
}

# Deploy the demo JAR to the application.
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
}

# Wait for the application to start (typically under 60 seconds).
resource "time_sleep" "example2" {
  depends_on      = [alicloud_edas_application_deployment.default]
  create_duration = "60s"
}

# Create an internal CLB instance in the same vSwitch.
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"
}

# Bind the CLB instance to the EDAS application.
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
}

Para exemplos mais completos, consulte o diretório EDAS no GitHub.

Tópicos relacionados