Tüm Ürünler
Search
Belge Merkezi

Enterprise Distributed Application Service:Terraform kullanarak EDAS ECS kümesi oluşturun ve uygulama dağıtın

Son Güncelleme:Oct 06, 2026

Terraform kullanarak Enterprise Distributed Application Service (EDAS) içinde bir Elastic Compute Service (ECS) kümesi oluşturun, Java uygulaması dağıtın ve Classic Load Balancer (CLB) örneğini bağlayın; tüm bu adımlar altyapı kodu olarak tanımlanır.

Not

Bu eğitimdeki eksiksiz örneği doğrudan Terraform Explorer üzerinde çalıştırabilirsiniz.

Neler oluşturacaksınız

Bu eğitimin sonunda, Terraform yapılandırmanız aşağıdaki kaynakları sırasıyla sağlar:

  1. Ağ ve hesaplama -- Bir Virtual Private Cloud (VPC), vSwitch, güvenlik grubu ve ECS örneği.

  2. EDAS kümesi -- ECS örneğinin eklendiği bir ECS kümesi.

  3. Uygulama -- Bir EDAS uygulaması ve dağıtım grubu.

  4. Dağıtım -- Demo JAR paketi ile ölçeklendirilmiş ve dağıtılmış uygulama.

  5. Yük dengeleme -- Uygulamaya bağlı bir CLB örneği.

Ön koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

Gerekli IAM ilkesi

Aşağıdaki ilkeyi RAM kullanıcınıza ekleyin. Bu ilke, bu eğitimde kullanılan her hizmet için minimum izinleri sağlar.

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

Bu eğitimde sağlanan kaynaklar ücretlendirilir. Artık ihtiyaç duymadığınız kaynakları serbest bırakın veya abonelikten çıkın.

Kullanılan kaynaklar

Terraform kaynakları

Bu eğitim, her biri Terraform Kayıt Defteri belgelerine bağlantılı olan aşağıdaki Terraform kaynaklarını kullanır.


Kaynak


Amaç


alicloud_vpc


VPC oluşturur


alicloud_security_group


Güvenlik grubu oluşturur


alicloud_vswitch


vSwitch oluşturur


alicloud_instance


ECS örneği sağlar


alicloud_edas_cluster


EDAS'de ECS kümesi oluşturur


alicloud_edas_instance_cluster_attachment


ECS örneğini kümeye ekler


alicloud_edas_application


EDAS uygulaması oluşturur


alicloud_edas_deploy_group


Dağıtım grubu oluşturur


alicloud_edas_application_scale


Uygulamayı bir ECS örneğine yatay olarak ölçeklendirir


alicloud_edas_application_deployment


Uygulama paketini dağıtır


alicloud_slb_load_balancer


CLB örneği oluşturur


alicloud_edas_slb_attachment


CLB örneğini uygulamaya bağlar

Adım 1: ECS örneği oluşturma

Temel ağ ve hesaplama altyapısını sağlayın: VPC, güvenlik grubu, vSwitch ve bir ECS örneği.

  1. Bir çalışma dizini oluşturun ve aşağıdaki yapılandırmayla main.tf adlı bir dosya ekleyin:

    Anahtar yapılandırma ayrıntıları:


    Parametre


    Değer


    Açıklama


    region


    cn-shanghai


    Tüm kaynakların oluşturulduğu bölge


    instance_type


    ecs.e-c1m1.large


    ECS örneği teknik özellikleri


    vpc_cidr_block


    172.16.0.0/16


    VPC için IP adres aralığı


    vsw_cidr_block


    172.16.0.0/24


    vSwitch için IP adres aralığı


    system_disk_category


    cloud_essd


    Sistem diski için disk türü

       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. Terraform çalışma dizinini başlatın: Beklenen çıktı:

       terraform init
       Terraform has been successfully initialized!
  3. Söz dizimi hatalarını veya desteklenmeyen bağımsız değişkenleri yakalamak için yapılandırmayı doğrulayın: Beklenen çıktı:

       terraform validate
       Success! The configuration is valid.
  4. Terraform'un ne oluşturacağını doğrulamak için yürütme planını önizleyin:

       terraform plan
  5. Yapılandırmayı uygulayın. İstendiğinde yes yazın ve Enter tuşuna basın: Başarı durumunda beklenen çıktı:

       terraform apply
       Apply complete! Resources: 6 added, 0 changed, 0 destroyed.
  6. Sonucu doğrulayın. Oluşturulan kaynakları incelemek için terraform show komutunu çalıştırın: Alternatif olarak, ECS konsolu nu açın. Sol gezinme bölmesinde Instances & Images > Instances seçeneğini belirleyin. Örneği görüntülemek için üst gezinme çubuğunda China (Shanghai) seçeneğini belirleyin.

       terraform show

    terraform show output for the ECS instance

    ECS console showing the created instance

Adım 2: ECS kümesi oluşturma ve örneği ekleme

Bir EDAS ECS kümesi oluşturun ve 1. Adımdaki ECS örneğini ekleyin.

  1. Aşağıdaki kodu main.tf dosyasına ekleyin:

    Kaynak bağımsız değişkeni referansı:


    Bağımsız Değişken


    Değer


    Açıklama


    cluster_type


    "2"


    Bir ECS kümesi belirtir. Swarm kümesi için "1" kullanın


    network_mode


    "2"


    VPC ağını belirtir. Klasik ağ için "1" kullanın


    logical_region_id


    var.region


    Kümenin oluşturulduğu bölge

       # 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. Değişiklikleri önizleyin ve uygulayın: İstendiğinde yes yazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. Sonucu doğrulayın. Küme ayrıntılarını incelemek için terraform show komutunu çalıştırın: Alternatif olarak, EDAS konsolu nu açın. Sol gezinme bölmesinde Resource Management > ECS Clusters seçeneğini belirleyin. Üst gezinme çubuğunda China (Shanghai) seçeneğini belirleyin. Ekli ECS örneği dahil olmak üzere küme ayrıntılarını görüntülemek için küme Kimliğine tıklayın.

       terraform show

    terraform show output for the ECS cluster

    EDAS console showing the ECS cluster

    Cluster detail page with the attached instance

Adım 3: Uygulama ve dağıtım grubu oluşturma

Küme içinde bir EDAS uygulaması ve bir dağıtım grubu oluşturun.

  1. Aşağıdaki kodu main.tf dosyasına ekleyin:

       # 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. Değişiklikleri önizleyin ve uygulayın: İstendiğinde yes yazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. Sonucu doğrulayın. Uygulamayı ve dağıtım grubunu incelemek için terraform show komutunu çalıştırın: Alternatif olarak, EDAS konsolu nu açın. Sol gezinme bölmesinde Application Management > Applications seçeneğini belirleyin. Üst gezinme çubuğunda China (Shanghai) seçeneğini belirleyin. Dağıtım grubunu görüntülemek için uygulama adına tıklayın, ardından Instance Information sekmesine tıklayın.

       terraform show

    terraform show output for the application

    EDAS console showing the application

    Application instance information tab

Adım 4: Uygulamayı ölçeklendirme ve dağıtma

ECS örneğini dağıtım grubuna atayın (yatay ölçeklendirme), ardından demo JAR paketini dağıtın.

  1. Aşağıdaki kodu main.tf dosyasına ekleyin: Neden time_sleep? EDAS'in ECS örneğine ajanı yüklemesi ve uygulamayı başlatması için zamana ihtiyacı vardır. time_sleep kaynağı, 5. Adımdaki CLB bağlama gibi bağımlı kaynakların uygulama hazır olmadan çalışmaması için bir gecikme ekler.

       # 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. Değişiklikleri önizleyin ve uygulayın: İstendiğinde yes yazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:

       terraform plan
       terraform apply
       Apply complete! Resources: 3 added, 0 changed, 0 destroyed.
  3. Sonucu doğrulayın. Dağıtımı incelemek için terraform show komutunu çalıştırın: Alternatif olarak, EDAS konsolu nu açın. Sol gezinme bölmesinde Application Management > Applications seçeneğini belirleyin. Üst gezinme çubuğunda China (Shanghai) seçeneğini belirleyin. Dağıtım durumunu kontrol etmek için uygulama adına tıklayın, ardından Instance Information sekmesine tıklayın.

       terraform show

    terraform show output for the deployed application

    EDAS console showing deployment details

Adım 5: CLB örneği oluşturma ve uygulamaya bağlama

Dahili bir CLB örneği oluşturun ve bunu uygulamaya bağlayın.

  1. Aşağıdaki kodu main.tf dosyasına ekleyin:

    Kaynak bağımsız değişkeni referansı:


    Bağımsız Değişken


    Değer


    Açıklama


    load_balancer_spec


    slb.s2.small


    CLB örneği teknik özellikleri


    address_type


    intranet


    Yalnızca VPC içinde erişilebilen dahili bir yük dengeleyici oluşturur

       # 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. Değişiklikleri önizleyin ve uygulayın: İstendiğinde yes yazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:

       terraform plan
       terraform apply
       Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
  3. Sonucu doğrulayın. CLB örneğini incelemek için terraform show komutunu çalıştırın: Alternatif olarak, EDAS konsolu nu açın. Sol gezinme bölmesinde Application Management > Applications seçeneğini belirleyin. Üst gezinme çubuğunda China (Shanghai) seçeneğini belirleyin. Bağlı CLB örneğini kontrol etmek için uygulama adına tıklayın, ardından Basic Information sekmesine tıklayın.

       terraform show

    terraform show output for the CLB instance

    Application basic information with CLB binding

Kaynakları temizleme

Bu kaynaklara artık ihtiyaç duymadığınızda, ücretlendirmeyi durdurmak için bunları silin:

terraform destroy

İstendiğinde yes yazın ve Enter tuşuna basın.

terraform destroy hakkında daha fazla bilgi için bkz. Ortak Terraform komutları.

Eksiksiz örnek

Not

Bu örneği doğrudan Terraform Explorer üzerinde çalıştırabilirsiniz.

Aşağıdaki main.tf dosyası, 1'den 5'e kadar olan Adımlardaki tüm kaynakları tek bir yapılandırmada içerir.

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
}

Daha kapsamlı örnekler için GitHub'daki EDAS dizinine bakın.

İlgili konular