All Products
Search
Document Center

Resource Orchestration Service:Buat grup instans ECS dan sambungkan ke instans CLB

Last Updated:Aug 19, 2026

Solusi ini menunjukkan cara menggunakan Alibaba Cloud Resource Orchestration Service (ROS) untuk membuat kluster layanan web lengkap melalui satu templat YAML. Templat ini menyediakan VPC, grup instans ECS dengan Nginx yang telah diinstal, Classic Load Balancer (CLB), dan alamat IP elastis (EIP) dalam satu pembuatan stack. Solusi ini ideal untuk skenario yang memerlukan penerapan cepat kluster layanan web berdaya tinggi (HA).

Ikhtisar solusi

Skenario bisnis

Dalam virtual private cloud (VPC) Alibaba Cloud, buat instans ECS secara massal. Gunakan Asisten Cloud ECS untuk secara otomatis menginstal dan menjalankan Nginx. Setelah inisialisasi, sambungkan instans ECS ke instans CLB untuk distribusi traffic, lalu ekspos titik akhir akses HTTP melalui EIP.

Sumber daya yang Dibuat

No.

Resource

Tipe Sumber Daya ROS

Tujuan

1

VPC

ALIYUN::ECS::VPC

Menyediakan lingkungan jaringan terisolasi.

2

vSwitch

ALIYUN::ECS::VSwitch

Membagi subnet dalam VPC dan menentukan zona.

3

Security Group

ALIYUN::ECS::SecurityGroup

Membuka port HTTP 80 inbound dan mengizinkan semua traffic outbound.

4

ECS Instance Group

ALIYUN::ECS::InstanceGroup

Membuat beberapa instans ECS dan secara otomatis menerapkan Nginx melalui CommandContent.

5

CLB Instance

ALIYUN::SLB::LoadBalancer

Instans Classic Load Balancer yang mendistribusikan traffic ke instans ECS backend.

6

CLB Listener

ALIYUN::SLB::Listener

Mengonfigurasi port listener TCP/HTTP CLB dan pemeriksaan kesehatan.

7

Backend Server Attachment

ALIYUN::SLB::BackendServerAttachment

Menyambungkan grup instans ECS ke CLB sebagai server backend.

8

EIP

ALIYUN::VPC::EIP

Menyediakan titik masuk akses jaringan publik.

9

EIP Association

ALIYUN::VPC::EIPAssociation

Mengasosiasikan EIP dengan instans CLB.

Hasil yang diharapkan setelah penerapan

Setelah templat berhasil diterapkan, Anda akan memiliki:

  • Lingkungan jaringan VPC lengkap (termasuk VPC, vSwitch, dan security group dengan port 80 terbuka).

  • Grup instans ECS (2 instans secara default) dengan pemasangan disk data dan penerapan Nginx secara otomatis.

  • Instans CLB yang dikonfigurasi dengan listener port TCP 80 dan pemeriksaan kesehatan.

  • Semua instans ECS disambungkan ke grup server backend CLB, dengan distribusi traffic berdasarkan bobot.

  • EIP yang diasosiasikan dengan CLB, dapat diakses melalui http://<alamat EIP>.

Diagram arsitektur

创建ECS实例组并挂载到CLB实例

Prasyarat

Sebelum menggunakan templat ini, pastikan hal berikut:

  1. Izin akun: Akun Alibaba Cloud Anda harus memiliki izin pembuatan untuk ECS, CLB, VPC, dan EIP.

  2. Pengetahuan dasar: Pahami sintaks dan struktur dasar templat ROS. Untuk informasi lebih lanjut, lihat Memulai Templat ROS.

Tutorial penulisan templat

Tutorial ini menunjukkan proses penulisan templat dalam dua tahap:

  • Tahap 1 (Templat Dasar): Menggunakan nilai parameter tetap untuk fokus memahami definisi sumber daya dan hubungan penyambungan CLB.

  • Tahap 2 (Templat Lanjutan): Mempertimbangkan semua konfigurasi variabel dan menambahkan penyaringan parameter dinamis, tampilan kondisional untuk tipe penagihan, serta pengelompokan parameter.

Tahap 1: Templat dasar — Definisikan sumber daya dan dependensi

Langkah 1: Definisikan sumber daya jaringan dasar (VPC + vSwitch + security group)

Sumber daya jaringan merupakan fondasi bagi semua sumber daya lainnya dan harus dibuat terlebih dahulu. Security group harus membuka port HTTP 80 inbound untuk mengizinkan akses eksternal ke Nginx.

Resources:
  # ============================================================
  # Lapisan Jaringan: VPC → vSwitch → SecurityGroup
  # ============================================================

  Vpc:
    Type: ALIYUN::ECS::VPC  # Buat VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      VpcName:
        Ref: ALIYUN::StackName  # Parameter semu: gunakan nama stack sebagai nama VPC

  VSwitch:
    Type: ALIYUN::ECS::VSwitch  # Buat vSwitch (subnet) dalam VPC
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc  # Dependensi implisit: ROS membuat Vpc terlebih dahulu
      ZoneId: cn-beijing-h  # Contoh ini menggunakan zona Beijing H
      CidrBlock: 192.168.0.0/24

  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup  # Buat security group
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:  # Aturan inbound: buka port HTTP 80 untuk Nginx
        - PortRange: 80/80
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: internet

Konsep Kunci

  • Untuk nama yang disesuaikan seperti VpcName, VSwitchName, dan SecurityGroupName, gunakan parameter semu agar setelah penerapan Anda dapat dengan cepat menemukan sumber daya yang termasuk dalam stack ini.

  • Aturan security group dapat disesuaikan berdasarkan kebutuhan Anda:

    • Untuk mengizinkan akses eksternal ke layanan web, buka port HTTP 80 atau 8080 inbound.

    • Untuk mengizinkan login SSH, buka port 22 inbound.

  • Di lingkungan produksi, batasi SourceCidrIp hanya pada rentang IP yang dikenal, bukan 0.0.0.0/0.

Langkah 2: Definisikan sumber daya CLB dan EIP

Instans CLB mendistribusikan traffic masuk ke beberapa instans ECS backend. EIP menyediakan titik masuk publik.

Resources:
  # ============================================================
  # Lapisan Load Balancing: CLB + Listener + EIP
  # ============================================================

  Slb:
    Type: ALIYUN::SLB::LoadBalancer  # Buat instans Classic Load Balancer
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}  # Fn::Sub menggabungkan string
      AddressType: intranet  # CLB jaringan internal (akses publik melalui EIP)
      LoadBalancerSpec: slb.s1.small
      AutoPay: true

  SlbListener:
    Type: ALIYUN::SLB::Listener  # Konfigurasi listener CLB
    DependsOn:
      - Slb  # Dependensi eksplisit: CLB harus dibuat sebelum menambahkan listener
    Properties:
      LoadBalancerId:
        Ref: Slb
      ListenerPort: 80          # Port listener frontend
      BackendServerPort: 80     # Port server backend (default Nginx: 80)
      Protocol: tcp             # Forwarding TCP Lapisan 4
      Bandwidth: -1             # -1 = tidak terbatas; sesuaikan berdasarkan spesifikasi CLB
      Persistence:              # Konfigurasi persistensi sesi
        StickySession: 'on'
        StickySessionType: insert  # Penyisipan cookie
        CookieTimeout: 60
        PersistenceTimeout: 180
      HealthCheck:              # Konfigurasi pemeriksaan kesehatan
        HealthCheckType: tcp    # Probe port TCP
        Port: 80
        Interval: 2             # Interval pemeriksaan: 2 detik
        HealthyThreshold: 3     # 3 keberhasilan = sehat
        UnhealthyThreshold: 3   # 3 kegagalan = tidak sehat
        Timeout: 5              # Timeout probe: 5 detik

  EipSlbAddress:
    Type: ALIYUN::VPC::EIP  # Buat EIP
    Properties:
      Name:
        Ref: ALIYUN::StackName
      InternetChargeType: PayByTraffic  # Bayar berdasarkan traffic
      Bandwidth: 10             # Batas bandwidth: 10 Mbps

  EipSlbAddressAssociation:
    Type: ALIYUN::VPC::EIPAssociation  # Asosiasikan EIP dengan CLB
    Properties:
      InstanceId:
        Ref: Slb                # Target: instans CLB
      AllocationId:
        Ref: EipSlbAddress      # ID sumber daya EIP

Konsep Kunci:

  • Dependensi implisit vs eksplisit:

    • Saat Anda mereferensikan sumber daya menggunakan Ref atau Fn::GetAtt, ROS secara otomatis menentukan dependensi (implisit).

    • Gunakan DependsOn hanya ketika tidak ada referensi langsung antara dua sumber daya tetapi logika bisnis mengharuskan urutan pembuatan tertentu.

  • CLB menggunakan AddressType: intranet (jaringan internal) dan diikat ke EIP melalui ALIYUN::VPC::EIPAssociation untuk menyediakan akses publik. Ini adalah pola arsitektur yang direkomendasikan.

Langkah 3: Definisikan grup instans ECS dan gunakan Asisten Cloud untuk menginstal Nginx

Instans ECS menjalankan skrip inisialisasi melalui Asisten Cloud untuk memasang disk data dan menginstal Nginx.

Resources:
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ZoneId: cn-beijing-h
      ImageId: centos_7
      InstanceType: ecs.c5.large
      MaxAmount: 2       # Buat 2 instans ECS
      AllocatePublicIP: false  # Tidak ada IP publik (akses melalui CLB + EIP)
      IoOptimized: optimized
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 40
      DiskMappings:      # Konfigurasi disk data
        - Category: cloud_essd
          Size: 100
      Password: <YourPassword>  # Ganti dengan kata sandi aktual saat penerapan

  RunSetup:
    Type: ALIYUN::ECS::RunCommand
    DependsOn: EcsInstanceGroup
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunShellScript
      Sync: true
      Timeout: 300
      ContentEncoding: PlainText
      CommandContent: |
        #!/bin/bash
        # === Inisialisasi disk data: partisi, format, pasang ke /disk1 ===
        cat >> /root/InitDataDisk.sh << 'EOF'
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a

        # === Instal dan jalankan Nginx ===
        yum install -y nginx
        systemctl start nginx.service

Konsep Kunci

  • Ref vs. Fn::GetAtt:

    • Ref → mengembalikan identifier utama sumber daya (misalnya, VpcId dari VPC).

    • Fn::GetAtt → mengembalikan atribut lain dari sumber daya (misalnya, InstanceIds dari grup instans ECS).

Langkah 4: Definisikan penyambungan server backend CLB — Hubungkan instans ECS ke CLB

Gunakan ALIYUN::SLB::BackendServerAttachment untuk menyambungkan grup instans ECS ke backend CLB.

Resources:
  # ============================================================
  # Lapisan Pengikatan: Sambungkan grup instans ECS ke server backend CLB
  # ============================================================

  SlbBackendServerAttachment:
    Type: ALIYUN::SLB::BackendServerAttachment
    DependsOn:
      - EcsInstanceGroup  # Dependensi eksplisit: tunggu pembuatan ECS
    Properties:
      LoadBalancerId:
        Ref: Slb
      BackendServerList:
        # Dapatkan semua ID instans dari grup instans ECS
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      BackendServerWeightList:  # Daftar bobot server backend
        - 100  # Instans ECS 1: bobot 100
        - 100  # Instans ECS 2: bobot 100

Konsep Kunci: BackendServerWeightList Aturan

  • Nilai bobot berkisar antara 0 hingga 100. Traffic lebih banyak dialokasikan ke instans dengan bobot lebih tinggi.

  • Jika BackendServerWeightList memiliki entri lebih sedikit daripada BackendServerList, instans ECS yang tersisa menggunakan nilai bobot terakhir dalam daftar.

Templat dasar lengkap

Berikut adalah templat lengkap siap terapkan yang menggabungkan semua langkah di atas:

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: Buat VPC, terapkan ECS dengan Nginx, sambungkan ke CLB, ekspos melalui EIP
  en: Create VPC, deploy ECS group with Nginx, attach to CLB, expose via EIP

Resources:
  # === Lapisan Jaringan ===
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
      VpcName:
        Ref: ALIYUN::StackName
  VSwitch:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      ZoneId: cn-beijing-h
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:
        - PortRange: 80/80
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: internet
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: internet
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet

  # === Lapisan Komputasi ===
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      InstanceType: ecs.c5.large
      MaxAmount: 2
      AllocatePublicIP: false
      IoOptimized: optimized
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 40
      DiskMappings:
        - Category: cloud_essd
          Size: 100
      Password: <YourPassword>  # Ganti dengan kata sandi aktual saat penerapan
  RunSetup:
    Type: ALIYUN::ECS::RunCommand
    DependsOn: EcsInstanceGroup
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunShellScript
      Sync: true
      Timeout: 300
      ContentEncoding: PlainText
      CommandContent: |
        #!/bin/bash
        # === Inisialisasi disk data: partisi, format, pasang ke /disk1 ===
        cat >> /root/InitDataDisk.sh << 'EOF'
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a

        # === Instal dan jalankan Nginx ===
        yum install -y nginx
        systemctl start nginx.service

  # === Lapisan Load Balancing ===
  Slb:
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      AddressType: intranet
      LoadBalancerSpec: slb.s1.small
      AutoPay: true
  SlbListener:
    DependsOn:
      - Slb
    Type: ALIYUN::SLB::Listener
    Properties:
      LoadBalancerId:
        Ref: Slb
      ListenerPort: 80
      BackendServerPort: 80
      Protocol: tcp
      Bandwidth: -1
      Persistence:
        StickySession: 'on'
        StickySessionType: insert
        CookieTimeout: 60
        PersistenceTimeout: 180
      HealthCheck:
        HealthCheckType: tcp
        Port: 80
        Interval: 2
        HealthyThreshold: 3
        UnhealthyThreshold: 3
        Timeout: 5
  EipSlbAddress:
    Type: ALIYUN::VPC::EIP
    Properties:
      Name:
        Ref: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      Bandwidth: 10
  EipSlbAddressAssociation:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Ref: Slb
      AllocationId:
        Ref: EipSlbAddress

  # === Lapisan Pengikatan ===
  SlbBackendServerAttachment:
    DependsOn:
      - EcsInstanceGroup
    Type: ALIYUN::SLB::BackendServerAttachment
    Properties:
      BackendServerList:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      LoadBalancerId:
        Ref: Slb
      BackendServerWeightList:
        - 100
        - 100

Outputs:
  Endpoint:
    Description:
      zh-cn: Titik akhir HTTP publik
      en: Public HTTP endpoint
    Value:
      Fn::Sub:
        - http://${ServerAddress}
        - ServerAddress:
            Fn::GetAtt:
              - EipSlbAddress
              - EipAddress

Konsep Kunci:

Setelah templat membuat sumber daya, gunakan bagian Outputs untuk mengkueri atribut sumber daya seperti alamat EIP yang diikat ke CLB.

Tahap 2: Templat lanjutan — Parameterisasi dan konfigurasi dinamis

Templat dasar menggunakan nilai tetap untuk InstanceType, SystemDiskCategory pada ECS, dan LoadBalancerSpec pada CLB. Memparameterisasi nilai-nilai ini secara signifikan meningkatkan fleksibilitas templat.

Templat ini memperkenalkan fitur lanjutan berikut:

  1. Parameterisasi (Parameters): Ekstrak konfigurasi variabel sebagai parameter yang diisi secara dinamis saat penerapan.

  2. Penyaringan parameter dinamis (AssociationProperty): Biarkan konsol ROS secara otomatis menyaring opsi yang tersedia berdasarkan parameter yang dipilih.

  3. Pengelompokan parameter (Metadata): Kelompokkan parameter berdasarkan kategori logis di konsol untuk meningkatkan pengalaman konfigurasi.

Diagram dependensi parameter

Berikut menunjukkan rantai dependensi antara tipe instans ECS, tipe disk sistem, dan spesifikasi instans CLB:

ZoneId (zona — parameter filter inti)
  ├── EcsInstanceType (disaring berdasarkan zona + tipe penagihan)
  │     ├── SystemDiskCategory (disaring berdasarkan zona + tipe instans)
  │     └── DataDiskCategory (disaring berdasarkan zona + tipe instans)
  └── LoadBalancerSpec (disaring berdasarkan zona)

PayType (tipe penagihan)
  ├── PayPeriodUnit (ditampilkan hanya saat PrePaid)
  ├── PayPeriod (ditampilkan hanya saat PrePaid)
  └── EcsInstanceType (disaring berdasarkan zona + tipe penagihan)

Logika inti: Pilih zona dan tipe penagihan ECS terlebih dahulu, lalu saring tipe instans ECS dan spesifikasi CLB sesuai. Saat penagihan langganan dipilih, berikan unit periode dan durasi penagihan. Terakhir, saring tipe disk berdasarkan zona dan tipe instans ECS. Setiap langkah hanya menampilkan opsi yang valid di bawah kondisi saat ini, mencegah kombinasi parameter yang tidak valid.

AssociationProperty dijelaskan

1. ZoneId — Zona Ketersediaan (Parameter Dasar)

Atur AssociationProperty ke ALIYUN::ECS::ZoneId untuk mencantumkan semua zona di wilayah saat ini:

ZoneId:
    Type: String
    Label:
      zh-cn: Zona vSwitch
      en: VSwitch Availability Zone
    Description:
      zh-cn: Pilih zona untuk vSwitch, ECS dan CLB
      en: Select the availability zone for VSwitch, ECS and CLB will be deployed here
    AssociationProperty: ALIYUN::ECS::ZoneId

Parameter ini menjadi dasar filter untuk semua parameter berikutnya. Setelah zona dipilih, daftar opsi untuk semua parameter lainnya diperbarui secara otomatis.

2. PayType — Tipe Penagihan ECS

Definisikan parameter PayType dan gunakan AssociationPropertyMetadata.Visible.Condition untuk menampilkan parameter durasi penagihan hanya saat Subscription (PrePaid) dipilih:

Parameters:
  PayType:
    Type: String
    Label:
      zh-cn: 付费类型
      en: Charge Type
    Default: PostPaid
    AllowedValues:
      - PostPaid
      - PrePaid
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType
  PayPeriodUnit:
    Type: String
    Default: Month
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      Visible:  # Tampilan kondisional: tampilkan hanya saat PayType bukan PostPaid
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid
  PayPeriod:
    Type: Number
    Label:
      zh-cn: 购买资源时长
      en: Period
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid

Saat Subscription (PostPaid) dipilih di konsol ROS, parameter durasi penagihan secara otomatis disembunyikan. Parameter tersebut muncul hanya saat pengguna memilih Subscription (PrePaid).

3. EcsInstanceType — Tipe Instans ECS

Atur AssociationProperty ke ALIYUN::ECS::Instance::InstanceType untuk mencantumkan tipe instans ECS yang tersedia, disaring berdasarkan ${ZoneId} dan ${PayType}:

EcsInstanceType:
    Type: String
    Label:
      zh-cn: ECS实例规格
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}

Ketersediaan tipe instans bervariasi berdasarkan zona. Tanpa penyaringan, pengguna mungkin memilih tipe instans yang tidak tersedia di zona yang dipilih, menyebabkan kegagalan pembuatan stack.

4. SystemDiskCategory — Tipe Disk Sistem

Atur AssociationProperty ke ALIYUN::ECS::Disk::SystemDiskCategory untuk mencantumkan tipe disk sistem yang tersedia, disaring berdasarkan ${ZoneId} dan ${EcsInstanceType}:

SystemDiskCategory:
    Type: String
    Label:
      zh-cn: 系统盘类型
      en: System Disk Category
    Description:
      zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
      en: "System disk type. Options: cloud_essd, cloud_ssd, cloud_efficiency"
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}

Ketersediaan tipe disk sistem bergantung pada zona (beberapa zona tidak mendukung ESSD) dan tipe instans (beberapa tipe instans hanya mendukung tipe disk tertentu).

5. LoadBalancerSpec — Spesifikasi Instans CLB

Atur AssociationProperty ke ALIYUN::SLB::Instance::InstanceType untuk mencantumkan spesifikasi CLB yang tersedia, disaring berdasarkan ${ZoneId}:

LoadBalancerSpec:
    Type: String
    Label:
      zh-cn: CLB实例规格
      en: CLB Instance Spec
    Description:
      zh-cn: 选择CLB实例规格,根据可用区自动过滤
      en: Select CLB instance specification
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}

Templat penyaringan parameter dinamis

Parameters:
  ZoneId:
    Type: String
    Label:
      zh-cn: 交换机可用区
      en: VSwitch Availability Zone
    Description:
      zh-cn: 选择交换机所在的可用区,ECS和CLB将部署在此可用区
      en: Select the availability zone for deployment
    AssociationProperty: ALIYUN::ECS::ZoneId
  PayType:
    Type: String
    Label:
      zh-cn: 付费类型
      en: Charge Type
    Default: PostPaid
    AllowedValues:
      - PostPaid
      - PrePaid
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType
  PayPeriodUnit:
    Type: String
    Default: Month
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid
  PayPeriod:
    Type: Number
    Label:
      zh-cn: 购买资源时长
      en: Period
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid
  EcsInstanceType:
    Type: String
    Label:
      zh-cn: ECS实例规格
      en: ECS Instance Type
    Description:
      zh-cn: 选择ECS实例规格。列表已根据可用区和付费类型自动过滤。
      en: Select ECS instance type, filtered by zone and charge type.
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}
  SystemDiskCategory:
    Type: String
    Label:
      zh-cn: 系统盘类型
      en: System Disk Category
    Description:
      zh-cn: 选择系统盘类型。可选值:cloud_essd(ESSD云盘)、cloud_ssd(SSD云盘)、cloud_efficiency(高效云盘)
      en: System disk type
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}
  DataDiskCategory:
    Type: String
    Label:
      zh-cn: 数据盘类型
      en: Data Disk Category
    Description:
      zh-cn: 选择数据盘类型。可选值:cloud_essd、cloud_ssd、cloud_efficiency
      en: Data disk type
    AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}
  LoadBalancerSpec:
    Type: String
    Label:
      zh-cn: CLB实例规格
      en: CLB Instance Spec
    Description:
      zh-cn: 选择CLB实例规格,根据可用区自动过滤
      en: Select CLB instance specification
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}

Cara kerja AssociationProperty

Saat pengguna membuat stack di konsol ROS, pemilihan parameter dipicu secara berantai:

  1. Zona (ZoneId) dipilih.

  2. Tipe penagihan ECS (PayType) dipilih.

  3. Dropdown tipe instans ECS diperbarui secara otomatis, hanya menampilkan tipe dengan inventaris tersedia di zona yang dipilih yang mendukung tipe penagihan yang dipilih.

  4. Dropdown spesifikasi instans CLB diperbarui secara otomatis, hanya menampilkan spesifikasi yang didukung di zona yang dipilih.

  5. Setelah memilih tipe instans ECS, dropdown tipe disk sistem dan tipe disk data diperbarui secara otomatis, hanya menampilkan tipe yang didukung oleh zona dan tipe instans yang dipilih.

Pendekatan ini memastikan setiap pemilihan hanya menampilkan opsi yang valid di bawah kondisi saat ini, mencegah kegagalan penerapan akibat kombinasi parameter yang tidak valid sejak awal.

Pengelompokan parameter dengan Metadata

Menggunakan ALIYUN::ROS::Interface di Metadata, Anda dapat mengatur parameter ke dalam kelompok logis dengan label. Konsol ROS menampilkan parameter dalam kelompok, secara signifikan meningkatkan pengalaman konfigurasi.

Sintaks Metadata

Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:           # Daftar kelompok parameter (wajib)
      - Parameters:            # Daftar nama parameter dalam kelompok ini (wajib)
          - paramName1
          - paramName2
        Label:                 # Label kelompok (wajib)
          default:
            zh-cn: Label bahasa Mandarin
            en: Label bahasa Inggris

Aturan sintaks metadata:

  • ParameterGroups, Parameters, dan Label semuanya wajib.

  • Nama parameter yang tercantum di Metadata.ALIYUN::ROS::Interface.ParameterGroups.Parameters harus persis sama dengan nama yang didefinisikan di bagian Parameters templat.

  • Parameter yang tidak termasuk dalam kelompok apa pun ditampilkan di area tidak dikelompokkan di konsol.

Desain Kelompok Parameter untuk Templat Ini

Templat ini mengatur 14 parameter ke dalam 4 kelompok:

┌─────────────────────────────────────────────────┐
│  Konfigurasi Jaringan                           │
│  ├── Zona Ketersediaan vSwitch (ZoneId)         │
│  ├── Blok CIDR VPC (VpcCidrBlock)               │
│  └── Blok CIDR vSwitch (VSwitchCidrBlock)       │
├─────────────────────────────────────────────────┤
│  Konfigurasi Penagihan                          │
│  ├── Tipe Penagihan (PayType)                   │
│  ├── Unit Periode Penagihan (PayPeriodUnit)     │
│  └── Periode (PayPeriod)                        │
├─────────────────────────────────────────────────┤
│  Konfigurasi Instans ECS                        │
│  ├── Tipe Instans ECS (EcsInstanceType)         │
│  ├── Kategori Disk Sistem (SystemDiskCategory)  │
│  ├── Ukuran Disk Sistem (SystemDiskSize)        │
│  ├── Kategori Disk Data (DataDiskCategory)      │
│  ├── Ukuran Disk Data (DataDiskSize)            │
│  └── Kata Sandi Instans ECS (InstancePassword) │
├─────────────────────────────────────────────────┤
│  Konfigurasi CLB                                │
│  ├── Spesifikasi Instans CLB (LoadBalancerSpec) │
│  └── Bandwidth EIP (Bandwidth)                  │
└─────────────────────────────────────────────────┘

Templat Kelompok Parameter Metadata

Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - ZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: Konfigurasi Jaringan
            en: Network Configuration
      - Parameters:
          - PayType
          - PayPeriodUnit
          - PayPeriod
        Label:
          default:
            zh-cn: Tipe Penagihan
            en: Billing Configuration
      - Parameters:
          - EcsInstanceType
          - SystemDiskCategory
          - SystemDiskSize
          - DataDiskCategory
          - DataDiskSize
          - InstancePassword
        Label:
          default:
            zh-cn: Konfigurasi Instans ECS
            en: ECS Instance Configuration
      - Parameters:
          - LoadBalancerSpec
          - Bandwidth
        Label:
          default:
            zh-cn: Konfigurasi CLB
            en: CLB Configuration

Templat lanjutan lengkap

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: >-
    Templat parameterisasi: Buat grup instans ECS untuk menerapkan layanan Nginx, sambungkan ke load balancer CLB, dan sediakan layanan HTTP publik melalui EIP.
    Mendukung pemilihan dinamis zona, spesifikasi instans, tipe disk, dan spesifikasi CLB, serta dukungan peralihan mode penagihan bayar sesuai penggunaan/langganan.
  en: >-
    Parameterized template: Create ECS group with Nginx, attach to CLB, expose via EIP.
    Supports dynamic selection and PayAsYouGo/Subscription billing switch.

Parameters:
  # ─── Parameter jaringan dasar ───
  ZoneId:
    Type: String
    Label:
      zh-cn: Zona ketersediaan vSwitch
      en: VSwitch Availability Zone
    Description:
      zh-cn: Pilih zona ketersediaan tempat vSwitch berada; ECS dan CLB akan diterapkan di zona ini
      en: Select the availability zone for deployment
    AssociationProperty: ALIYUN::ECS::ZoneId

  VpcCidrBlock:
    Type: String
    Label:
      zh-cn: Blok CIDR VPC
      en: VPC CIDR Block
    Description:
      zh-cn: Rentang alamat IP VPC. Disarankan menggunakan 10.0.0.0/8, 172.16.0.0/12, atau 192.168.0.0/16
      en: VPC IP address range
    Default: 192.168.0.0/16

  VSwitchCidrBlock:
    Type: String
    Label:
      zh-cn: Blok CIDR vSwitch
      en: VSwitch CIDR Block
    Description:
      zh-cn: Harus merupakan subnet dari blok CIDR VPC dan tidak boleh tumpang tindih dengan blok CIDR vSwitch lain dalam VPC yang sama
      en: Must be a subnet of VPC CIDR
    Default: 192.168.0.0/24

  # ─── Parameter tipe penagihan ───
  PayType:
    Type: String
    Label:
      zh-cn: Tipe penagihan
      en: Charge Type
    Default: PostPaid
    AllowedValues:
      - PostPaid
      - PrePaid
    AssociationProperty: ChargeType
    AssociationPropertyMetadata:
      LocaleKey: InstanceChargeType

  PayPeriodUnit:
    Type: String
    Label:
      zh-cn: Unit periode pembelian sumber daya
      en: Pay Period Unit
    Description:
      zh-cn: Unit periode untuk langganan. Month berarti bulan, Year berarti tahun. Hanya berlaku untuk langganan.
      en: Subscription period unit. Only valid for PrePaid.
    Default: Month
    AllowedValues:
      - Month
      - Year
    AssociationProperty: PayPeriodUnit
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid

  PayPeriod:
    Type: Number
    Label:
      zh-cn: Durasi pembelian sumber daya
      en: Period
    Default: 1
    AllowedValues:
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
    AssociationProperty: PayPeriod
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Not:
            Fn::Equals:
              - ${PayType}
              - PostPaid

  # ─── Parameter instans ECS ───
  EcsInstanceType:
    Type: String
    Label:
      zh-cn: Spesifikasi instans ECS
      en: ECS Instance Type
    Description:
      zh-cn: Pilih spesifikasi instans ECS. Daftar telah difilter secara otomatis berdasarkan zona dan tipe penagihan.
      en: Select ECS instance type, filtered by zone and charge type.
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceChargeType: ${PayType}

  SystemDiskCategory:
    Type: String
    Label:
      zh-cn: Tipe disk sistem
      en: System Disk Category
    Description:
      zh-cn: Pilih tipe disk sistem. Nilai yang tersedia: cloud_essd (disk cloud ESSD), cloud_ssd (disk cloud SSD), cloud_efficiency (disk cloud efisien)
      en: System disk type
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}

  SystemDiskSize:
    Type: Number
    Label:
      zh-cn: Ukuran disk sistem (GB)
      en: System Disk Size (GB)
    Description:
      zh-cn: Ukuran disk sistem, rentang nilai 40–500 GB
      en: System disk size, range 40-500 GB
    Default: 40
    MinValue: 40
    MaxValue: 500

  DataDiskCategory:
    Type: String
    Label:
      zh-cn: Tipe disk data
      en: Data Disk Category
    Description:
      zh-cn: Pilih tipe disk data. Nilai yang tersedia: cloud_essd, cloud_ssd, cloud_efficiency
      en: Data disk type
    AssociationProperty: ALIYUN::ECS::Disk::DataDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      InstanceType: ${EcsInstanceType}

  DataDiskSize:
    Type: Number
    Label:
      zh-cn: Ukuran disk data (GB)
      en: Data Disk Size (GB)
    Description:
      zh-cn: Ukuran disk data ECS, rentang nilai 20–32768 GB
      en: Data disk size, range 20-32768 GB
    Default: 100
    MinValue: 20
    MaxValue: 32768

  InstancePassword:
    Type: String
    NoEcho: true
    Label:
      zh-cn: Kata sandi instans ECS
      en: ECS Instance Password
    Description:
      zh-cn: Panjang 8–30 karakter, harus mengandung minimal tiga jenis karakter dari huruf kapital, huruf kecil, angka, dan karakter khusus
      en: Length 8-30, must contain at least three character types
    MinLength: 8
    MaxLength: 30
    AssociationProperty: ALIYUN::ECS::Instance::Password

  # ─── Parameter load balancer ───
  LoadBalancerSpec:
    Type: String
    Label:
      zh-cn: Spesifikasi instans CLB
      en: CLB Instance Spec
    Description:
      zh-cn: Pilih spesifikasi instans CLB, difilter secara otomatis berdasarkan zona
      en: Select CLB instance specification
    AssociationProperty: ALIYUN::SLB::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}

  Bandwidth:
    Type: Number
    Label:
      zh-cn: Bandwidth EIP (Mbps)
      en: EIP Bandwidth (Mbps)
    Description:
      zh-cn: Batas bandwidth IP publik elastis, rentang nilai 1–1000 Mbps
      en: EIP bandwidth cap, range 1-1000 Mbps
    Default: 10
    MinValue: 1
    MaxValue: 1000

Resources:
  # === Lapisan jaringan dasar ===
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock:
        Ref: VpcCidrBlock
      VpcName:
        Ref: ALIYUN::StackName
  VSwitch:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      ZoneId:
        Ref: ZoneId
      CidrBlock:
        Ref: VSwitchCidrBlock
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:
        - PortRange: 80/80
          Priority: 1
          SourceCidrIp: 0.0.0.0/0
          IpProtocol: tcp
          NicType: internet
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: internet
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet

  # === Lapisan komputasi ===
  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      InstanceChargeType:
        Ref: PayType
      PeriodUnit:
        Ref: PayPeriodUnit
      Period:
        Ref: PayPeriod
      IoOptimized: optimized
      SystemDiskCategory:
        Ref: SystemDiskCategory
      SystemDiskSize:
        Ref: SystemDiskSize
      DiskMappings:
        - Category:
            Ref: DataDiskCategory
          Size:
            Ref: DataDiskSize
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      MaxAmount: 2
      ImageId: centos_7
      InstanceType:
        Ref: EcsInstanceType
      Password:
        Ref: InstancePassword
      AllocatePublicIP: false
  RunSetup:
    Type: ALIYUN::ECS::RunCommand
    DependsOn: EcsInstanceGroup
    Properties:
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      Type: RunShellScript
      Sync: true
      Timeout: 300
      ContentEncoding: PlainText
      CommandContent: |
        #!/bin/bash
        # === Inisialisasi disk data: partisi, format, pasang ke /disk1 ===
        cat >> /root/InitDataDisk.sh << 'EOF'
        #!/bin/bash
        echo "p
        n
        p
        w
        " |  fdisk -u /dev/vdb
        EOF
        /bin/bash /root/InitDataDisk.sh
        rm -f /root/InitDataDisk.sh
        mkfs -t ext4 /dev/vdb1
        cp /etc/fstab /etc/fstab.bak
        mkdir /disk1
        echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /disk1 ext4 defaults 0 0 >> /etc/fstab
        mount -a

        # === Instal dan jalankan Nginx ===
        yum install -y nginx
        systemctl start nginx.service

  # === Lapisan load balancing ===
  Slb:
    Type: ALIYUN::SLB::LoadBalancer
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      LoadBalancerName:
        Fn::Sub: slb-${ALIYUN::StackName}
      PayType:
        Ref: PayType
      PricingCycle:
        Ref: PayPeriodUnit
      Duration:
        Ref: PayPeriod
      AddressType: intranet
      LoadBalancerSpec:
        Ref: LoadBalancerSpec
      AutoPay: true
  EipSlbAddress:
    Type: ALIYUN::VPC::EIP
    Properties:
      Name:
        Ref: ALIYUN::StackName
      InternetChargeType: PayByTraffic
      Bandwidth:
        Ref: Bandwidth
  EipSlbAddressAssociation:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Ref: Slb
      AllocationId:
        Ref: EipSlbAddress
  SlbBackendServerAttachment:
    DependsOn:
      - EcsInstanceGroup
    Type: ALIYUN::SLB::BackendServerAttachment
    Properties:
      BackendServerList:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      LoadBalancerId:
        Ref: Slb
      BackendServerWeightList:
        - 100
        - 100
  SlbListener:
    DependsOn:
      - Slb
    Type: ALIYUN::SLB::Listener
    Properties:
      LoadBalancerId:
        Ref: Slb
      ListenerPort: 80
      BackendServerPort: 80
      Protocol: tcp
      Bandwidth: -1
      Persistence:
        StickySession: 'on'
        StickySessionType: insert
        CookieTimeout: 60
        PersistenceTimeout: 180
      HealthCheck:
        HealthCheckType: tcp
        Port: 80
        Interval: 2
        HealthyThreshold: 3
        UnhealthyThreshold: 3
        Timeout: 5

Outputs:
  Endpoint:
    Description:
      zh-cn: Alamat akses publik yang diekspos
      en: Public HTTP endpoint
    Value:
      Fn::Sub:
        - http://${ServerAddress}
        - ServerAddress:
            Fn::GetAtt:
              - EipSlbAddress
              - EipAddress

# === Metadata: Konfigurasi pengelompokan parameter konsol ===
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - ZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: Konfigurasi Jaringan Dasar
            en: Network Configuration
      - Parameters:
          - PayType
          - PayPeriodUnit
          - PayPeriod
        Label:
          default:
            zh-cn: Tipe Penagihan
            en: Billing Configuration
      - Parameters:
          - EcsInstanceType
          - SystemDiskCategory
          - SystemDiskSize
          - DataDiskCategory
          - DataDiskSize
          - InstancePassword
        Label:
          default:
            zh-cn: Konfigurasi Instans ECS
            en: ECS Instance Configuration
      - Parameters:
          - LoadBalancerSpec
          - Bandwidth
        Label:
          default:
            zh-cn: Konfigurasi Load Balancer
            en: CLB Configuration

Referensi cepat fungsi bawaan ROS

Fungsi

Contoh Sintaks

Tujuan dalam Templat Ini

Catatan

Ref

Ref: MyVpc

Mereferensikan nilai parameter atau identifier utama sumber daya.

Mengembalikan nilai parameter saat mereferensikan Parameter; mengembalikan ID utama saat mereferensikan Resource.

Fn::GetAtt

Fn::GetAtt: [EcsInstanceGroup, InstanceIds]

Mendapatkan daftar ID instans dari grup instans ECS.

Mengembalikan atribut output sumber daya (identifier non-utama) setelah pembuatan.

Fn::Sub

Fn::Sub: slb-${ALIYUN::StackName}

Menggabungkan nama CLB.

Mereferensikan variabel dengan ${Var} dalam string templat.

Fn::Not + Fn::Equals

Fn::Not: Fn::Equals: [${PayType}, PostPaid]

Tampilan kondisional parameter durasi penagihan.

Negasi logis + perbandingan kesetaraan, digunakan untuk kondisi Visible.

Penerapan

Parameter penerapan

Parameter wajib (harus ditentukan saat penerapan)

Parameter

Tipe

Deskripsi

Batasan

ZoneId

String

ID zona.

Dipilih secara dinamis di konsol.

EcsInstanceType

String

Tipe instans ECS.

Difilter secara otomatis berdasarkan zona + tipe penagihan.

SystemDiskCategory

String

Tipe disk sistem.

Difilter secara otomatis berdasarkan zona + tipe instans.

DataDiskCategory

String

Tipe disk data.

Difilter secara otomatis berdasarkan zona + tipe instans.

LoadBalancerSpec

String

Spesifikasi instans CLB.

Difilter secara otomatis berdasarkan zona.

Parameter opsional (memiliki nilai default, dapat dikosongkan)

Parameter

Default

Deskripsi

VpcCidrBlock

192.168.0.0/16

Blok CIDR VPC.

VSwitchCidrBlock

192.168.0.0/24

Blok CIDR subnet vSwitch.

PayType

PostPaid

Tipe penagihan (bayar sesuai penggunaan / langganan).

PayPeriodUnit

Month

Unit periode penagihan (ditampilkan hanya saat PrePaid).

PayPeriod

1

Durasi penagihan (ditampilkan hanya saat PrePaid).

SystemDiskSize

40

Ukuran disk sistem (GB), rentang: 40–500.

DataDiskSize

100

Ukuran disk data (GB), rentang: 20–32768.

Bandwidth

10

Batas bandwidth EIP (Mbps), rentang: 1–1000.

InstancePassword

—

Kata sandi logon instans ECS. Panjang 8–30 karakter, harus mengandung minimal tiga jenis karakter: huruf kapital, huruf kecil, angka, karakter khusus.

Metode penerapan

Metode 1: Terapkan melalui konsol ROS

  1. Login ke konsol ROS.

  2. Di panel navigasi kiri, pilih Stacks > Create Stack.

  3. Pilih Select an Existing Template > Enter Template Content dan tempel templat lengkap ke editor.

  4. Klik Next, lalu konfigurasikan parameter berdasarkan kelompok.

  5. Setelah mengonfirmasi konfigurasi, klik Create dan tunggu status stack berubah menjadi CREATE_COMPLETE.

Metode 2: Terapkan melalui ROS IaC Code

IaC Code adalah asisten AI infrastructure-as-code untuk infrastruktur cloud. Alat ini membantu pengguna sumber daya cloud dan insinyur O&M menghasilkan, menerapkan, dan mengelola templat infrastruktur melalui alur kerja terminal.

# Prompt
Bantu saya menerapkan sekelompok instans ECS dan menyambungkannya ke load balancer CLB dengan persyaratan berikut:
1. Gunakan VPC dan vSwitch yang baru dibuat
2. Buat 2 instans ECS dan instal serta jalankan Nginx melalui CommandContent
3. Gunakan WaitCondition untuk menunggu instalasi Nginx selesai sebelum menyambungkan ke CLB
4. Konfigurasi CLB dengan listener port TCP 80 dan pemeriksaan kesehatan
5. Buat EIP dan asosiasikan dengan CLB untuk menyediakan akses HTTP
6. Buka port 80 inbound di security group
7. Konfigurasi ECS dengan disk data 100 GB dan partisi otomatis serta pasang di CommandContent
8. Konfigurasi ZoneId, EcsInstanceType, SystemDiskCategory, DataDiskCategory, LoadBalancerSpec dengan AssociationProperty untuk penyaringan dinamis di konsol
9. Dukung peralihan antara penagihan bayar sesuai penggunaan dan langganan, dengan parameter langganan menggunakan tampilan kondisional

FAQ

P1: Pemeriksaan kesehatan CLB terus gagal, dan instans ECS backend menunjukkan "Tidak Sehat"

Penyebab: Layanan Nginx di instans ECS tidak berjalan dengan benar, atau security group tidak membuka port 80.

Langkah pemecahan masalah:

  1. Login ke instans ECS dan jalankan systemctl status nginx untuk memastikan Nginx berjalan.

  2. Verifikasi bahwa aturan inbound security group membuka port 80 (PortRange: 80/80).

  3. Periksa bahwa Port dalam konfigurasi pemeriksaan kesehatan CLB sesuai dengan port listener Nginx.

  4. Tingkatkan HealthyThreshold (ambang batas sehat) dan Interval (interval pemeriksaan) sesuai kebutuhan.

Q2: Bagaimana cara menyesuaikan rasio distribusi trafik di antara server backend?

Solusi: Ubah BackendServerWeightList di SlbBackendServerAttachment:

BackendServerWeightList:
  - 100  # Instans ECS 1: menerima sekitar 67% traffic
  - 50   # Instans ECS 2: menerima sekitar 33% traffic

Rasio bobot adalah 100:50, artinya instans ECS 1 menangani sekitar 2/3 permintaan. Untuk sementara mengeluarkan instans ECS dari layanan (dekomisioning skala abu-abu), atur bobotnya menjadi 0.

P3: Bagaimana cara mengganti skrip penerapan Nginx di ECS::RunCommand dengan aplikasi kustom?

Solusi: Ubah bagian instalasi dan jalankan di skrip CommandContent sambil mempertahankan logika inisialisasi disk data:

CommandContent:
  Fn::Sub:
    - |
      #!/bin/bash
      # ... Kode inisialisasi disk data (pertahankan seperti aslinya) ...

      # === Ganti dengan skrip penerapan aplikasi Anda ===
      # Contoh: Terapkan aplikasi Java Spring Boot
      yum install -y java-11-openjdk
      wget -P /disk1 https://your-oss-bucket.oss-cn-hangzhou.aliyuncs.com/app.jar
      nohup java -jar /disk1/app.jar --server.port=80

P4: Bagaimana cara mengganti CLB dengan ALB (Application Load Balancer)?

Langkah migrasi:

  1. Ganti ALIYUN::SLB::LoadBalancer dengan ALIYUN::ALB::LoadBalancer.

  2. Gunakan ALIYUN::ALB::ServerGroup untuk membuat grup server dan menambahkan instans ECS backend.

  3. Gunakan ALIYUN::ALB::Listener + ALIYUN::ALB::Rule untuk mengonfigurasi routing HTTP/HTTPS Lapisan 7.

  4. ALB secara native mendukung akses jaringan publik — tidak perlu mengasosiasikan EIP secara terpisah.

P5: Bagaimana cara menggunakan VPC yang sudah ada alih-alih membuat yang baru?

Solusi: Hapus VPC dan vSwitch dari Resources dan teruskan sebagai parameter:

Parameters:
  ExistingVpcId:
    Type: String
    Label:
      zh-cn: ID VPC yang Ada
      en: Existing VPC ID
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
  ExistingVSwitchId:
    Type: String
    Label:
      zh-cn: ID vSwitch yang Ada
      en: Existing vSwitch ID
    AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      VpcId: ${ExistingVpcId}

Untuk masalah penerapan umum lainnya, lihat FAQ.

Referensi