All Products
Search
Document Center

Resource Orchestration Service:Resources

Last Updated:Mar 13, 2026

Bagian Resources menjelaskan properti setiap resource dalam sebuah stack serta ketergantungan di antara resource tersebut. Anda dapat mereferensikan suatu resource dari resource lain atau di bagian Outputs.

Jenis entitas resource

Entitas resource dikategorikan menjadi resource reguler dan resource sumber data. Resource reguler terbagi lagi menjadi resource Alibaba Cloud dan resource kustom, sebagaimana ditunjukkan pada tabel berikut.

Jenis entitas resource

Deskripsi

Resource reguler (Resource)

  • Resource Alibaba Cloud: Membuat, memperbarui, dan menghapus resource Alibaba Cloud. Jenis resource dimulai dengan ALIYUN::.

  • Resource kustom: Membuat resource dengan logika kustom dan menentukan cara resource diperbarui serta dihapus. Jenis resource dimulai dengan Custom:: atau berupa ALIYUN::ROS::CustomResource.

    Untuk informasi selengkapnya, lihat Overview.

Resource sumber data (DataSource)

Menanyakan data resource dari layanan Alibaba Cloud.

Untuk informasi selengkapnya, lihat Data source resources.

Sintaks

Bagian Resources terdiri atas ID resource dan deskripsi resource. Deskripsi resource diapit tanda kurung kurawal ({}). Jika Anda mendeklarasikan beberapa resource, pisahkan masing-masing dengan koma (,). Segmen kode berikut menunjukkan struktur sintaks bagian Resources:

Resources:
  Resource1 Name:
    Type: Resource type
    Condition: Condition for creating this resource
    Properties: Resource property description
  Resource2 Name:
    Type: Resource type
    Condition: Condition for creating this resource
    Properties: Resource property description

Parameter-parameter tersebut dijelaskan sebagai berikut:

  • Nama resource harus unik dalam templat. Nama ini dapat digunakan untuk mereferensikan resource tersebut di bagian lain templat.

  • Jenis resource (Type) menunjukkan jenis resource yang dideklarasikan. Misalnya, ALIYUN::ECS::Instance merepresentasikan sebuah instance ECS Alibaba Cloud. Untuk daftar lengkap jenis resource yang didukung ROS, lihat Resource type index.

  • Properti resource (Properties) merupakan opsi tambahan yang ditentukan untuk suatu resource. Misalnya, Anda harus menentukan Image ID untuk setiap instance ECS Alibaba Cloud.

Contoh

Resources:
  ECSInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****

Jika suatu resource tidak memerlukan properti apa pun, bagian Properties dapat dihilangkan.

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 daftar tersebut dengan tanda kurung siku ([]).

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

Aturan ini juga berlaku saat 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 menghapus suatu resource, ada dua skenario yang mungkin terjadi:

  • Jika Anda mengatur DeletionPolicy ke Delete, resource tersebut akan dihapus saat dihapus dari stack.

  • Jika Anda mengatur DeletionPolicy ke Retain, resource tersebut tetap dipertahankan meskipun dihapus dari stack.

Misalnya, untuk mempertahankan sebuah instance ECS saat stack dihapus, deklarasikan kebijakan seperti pada segmen kode berikut:

Resources:
  ECSInstance:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
    DeletionPolicy: Retain

Pada contoh ini, jika stack yang sesuai dengan templat ini dihapus, resource ECSInstance tetap dipertahankan.

Penting

Jika suatu resource memiliki DeletionPolicy yang dikonfigurasi dan Anda memanggil operasi DeleteStack serta menyertakan resource tersebut dalam parameter RetainResources, prinsip-prinsip berikut berlaku:

  • Jika Resource A memiliki DeletionPolicy=Delete dalam templat, apakah resource tersebut dipertahankan bergantung pada apakah resource tersebut termasuk dalam RetainResources saat Anda menghapus stack.

  • Jika Resource A memiliki DeletionPolicy=Retain dalam templat, resource tersebut selalu dipertahankan saat Anda menghapus stack, terlepas dari apakah resource tersebut termasuk dalam RetainResources.

DependsOn

Dalam sebuah templat, gunakan atribut DependsOn untuk memastikan bahwa suatu resource hanya dibuat setelah resource tertentu lainnya telah dibuat. Saat Anda menerapkan atribut DependsOn ke suatu resource, resource tersebut tidak akan dibuat hingga resource yang direferensikan oleh DependsOn telah sepenuhnya disediakan.

Penting

Resource yang diandalkan oleh DependsOn dapat memiliki Condition-nya dievaluasi ke False. Nilai False tidak memengaruhi pembuatan resource yang bergantung.

Contoh berikut menunjukkan dua cara menggunakan atribut ini:

  • Ketergantungan pada satu resource:

    DependsOn: ResourceName
  • Bergantung pada beberapa resource:

    DependsOn:
      - ResourceName1
      - ResourceName2

Seperti yang ditunjukkan pada segmen kode berikut, WebServer hanya dibuat setelah 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 sebuah templat, Anda dapat menggunakan atribut Condition untuk menentukan apakah suatu resource akan dibuat. Resource tersebut hanya dibuat jika nilai kondisi yang ditentukan oleh Condition bernilai True.

Seperti yang ditunjukkan pada segmen kode berikut, pembuatan WebServer bergantung pada nilai 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

Dalam sebuah templat, setelah Anda menentukan Count untuk suatu resource, ROS melakukan pra-pemrosesan terhadap templat dan memperluas resource tersebut menjadi beberapa resource. Templat yang telah diproses kemudian digunakan saat Anda melakukan operasi pada stack.

  • Misalnya, jika sebuah resource bernama A dan nilai Count-nya adalah 3, templat yang telah diproses tidak lagi berisi resource A. Sebagai gantinya, templat tersebut akan berisi tiga resource: A[0], A[1], dan A[2].

    Resources:
      A:
        Count: 3
        ...

    Setelah diproses:

    Resources:
      A[0]:
        ...
      A[1]:
        ...
      A[2]:
        ...
    Penting

    Jika nama resource yang telah diperluas, seperti A[1], sudah ada dalam templat asli, pra-pemrosesan gagal dan templat tidak lolos validasi.

    Hindari menambahkan atribut Count ke resource yang sudah ada. Hal ini mengubah nama resource dan memicu operasi penghapusan.

  • Hasil akhir dari Count harus berupa bilangan asli. Hanya fungsi-fungsi berikut yang didukung:

  • Jumlah total resource dalam templat yang telah diproses tidak boleh melebihi batas, yaitu 300.

  • Dalam Properties sebuah resource yang memiliki Count ditentukan, Anda dapat menggunakan parameter pseudo ALIYUN::Index. Selama pra-pemrosesan, parameter ini diganti dengan angka yang sesuai. Misalnya, ALIYUN::Index yang digunakan oleh A[0] diganti dengan 0, dan ALIYUN::Index yang digunakan oleh A[1] diganti dengan 1. Anda tidak dapat menggunakan ALIYUN::Index di tempat lain dalam templat.

  • Jika sebuah resource dengan Count ditentukan muncul dalam DependsOn, resource tersebut diperluas.

    DependsOn: A

    Setelah diproses:

    DependsOn:
      - A[0]
      - A[1]
      - A[2]
  • Jika sebuah resource dengan Count ditentukan muncul dalam fungsi Ref atau Fn::GetAtt, resource 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 resource menggunakan Count dan memiliki hubungan referensi, Anda dapat menggunakannya bersama Fn::Select dan ALIYUN::Index.

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

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

    - Ref: A[0]
    - Ref: A[1]
  • Jika sebuah resource memiliki atribut Count, atribut DependsOn juga mendukung ekspresi. Fungsi-fungsi yang dapat digunakan dalam ekspresi DependsOn sama dengan yang digunakan untuk atribut Count, dan Anda dapat menggunakan parameter pseudo ALIYUN::Index. Tabel berikut menjelaskan format ekspresi dan hasil perhitungan yang diizinkan.

    Format

    Contoh

    Hasil perhitungan yang diizinkan

    Dictionary

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

    null

    Jika nilainya null, atribut DependsOn dihapus.

    String

    • Jika nilainya string kosong, atribut DependsOn dihapus.

    • Jika nilainya string tidak kosong, harus berupa nama resource yang valid.

    List

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

    • Jika daftar kosong, atribut DependsOn dihapus.

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

    List

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

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

    • Jika item daftar berupa dictionary, ekspresi dihitung. Hasil perhitungan yang diizinkan adalah sebagai berikut:

      • Jika nilainya null atau string kosong, item tersebut diabaikan.

      • Jika tidak, harus berupa string dan nama resource yang valid.

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

    Catatan

    Jika daftar kosong, atribut DependsOn dihapus.

    String

    Server0

    String

    Tidak ada pemrosesan tambahan yang dilakukan.

    Contoh templat berikut mengontrol konkurensi untuk resource yang dibuat dengan Count. Parameter Count menentukan jumlah resource yang akan dibuat, dan parameter ParallelCount menentukan jumlah maksimum pembuatan secara 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 adalah contoh templat untuk Count. Templat ini membuat sekelompok EIP dan jumlah instance ECS yang sama, lalu menyambungkan setiap EIP ke sebuah 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 resource

Berikut adalah contoh deklarasi resource yang khas:

Resources:
  WebServer:
    Type: ALIYUN::ECS::Instance
    Properties:
      ImageId: m-25l0r****
      InstanceType: ecs.t1.small
      SecurityGroupId: sg-25zwc****
      ZoneId: cn-beijing-b
      Tags:
        - Key: Department1
          Value: HumanResource
        - Key: Department2
          Value: Finance
  ScalingConfiguration:
    Type: ALIYUN::ESS::ScalingConfiguration
    Properties:
      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