All Products
Search
Document Center

Resource Orchestration Service:Menghubungkan Instance ECS ke Instance ApsaraDB RDS untuk Inisialisasi Data

Last Updated:Jul 02, 2025

Topik ini menjelaskan cara membuat Template Resource Orchestration Service (ROS). Contoh ini mencakup pembuatan template yang mendeklarasikan sumber daya untuk menghubungkan instance Elastic Compute Service (ECS) ke instance ApsaraDB RDS guna inisialisasi data.

Prasyarat

Anda harus memahami sintaks dan struktur template ROS. Untuk informasi lebih lanjut, lihat Memulai dengan Template.

Skenario Contoh

Anda ingin membuat instance ECS dan instance ApsaraDB RDS dalam virtual private cloud (VPC), serta mendapatkan informasi koneksi database ApsaraDB RDS dari instance ECS untuk inisialisasi data.2023-04-21_10-40-06

Catatan Penggunaan

Untuk detail setiap properti sumber daya, Anda dapat melihat tipe sumber daya dari sumber daya sebelumnya. Untuk informasi lebih lanjut, lihat Lihat Tipe Sumber Daya.

Tipe sumber daya mendeklarasikan properti suatu sumber daya, termasuk tipe, apakah wajib, dan apakah dapat diedit. Jika suatu properti wajib, Anda harus mendeklarasikannya di bagian Properties dari bagian Resources template. Jika opsional, Anda dapat meninggalkannya kosong. Jika suatu properti dapat diedit, Anda dapat memodifikasinya dalam template baru setelah ditentukan untuk sumber daya cloud dalam stack. Kemudian, gunakan template baru untuk memperbarui stack dan sumber daya. Jika tidak, properti tersebut tidak dapat dimodifikasi.

Buat Template

Referensi dokumentasi tipe sumber daya membantu Anda menemukan tipe yang paling sesuai dengan kebutuhan Anda. Untuk informasi lebih lanjut, lihat Daftar Tipe Sumber Daya Berdasarkan Layanan.

Contoh ini menggunakan tipe sumber daya berikut: ALIYUN::ECS::VPC (membuat VPC), ALIYUN::ECS::Instance (membuat instance ECS), ALIYUN::RDS::DBInstance (membuat instance ApsaraDB RDS), ALIYUN::ECS::VSwitch (membuat vSwitch tempat instance ECS terhubung), ALIYUN::ECS::SecurityGroup (membuat grup keamanan), dan ALIYUN::ECS::RunCommand (menjalankan perintah untuk inisialisasi data).

Tipe sumber daya ini dapat ditentukan di bagian Resources template yang ingin Anda buat.

Tentukan Sumber Daya dan Hubungkan Sumber Daya

Tentukan Sumber Daya Jaringan Dasar

Tentukan sumber daya jaringan dasar berikut dalam template: Vpc, VSwitch, dan EcsSecurityGroup. Lakukan operasi berikut:

  • Gunakan fungsi Ref pada parameter pseudo ALIYUN::StackName untuk mendapatkan nama stack. Atur properti ke Ref: ALIYUN::StackName agar nilai properti terkait dengan nama stack. Dalam contoh berikut, nilai VpcName di Vpc dan nilai VSwitchName di VSwitch dikaitkan dengan nama stack. Untuk informasi lebih lanjut, lihat Ref dan ALIYUN::StackName.

  • Gunakan fungsi Fn::Select dan Fn::GetAZs bersama dengan parameter pseudo ALIYUN::Region untuk mendapatkan ID zona pertama dari wilayah tempat stack berada. Dalam contoh berikut, nilai ZoneId di VSwitch diperoleh. Untuk informasi lebih lanjut, lihat Fungsi dan ALIYUN::Region.

Resources:
  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:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet

Tentukan Sumber Daya Database

Tentukan sumber daya database berikut dalam template: DBInstance dan DBAccount. Lakukan operasi berikut:

Gunakan fungsi Fn::GetAtt untuk mengembalikan nilai properti suatu sumber daya. Dalam contoh berikut, nilai DBInstanceId di DBAccount dikembalikan. Untuk informasi lebih lanjut, lihat Fn::GetAtt.

Resources:
  DBInstance:
    Type: ALIYUN::RDS::DBInstance
    Properties:
      ZoneId:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      Engine: MySQL
      EngineVersion: '8.0'
      DBInstanceClass: mysql.n4.medium.2c
      DBInstanceStorage: 10
      MultiAZ: true
      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:
        Ref: DBPassword
      AccountType: Super
      AccountName: rdsuser

Tentukan Sumber Daya ECS

Tentukan sumber daya ECS berikut dalam template: EcsInstance dan InstanceRunCommand. Lakukan operasi berikut:

Gunakan fungsi Fn::Sub untuk mengganti variabel dalam string input dengan perintah yang ingin Anda jalankan. Dalam contoh berikut, perintah ditentukan dalam nilai CommandContent di InstanceRunCommand. Untuk informasi lebih lanjut, lihat Fn::Sub.

Catatan

Data yang diinisialisasi dalam contoh adalah data uji yang disediakan oleh MySQL. Untuk memastikan stabilitas jaringan saat data uji diunduh, disarankan menyimpan data di bucket Object Storage Service (OSS) sebelum melakukan operasi.

Resources:
	EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password:
        Ref: EcsInstancePassword
  InstanceRunCommand:
    Type: ALIYUN::ECS::RunCommand
    Properties:
      CommandContent:
        Fn::Sub:
          - |
            #!/bin/bash
            yum -y install holland-mysqldump.noarch 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 -urdsuser -p${DBPassword} < /tmp/test_db-master/employees.sql
          - DBConnectString:
              Fn::GetAtt:
                - DBInstance
                - InnerConnectionString
            DBPassword:
              Ref: DBPassword
      Type: RunShellScript
      InstanceIds:
        - Fn::GetAtt:
            - EcsInstance
            - InstanceId
      Timeout: '300'

Template Sampel Lengkap

ROSTemplateFormatVersion: '2015-09-01'
Description: { }
Parameters:
  EcsInstancePassword:
    NoEcho: true
    Type: String
    Description:
      en: Kata sandi login server, Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam)
       
    AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
    Label:
      en: Kata Sandi Instance
       
    ConstraintDescription:
      en: Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam).
       
    MinLength: 8
    MaxLength: 30
  DBPassword:
    NoEcho: true
    Type: String
    Label:
      en: Kata Sandi DB
       
Resources:
  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:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      CidrBlock: 192.168.0.0/24
  EcsSecurityGroup:
    Type: ALIYUN::ECS::SecurityGroup
    Properties:
      SecurityGroupName:
        Ref: ALIYUN::StackName
      VpcId:
        Ref: Vpc
      SecurityGroupEgress:
        - PortRange: '-1/-1'
          Priority: 1
          IpProtocol: all
          DestCidrIp: 0.0.0.0/0
          NicType: intranet
  DBInstance:
    Type: ALIYUN::RDS::DBInstance
    Properties:
      ZoneId:
        Fn::Select:
          - '0'
          - Fn::GetAZs:
              Ref: ALIYUN::Region
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      Engine: MySQL
      EngineVersion: '8.0'
      DBInstanceClass: mysql.n4.medium.2c
      DBInstanceStorage: 10
      MultiAZ: true
      DBInstanceNetType: Intranet
      DBMappings:
        - CharacterSetName: utf8
          DBName: employees
      SecurityIPList: 0.0.0.0/0
  EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      AllocatePublicIP: false
      InstanceType: ecs.c5.large
      SystemDiskSize: 40
      SystemDiskCategory: cloud_essd
      Password:
        Ref: EcsInstancePassword
  Account:
    Type: ALIYUN::RDS::Account
    DependsOn:
      - DBInstance
    Properties:
      DBInstanceId:
        Fn::GetAtt:
          - DBInstance
          - DBInstanceId
      AccountPassword:
        Ref: DBPassword
      AccountType: Super
      AccountName: rdsuser
  InstanceRunCommand:
    Type: ALIYUN::ECS::RunCommand
    DependsOn:
      - Account
    Properties:
      CommandContent:
        Fn::Sub:
          - |
            #!/bin/bash
            yum -y install holland-mysqldump.noarch 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 -urdsuser -p${DBPassword} < /tmp/test_db-master/employees.sql
          - DBConnectString:
              Fn::GetAtt:
                - DBInstance
                - InnerConnectionString
            DBPassword:
              Ref: DBPassword
      Type: RunShellScript
      InstanceIds:
        - Fn::GetAtt:
            - EcsInstance
            - InstanceId
      Timeout: '300'

Tambahkan Grup Parameter ke Template dan Tampilkan Nilai Opsi Parameter Berdasarkan Kondisi Filter

Template sampel sebelumnya mendeklarasikan beberapa sumber daya dan asosiasi mereka. Nilai-nilai InstanceType dan SystemDiskCategory di EcsInstance serta nilai DBInstanceClass di DBInstance adalah nilai literal. Setiap kali Anda membuat stack di wilayah yang berbeda, Anda harus memodifikasi struktur template dan mengubah nilai properti.

Untuk meningkatkan fleksibilitas dan kemampuan penggunaan ulang template, tambahkan bagian Parameters.

Tambahkan Grup Parameter ke Template

Tambahkan bagian Metadata ke template untuk mengelompokkan parameter yang didefinisikan di bagian Parameters dan tentukan label untuk setiap grup.

Parameter dapat diklasifikasikan berdasarkan sumber daya atau parameter sumber daya. Tabel berikut mencantumkan grup parameter yang ditambahkan berdasarkan template sampel sebelumnya. Dalam contoh ini, parameter diklasifikasikan berdasarkan nama sumber daya atau nama parameter sumber daya.

Grup Parameter

Nama Sumber Daya

Nama Parameter Sumber Daya

Konfigurasi Jaringan Dasar

Vpc, VSwitch dan EcsSecurityGroup

VSwitchZoneId, VpcCidrBlock dan VSwitchCidrBlock

Konfigurasi Database

DBInstance dan DBAccount

DBInstanceClass, DBInstanceStorage, DBName, DBUsername dan DBPassword

Konfigurasi ECS

EcsInstance dan InstanceRunCommand

ECSInstanceType, ECSDiskSize, ECSDiskCategory dan EcsInstancePassword

Tampilkan Nilai Opsi Parameter Berdasarkan Kondisi Filter

Jika Anda ingin menentukan kondisi filter untuk parameter dan mengaitkan nilai parameter dengan kondisi filter yang dipilih di konsol ROS, tentukan AssociationProperty dan AssociationPropertyMetadata di template Anda. Dalam contoh ini, nilai opsional dari parameter ECSInstanceType ditampilkan berdasarkan nilai ZoneId. Untuk menentukan AssociationProperty dan AssociationPropertyMetadata di ECSInstanceType, lakukan operasi berikut: Di dokumentasi resmi ROS, gunakan ALIYUN::ECS::Instance untuk menanyakan nilai AssociationProperty yang didukung oleh ECSInstanceType. Nilai berikut ditemukan: ALIYUN::ECS::Instance::InstanceType. Kemudian, tanyakan nilai AssociationPropertyMetadata ketika AssociationProperty diatur ke ALIYUN::ECS::Instance::InstanceType dan ZoneId digunakan sebagai kondisi filter. Untuk informasi lebih lanjut tentang dokumentasi resmi, lihat AssociationProperty dan AssociationPropertyMetadata.

Template Sampel Lengkap

ROSTemplateFormatVersion: '2015-09-01'
Description: { }
Parameters:
  VSwitchZoneId:
    Type: String
    AssociationProperty: ALIYUN::ECS::Instance::ZoneId
    Description:
      en: ID Ketersediaan untuk switch yang ada
       
    Label:
      en: ID Zona VSwitch
       
  VpcCidrBlock:
    Default: 192.168.0.0/16
    Label:
       
      en: Blok CIDR VPC
    Type: String
    Description:
       
      en: Rentang segmen alamat IP jaringan eksklusif baru, direkomendasikan menggunakan segmen IP berikut<font color='green'>[10.0.XX.XX/8]</font><br><font color='green'>[172.16.XX.XX/12]</font><br><font color='green'>[192.168.XX.XX/16]</font>
  VSwitchCidrBlock:
    Default: 192.168.0.0/24
    Type: String
    Description:
       
      en: Harus menjadi sub-segmen jaringan eksklusif dan tidak ditempati oleh VSwitch lain.
    Label:
       
      en: Blok CIDR VSwitch
  ECSInstanceType:
    Type: String
    Description:
      en: <font color='blue'><b>1.Sebelum memilih model, konfirmasikan bahwa model tersedia di zona saat ini, beberapa model perlu dilaporkan terlebih dahulu</font>]<font color='blue'><b>2.Daftar model opsional</font>]<br></font>[ecs.c5.large <font color='green'>2vCPU 4GiB Bandwidth intranet 1Gbps Mengirim dan menerima paket 30MillionPPS</font>][ecs.c5.xlarge <font color='green'>4vCPU 8GiB Bandwidth intranet 1.5Gbps Mengirim dan menerima paket 50MillionPPS</font>][ecs.c5.2xlarge <font color='green'>8vCPU 16GiB Bandwidth intranet 2.5Gbps Mengirim dan menerima paket 80MillionPPS</font>]
       
    Label:
      en: Jenis Instance
       
    AssociationProperty: ALIYUN::ECS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
  ECSDiskSize:
    Type: Number
    Description:
      en: 'Ukuran disk sistem instance, dalam GiB. Rentang nilai: 40 hingga 500'
       
    Label:
      en: Ruang Disk Sistem
       
    MinValue: 40
    MaxValue: 500
    Default: 40
  ECSDiskCategory:
    Type: String
    Description:
      en: '<font color=''blue''></font>[cloud_efficiency: <font color=''green''>Cloud Disk Efisien</font>]<br>[cloud_ssd: <font color=''green''>SSD Cloud Disk</font>]<br>[cloud_essd: <font color=''green''>ESSD Cloud Disk</font>]<br>[cloud: <font color=''green''>Cloud Disk</font>]<br>[ephemeral_ssd: <font color=''green''>Local SSD Cloud Disk</font>]'
       
    AssociationProperty: ALIYUN::ECS::Disk::SystemDiskCategory
    AssociationPropertyMetadata:
      ZoneId: ${VSwitchZoneId}
      InstanceType: ${ECSInstanceType}
    Label:
      en: Jenis Disk Sistem
       
  EcsInstancePassword:
    NoEcho: true
    Type: String
    Description:
      en: Kata sandi login server, Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam)
       
    AllowedPattern: '[0-9A-Za-z\_\-\&:;''<>,=%`~!@#\(\)\$\^\*\+\|\{\}\[\]\.\?\/]+$'
    Label:
      en: Kata Sandi Instance
       
    ConstraintDescription:
      en: Panjang 8-30, harus mencakup tiga (Huruf kapital, huruf kecil, angka, ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ Simbol khusus di dalam).
       
    MinLength: 8
    MaxLength: 30
  DBInstanceClass:
    Label:
       
      en: Kelas Instance DB
    AssociationProperty: ALIYUN::RDS::Instance::InstanceType
    AssociationPropertyMetadata:
      Engine: MySQL
      ZoneId: ${VSwitchZoneId}
    Type: String
    Description:
       
      en: 'Pilih spesifikasi instance berdasarkan jenis mesin database dan dukungan area yang tersedia;<br>lihat detail: <a href=''https://www.alibabacloud.com/help/doc-detail/26312.html'' target=''_blank''><b><font color=''blue''>Lembar Spesifikasi Instance</font></a>'
  DBInstanceStorage:
    Label:
       
      en: Penyimpanan
    Type: Number
    Description:
       
      en: Rentang ukuran instance RDS adalah 20 - 2000, Bertambah setiap 5, unit GB
    MinValue: 20
    MaxValue: 2000
    ConstraintDescription:
       
      en: Rentang ukuran instance RDS adalah 20 - 2000, Bertambah setiap 5, unit GB
    Default: 200
  DBName:
    Type: String
    Label:
      en: Nama DB
       
    ConstraintDescription:
       
      en: Harus dimulai dengan huruf dan hanya boleh berisi karakter alfanumerik.
    MinLength: 1
    MaxLength: 64
    Default: employees
  DBUsername:
    Type: String
    Description:
      en: Nama akun utama instance database.
       
    ConstraintDescription:
      en: Terdiri dari 2 hingga 16 karakter huruf kecil, garis bawah. Harus dimulai dengan huruf dan diakhiri dengan karakter alfanumerik
        
    Label:
       
      en: Nama Pengguna DB
    Default:rdsuser
    MaxLength: 16
    MinLength: 2
  DBPassword:
    NoEcho: true
    Type: String
    Label:
      en: Kata Sandi DB
       
Resources:
  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'
  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
  EcsInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      VpcId:
        Ref: Vpc
      SecurityGroupId:
        Ref: EcsSecurityGroup
      VSwitchId:
        Ref: VSwitch
      ImageId: centos_7
      AllocatePublicIP: true
      InstanceType:
        Ref: ECSInstanceType
      SystemDiskSize:
        Ref: ECSDiskSize
      SystemDiskCategory:
        Ref: ECSDiskCategory
      Password:
        Ref: EcsInstancePassword
  InstanceRunCommand:
    Type: ALIYUN::ECS::RunCommand
    DependsOn:
      - DBAccount
    Properties:
      CommandContent:
        Fn::Sub:
          - |
            #!/bin/bash
            yum -y install holland-mysqldump.noarch 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'
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - VSwitchZoneId
          - VpcCidrBlock
          - VSwitchCidrBlock
        Label:
          default:
             
            en: Konfigurasi Jaringan Dasar
      - Parameters:
          - ECSInstanceType
          - ECSDiskSize
          - ECSDiskCategory
          - EcsInstancePassword
        Label:
          default:
            en: Instance
             
      - Parameters:
          - DBInstanceClass
          - DBInstanceStorage
          - DBName
          - DBUsername
          - DBPassword
        Label:
          default:
            en: Database