Resources セクションでは、スタック内の各リソースのプロパティと、リソース間の依存関係を記述します。リソースは、他のリソースから、または Outputs セクションで参照できます。
リソースエンティティタイプ
リソースエンティティは、通常のリソースとデータソースリソースに分類されます。通常のリソースは、さらに Alibaba Cloud リソースとカスタムリソースに分けられます。次の表に、リソースエンティティタイプを説明します。
リソースエンティティタイプ | 説明 |
通常のリソース (Resource) |
|
データソースリソース (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.smallCondition
テンプレートでは、[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.smallCount
テンプレート内のリソースに 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疑似パラメーターを使用できます。前処理中に、このパラメーターはリソースレプリカのインデックス (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 プロパティを使用し、相互に参照する場合は、
CountをFn::SelectおよびALIYUN::Indexと共に使用します。Fn::Select: - Ref: ALIYUN::Index - Ref: AAを例にとります。BがAを参照し、BのCountが 2 であると仮定します。変換後、B[0]とB[1]の式の一部は次のようになります。- Ref: A[0] - Ref: A[1]リソースが
Countプロパティを指定する場合、そのDependsOnプロパティも式をサポートします。DependsOn式で使用できる関数は、Countプロパティの関数と同じです。ALIYUN::Index疑似パラメーターも使用できます。次の表に、式のフォーマットと許容される結果を示します。フォーマット
例
許容される結果
辞書。
Fn::Split: - ',' - Server1,Server2Null。
結果が 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: NumberCount を 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: NumberCount を 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