すべてのプロダクト
Search
ドキュメントセンター

Resource Orchestration Service:リソース

最終更新日:Nov 09, 2025

Resources セクションでは、スタック内の各リソースのプロパティと、リソース間の依存関係を記述します。リソースは、他のリソースから、または Outputs セクションで参照できます。

リソースエンティティタイプ

リソースエンティティは、通常のリソースとデータソースリソースに分類されます。通常のリソースは、さらに Alibaba Cloud リソースとカスタムリソースに分けられます。次の表に、リソースエンティティタイプを説明します。

リソースエンティティタイプ

説明

通常のリソース (Resource)

  • Alibaba Cloud リソース: Alibaba Cloud リソースを作成、更新、削除します。Alibaba Cloud リソースタイプは ALIYUN:: で始まります。

  • カスタムリソース: カスタムロジックでリソースを作成し、それらの更新方法と削除方法を定義します。カスタムリソースタイプは Custom:: で始まるか、ALIYUN::ROS::CustomResource です。

    詳細については、「概要」をご参照ください。

データソースリソース (DataSource)

Alibaba Cloud サービスのリソースデータをクエリします。

詳細については、「データソースリソース」をご参照ください。

構文

リソース宣言は、リソース名とリソースの説明で構成されます。リソースの説明は中括弧 ({}) で囲みます。複数のリソースを宣言する場合は、コンマ (,) で区切ります。次のコードセグメントは、Resources セクションの構文を示しています。

Resources:
  Resource 1 Name:
    Type: Resource type
    Condition: Condition to create this resource
    Properties: Resource property description
  Resource 2 Name:
    Type: Resource type
    Condition: Condition to create this resource
    Properties: Resource property description

パラメーターの説明は次のとおりです。

  • リソース名は、テンプレート内で一意である必要があります。テンプレートの他の部分で、名前によってリソースを参照できます。

  • リソースタイプ (Type): 宣言するリソースのタイプ。たとえば、ALIYUN::ECS::Instance は Alibaba Cloud ECS インスタンスを示します。ROS がサポートするすべてのリソースタイプの詳細については、「リソースタイプインデックス」をご参照ください。

  • リソースプロパティ (Properties): リソースに指定される追加のオプション。たとえば、Alibaba Cloud ECS インスタンスごとにイメージ ID を指定する必要があります。

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

リソースにプロパティが不要な場合は、Properties セクションを省略できます。

プロパティ値には、テキスト文字列、文字列のリスト、ブール値、参照されるパラメーター、または関数の戻り値を指定できます。JSON テンプレートを作成する際は、次のルールに従ってください。

  • プロパティ値がテキスト文字列の場合は、値を二重引用符 ("") で囲みます。

  • プロパティ値が文字列のリストの場合は、角括弧 ([]) で囲みます。

  • プロパティ値が組み込み関数または参照されるパラメーターの場合は、中括弧 ({}) で囲みます。

これらのルールは、テキスト、リスト、参照されるパラメーター、および関数の戻り値を組み合わせる場合にも適用されます。次の例は、さまざまなタイプのプロパティ値を宣言する方法を示しています。

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

DeletionPolicy

リソースを削除すると、2 つの状況が発生する可能性があります。

  • DeletionPolicy が Delete に設定されている場合、リソースはスタックから削除されるときに削除されます。

  • DeletionPolicy が Retain に設定されている場合、リソースはスタックから削除されても保持されます。

たとえば、スタックが削除されたときに ECS インスタンスを保持するには、次のコードセグメントに示すようにポリシーを宣言します。

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

この例では、テンプレートから作成されたスタックが削除されても、ECSInstance リソースは保持されます。

重要

DeleteStack 操作を呼び出すときに、リソースの DeletionPolicy がテンプレートで設定されており、かつ RetainResources パラメーターにも含まれている場合、次の原則が適用されます。

  • リソース A の DeletionPolicy=Delete がテンプレートで設定されている場合、リソースが保持されるかどうかは、RetainResources パラメーターに含まれているかどうかによって決まります。

  • リソース A の DeletionPolicy=Retain がテンプレートで設定されている場合、リソースは RetainResources パラメーターに含まれているかどうかに関係なく、常に保持されます。

DependsOn

[DependsOn] プロパティを使用して、リソース間の依存関係を定義します。[DependsOn] プロパティを持つリソースは、[DependsOn] プロパティで指定されたリソースが作成された後にのみ作成されます。

重要

DependsOn プロパティで指定された依存関係の Condition プロパティを False に設定できます。値を False に設定すると、依存関係が作成されない場合でもリソースが作成されます。

例:

  • 単一のリソースに依存する場合:

    DependsOn: ResourceName
  • 複数のリソースに依存する場合:

    DependsOn:
      - ResourceName1
      - ResourceName2

次の例では、WebServer リソースは、DatabaseServer リソースが正常に作成された後にのみ作成されます。

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

テンプレートでは、[Condition] プロパティを使用して、リソースを作成するかどうかを指定できます。リソースは、[Condition][True] と評価された場合にのみ作成されます。

次の例では、WebServer リソースを作成するかどうかは、[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

テンプレート内のリソースに Count プロパティを指定すると、ROS はテンプレートを前処理し、そのリソースを複数のリソースに展開します。スタック操作では、処理済みのテンプレートが使用されます。

  • たとえば、リソース名が A で、その Count の値が 3 の場合、処理済みテンプレートでは、リソース AA[0]A[1]A[2] の 3 つのリソースに置き換えられます。

    Resources:
      A:
        Count: 3
        ...

    処理後:

    Resources:
      A[0]:
        ...
      A[1]:
        ...
      A[2]:
        ...
    重要

    A[1] のような展開されたリソースの名前が元のテンプレートに既に存在する場合、前処理は失敗し、テンプレートの検証も失敗します。

    既存のリソースに Count プロパティを追加することは避けてください。この操作はリソース名を変更し、削除操作を引き起こします。

  • Count プロパティの値は、非負の整数に解決される必要があります。次の関数のみがサポートされています。

  • 処理済みテンプレート内のリソースの総数は、制限を超えることはできません。現在の制限は 300 リソースです。

  • Properties プロパティを持つリソースの Count セクションでは、ALIYUN::Index 疑似パラメーターを使用できます。前処理中に、このパラメーターはリソースレプリカのインデックス (0 から開始) に置き換えられます。たとえば、A[0]ALIYUN::Index は 0 に置き換えられ、A[1]ALIYUN::Index は 1 に置き換えられます。テンプレートの他の場所で ALIYUN::Index を使用することはできません。

  • Count プロパティを持つリソースが DependsOn プロパティで参照される場合、その参照は展開されます。

    DependsOn: A

    処理後:

    DependsOn:
      - A[0]
      - A[1]
      - A[2]
  • Count プロパティを持つリソースが Ref または Fn::GetAtt 関数によって参照される場合、その参照は展開されます。

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

    処理後:

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

    複数のリソースが Count プロパティを使用し、相互に参照する場合は、CountFn::Select および ALIYUN::Index と共に使用します。

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

    A を例にとります。BA を参照し、BCount が 2 であると仮定します。変換後、B[0]B[1] の式の一部は次のようになります。

    - Ref: A[0]
    - Ref: A[1]
  • リソースが Count プロパティを指定する場合、その DependsOn プロパティも式をサポートします。DependsOn 式で使用できる関数は、Count プロパティの関数と同じです。ALIYUN::Index 疑似パラメーターも使用できます。次の表に、式のフォーマットと許容される結果を示します。

    フォーマット

    許容される結果

    辞書。

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

    Null。

    結果が null の場合、DependsOn プロパティは削除されます。

    文字列。

    • 結果が空の文字列の場合、DependsOn プロパティは削除されます。

    • 結果が空でない文字列の場合、それは有効なリソース名でなければなりません。

    リスト。

    • リスト項目が null または空の文字列の場合、その項目は破棄されます。

    • 項目が破棄された後にリストが空になった場合、DependsOn プロパティは削除されます。

    • リストが空でない場合、各項目は文字列であり、有効なリソース名でなければなりません。

    リスト。

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

    リスト項目は辞書または文字列にすることができます。許容される結果は、項目のタイプによって異なります。

    • リスト項目が辞書の場合、式が評価されます。許容される結果は次のとおりです。

      • 結果が null または空の文字列の場合、その項目は破棄されます。

      • それ以外の場合、結果は文字列であり、有効なリソース名でなければなりません。

    • リスト項目が文字列の場合、それは有効なリソース名でなければなりません。

    説明

    項目が破棄された後にリストが空になった場合、DependsOn プロパティは削除されます。

    文字列。

    Server0

    文字列。

    追加の処理は実行されません。

    次のテンプレート例は、Count を使用する際にリソース作成の同時実行性を制御する方法を示しています。Count パラメーターは作成するリソースの数を指定し、ParallelCount パラメーターは同時作成操作の最大数を指定します。

    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]

    処理済みテンプレートは、Count と ParallelCount の値によって異なります。

    • Count を 3 に、ParallelCount を 1 に設定した場合、処理済みテンプレートは次のようになります。

      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
    • Count を 5 に、ParallelCount を 2 に設定した場合、処理済みテンプレートは次のようになります。

      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
    • Count を 5 に、ParallelCount を 3 に設定した場合、処理済みテンプレートは次のようになります。

      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

以下は、Count を使用するテンプレートの例です。このテンプレートは、EIP のグループと、同数の ECS インスタンスを作成し、各 EIP を 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

処理後:

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

リソース宣言の例

以下は、リソース宣言の典型的な例です。

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