All Products
Search
Document Center

Resource Orchestration Service:Menyebarkan kluster ECS dengan penskalaan otomatis menggunakan ROS

Last Updated:Sep 16, 2026

Gunakan Alibaba Cloud Resource Orchestration Service (ROS) untuk menyediakan jaringan VPC, sekelompok Instance ECS, dan grup Auto Scaling (ESS) dari satu templat YAML. Tambahkan Instance ECS ke dalam grup penskalaan agar kapasitasnya dapat diperluas atau dikurangi secara otomatis berdasarkan beban bisnis. Tutorial ini cocok untuk skenario yang memerlukan manajemen elastis kluster server, seperti aplikasi web dan layanan mikro.

Ikhtisar solusi

Skenario bisnis

Buat Instance ECS secara batch di Alibaba Cloud Virtual Private Cloud (VPC) dan tambahkan ke grup penskalaan. Setelah Anda mengonfigurasi aturan penskalaan, grup penskalaan akan menambah atau mengurangi jumlah Instance ECS berdasarkan beban bisnis, sehingga memberikan manajemen elastis terhadap kluster server.

Sumber daya yang dibuat

No.

Nama sumber daya

Tipe sumber daya ROS

Tujuan

1

VPC

ALIYUN::ECS::VPC

Menyediakan lingkungan jaringan terisolasi.

2

VSwitch

ALIYUN::ECS::VSwitch

Mengalokasikan Blok CIDR subnet dan menentukan zona dalam VPC.

3

SecurityGroup

ALIYUN::ECS::SecurityGroup

Mengontrol aturan akses jaringan inbound dan outbound untuk Instance ECS.

4

ECS InstanceGroup

ALIYUN::ECS::InstanceGroup

Membuat Instance ECS awal secara batch.

5

ScalingGroup

ALIYUN::ESS::ScalingGroup

Mengelola kebijakan skalabilitas elastis (jumlah instans minimum dan maksimum).

6

ScalingConfiguration

ALIYUN::ESS::ScalingConfiguration

Menentukan templat spesifikasi ECS yang digunakan saat skala keluar.

7

ScalingGroupEnable

ALIYUN::ESS::ScalingGroupEnable

Mengaktifkan grup penskalaan dan menambahkan Instance ECS yang sudah ada ke dalamnya.

Hasil yang diharapkan setelah penerapan

Setelah templat berhasil diterapkan, Anda akan memiliki:

  • Lingkungan jaringan VPC lengkap yang mencakup VPC, VSwitch, dan security group.

  • Sekelompok Instance ECS. (Jumlahnya diparameterisasi oleh ECSInstanceGroupCount, default 3.)

  • Grup penskalaan yang diaktifkan dengan konfigurasi penskalaan untuk skala keluar otomatis.

  • Semua Instance ECS ditambahkan ke grup penskalaan.

Diagram Arsitektur

使用伸缩组管理多台云服务器-架构图

Prasyarat

Sebelum memulai, pastikan hal berikut:

  1. Akun dan izin: Akun Alibaba Cloud yang memiliki izin untuk membuat sumber daya di ECS, ESS (Elastic Scaling), dan VPC.

  2. Persiapan pengetahuan: Pengetahuan dasar tentang sintaksis dan struktur templat ROS. Untuk detailnya, lihat Panduan cepat untuk templat.

Tutorial penulisan templat

Tutorial ini menunjukkan proses penulisan templat dalam dua tahap:

  • Tahap 1 (versi dasar): menggunakan nilai parameter tetap dan fokus pada pemahaman definisi dan dependensi sumber daya.

  • Tahap 2 (versi lanjutan): memparametrisasi semua konfigurasi variabel dan menambahkan penyaringan parameter dinamis serta pengelompokan parameter.

Tahap 1: Templat dasar — mendefinisikan sumber daya dan dependensinya

Langkah 1: Definisikan sumber daya jaringan dasar (VPC + VSwitch + Security group)

Sumber daya jaringan merupakan fondasi bagi semua sumber daya lain dan harus dibuat terlebih dahulu.

Resources:
  # ============================================================
  # Lapisan jaringan dasar: VPC → VSwitch → SecurityGroup
  # ============================================================
  
  Vpc:
    Type: ALIYUN::ECS::VPC  # Membuat VPC
    Properties:
      CidrBlock: 192.168.0.0/16  # Blok CIDR VPC, menyediakan 65.534 alamat IP pribadi
      VpcName:
        Ref: ALIYUN::StackName  # Parameter semu: menggunakan nama stack sebagai nama VPC

  VSwitch:
    Type: ALIYUN::ECS::VSwitch  # Membuat VSwitch (subnet) di dalam VPC
    Properties:
      VSwitchName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc  # Ref mengembalikan VpcId dari Vpc (dependensi implisit, sehingga ROS membuat Vpc terlebih dahulu)
      ZoneId: cn-beijing-h # Contoh ini menggunakan zona H di wilayah China (Beijing)
      CidrBlock: 192.168.0.0/24  # Blok CIDR subnet, harus merupakan subset dari blok CIDR VPC

  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup  # Membuat security group
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc  # Mengikat security group ke VPC yang sama
      # Aturan inbound: contoh ini mengizinkan seluruh lalu lintas inbound demi kesederhanaan. Batasi port sesuai kebutuhan di lingkungan produksi.
      SecurityGroupIngress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          SourceCidrIp: 0.0.0.0/0
          NicType: intranet

Poin penting:

  • Pengaturan kustom seperti VpcName, VSwitchName, dan SecurityGroupName dapat dikonfigurasi dengan parameter semu, sehingga Anda dapat dengan cepat mengidentifikasi sumber daya yang diterapkan oleh stack tertentu setelah penerapan.

  • Aturan akses SecurityGroup dapat disesuaikan berdasarkan kebutuhan bisnis Anda. Misalnya:

    • Untuk mengakses layanan web dari Internet, buka port inbound HTTP 80 atau 8080 di security group.

    • Untuk login ke server melalui SSH, buka port inbound 22 di security group.

Langkah 2: Definisikan sumber daya grup Instance ECS

ALIYUN::ECS::InstanceGroup membuat beberapa Instance ECS dengan konfigurasi yang sama sekaligus, yang lebih efisien daripada mendeklarasikan ALIYUN::ECS::Instance berulang kali.

Resources:
  # ============================================================
  # Lapisan komputasi: membuat Instance ECS secara batch
  # ============================================================

  EcsInstanceGroup:
    Type: ALIYUN::ECS::InstanceGroup  # Membuat Instance ECS secara batch
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7_9_x64_20G_alibase_20220727.vhd  # Citra CentOS 7.9
      AllocatePublicIP: false  # Tidak mengalokasikan alamat IP publik
      InstanceType: ecs.c5.large  # Tipe instans: 2 vCPU, 4 GiB
      SystemDiskSize: 200  # Disk sistem 200 GiB
      SystemDiskCategory: cloud_essd  # Disk cloud ESSD
      MaxAmount: 3  # Membuat 3 Instance ECS
      Password: <YourPassword>  # Ganti dengan password aktual saat penerapan (harus mengandung huruf kapital, huruf kecil, angka, dan karakter khusus)
      InstanceName:  # Nama instans: nama stack ditambah nomor urut, misalnya mystack-0001
        Fn::Sub:
           - ${StackName}-[1,4]
           - StackName:
               Ref: ALIYUN::StackName

Poin penting:

  • ALIYUN::ECS::InstanceGroup menggunakan properti MaxAmount untuk menentukan jumlah Instance ECS yang akan dibuat.

  • Fungsi Fn::Sub menggabungkan string. [1,4] adalah placeholder nomor urut khusus ROS yang menunjukkan angka empat digit yang bertambah dari 1, seperti 0001 dan 0002.

  • Atribut output InstanceIds dari sumber daya ini adalah daftar ID Instance ECS, yang dapat direferensikan oleh grup penskalaan.

Langkah 3: Definisikan sumber daya grup penskalaan (Grup penskalaan+Konfigurasi penskalaan+Aktifkan konfigurasi penskalaan)

Grup penskalaan bekerja melalui tiga sumber daya: ScalingGroup mendefinisikan kebijakan penskalaan, ScalingConfiguration mendefinisikan templat ECS yang digunakan saat skala keluar, dan ScalingGroupEnable mengaktifkan grup penskalaan serta menambahkan instans yang sudah ada ke dalamnya.

Resources:
  # ============================================================
  # Lapisan Auto Scaling: grup penskalaan + konfigurasi penskalaan + aktifkan grup penskalaan
  # ============================================================
  
  EssInstanceScalingGroup:
    Type: ALIYUN::ESS::ScalingGroup  # Membuat grup penskalaan
    Properties:
      ScalingGroupName:
        Ref: ALIYUN::StackName
      RemovalPolicys:
        - NewestInstance  # Kebijakan penskalaan masuk: menghapus instans yang paling baru dibuat terlebih dahulu
      MinSize: 3  # Grup penskalaan mempertahankan minimal 3 instans
      MaxSize: 50  # Grup penskalaan dapat memperluas hingga maksimal 50 instans
      VSwitchId:
        Ref: VSwitch  # Mengikat grup penskalaan ke VSwitch (menentukan lokasi jaringan instans yang ditambahkan saat skala keluar)
      DefaultCooldown: 300  # Periode cooldown 300 detik mencegah penskalaan terlalu sering

  EssInstanceScalingConfiguration:
    Type: ALIYUN::ESS::ScalingConfiguration  # Konfigurasi penskalaan (templat ECS yang digunakan saat skala keluar)
    Properties:
      SecurityGroupId:
        Ref: EcsSecurityGroup
      ScalingGroupId:
        Ref: EssInstanceScalingGroup  # Mengasosiasikan dengan grup penskalaan yang didefinisikan di atas
      ScalingConfigurationName:
        Fn::Sub: sc-${ALIYUN::StackName}  # Fn::Sub menggantikan variabel parameter semu secara langsung
      InstanceType: ecs.c5.large  # Tipe instans ECS yang dibuat saat skala keluar (harus sesuai dengan Instance ECS awal)
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 200
      ImageId: centos_7_9_x64_20G_alibase_20220727.vhd  # Citra yang digunakan saat skala keluar (harus sesuai dengan Instance ECS awal)

  EssInstanceScalingGroupEnable:
    Type: ALIYUN::ESS::ScalingGroupEnable  # Mengaktifkan grup penskalaan
    Properties:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        Ref: EssInstanceScalingConfiguration  # Menentukan konfigurasi penskalaan yang berlaku
      InstanceIds:
        # Menambahkan Instance ECS yang dibuat di Langkah 2 ke grup penskalaan
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds  # Mendapatkan daftar semua ID instans dari InstanceGroup
      ScalingGroupId:
        Ref: EssInstanceScalingGroup

Poin penting:

  • Atur MinSize grup penskalaan dengan nilai yang sama seperti ECSInstanceGroupCount (jumlah instans yang dibuat awal) untuk mencegah penskalaan masuk dipicu segera setelah grup diaktifkan.

  • Anda dapat menambahkan aturan penskalaan (ALIYUN::ESS::ScalingRule) dan tugas alarm (ALIYUN::ESS::AlarmTask) ke grup penskalaan untuk menerapkan penskalaan otomatis berdasarkan metrik seperti penggunaan CPU dan penggunaan memori.

  • Perbedaan antara Ref dan Fn::GetAtt:

    • Ref mengembalikan identifier utama sumber daya, seperti VpcId dari VPC.

    • Fn::GetAtt mengembalikan atribut terkait sumber daya, seperti InstanceIds dari EcsInstanceGroup.

Versi dasar — templat lengkap

Berikut adalah templat lengkap yang siap pakai yang menggabungkan ketiga langkah sebelumnya:

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: 创建VPC网络环境,批量部署ECS实例并加入伸缩组,实现弹性扩缩容管理
  en: Create VPC network, deploy ECS instance group and manage them with ESS scaling group

Resources:
  # === lapisan jaringan dasar ===
  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: '-1/-1'
          Priority: 1
          IpProtocol: all
          SourceCidrIp: 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_9_x64_20G_alibase_20220727.vhd
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 200
      SystemDiskCategory: cloud_essd
      MaxAmount: 3
      Password: <YourPassword>  
      InstanceName:
        Fn::Sub:
           - ${StackName}-[1,4]
           - StackName:
               Ref: ALIYUN::StackName

  # === Lapisan ESS ===
  EssInstanceScalingGroup:
    Type: ALIYUN::ESS::ScalingGroup
    Properties:
      ScalingGroupName:
        Ref: ALIYUN::StackName
      RemovalPolicys:
        - NewestInstance
      MinSize: 3
      MaxSize: 50
      VSwitchId:
        Ref: VSwitch
      DefaultCooldown: 300

  EssInstanceScalingConfiguration:
    Type: ALIYUN::ESS::ScalingConfiguration
    Properties:
      SecurityGroupId:
        Ref: EcsSecurityGroup
      ScalingGroupId:
        Ref: EssInstanceScalingGroup
      ScalingConfigurationName:
        Fn::Sub: sc-${ALIYUN::StackName}
      InstanceType: ecs.c5.large
      SystemDiskCategory: cloud_essd
      SystemDiskSize: 200
      ImageId: centos_7_9_x64_20G_alibase_20220727.vhd

  EssInstanceScalingGroupEnable:
    Type: ALIYUN::ESS::ScalingGroupEnable
    Properties:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        Ref: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      ScalingGroupId:
        Ref: EssInstanceScalingGroup

Outputs:
  ECSInstanceIds:
    Label: Daftar ID Instance ECS
    Value:
      Fn::GetAtt:
        - EcsInstanceGroup
        - InstanceIds

Poin penting:

  • Setelah templat membuat sumber daya, Anda dapat langsung mengkueri atribut internal sumber daya tersebut dari bagian Outputs templat, seperti daftar ID Instance ECS.

Tahap 2: Templat lanjutan — parameterisasi dan konfigurasi dinamis

Dalam templat dasar, properti seperti InstanceType, SystemDiskCategory, dan ImageId dari Instance ECS serta MaxSize grup penskalaan menggunakan nilai tetap. Untuk menggunakan kembali templat di wilayah berbeda atau dengan spesifikasi berbeda, Anda harus mengubah templat berulang kali. Selain itu, parameter dalam templat sering saling bergantung. Misalnya, tipe instans ECS dibatasi oleh zona (inventaris tipe instans berbeda di tiap zona), dan kategori disk sistem dibatasi oleh zona dan tipe instans. Jika Anda menentukan parameter ini secara manual, Anda dapat dengan mudah memilih kombinasi yang tidak tersedia, sehingga menyebabkan penerapan gagal.

Optimasi berikut sangat meningkatkan fleksibilitas dan kemampuan guna ulang templat:

  • Parameterisasi (Parameters): ekstrak konfigurasi variabel sebagai parameter dan tentukan secara dinamis saat penerapan.

  • Penyaringan parameter dinamis (AssociationProperty): biarkan konsol ROS secara otomatis menyaring opsi yang tersedia berdasarkan parameter yang telah dipilih.

  • Pengelompokan parameter (Metadata): tampilkan parameter dalam kelompok logis di konsol untuk meningkatkan pengalaman input.

Diagram dependensi parameter

Contoh berikut menggunakan tipe instans ECS dan kategori disk sistem untuk menunjukkan rantai dependensi antarparameter:

VSwitchZoneId (zona)  ← parameter dasar, tanpa prasyarat
    ├──→ ECSInstanceType (tipe instans ECS)
    │             Bergantung pada: ZoneId
    │
    └──→ ECSDiskCategory (kategori disk sistem)
                  Bergantung pada: ZoneId + InstanceType

Logika inti: pilih zona terlebih dahulu, lalu saring tipe instans ECS yang tersedia di zona tersebut, dan akhirnya saring kategori disk yang didukung oleh zona dan tipe instans yang dipilih. Setiap langkah hanya menampilkan opsi yang valid dalam kondisi saat ini, sehingga mencegah kombinasi yang tidak valid.

Penjelasan AssociationProperty

1. VSwitchZoneId — zona (parameter dasar)

Atur AssociationProperty ke ALIYUN::ECS::ZoneId untuk menampilkan semua zona di wilayah saat ini. Contoh:

VSwitchZoneId:
    Type: String
    Label:
      zh-cn: 交换机可用区
      en: VSwitch Availability Zone
    Description:
      zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
      en: Select the availability zone for VSwitch, ECS and scaling group will be deployed here
    AssociationProperty: ALIYUN::ECS::ZoneId

Parameter ini menjadi dasar penyaringan untuk semua parameter berikutnya. Setelah Anda memilih zona, daftar opsi parameter lain diperbarui sesuai.

2. ECSInstanceType — tipe instans ECS

Atur AssociationProperty ke ALIYUN::ECS::Instance::InstanceType untuk menampilkan tipe instans ECS yang tersedia, dan asosiasikan ${VSwitchZoneId} untuk menyaring tipe instans yang tersedia di zona yang dipilih. Contoh:

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

Inventaris tipe instans berbeda-beda per zona. Tanpa penyaringan, Anda mungkin memilih tipe yang stoknya habis di zona tersebut, sehingga menyebabkan kegagalan pembuatan.

3. ECSDiskCategory — kategori disk sistem

Atur AssociationProperty ke ALIYUN::ECS::Disk::SystemDiskCategory untuk menampilkan kategori disk sistem yang tersedia, dan asosiasikan ${VSwitchZoneId} dan ${ECSInstanceType} untuk menyaring kategori disk sistem yang didukung oleh zona dan tipe instans ECS yang dipilih. Contoh:

ECSDiskCategory:
    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: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}

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

Contoh penyaringan parameter dinamis

Contoh berikut menunjukkan efek konfigurasi AssociationProperty untuk mendapatkan tipe instans ECS dan kategori disk secara dinamis:

Parameters:
  VSwitchZoneId:
    Type: String
    Label:
      zh-cn: 交换机可用区
      en: VSwitch Availability Zone
    Description:
      zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
      en: Select the availability zone for VSwitch, ECS and scaling group will be deployed here
    AssociationProperty: ALIYUN::ECS::ZoneId
  ECSInstanceType:
    Type: String
    Label:
      zh-cn: ECS实例规格
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
  ECSDiskCategory:
    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: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}

Cara kerja AssociationProperty

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

  1. Pilih zona (VSwitchZoneId).

  2. Daftar drop-down tipe instans ECS diperbarui secara otomatis dan hanya menampilkan tipe instans yang tersedia di zona tersebut.

  3. Setelah Anda memilih tipe instans ECS, daftar drop-down kategori disk sistem diperbarui secara otomatis dan hanya menampilkan kategori disk yang didukung oleh zona dan tipe instans tersebut.

Dengan cara ini, setiap langkah hanya menampilkan opsi yang tersedia dalam kondisi saat ini, sehingga mencegah kegagalan penerapan akibat kombinasi parameter yang tidak valid.

Kelompok parameter Metadata

Dengan mengonfigurasi ALIYUN::ROS::Interface di dalam Metadata, Anda dapat membagi parameter ke dalam kelompok logis, masing-masing dengan judul. Konsol menampilkan parameter berdasarkan kelompok, yang sangat meningkatkan pengalaman input.

Struktur sintaksis Metadata
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:           # Daftar kelompok parameter (wajib)
      - Parameters:            # Daftar nama parameter dalam kelompok (wajib)
          - Parameter1
          - Parameter2
        Label:                 # Judul kelompok (wajib)
          default:
            zh-cn: 中文标题
            en: English Title

Aturan sintaksis Metadata:

  • ParameterGroups, Parameters, dan Label semuanya wajib.

  • Nama parameter yang tercantum dalam Parameters harus persis sama dengan nama parameter yang didefinisikan di bagian Parameters templat.

  • Parameter yang tidak muncul di kelompok mana pun akan ditampilkan di area tanpa kelompok di konsol.

Desain kelompok parameter

Templat ini membagi sembilan parameter ke dalam tiga kelompok berdasarkan tipe sumber daya:

┌────────────────────────────────────────────────────┐
│  Konfigurasi jaringan                              │
│  ├── Zona VSwitch (VSwitchZoneId)                  │
│  ├── Blok CIDR VPC (VpcCidrBlock)                  │
│  └── Blok CIDR VSwitch (VSwitchCidrBlock)          │
├────────────────────────────────────────────────────┤
│  Konfigurasi Instance ECS                          │
│  ├── Tipe instans ECS (ECSInstanceType)            │
│  ├── ID citra ECS (ECSImageId)                     │
│  ├── Kategori disk sistem (ECSDiskCategory)        │
│  ├── Kata sandi Instance ECS (EcsInstancePassword) │
│  └── Jumlah Instance ECS (ECSInstanceGroupCount)   │
├────────────────────────────────────────────────────┤
│  Konfigurasi grup penskalaan ESS                   │
│  └── Jumlah instans maksimum (ESSGroupMaxSize)     │
└────────────────────────────────────────────────────┘
Contoh pengelompokan Metadata
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - VSwitchZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: 基础网络配置
            en: Network Configuration
      - Parameters:
          - ECSInstanceType
          - ECSDiskCategory
          - ECSImageId
          - EcsInstancePassword
          - ECSInstanceGroupCount
        Label:
          default:
            zh-cn: ECS实例配置
            en: ECS Instance Configuration
      - Parameters:
          - ESSGroupMaxSize
        Label:
          default:
            zh-cn: ESS伸缩组配置
            en: Scaling Group Configuration

Versi lanjutan — templat lengkap

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: >-
    参数化模板:批量创建ECS实例并通过弹性伸缩组管理,支持自动扩缩容。
    支持动态选择可用区、实例规格、磁盘类型和镜像,适用于多地域复用。
  en: >-
    Parameterized template: Create ECS instance group managed by ESS scaling group.
    Supports dynamic selection of zone, instance type, disk category and image.

Parameters:
  # ─── parameter jaringan dasar ───
  VSwitchZoneId:
    Type: String
    Label:
      zh-cn: 交换机可用区
      en: VSwitch Availability Zone
    Description:
      zh-cn: 选择交换机所在的可用区,ECS和伸缩组将部署在此可用区
      en: Select the availability zone for VSwitch, ECS and scaling group will be deployed here
    AssociationProperty: ALIYUN::ECS::ZoneId

  VpcCidrBlock:
    Type: String
    Label:
      zh-cn: VPC网段
      en: VPC CIDR Block
    Description:
      zh-cn: VPC的IP地址段范围。推荐使用 10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16
      en: VPC IP address range. Recommended 10.0.0.0/8, 172.16.0.0/12, or 192.168.0.0/16
    Default: 192.168.0.0/16

  VSwitchCidrBlock:
    Type: String
    Label:
      zh-cn: 交换机网段
      en: VSwitch CIDR Block
    Description:
      zh-cn: 必须是VPC网段的子网段,且不能与同VPC下其他交换机网段重叠
      en: Must be a subnet of VPC CIDR and not overlap with other VSwitches
    Default: 192.168.0.0/24

  # ─── parameter Instance ECS ───
  ECSInstanceType:
    Type: String
    Label:
      zh-cn: ECS实例规格
      en: ECS Instance Type
    Description:
      zh-cn: 选择ECS实例规格。列表已根据可用区自动过滤可用规格。
      en: Select ECS instance type. List is filtered by selected availability zone.
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}

  ECSDiskCategory:
    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: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}

  ECSImageId:
    Type: String
    Label:
      zh-cn: ECS镜像ID
      en: Image ID
    Description:
      zh-cn: 选择ECS实例使用的操作系统镜像
      en: Select the OS image for ECS instances
    AssociationProperty: ALIYUN::ECS::Image::ImageId

  ECSInstanceGroupCount:
    Type: Number
    Label:
      zh-cn: ECS初始实例数量
      en: Initial Instance Count
    Description:
      zh-cn: 初始创建的ECS实例数量,这些实例将加入伸缩组管理
      en: Number of ECS instances to create initially, they will be added to scaling group
    Default: 3

  EcsInstancePassword:
    Type: String
    NoEcho: true
    Label:
      zh-cn: ECS实例密码
      en: ECS Instance Password
    Description:
      zh-cn: 长度8-30位,需包含大写字母、小写字母、数字、特殊字符中的至少三种
      en: Length 8-30, must contain at least three of uppercase, lowercase, digits, special characters
    MinLength: 8
    MaxLength: 30
    AssociationProperty: ALIYUN::ECS::Instance::Password

  # ─── parameter grup penskalaan ───
  ESSGroupMaxSize:
    Type: Number
    Label:
      zh-cn: 伸缩组最大实例数
      en: Scaling Group Max Size
    Description:
      zh-cn: 伸缩组内ECS实例的最大数量,达到此上限后不再自动扩容
      en: Maximum number of ECS instances in scaling group
    Default: 50

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: VSwitchZoneId
      CidrBlock:
        Ref: VSwitchCidrBlock

  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupIngress:
        - PortRange: 8080/8080
          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:
      InstanceName:
        Fn::Sub:
           - ${StackName}-[1,4]
           - StackName:
               Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      SecurityGroupId:
        Ref: EcsSecurityGroup
      SystemDiskCategory:
        Ref: ECSDiskCategory
      SystemDiskSize: 200
      MaxAmount:
        Ref: ECSInstanceGroupCount
      ImageId:
        Ref: ECSImageId
      InstanceType:
        Ref: ECSInstanceType
      Password:
        Ref: EcsInstancePassword
      AllocatePublicIP: false

  # === Lapisan ESS ===
  EssInstanceScalingGroup:
    Type: ALIYUN::ESS::ScalingGroup
    Properties:
      ScalingGroupName:
        Ref: ALIYUN::StackName
      RemovalPolicys:
        - NewestInstance
      MinSize:
        Ref: ECSInstanceGroupCount
      MaxSize:
        Ref: ESSGroupMaxSize
      VSwitchId:
        Ref: VSwitch
      DefaultCooldown: 300

  EssInstanceScalingConfiguration:
    Type: ALIYUN::ESS::ScalingConfiguration
    Properties:
      SecurityGroupId:
        Ref: EcsSecurityGroup
      ScalingGroupId:
        Ref: EssInstanceScalingGroup
      ScalingConfigurationName:
        Fn::Sub: sc-${ALIYUN::StackName}
      InstanceType:
        Ref: ECSInstanceType
      SystemDiskCategory:
        Ref: ECSDiskCategory
      SystemDiskSize: 200
      ImageId:
        Ref: ECSImageId
      InstanceName:
        Fn::Sub:
           - ${StackName}-[index,1,4]
           - StackName:
               Ref: ALIYUN::StackName

  EssInstanceScalingGroupEnable:
    Type: ALIYUN::ESS::ScalingGroupEnable
    Properties:
      ScalingRuleArisExecuteVersion: '1'
      ScalingConfigurationId:
        Ref: EssInstanceScalingConfiguration
      InstanceIds:
        Fn::GetAtt:
          - EcsInstanceGroup
          - InstanceIds
      ScalingGroupId:
        Ref: EssInstanceScalingGroup

Outputs:
  ECSInstanceIds:
    Label: Daftar ID Instans ECS
    Value:
      Fn::GetAtt:
        - EcsInstanceGroup
        - InstanceIds

# === Metadata ===
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - VSwitchZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: 基础网络配置
            en: Network Configuration
      - Parameters:
          - ECSInstanceType
          - ECSDiskCategory
          - ECSImageId
          - EcsInstancePassword
          - ECSInstanceGroupCount
        Label:
          default:
            zh-cn: ECS实例配置
            en: ECS Instance Configuration
      - Parameters:
          - ESSGroupMaxSize
        Label:
          default:
            zh-cn: 伸缩组配置
            en: Scaling Group Configuration

Referensi cepat fungsi bawaan ROS yang digunakan dalam templat ini

Fungsi

Contoh sintaksis

Penggunaan dalam templat ini

Deskripsi

Ref

Ref: MyVpc

Merujuk nilai parameter atau identifier utama sumber daya.

Merujuk parameter mengembalikan nilainya; merujuk sumber daya mengembalikan identifier utamanya.

Fn::GetAtt

Fn::GetAtt: [EcsInstanceGroup, InstanceIds]

Mendapatkan daftar ID instans dari grup Instance ECS.

Mendapatkan atribut output sumber daya setelah pembuatan (bukan identifier utama).

Fn::Sub

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

Menggabungkan nama konfigurasi penskalaan.

Gunakan ${Var} dalam string templat untuk merujuk variabel atau parameter semu.

Penerapan

Parameter penerapan

Parameter wajib (harus ditentukan saat penerapan)

Parameter

Deskripsi

Batasan

VSwitchZoneId

ID zona.

Dipilih secara dinamis di konsol.

ECSInstanceType

Tipe instans ECS.

Tipe instans yang tersedia disaring secara otomatis berdasarkan zona.

ECSDiskCategory

Kategori disk sistem ECS.

Disaring secara otomatis berdasarkan zona dan tipe instans.

ECSImageId

ID citra ECS.

Dipilih secara dinamis di konsol.

Parameter opsional (memiliki nilai default dan dapat dikosongkan)

Parameter

Nilai default

Deskripsi

VpcCidrBlock

192.168.0.0/16

Blok CIDR VPC.

VSwitchCidrBlock

192.168.0.0/24

Blok CIDR subnet VSwitch.

ECSInstanceGroupCount

3

Jumlah Instance ECS yang dibuat awal.

ESSGroupMaxSize

50

Jumlah instans maksimum dalam grup penskalaan ESS.

EcsInstancePassword

Tidak ada

Kata sandi login Instance ECS. Panjangnya harus 8–30 karakter dan mengandung minimal tiga jenis karakter berikut: huruf kapital, huruf kecil, angka, dan 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 kode IaC ROS

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
Deploy a group of ECS instances and manage them with an Auto Scaling group. Requirements:
1. Use a newly created VPC and VSwitch.
2. Create 3 ECS instances initially and add them to the scaling group.
3. Set the maximum number of instances in the scaling group to 50 and the minimum number to 3.
4. Set the scale-in policy to remove the newest instances first.
5. Open inbound port 8080 in the security group.
6. Configure VSwitchZoneId, ECSInstanceType, ECSDiskCategory, and ECSImageId with AssociationProperty so that they are dynamically filtered in the console.

FAQ

Q1: Penerapan gagal dengan pesan "The specified InstanceType is not available in the zone"

Penyebab: tipe instans ECS yang dipilih stoknya habis di zona yang ditentukan.

Solusi:

  • Dalam templat lanjutan, AssociationProperty secara otomatis menyaring tipe instans yang tersedia, sehingga menghindari masalah ini.

  • Jika Anda menggunakan templat dasar, kunjungi harga Elastic Compute Service (ECS) untuk memeriksa inventaris tipe instans di zona target, atau pilih zona lain.

Q2: Grup penskalaan langsung memicu penskalaan masuk setelah diaktifkan

Penyebab: nilai MinSize lebih besar daripada jumlah instans yang benar-benar bergabung ke grup, atau instans gagal bergabung.

Solusi:

  1. Pastikan nilai ECSInstanceGroupCount lebih besar dari atau sama dengan MinSize grup penskalaan.

  2. Periksa apakah Instance ECS berada dalam status Running.

  3. Konfirmasi bahwa instans dan grup penskalaan berada di VPC atau VSwitch yang sama.

Q3: Instance ECS baru yang dibuat saat skala keluar memiliki konfigurasi yang tidak diharapkan

Penyebab: konfigurasi dalam ScalingConfiguration, seperti InstanceType dan ImageId, tidak konsisten dengan konfigurasi Instance ECS awal.

Solusi:

  • Dalam templat lanjutan, parameter ScalingConfiguration, seperti InstanceType dan ImageId, sudah mereferensikan parameter yang sama dengan EcsInstanceGroup, sehingga menjaga konsistensi konfigurasi skala keluar.

  • Jika Anda perlu melakukan skala keluar dengan konfigurasi berbeda, buat beberapa sumber daya ScalingConfiguration dan kendalikan proporsinya berdasarkan bobot.

Q4: Bagaimana cara menerapkan penskalaan otomatis berdasarkan penggunaan CPU?

Solusi: tambahkan aturan penskalaan dan tugas alarm ke templat:

# Aturan skala keluar: menambahkan 2 instans setiap kali
ScaleOutRule:
  Type: ALIYUN::ESS::ScalingRule
  Properties:
    ScalingGroupId:
      Ref: EssInstanceScalingGroup
    ScalingRuleName: scale-out-2
    ScalingRuleType: SimpleScalingRule
    AdjustmentType: QuantityChangeInCapacity  # Sesuaikan berdasarkan jumlah
    AdjustmentValue: 2  # Tambahkan 2 instans setiap kali

# Pemicu alarm: memicu skala keluar saat penggunaan CPU melebihi 80%
CpuAlarm:
  Type: ALIYUN::ESS::AlarmTask
  Properties:
    AlarmTaskName: cpu-high-alarm
    ScalingGroupId:
      Ref: EssInstanceScalingGroup
    MetricName: CpuUtilization
    Threshold: 80
    ComparisonOperator: '>='
    EvaluationCount: 3  # Hanya memicu setelah 3 sampel berturut-turut melebihi ambang batas
    AlarmActions:
      - Fn::GetAtt:
          - ScaleOutRule
          - ScalingRuleAri

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

Solusi: hapus VPC dan VSwitch dari Resources dan masukkan melalui Parameters:

Parameters:
  ExistingVpcId:
    Type: String
    Label:
      en: Existing VPC ID
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
  ExistingVSwitchId:
    Type: String
    Label:
      en: Existing VSwitch ID
    AssociationProperty: ALIYUN::VPC::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      VpcId: ${ExistingVpcId}

Q6: Bagaimana cara menyambungkan SLB ke grup penskalaan untuk distribusi trafik?

Solusi: tambahkan LoadBalancerIds ke Properties dari ScalingGroup:

EssInstanceScalingGroup:
  Type: ALIYUN::ESS::ScalingGroup
  Properties:
    ScalingGroupName:
      Ref: ALIYUN::StackName
    RemovalPolicys:
      - NewestInstance
    MinSize:
      Ref: ECSInstanceGroupCount
    MaxSize:
      Ref: ESSGroupMaxSize
    VSwitchId:
      Ref: VSwitch
    DefaultCooldown: 300
    LoadBalancerIds:
      - Ref: MyLoadBalancer  # Merujuk Instance SLB yang sudah ada

Saat grup penskalaan menambah atau menghapus instans, instans tersebut secara otomatis ditambahkan ke atau dihapus dari grup server backend SLB.