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

Resource Orchestration Service:リソース

最終更新日:Mar 13, 2026

「Resources(リソース)」セクションでは、スタック内の各リソースのプロパティおよびリソース間の依存関係を定義します。他のリソースや「Outputs(出力)」セクションから、任意のリソースを参照できます。

リソースエンティティの種類

リソースエンティティは、通常のリソース(Regular resource)とデータソースリソース(Data source resource)に分類されます。通常のリソースはさらに、Alibaba Cloud リソースとカスタムリソースに分けられ、以下の表に示します。

リソースエンティティの種類

説明

通常のリソース(Resource)

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

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

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

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

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

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

構文

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

Resources:
  Resource1 Name:
    Type: リソースタイプ
    Condition: このリソースを作成する条件
    Properties: リソースのプロパティ説明
  Resource2 Name:
    Type: リソースタイプ
    Condition: このリソースを作成する条件
    Properties: リソースのプロパティ説明

各パラメーターの説明は以下のとおりです:

  • リソース名は、テンプレート内で一意である必要があります。この名前を用いて、テンプレート内の他の箇所から該当リソースを参照できます。

  • リソースタイプ(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 リソースは保持されます。

重要

リソースに DeletionPolicy が設定されており、DeleteStack 操作を呼び出して RetainResources パラメーターに該当リソースを含めた場合、以下の原則が適用されます:

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

  • リソース A のテンプレート内での DeletionPolicy=Retain が設定されている場合、スタック削除時において、RetainResources に含まれているかどうかに関わらず、リソースは常に保持されます。

DependsOn

テンプレート内で、DependsOn 属性を使用すると、あるリソースが別の指定されたリソースの作成が完了した後にのみ作成されるよう保証できます。DependsOn 属性をリソースに適用すると、DependsOn で参照されるリソースが完全にプロビジョニングされるまで、そのリソースは作成されません。

重要

DependsOn が依存するリソースの ConditionFalse と評価される場合があります。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 の場合、前処理後のテンプレートには A リソースは含まれません。代わりに、A[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 を使用できます。前処理中に、このパラメーターは対応する数値に置き換えられます。たとえば、ALIYUN::Index を使用する A[0] では 0 に、ALIYUN::Index を使用する A[1] では 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 を使用し、相互に参照関係がある場合、Fn::Select および ALIYUN::Index を併用できます。

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

    A を例にとります。BA を参照し、Count が 2 の場合、B の変換後の式の一部は、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