All Products
Search
Document Center

Resource Orchestration Service:Gunakan instance ECS untuk terhubung ke instance ApsaraDB RDS guna inisialisasi database

Last Updated:Sep 10, 2026

Dalam tutorial ini, Anda menggunakan Resource Orchestration Service (ROS) Alibaba Cloud untuk menyediakan instance Elastic Compute Service (ECS) dan instance ApsaraDB RDS MySQL dalam satu Virtual Private Cloud (VPC), lalu menggunakan Cloud Assistant untuk menjalankan skrip inisialisasi yang mengimpor dataset sampel ke RDS. Di akhir proses, Anda akan memiliki lingkungan ECS + RDS yang berfungsi, dibuat dari satu templat YAML yang dapat diterapkan ulang sesuai kebutuhan.

Ikhtisar solusi

Skenario bisnis

Buat instance Elastic Compute Service (ECS) dan instance ApsaraDB RDS MySQL dalam Alibaba Cloud Virtual Private Cloud (VPC) yang sama. Instance ECS terhubung ke instance RDS melalui jaringan internal VPC, dan Cloud Assistant (RunCommand) secara otomatis menjalankan skrip shell pada instance ECS untuk melakukan inisialisasi database.

Sumber daya yang dibuat

No.

Resource

Jenis sumber daya ROS

Deskripsi

1

VPC

ALIYUN::ECS::VPC

Menyediakan lingkungan jaringan terisolasi. Semua sumber daya diterapkan dalam VPC yang sama.

2

vSwitch

ALIYUN::ECS::VSwitch

Membagi subnet dalam VPC dan menentukan zona.

3

Security group

ALIYUN::ECS::SecurityGroup

Mengontrol lalu lintas inbound dan outbound untuk instance ECS.

4

ECS instance

ALIYUN::ECS::Instance

Node komputasi yang menjalankan skrip inisialisasi database.

5

ApsaraDB RDS MySQL instance

ALIYUN::RDS::DBInstance

Database target yang menyimpan data hasil inisialisasi.

6

Database account

ALIYUN::RDS::Account

Akun logon RDS yang digunakan instance ECS untuk terhubung ke database.

7

Cloud Assistant command

ALIYUN::ECS::RunCommand

Menjalankan skrip shell secara jarak jauh pada instance ECS untuk melakukan inisialisasi database.

Hasil yang diharapkan setelah penerapan

Setelah templat berhasil diterapkan, Anda akan memiliki:

  • Lingkungan jaringan VPC lengkap, termasuk VPC, vSwitch, dan security group.

  • Instance ECS yang terhubung ke jaringan VPC dan security group.

  • Instance ApsaraDB RDS MySQL 8.0 dengan database awal dan akun super.

  • Dataset sampel employees resmi MySQL (sekitar 300.000 record) yang secara otomatis diimpor ke database.

Diagram arsitektur

ECS与RDS架构图

Prasyarat

Sebelum memulai, pastikan hal-hal berikut:

  1. Akun dan izin: Akun Alibaba Cloud dengan izin untuk membuat sumber daya di ECS, ApsaraDB RDS, VPC, dan Cloud Assistant.

  2. Persiapan pengetahuan: Pengetahuan dasar tentang sintaks dan struktur templat ROS. Untuk detailnya, lihat Memulai dengan konten templat.

Tutorial penulisan templat

Tutorial ini membahas templat dalam dua fase:

  • Fase 1 (Dasar): menggunakan nilai parameter tetap sehingga Anda dapat fokus pada definisi sumber daya dan hubungan dependensi.

  • Fase 2 (Advanced): memarameterisasi semua pengaturan yang dapat dikonfigurasi, menambahkan penyaringan parameter dinamis, dan mengelompokkan parameter.

Fase 1: Templat dasar — Definisikan sumber daya dan dependensi

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

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

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

  Vpc:
    Type: ALIYUN::ECS::VPC  # Buat VPC
    Properties:
      CidrBlock: 192.168.0.0/16  # Blok CIDR VPC, mendukung hingga 65.534 IP internal
      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  # Ref mengembalikan VpcId dari Vpc (dependensi implisit; ROS membuat Vpc terlebih dahulu)
      ZoneId: cn-beijing-h  # Contoh ini menggunakan zona H Beijing
      CidrBlock: 192.168.0.0/24  # Blok CIDR subnet; harus merupakan subset dari blok CIDR VPC

  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup  # Buat security group
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc  # Ikat security group ke VPC yang sama
      SecurityGroupIngress:  # Aturan masuk: izinkan semua lalu lintas masuk
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          SourceCidrIp: 0.0.0.0/0
          NicType: intranet

Konsep kunci:

  • Nama kustom seperti VpcName, VSwitchName, dan SecurityGroupName dapat menggunakan parameter semu. Hal ini membantu Anda dengan cepat menemukan sumber daya yang terkait dengan stack setelah penerapan.

  • Aturan security group dapat disesuaikan sesuai kebutuhan bisnis Anda. Misalnya:

    • Untuk mengizinkan akses eksternal ke layanan web, tambahkan aturan masuk untuk membuka Port HTTP 80 atau 8080.

    • Untuk mengizinkan logon SSH, tambahkan aturan masuk untuk membuka port 22.

Langkah 2: Definisikan sumber daya database (Instance RDS + Akun database)

Resources:
  # ============================================================
  # Lapisan database: instance ApsaraDB RDS MySQL + akun database
  # ============================================================

  DBInstance:
    Type: ALIYUN::RDS::DBInstance  # Buat instance ApsaraDB RDS MySQL
    Properties:
      ZoneId: cn-beijing-h
      VpcId:
        Ref: Vpc  # Terapkan RDS dalam VPC yang sama dengan ECS (wajib untuk konektivitas jaringan internal)
      VSwitchId:
        Ref: VSwitch  # Tentukan vSwitch agar ECS dan RDS berada dalam subnet yang sama
      Engine: MySQL  # Mesin database
      EngineVersion: '8.0'  # Versi MySQL
      DBInstanceClass: mysql.n2e.medium.1  # Tipe instans (2 vCPU, 4 GB)
      DBInstanceStorage: 10  # Penyimpanan: 10 GB
      MultiAZ: true  # Penerapan multi-zona untuk ketersediaan lebih tinggi
      DBInstanceNetType: Intranet  # Jenis jaringan internal (jaringan VPC)
      DBMappings:  # Buat database awal
        - CharacterSetName: utf8  # Set karakter
          DBName: employees  # Nama database
      SecurityIPList: 0.0.0.0/0  # Daftar putih RDS (mengizinkan semua IP dalam VPC)

  DBAccount:
    Type: ALIYUN::RDS::Account  # Buat akun database RDS
    Properties:
      DBInstanceId:
        # Fn::GetAtt mengembalikan atribut output dari sumber daya (bukan pengenal utama)
        Fn::GetAtt:
          - DBInstance  # Nama sumber daya logis
          - DBInstanceId  # Nama atribut yang diambil
      AccountPassword: Admin@2791
      AccountType: Super  # Akun super (memiliki semua izin database)
      AccountName: rdsuser  # Nama akun

Konsep kunci:

  • Perbedaan antara Ref dan Fn::GetAtt:

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

    • Fn::GetAtt mengembalikan atribut terkait sumber daya (misalnya, InnerConnectionString dari instance RDS).

Langkah 3: Definisikan sumber daya instance ECS

Resources:
  # ============================================================
  # Lapisan komputasi + inisialisasi: instance ECS + Cloud Assistant untuk inisialisasi database
  # ============================================================

  EcsInstance:
    Type: ALIYUN::ECS::Instance  # Buat instance ECS
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch  # vSwitch yang sama dengan RDS untuk memastikan konektivitas jaringan internal
      ImageId: aliyun_3_x64_20G_alibase  # Citra OS: Alibaba Cloud Linux 3 (rilis yang dipelihara)
      AllocatePublicIP: true
      InstanceType: ecs.c5.large  # Tipe instans: 2 vCPU, 4 GiB
      SystemDiskSize: 40  # Disk sistem: 40 GiB
      SystemDiskCategory: cloud_essd  # SSD Perusahaan (ESSD)
      Password: <REPLACE_WITH_STRONG_PASSWORD>  # 8-30 karakter, kombinasi huruf besar/kecil, angka, dan karakter khusus

  InstanceRunCommand:
    Type: ALIYUN::ECS::RunCommand  # Cloud Assistant: menjalankan perintah jarak jauh pada ECS
    DependsOn:
      - DBAccount  # Dependensi eksplisit: tunggu hingga akun database dibuat sebelum terhubung
    Properties:
      CommandContent:
        # Fungsi Fn::Sub: substitusi variabel string
        # Sintaks: Fn::Sub: [string templat, {variabel: nilai}]
        # Referensikan variabel dalam string templat menggunakan ${variabel}
        Fn::Sub:
          - |
            #!/bin/bash
            # 1. Instal klien MySQL dan tool dekompresi
            yum -y install mariadb unzip
            # 2. Unduh dataset sampel resmi MySQL dari OSS
            wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
            # 3. Ekstrak file data
            unzip /tmp/test_db-master.zip -d /tmp/
            # 4. Terhubung ke database melalui titik akhir internal RDS dan impor SQL
            mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
          - DBConnectString:
              # Ambil string koneksi internal instance RDS
              Fn::GetAtt:
                - DBInstance
                - InnerConnectionString
            DBUsername: rdsuser
            DBPassword: Admin@2791
      Type: RunShellScript  # Jenis perintah: skrip shell
      InstanceIds:  # Daftar instance ECS target
        - Fn::GetAtt:
            - EcsInstance
            - InstanceId
      Timeout: '500'  # Batas waktu eksekusi perintah: 500 detik

Konsep kunci:

  • InnerConnectionString adalah titik akhir koneksi internal VPC yang dihasilkan secara otomatis setelah instance RDS dibuat.

  • Jika AllocatePublicIP: false, instance ECS tidak memiliki IP publik. Untuk mengunduh file dari internet, konfigurasikan Gateway NAT untuk VPC atau atur AllocatePublicIP: true.

  • Dependensi implisit vs eksplisit:

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

    • Gunakan DependsOn (eksplisit) hanya ketika dua sumber daya tidak memiliki hubungan referensi langsung tetapi harus dibuat dalam urutan tertentu.

Catatan

Data inisialisasi dalam contoh ini adalah dataset sampel employees resmi MySQL. Untuk memastikan unduhan stabil, unggah file data ke bucket OSS Anda terlebih dahulu dan ganti URL wget.

Templat dasar lengkap

ROSTemplateFormatVersion: '2015-09-01'
Description: Buat jaringan VPC, terapkan instance ECS dan RDS MySQL, inisialisasi database melalui RunCommand
Parameters:
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: '-1/-1'
          Priority: 1
          IpProtocol: all
          SourceCidrIp: 0.0.0.0/0
          NicType: intranet

  # === Lapisan database ===
  DBInstance:
    Type: ALIYUN::RDS::DBInstance
    Properties:
      ZoneId: cn-beijing-h
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      Engine: MySQL
      EngineVersion: '8.0'
      DBInstanceClass: mysql.n2e.medium.1
      DBInstanceStorage: 200
      MultiAZ: false
      DBInstanceNetType: Intranet
      DBMappings:
        - CharacterSetName: utf8
          DBName: employees
      SecurityIPList: 0.0.0.0/0

  DBAccount:
    Type: ALIYUN::RDS::Account
    DependsOn:
      - DBInstance
    Properties:
      DBInstanceId:
        Fn::GetAtt:
          - DBInstance
          - DBInstanceId
      AccountPassword: Admin@2791
      AccountType: Super
      AccountName: rdsuser

  # === Lapisan komputasi + inisialisasi database ===
  EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: aliyun_3_x64_20G_alibase
      AllocatePublicIP: true
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password: <REPLACE_WITH_STRONG_PASSWORD>  # 8-30 karakter, kombinasi huruf besar/kecil, angka, dan karakter khusus

  InstanceRunCommand:
    Type: ALIYUN::ECS::RunCommand
    DependsOn:
      - DBAccount
    Properties:
      CommandContent:
        Fn::Sub:
          - |
            #!/bin/bash
            yum -y install mariadb unzip
            wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
            unzip /tmp/test_db-master.zip -d /tmp/
            mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
          - DBConnectString:
              Fn::GetAtt:
                - DBInstance
                - InnerConnectionString
            DBUsername: rdsuser
            DBPassword: Admin@2791
      Type: RunShellScript
      InstanceIds:
        - Fn::GetAtt:
            - EcsInstance
            - InstanceId
      Timeout: '500'
Outputs:
  RDSInnerConnectionString:
    Description: Titik akhir internal RDS
    Label: Titik akhir internal RDS
    Value:
      Fn::GetAtt:
        - DBInstance
        - InnerConnectionString
  RDSPort:
    Description: Port RDS
    Label: Port RDS
    Value:
      Fn::GetAtt:
        - DBInstance
        - InnerPort
  ECSPrivateIp:
    Description: Alamat IP internal ECS
    Label: Alamat IP internal ECS
    Value:
      Fn::GetAtt:
        - EcsInstance
        - PrivateIp
  ECSPublicIp:
    Description: Alamat IP publik ECS
    Label: Alamat IP publik ECS
    Value:
      Fn::GetAtt:
        - EcsInstance
        - PublicIp

Konsep kunci:

  • Setelah templat membuat sumber daya, gunakan bagian Outputs untuk mengkueri atribut sumber daya seperti titik akhir internal RDS, port RDS, IP internal ECS, dan IP publik ECS.

Fase 2: Templat advanced — Parameterisasi dan konfigurasi dinamis

Dalam templat dasar, properti seperti InstanceType dan SystemDiskCategory untuk instance ECS serta DBInstanceClass untuk instance RDS menggunakan nilai tetap. Saat Anda menggunakan kembali templat di wilayah berbeda atau dengan spesifikasi berbeda, Anda harus mengedit templat setiap kali. Parameter dalam templat sering kali memiliki hubungan dependensi. Misalnya, tipe instans ECS dibatasi oleh zona (zona berbeda menawarkan tipe berbeda), dan kategori disk sistem selanjutnya dibatasi oleh zona dan tipe instans. Jika Anda memasukkan parameter ini secara manual, Anda dapat dengan mudah memilih kombinasi yang tidak valid sehingga menyebabkan kegagalan penerapan.

Perbaikan berikut membuat templat fleksibel dan dapat digunakan kembali:

  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

Diagram berikut menunjukkan rantai dependensi menggunakan tipe instans ECS, kategori disk sistem, dan tipe instans RDS sebagai contoh:

VSwitchZoneId (zona)  <- Parameter dasar, tanpa prasyarat
|
|-> ECSInstanceType (tipe instans ECS)
|        |             Bergantung pada: ZoneId
|        |
|        |-> ECSDiskCategory (kategori disk sistem)
|                           Bergantung pada: ZoneId + InstanceType
|
|-> DBInstanceClass (tipe instans RDS)
                     Bergantung pada: ZoneId + Engine (nilai tetap)

Pendekatan inti: Pertama pilih zona, lalu saring tipe instans ECS dan RDS sesuai, dan akhirnya saring kategori disk berdasarkan zona ditambah tipe instans ECS. Setiap langkah hanya menampilkan opsi yang tersedia dalam kondisi saat ini, mencegah kombinasi yang tidak valid.

Cara kerja AssociationProperty

1. VSwitchZoneId — Zona (parameter dasar)

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

VSwitchZoneId:
    Type: String
    Label: 
      zh-cn: 交换机可用区
      en: VSwitch Availability Zone
    Description: 
      zh-cn: 选择交换机所在的可用区,ECS 和 RDS 将部署在此可用区
      en: Select the availability zone for VSwitch. ECS and RDS are deployed in this zone.
    AssociationProperty: ALIYUN::ECS::ZoneId

Parameter ini menjadi dasar penyaringan untuk semua parameter berikutnya. Saat zona dipilih, daftar opsi untuk parameter lain akan diperbarui secara otomatis.

2. ECSInstanceType — Tipe instans ECS

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

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

Tipe instans yang tersedia berbeda-beda tergantung zonanya. Tanpa penyaringan, pengguna mungkin memilih tipe yang stoknya habis di zona yang dipilih, sehingga menyebabkan kegagalan pembuatan.

3. ECSDiskCategory — Kategori disk sistem

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

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 bergantung pada zona (beberapa zona tidak mendukung ESSD) dan tipe instans (beberapa tipe hanya mendukung kategori disk tertentu).

4. DBInstanceClass — Tipe instans RDS

Atur AssociationProperty ke ALIYUN::RDS::Instance::InstanceType dan asosiasikan ${VSwitchZoneId} dan Engine: MySQL tetap untuk menyaring tipe instans RDS yang mendukung MySQL di zona yang dipilih:

DBInstanceClass:
    Type: String
    Label: 
      zh-cn: RDS 实例规格
      en: RDS Instance Class
    Description:
      zh-cn: 选择RDS实例规格。列表已根据数据库引擎和可用区自动过滤。
      en: Select RDS instance class, filtered by engine type and zone.
    AssociationProperty: ALIYUN::RDS::Instance::InstanceType
    AssociationPropertyMetadata:
      Engine: MySQL
      ZoneId: ${VSwitchZoneId}
      EngineVersion: '8.0'
      Category: Basic
      InstanceChargeTYpe: Postpaid

Karena skenario ini menggunakan MySQL, mesinnya bersifat tetap. Jika Anda ingin memilih mesin lain, tambahkan parameter Engine dengan AssociationProperty: ALIYUN::RDS::Engine::EngineId dan referensikan ${Engine} di sini.

Templat penyaringan parameter dinamis
Parameters:
  VSwitchZoneId:
    Type: String
    Label:
      zh-cn: 交换机可用区
      en: VSwitch Availability Zone
    Description:
      zh-cn: 选择交换机所在的可用区,ECS和RDS将部署在此可用区
      en: Select the availability zone for VSwitch, ECS and RDS 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}

  DBInstanceClass:
    Type: String
    Label:
      zh-cn: RDS实例规格
      en: RDS Instance Class
    Description:
      zh-cn: 选择RDS实例规格。列表已根据数据库引擎和可用区自动过滤。
      en: Select RDS instance class, filtered by engine type and zone.
    AssociationProperty: ALIYUN::RDS::Instance::InstanceType
    AssociationPropertyMetadata:
      Engine: MySQL
      ZoneId: ${VSwitchZoneId}

Cara kerja penyaringan kaskade AssociationProperty

Saat Anda membuat stack di konsol ROS, pemilihan parameter memicu kaskade:

  1. Memilih zona (VSwitchZoneId).

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

  3. Daftar drop-down tipe instans RDS diperbarui untuk hanya menampilkan tipe yang mendukung MySQL di zona tersebut.

  4. Setelah tipe instans ECS dipilih, daftar drop-down kategori disk sistem diperbarui untuk hanya menampilkan kategori yang didukung oleh kombinasi zona dan tipe instans tersebut.

Hal ini memastikan setiap pilihan hanya menampilkan opsi yang valid dan menghilangkan kegagalan penerapan yang disebabkan oleh kombinasi parameter yang tidak valid.

Pengelompokan parameter Metadata

Gunakan ALIYUN::ROS::Interface dalam Metadata untuk mengorganisir parameter ke dalam kelompok logis dengan label. Konsol menampilkan parameter dalam kelompok, yang meningkatkan pengalaman konfigurasi.

Sintaks Metadata
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:           # Daftar kelompok parameter (wajib)
      - Parameters:            # Parameter dalam kelompok ini (wajib)
          - ParameterName1
          - ParameterName2
        Label:                 # Label kelompok (wajib)
          default:
            en: English label text

Aturan Metadata:

  • ParameterGroups, Parameters, dan Label semuanya wajib.

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

  • Parameter yang tidak ditugaskan ke kelompok mana pun akan muncul di area yang tidak dikelompokkan di konsol.

Templat Metadata:

Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - VSwitchZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            zh-cn: 基础网络配置
            en: Network Configuration
      - Parameters:
          - ECSInstanceType
          - ECSDiskSize
          - ECSDiskCategory
          - EcsInstancePassword
        Label:
          default:
            zh-cn: ECS实例配置
            en: ECS Instance Configuration
      - Parameters:
          - DBInstanceClass
          - DBInstanceStorage
          - DBName
          - DBUsername
          - DBPassword
        Label:
          default:
            zh-cn: 数据库配置
            en: Database Configuration
Desain pengelompokan untuk skenario ini

Templat ini membagi 12 parameter menjadi 3 kelompok:

Kelompok

Parameter yang termasuk

Network Configuration

VSwitch Availability Zone VSwitchZoneId、VPC CIDR Block VpcCidrBlock、vSwitch CIDR block VSwitchCidrBlock

ECS Instance Configuration

ECS Instance Type ECSInstanceType、System Disk Size ECSDiskSize、System Disk Category ECSDiskCategory、ECS Instance Password EcsInstancePassword

Database Configuration

RDS Instance ClassDBInstanceClass、RDS Storage DBInstanceStorage、Database Name DBName、Database Username DBUsername、Database Password DBPassword

Templat advanced lengkap

ROSTemplateFormatVersion: '2015-09-01'
Description: >-
  Templat berparameter: buat ECS dan RDS MySQL dalam VPC, inisialisasi database melalui RunCommand.
  Mendukung pemilihan dinamis zona, tipe instans, dan kategori disk.

Parameters:
  # --- Parameter jaringan ---
  VSwitchZoneId:
    Type: String
    Label: VSwitch Availability Zone
    Description: Select the availability zone for VSwitch. ECS and RDS are deployed in this zone.
    AssociationProperty: ALIYUN::ECS::ZoneId

  VpcCidrBlock:
    Type: String
    Label: VPC CIDR Block
    Description: 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: vSwitch CIDR Block
    Description: Must be a subnet of the VPC CIDR and must not overlap with other vSwitches
    Default: 192.168.0.0/24

  # --- Parameter ECS ---
  ECSInstanceType:
    Type: String
    Label: ECS Instance Type
    Description: Select ECS instance type. The list is filtered by the selected zone.
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}

  ECSDiskSize:
    Type: Number
    Label: System Disk Size (GiB)
    Description: ECS system disk size, range 40-500 GiB
    Default: 40
    MinValue: 40
    MaxValue: 500

  ECSDiskCategory:
    Type: String
    Label: System Disk Category
    Description: "System disk type. Options: cloud_essd (enterprise SSD), cloud_ssd (standard SSD), cloud_efficiency (ultra disk)"
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}

  EcsInstancePassword:
    Type: String
    NoEcho: true
    Label: ECS Instance Password
    Description: Length 8-30, must contain at least three of uppercase letters, lowercase letters, digits, and special characters
    MinLength: 8
    MaxLength: 30

  # --- Parameter database ---
  DBInstanceClass:
    Type: String
    Label: RDS Instance Class
    Description: Select RDS instance class. Filtered by engine type and zone.
    AssociationProperty: ALIYUN::RDS::Instance::InstanceType
    AssociationPropertyMetadata:
      Engine: MySQL
      ZoneId: ${VSwitchZoneId}
      EngineVersion: '8.0'
      Category: Basic
      InstanceChargeType: Postpaid

  DBInstanceStorage:
    Type: Number
    Label: RDS Storage (GB)
    Description: RDS storage size, range 20-2000 GB, increment by 5
    Default: 200
    MinValue: 20
    MaxValue: 2000

  DBName:
    Type: String
    Label: Database Name
    Description: Initial database name. Must start with a letter, alphanumeric only.
    Default: employees
    MinLength: 1
    MaxLength: 64

  DBUsername:
    Type: String
    Label: Database Username
    Description: RDS primary account name. 2-16 lowercase letters, must start with a letter.
    Default: rdsuser
    MinLength: 2
    MaxLength: 16

  DBPassword:
    Type: String
    NoEcho: true
    Label: Database Password
    Description: RDS database user password

Resources:
  # === Lapisan jaringan ===
  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: '-1/-1'
          Priority: 1
          IpProtocol: all
          NicType: intranet
          SourceCidrIp: '0.0.0.0/0'

  # === Lapisan database ===
  DBInstance:
    Type: ALIYUN::RDS::DBInstance
    Properties:
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      Engine: MySQL
      EngineVersion: '8.0'
      DBInstanceClass:
        Ref: DBInstanceClass
      DBInstanceStorage:
        Ref: DBInstanceStorage
      DBInstanceNetType: Intranet
      DBMappings:
        - CharacterSetName: utf8
          DBName:
            Ref: DBName
      SecurityIPList: 0.0.0.0/0

  DBAccount:
    Type: ALIYUN::RDS::Account
    DependsOn:
      - DBInstance
    Properties:
      DBInstanceId:
        Fn::GetAtt:
          - DBInstance
          - DBInstanceId
      AccountPassword:
        Ref: DBPassword
      AccountType: Super
      AccountName:
        Ref: DBUsername

  # === Lapisan komputasi + inisialisasi database ===
  EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: aliyun_3_x64_20G_alibase
      AllocatePublicIP: true  # IP publik diperlukan untuk mengunduh file data dari OSS
      InstanceType:
        Ref: ECSInstanceType
      SystemDiskSize:
        Ref: ECSDiskSize
      SystemDiskCategory:
        Ref: ECSDiskCategory
      Password:
        Ref: EcsInstancePassword

  InstanceRunCommand:
    Type: ALIYUN::ECS::RunCommand
    DependsOn:
      - DBAccount  # Tunggu hingga akun database siap sebelum terhubung
    Properties:
      CommandContent:
        Fn::Sub:
          - |
            #!/bin/bash
            yum -y install mariadb unzip
            wget -P /tmp https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
            unzip /tmp/test_db-master.zip -d /tmp/
            mysql -h${DBConnectString} -P3306 -u${DBUsername} -p${DBPassword} < /tmp/test_db-master/employees.sql
          - DBConnectString:
              Fn::GetAtt:
                - DBInstance
                - InnerConnectionString
            DBUsername:
              Ref: DBUsername
            DBPassword:
              Ref: DBPassword
      Type: RunShellScript
      InstanceIds:
        - Fn::GetAtt:
            - EcsInstance
            - InstanceId
      Timeout: '500'

Outputs:
  RDSInnerConnectionString:
    Description: Titik akhir internal RDS
    Label: Titik akhir internal RDS
    Value:
      Fn::GetAtt:
        - DBInstance
        - InnerConnectionString
  RDSPort:
    Description: Port RDS
    Label: Port RDS
    Value:
      Fn::GetAtt:
        - DBInstance
        - InnerPort
  ECSPrivateIp:
    Description: Alamat IP internal ECS
    Label: Alamat IP internal ECS
    Value:
      Fn::GetAtt:
        - EcsInstance
        - PrivateIp
  ECSPublicIp:
    Description: Alamat IP publik ECS
    Label: Alamat IP publik ECS
    Value:
      Fn::GetAtt:
        - EcsInstance
        - PublicIp

# === Metadata: konfigurasi kelompok parameter konsol ===
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - VSwitchZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
            en: Network Configuration
      - Parameters:
          - ECSInstanceType
          - ECSDiskSize
          - ECSDiskCategory
          - EcsInstancePassword
        Label:
          default:
            en: ECS Instance Configuration
      - Parameters:
          - DBInstanceClass
          - DBInstanceStorage
          - DBName
          - DBUsername
          - DBPassword
        Label:
          default:
            en: Database Configuration

Referensi cepat fungsi bawaan ROS

Fungsi

Contoh sintaks

Penggunaan dalam templat ini

Deskripsi

Ref

Ref: MyVpc

Referensikan nilai parameter atau pengenal utama sumber daya

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

Fn::GetAtt

Fn::GetAtt: [DBInstance, InnerConnectionString]

Ambil titik akhir internal RDS

Mengembalikan atribut output sumber daya setelah pembuatan (bukan pengenal utama)

Fn::Sub

Fn::Sub: [string, {pemetaan variabel}]

Gabungkan informasi koneksi database dalam perintah shell

Gunakan ${Var} untuk mereferensikan variabel dalam string templat

Penerapan

Parameter penerapan

Parameter wajib (harus ditentukan saat penerapan)

Parameter

Tipe

Deskripsi

Batasan

DBPassword

String

Kata sandi pengguna ApsaraDB RDS

Mengikuti kebijakan kata sandi RDS

Parameter opsional (memiliki nilai default, dapat dibiarkan tidak berubah)

Parameter

Nilai default

Deskripsi

VpcCidrBlock

192.168.0.0/16

Rentang alamat CIDR VPC

VSwitchCidrBlock

192.168.0.0/24

CIDR subnet vSwitch

VSwitchZoneId

—

ID zona (dipilih secara dinamis di konsol)

ECSInstanceType

—

Tipe instans ECS (disaring secara dinamis di konsol)

ECSDiskCategory

cloud_essd

Kategori disk sistem ECS

ECSDiskSize

40

Ukuran disk sistem ECS (GiB), rentang 40-500

EcsInstancePassword

—

Kata sandi logon instance ECS. Panjang 8-30 karakter, harus mengandung minimal tiga dari huruf besar, huruf kecil, angka, dan karakter khusus.

DBInstanceClass

—

Tipe instans RDS (disaring secara dinamis di konsol)

DBInstanceStorage

200

Ukuran penyimpanan RDS (GB), rentang 20-2000

DBName

employees

Nama database awal

DBUsername

rdsuser

Nama akun database (2-16 huruf kecil)

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 hingga 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
Terapkan instance ECS dan instance ApsaraDB RDS MySQL. Gunakan Cloud Assistant untuk menginisialisasi database RDS. URL unduhan data inisialisasi adalah: https://ros-userdata-resources.oss-cn-beijing.aliyuncs.com/MySQL/test_db-master.zip
Persyaratan:
1. ECS menggunakan VPC dan vSwitch yang baru dibuat.
2. Security group ECS membuka port inbound 22 dan 3306.
3. Buat akun super RDS baru dan gunakan untuk menginisialisasi database RDS.
4. ECS harus memiliki alamat IP publik.
5. VpcCidrBlock, VSwitchZoneId, VSwitchCidrBlock, ECSInstanceType, dan ECSDiskCategory harus menggunakan AssociationProperty dan AssociationPropertyMetadata untuk penyaringan dinamis di konsol.

FAQ

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

Penyebab: Tipe instans ECS yang dipilih tidak tersedia di zona yang ditentukan.

Solusi:

  • Dalam templat advanced, AssociationProperty secara otomatis menyaring tipe yang tersedia untuk mencegah masalah ini.

  • Jika Anda menggunakan templat dasar, kunjungi tab Harga di halaman produk Elastic Compute Service untuk memastikan ketersediaan tipe instans di zona target, atau beralih ke zona lain.

Pertanyaan 2: Eksekusi perintah Cloud Assistant melebihi batas waktu (RunCommand timeout)

Penyebab: Unduhan file data lambat, atau impor SQL melebihi nilai Timeout yang dikonfigurasi.

Solusi:

  1. Tingkatkan nilai Timeout dalam templat (misalnya, ubah menjadi '600' atau lebih tinggi).

  2. Pastikan instance ECS dapat mengakses internet untuk mengunduh file (AllocatePublicIP: true atau konfigurasikan Gateway NAT).

  3. Simpan file data di bucket OSS di wilayah yang sama dengan instance ECS, dan unduh melalui titik akhir internal.

Pertanyaan 3: ECS tidak dapat terhubung ke RDS, error "Can't connect to MySQL server"

Langkah pemecahan masalah:

  1. Pastikan ECS dan RDS berada dalam VPC dan vSwitch yang sama (dijamin oleh templat).

  2. Periksa apakah daftar putih RDS (SecurityIPList) mencakup rentang IP internal ECS atau diatur ke 0.0.0.0/0.

  3. Pastikan status instance RDS adalah Running (DependsOn: DBAccount memastikan RDS siap sebelum perintah dijalankan).

  4. Periksa apakah aturan security group mengizinkan lalu lintas keluar pada port 3306.

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

Solusi: Hapus VPC dan vSwitch dari Resources dan teruskan sebagai Parameters sebagai gantinya:

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}

Pertanyaan 5: Bagaimana cara memodifikasi templat ini untuk menggunakan PostgreSQL?

Perubahan yang diperlukan:

  1. Ubah sumber daya RDS ke Engine: PostgreSQL dan EngineVersion: '16.0'.

  2. Perbarui DBInstanceClass ke tipe instans PostgreSQL (misalnya, pg.n4.medium.2c).

  3. Ganti perintah mysql dalam RunCommand dengan perintah psql.

  4. Perbarui file SQL inisialisasi agar kompatibel dengan PostgreSQL.

    Untuk masalah penerapan lainnya, lihat FAQ.

Referensi