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.
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:
Ağ ve hesaplama -- Bir Virtual Private Cloud (VPC), vSwitch, güvenlik grubu ve ECS örneği.
EDAS kümesi -- ECS örneğinin eklendiği bir ECS kümesi.
Uygulama -- Bir EDAS uygulaması ve dağıtım grubu.
Dağıtım -- Demo JAR paketi ile ölçeklendirilmiş ve dağıtılmış uygulama.
Yük dengeleme -- Uygulamaya bağlı bir CLB örneği.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
-
Aşağıdaki hizmetleri etkinleştirdiniz:
Alibaba Cloud hesabınızın AccessKey çiftini ifşa etmemek için gereken minimum izinlere sahip bir RAM kullanıcısı. Bkz. RAM kullanıcısı oluşturma ve RAM kullanıcı izinlerini yönetme
-
Aşağıdaki yöntemlerden biri aracılığıyla kurulan bir Terraform çalışma zamanı ortamı:
Terraform Explorer -- Tarayıcı tabanlıdır, kurulum gerektirmez. Hızlı testler için en iyisidir.
Terraform ile kaynak oluşturma -- Terraform önceden yüklenmiştir ve kimlik bilgileri önceden yapılandırılmıştır. Düşük maliyetli denemeler için en iyisidir.
Terraform'u yükleme ve yapılandırma -- Özel ortamlar veya kısıtlı ağlar için en iyisidir.
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": "*"
}
]
}
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
alicloud_vpc: sanal özel cloud (VPC) sağlar.
alicloud_security_group: güvenlik grubu sağlar.
alicloud_vswitch: vSwitch sağlar.
alicloud_instance: ECS örneği sağlar.
alicloud_edas_cluster: ECS kümesi sağlar.
alicloud_edas_instance_cluster_attachment: ECS örneğini kümeye ekler.
alicloud_edas_application: EDAS'de bir ECS uygulaması oluşturur.
alicloud_edas_deploy_group: uygulama grubu oluşturur.
alicloud_edas_application_scale: uygulamayı yatay olarak ölçeklendirir.
alicloud_edas_application_deployment: uygulamayı dağıtır.
alicloud_slb_load_balancer: CLB örneği sağlar.
alicloud_edas_slb_attachment: uygulamayı CLB örneğine bağlar.
Terraform kaynakları
Bu eğitim, her biri Terraform Kayıt Defteri belgelerine bağlantılı olan aşağıdaki Terraform kaynaklarını kullanır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
-
Bir çalışma dizini oluşturun ve aşağıdaki yapılandırmayla
main.tfadlı bir dosya ekleyin:Anahtar yapılandırma ayrıntıları:
Parametre
Değer
Açıklamaregioncn-shanghai
Tüm kaynakların oluşturulduğu bölgeinstance_typeecs.e-c1m1.large
ECS örneği teknik özelliklerivpc_cidr_block172.16.0.0/16
VPC için IP adres aralığıvsw_cidr_block172.16.0.0/24
vSwitch için IP adres aralığısystem_disk_categorycloud_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" } -
Terraform çalışma dizinini başlatın: Beklenen çıktı:
terraform initTerraform has been successfully initialized! -
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 validateSuccess! The configuration is valid. -
Terraform'un ne oluşturacağını doğrulamak için yürütme planını önizleyin:
terraform plan -
Yapılandırmayı uygulayın. İstendiğinde
yesyazın ve Enter tuşuna basın: Başarı durumunda beklenen çıktı:terraform applyApply complete! Resources: 6 added, 0 changed, 0 destroyed. -
Sonucu doğrulayın. Oluşturulan kaynakları incelemek için
terraform showkomutunu ç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

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.
-
Aşağıdaki kodu
main.tfdosyasına ekleyin:Kaynak bağımsız değişkeni referansı:
Bağımsız Değişken
Değer
Açıklamacluster_type"2"
Bir ECS kümesi belirtir. Swarm kümesi için"1"kullanınnetwork_mode"2"
VPC ağını belirtir. Klasik ağ için"1"kullanınlogical_region_idvar.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] } -
Değişiklikleri önizleyin ve uygulayın: İstendiğinde
yesyazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:terraform plan terraform applyApply complete! Resources: 2 added, 0 changed, 0 destroyed. -
Sonucu doğrulayın. Küme ayrıntılarını incelemek için
terraform showkomutunu ç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


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.
-
Aşağıdaki kodu
main.tfdosyası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}" } -
Değişiklikleri önizleyin ve uygulayın: İstendiğinde
yesyazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:terraform plan terraform applyApply complete! Resources: 2 added, 0 changed, 0 destroyed. -
Sonucu doğrulayın. Uygulamayı ve dağıtım grubunu incelemek için
terraform showkomutunu ç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


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.
-
Aşağıdaki kodu
main.tfdosyasına ekleyin: Neden time_sleep? EDAS'in ECS örneğine ajanı yüklemesi ve uygulamayı başlatması için zamana ihtiyacı vardır.time_sleepkaynağı, 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" } -
Değişiklikleri önizleyin ve uygulayın: İstendiğinde
yesyazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:terraform plan terraform applyApply complete! Resources: 3 added, 0 changed, 0 destroyed. -
Sonucu doğrulayın. Dağıtımı incelemek için
terraform showkomutunu ç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

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.
-
Aşağıdaki kodu
main.tfdosyasına ekleyin:Kaynak bağımsız değişkeni referansı:
Bağımsız Değişken
Değer
Açıklamaload_balancer_specslb.s2.small
CLB örneği teknik özellikleriaddress_typeintranet
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 } -
Değişiklikleri önizleyin ve uygulayın: İstendiğinde
yesyazın ve Enter tuşuna basın. Başarı durumunda beklenen çıktı:terraform plan terraform applyApply complete! Resources: 2 added, 0 changed, 0 destroyed. -
Sonucu doğrulayın. CLB örneğini incelemek için
terraform showkomutunu ç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

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
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.