全部产品
Search
文档中心

Resource Orchestration Service:Sumber daya

更新时间:Nov 11, 2025

Bagian Sumber Daya menjelaskan properti setiap sumber daya dalam sebuah stack serta ketergantungannya satu sama lain. Anda dapat mereferensikan sumber daya tersebut dari sumber daya lain atau di bagian Outputs.

Jenis entitas sumber daya

Entitas sumber daya diklasifikasikan menjadi sumber daya reguler dan sumber daya sumber data. Sumber daya reguler selanjutnya dibagi menjadi sumber daya Alibaba Cloud dan Resource kustom. Tabel berikut menjelaskan jenis-jenis entitas sumber daya tersebut.

Jenis entitas sumber daya

Deskripsi

Sumber daya reguler (Resource)

  • Sumber daya Alibaba Cloud: Membuat, memperbarui, dan menghapus sumber daya Alibaba Cloud. Jenis sumber daya Alibaba Cloud diawali dengan ALIYUN::.

  • Resource kustom: Membuat sumber daya dengan logika kustom dan menentukan cara pembaruan serta penghapusannya. Jenis Resource kustom diawali dengan Custom:: atau berupa ALIYUN::ROS::CustomResource.

    Untuk informasi lebih lanjut, lihat Ikhtisar.

Sumber daya sumber data (DataSource)

Menanyakan data sumber daya layanan Alibaba Cloud.

Untuk informasi lebih lanjut, lihat Sumber daya sumber data.

Sintaks

Deklarasi sumber daya terdiri atas nama sumber daya dan deskripsi sumber daya. Deskripsi sumber daya diapit tanda kurung kurawal ({}). Jika Anda mendeklarasikan beberapa sumber daya, pisahkan dengan koma (,). Segmen kode berikut menunjukkan sintaks untuk bagian Resources:

Resources:
  Nama Sumber Daya 1:
    Type: Jenis sumber daya
    Condition: Kondisi untuk membuat sumber daya ini
    Properties: Deskripsi properti sumber daya
  Nama Sumber Daya 2:
    Type: Jenis sumber daya
    Condition: Kondisi untuk membuat sumber daya ini
    Properties: Deskripsi properti sumber daya

Daftar berikut menjelaskan parameter-parameter tersebut:

  • Nama sumber daya harus unik dalam satu templat. Anda dapat mereferensikan sumber daya tersebut dengan namanya di bagian lain templat.

  • Jenis sumber daya (Type): Jenis sumber daya yang Anda deklarasikan. Misalnya, ALIYUN::ECS::Instance menunjukkan instance ECS Alibaba Cloud. Untuk informasi selengkapnya mengenai semua jenis sumber daya yang didukung ROS, lihat Indeks jenis sumber daya.

  • Properti sumber daya (Properties): Opsi tambahan yang ditentukan untuk sumber daya tersebut. Misalnya, Anda harus menentukan ID Image untuk setiap instance ECS Alibaba Cloud.

Contoh

Sumber Daya:
  ECSInstance:
    Tipe: ALIYUN::ECS::Instance
    Properti:
      ImageId: m-25l0r****

Jika suatu sumber daya tidak memerlukan properti apa pun, Anda dapat menghilangkan bagian Properties.

Nilai properti dapat berupa string teks, daftar string, Nilai Boolean, parameter yang direferensikan, atau nilai kembali fungsi. Saat menulis templat JSON, ikuti aturan berikut:

  • Jika nilai properti berupa string teks, apit nilai tersebut dengan tanda kutip ganda ("").

  • Jika nilai properti berupa daftar string, apit dengan tanda kurung siku ([]).

  • Jika nilai properti berupa fungsi intrinsik atau parameter yang direferensikan, apit dengan tanda kurung kurawal ({}).

Aturan ini juga berlaku saat Anda menggabungkan teks, daftar, parameter yang direferensikan, dan nilai kembali fungsi. Contoh berikut menunjukkan cara mendeklarasikan berbagai jenis nilai properti:

{
  "Properties": {
    "String": "string",
    "LiteralList": [
      "value1",
      "value2"
    ],
    "Boolean": true,
    "ReferenceForOneValue": {
      "Ref": "ResourceID"
    },
    "FunctionResultWithFunctionParams": {
      "Fn::Join": [
        "%",
        [
          "Key=",
          {
            "Ref": "SomeParameter"
          }
        ]
      ]
    }
  }
}

DeletionPolicy

Saat Anda menghapus sumber daya, dua situasi dapat terjadi:

  • Jika DeletionPolicy diatur ke Delete, sumber daya tersebut akan dihapus ketika dihapus dari stack.

  • Jika DeletionPolicy diatur ke Retain, sumber daya tersebut akan dipertahankan ketika dihapus dari stack.

Sebagai contoh, untuk mempertahankan instance ECS saat stack-nya dihapus, deklarasikan kebijakan seperti pada segmen kode berikut:

Sumber Daya:
  ECSInstance:
    Tipe: ALIYUN::ECS::Instance
    Properti:
      ImageId: m-25l0r****
    DeletionPolicy: Retain

Pada contoh ini, jika stack yang dibuat dari templat dihapus, sumber daya ECSInstance akan dipertahankan.

Penting

Saat Anda memanggil operasi DeleteStack, jika suatu sumber daya memiliki DeletionPolicy yang dikonfigurasi dalam templat dan juga termasuk dalam parameter RetainResources, prinsip-prinsip berikut berlaku:

  • Jika Resource A memiliki DeletionPolicy=Delete yang ditetapkan dalam templat, apakah sumber daya tersebut dipertahankan bergantung pada apakah sumber daya tersebut termasuk dalam parameter RetainResources.

  • Jika Resource A memiliki DeletionPolicy=Retain yang ditetapkan dalam templat, sumber daya tersebut selalu dipertahankan, terlepas dari apakah sumber daya tersebut termasuk dalam parameter RetainResources.

DependsOn

Gunakan properti DependsOn untuk menentukan ketergantungan antar sumber daya. Sumber daya yang memiliki properti DependsOn hanya akan dibuat setelah sumber daya yang ditentukan dalam properti DependsOn berhasil dibuat.

Penting

Anda dapat mengatur properti Condition dari dependensi yang ditentukan dalam properti DependsOn menjadi False. Nilai False menentukan bahwa sumber daya tersebut dibuat meskipun dependensinya tidak dibuat.

Contoh:

  • Untuk bergantung pada satu sumber daya:

    DependsOn: ResourceName
  • Untuk bergantung pada beberapa sumber daya:

    DependsOn:
      - ResourceName1
      - ResourceName2

Pada contoh berikut, sumber daya WebServer hanya akan dibuat setelah sumber daya DatabaseServer berhasil dibuat:

ROSTemplateFormatVersion: '2015-09-01'
Resources:
  WebServer:
    Type: ALIYUN::ECS::Instance
    DependsOn: DatabseServer
  DatabseServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small

Condition

Dalam templat, Anda dapat menggunakan properti Condition untuk menentukan apakah suatu sumber daya dibuat. Sumber daya tersebut hanya akan dibuat jika Condition bernilai True.

Pada contoh berikut, pembuatan sumber daya WebServer ditentukan oleh nilai parameter MaxAmount:

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  MaxAmount:
    Type: Number
    Default: 1
Conditions:
  CreateWebServer:
    Fn::Not:
      Fn::Equals:
        - 0
        - Ref: MaxAmount
Resources:
  WebServer:
    Type: ALIYUN::ECS::InstanceGroup
    Condition: CreateWebServer
    Properties:
      ImageId: m-25l0rc****
      InstanceType: ecs.t1.small
      MaxAmount:
        Ref: MaxAmount
  DatabseServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small

Count

Jika Anda menentukan properti Count untuk suatu sumber daya dalam templat, ROS akan melakukan pra-pemrosesan terhadap templat tersebut dan memperluas sumber daya menjadi beberapa sumber daya. Operasi stack menggunakan templat yang telah diproses.

  • Sebagai contoh, suatu sumber daya bernama A dan nilai Count-nya adalah 3. Dalam templat yang telah diproses, sumber daya A diganti dengan tiga sumber daya: A[0], A[1], dan A[2].

    Sumber Daya:
      A:
        Count: 3
        ...

    Setelah diproses:

    Sumber Daya:
      A[0]:
        ...
      A[1]:
        ...
      A[2]:
        ...
    Penting

    Jika nama sumber daya hasil perluasan, seperti A[1], sudah ada dalam templat asli, pra-pemrosesan gagal dan validasi templat gagal.

    Hindari menambahkan properti Count ke sumber daya yang sudah ada. Tindakan ini mengubah nama sumber daya dan menyebabkan operasi penghapusan.

  • Nilai properti Count harus berupa bilangan bulat non-negatif. Hanya fungsi-fungsi berikut yang didukung:

  • Jumlah total sumber daya dalam templat yang telah diproses tidak boleh melebihi batas. Batas saat ini adalah 300 sumber daya.

  • Dalam bagian Properties sumber daya yang memiliki properti Count, Anda dapat menggunakan parameter pseudo ALIYUN::Index. Selama pra-pemrosesan, parameter ini diganti dengan indeks replika sumber daya (dimulai dari 0). Sebagai contoh, ALIYUN::Index untuk A[0] diganti dengan 0, dan ALIYUN::Index untuk A[1] diganti dengan 1. Anda tidak dapat menggunakan ALIYUN::Index di tempat lain dalam templat.

  • Jika sumber daya yang memiliki properti Count direferensikan dalam properti DependsOn, referensi tersebut diperluas.

    DependsOn: A

    Setelah diproses:

    DependsOn:
      - A[0]
      - A[1]
      - A[2]
  • Jika sumber daya yang memiliki properti Count direferensikan oleh fungsi Ref atau Fn::GetAtt, referensi tersebut diperluas.

    Ref: A
    Fn::GetAtt:
      - A
      - PropertyName

    Setelah diproses:

    - Ref: A[0]
    - Ref: A[1]
    - Ref: A[2]
    - Fn::GetAtt:
        - A[0]
        - PropertyName
    - Fn::GetAtt:
        - A[1]
        - PropertyName
    - Fn::GetAtt:
        - A[2]
        - PropertyName

    Jika beberapa sumber daya menggunakan properti Count dan saling mereferensikan, gunakan Count bersama Fn::Select dan ALIYUN::Index.

    Fn::Select:
      - Ref: ALIYUN::Index
      - Ref: A

    Ambil A sebagai contoh. Asumsikan B mereferensikan A dan Count dari B adalah 2. Setelah transformasi, sebagian ekspresi untuk B[0] dan B[1] adalah sebagai berikut:

    - Ref: A[0]
    - Ref: A[1]
  • Jika suatu sumber daya menentukan properti Count, properti DependsOn-nya juga mendukung ekspresi. Fungsi yang dapat digunakan dalam ekspresi DependsOn sama dengan fungsi untuk properti Count. Anda juga dapat menggunakan parameter pseudo ALIYUN::Index. Tabel berikut menjelaskan format ekspresi dan hasil yang diizinkan.

    Format

    Contoh

    Hasil yang diizinkan

    Kamus.

    Fn::Split:
      - ','
      - Server1,Server2

    Null.

    Jika hasilnya null, properti DependsOn dihapus.

    Sebuah string.

    • Jika hasilnya string kosong, properti DependsOn dihapus.

    • Jika hasilnya string tidak kosong, harus berupa nama sumber daya yang valid.

    Sebuah daftar.

    • Jika item daftar bernilai null atau string kosong, item tersebut dibuang.

    • Jika daftar menjadi kosong setelah item-item dibuang, properti DependsOn dihapus.

    • Jika daftar tidak kosong, setiap item harus berupa string dan nama sumber daya yang valid.

    Daftar.

    - Server0
    - Fn::Split:
        - ','
        - Server1,Server2

    Item daftar dapat berupa kamus atau string. Hasil yang diizinkan bervariasi berdasarkan jenis item:

    • Jika item daftar berupa kamus, ekspresi dievaluasi. Hasil yang diizinkan adalah:

      • Jika hasilnya null atau string kosong, item tersebut dibuang.

      • Jika tidak, hasilnya harus berupa string dan nama sumber daya yang valid.

    • Jika item daftar berupa string, harus berupa nama sumber daya yang valid.

    Catatan

    Jika daftar menjadi kosong setelah item-item dibuang, properti DependsOn dihapus.

    String.

    Server0

    Sebuah string.

    Tidak ada pemrosesan tambahan yang dilakukan.

    Templat contoh berikut menunjukkan cara mengontrol konkurensi pembuatan sumber daya saat menggunakan Count. Parameter Count menentukan jumlah sumber daya yang akan dibuat, dan parameter ParallelCount menentukan jumlah maksimum operasi pembuatan konkuren.

    ROSTemplateFormatVersion: '2015-09-01'
    Parameters:
      Count:
        Type: Number
      ParallelCount:
        Type: Number
    Resources:
      WaitConditionHandle:
        Type: ALIYUN::ROS::WaitConditionHandle
        Count:
          Ref: Count
        DependsOn:
          Fn::Select:
            - Fn::Calculate:
                - 1-{0}//{1}
                - 0
                - - Fn::Min:
                      - Ref: ALIYUN::Index
                      - Ref: ParallelCount
                  - Ref: ParallelCount
            - - Fn::Replace:
                  - index:
                      Fn::Calculate:
                        - '{0}-{1}'
                        - 0
                        - - Ref: ALIYUN::Index
                          - Ref: ParallelCount
                  - WaitConditionHandle[index]

    Templat yang telah diproses bervariasi berdasarkan nilai Count dan ParallelCount:

    • Jika Anda mengatur Count ke 3 dan ParallelCount ke 1, templat yang telah diproses adalah sebagai berikut:

      ROSTemplateFormatVersion: '2015-09-01'
      Resources:
        WaitConditionHandle[0]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[1]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[0]
        WaitConditionHandle[2]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[1]
      Parameters:
        Count:
          Type: Number
        ParallelCount:
          Type: Number
    • Jika Anda mengatur Count ke 5 dan ParallelCount ke 2, templat yang telah diproses adalah sebagai berikut:

      ROSTemplateFormatVersion: '2015-09-01'
      Resources:
        WaitConditionHandle[0]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[1]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[2]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[0]
        WaitConditionHandle[3]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[1]
        WaitConditionHandle[4]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[2]
      Parameters:
        Count:
          Type: Number
        ParallelCount:
          Type: Number
    • Jika Anda mengatur Count ke 5 dan ParallelCount ke 3, templat yang telah diproses adalah sebagai berikut:

      ROSTemplateFormatVersion: '2015-09-01'
      Resources:
        WaitConditionHandle[0]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[1]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[2]:
          Type: ALIYUN::ROS::WaitConditionHandle
        WaitConditionHandle[3]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[0]
        WaitConditionHandle[4]:
          Type: ALIYUN::ROS::WaitConditionHandle
          DependsOn: WaitConditionHandle[1]
      Parameters:
        Count:
          Type: Number
        ParallelCount:
          Type: Number

Berikut ini adalah contoh templat yang menggunakan Count. Templat ini membuat sekelompok EIP dan jumlah instance ECS yang sama, lalu menyambungkan setiap EIP ke instance ECS.

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  Count:
    Type: Number
Resources:
  Eip:
    Type: ALIYUN::VPC::EIP
    Count:
      Ref: Count
    Properties:
      Bandwidth: 5
  Servers:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      MinAmount:
        Ref: Count
      MaxAmount:
        Ref: Count
      AllocatePublicIP: false
      ...: Null
  EipBind:
    Type: ALIYUN::VPC::EIPAssociation
    Count:
      Ref: Count
    Properties:
      InstanceId:
        Fn::Select:
          - Ref: ALIYUN::Index
          - Fn::GetAtt:
              - Servers
              - InstanceIds
      AllocationId:
        Fn::Select:
          - Ref: ALIYUN::Index
          - Ref: Eip
Outputs:
  InstanceIds:
    Value:
      Fn::GetAtt:
        - Servers
        - InstanceIds
  AllocationIds:
    Value:
      Ref: Eip
  EipAddresses:
    Value:
      Fn::GetAtt:
        - Eip
        - EipAddress

Setelah diproses:

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  Count:
    Type: Number
Resources:
  Eip[0]:
    Type: ALIYUN::VPC::EIP
    Properties:
      Bandwidth: 5
  Eip[1]:
    Type: ALIYUN::VPC::EIP
    Properties:
      Bandwidth: 5
  Servers:
    Type: ALIYUN::ECS::InstanceGroup
    Properties:
      MinAmount:
        Ref: Count
      MaxAmount:
        Ref: Count
      AllocatePublicIP: false
      ...: Null
  EipBind[0]:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Fn::Select:
          - 0
          - Fn::GetAtt:
              - Servers
              - InstanceIds
      AllocationId:
        Ref: Eip[0]
  EipBind[1]:
    Type: ALIYUN::VPC::EIPAssociation
    Properties:
      InstanceId:
        Fn::Select:
          - 1
          - Fn::GetAtt:
              - Servers
              - InstanceIds
      AllocationId:
        Ref: Eip[1]
Outputs:
  InstanceIds:
    Value:
      Fn::GetAtt:
        - Servers
        - InstanceIds
  AllocationIds:
    Value:
      - Ref: Eip[0]
      - Ref: Eip[1]
  EipAddresses:
    Value:
      - Fn::GetAtt:
          - Eip[0]
          - EipAddress
      - Fn::GetAtt:
          - Eip[1]
          - EipAddress

Contoh deklarasi sumber daya

Berikut ini adalah contoh khas deklarasi sumber daya:

Sumber Daya:
  WebServer:
    Tipe: ALIYUN::ECS::Instance
    Properti:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small
      SecurityGroupId: sg-25zwc****
      ZoneId: cn-beijing-b
      Tags:
        - Key: Department1
          Value: HumanResource
        - Key: Department2
          Value: Finance
  ScalingConfiguration:
    Tipe: ALIYUN::ESS::ScalingConfiguration
    Properti:
      ImageId: ubuntu_14_04_64_20G_aliaegis_2015****.vhd
      InstanceType: ecs.t1.small
      InstanceId: i-25xhh****
      InternetChargeType: PayByTraffic
      InternetMaxBandwidthIn: 1
      InternetMaxBandwidthOut: 20
      SystemDisk_Category: cloud
      ScalingGroupId: bwhtvpcBcKYac9fe3vd0****
      SecurityGroupId: sg-25zwc****
      DiskMappings:
        - Size: 10
        - Category: cloud
          Size: 10