「Resources(リソース)」セクションでは、スタック内の各リソースのプロパティおよびリソース間の依存関係を定義します。他のリソースや「Outputs(出力)」セクションから、任意のリソースを参照できます。
リソースエンティティの種類
リソースエンティティは、通常のリソース(Regular resource)とデータソースリソース(Data source resource)に分類されます。通常のリソースはさらに、Alibaba Cloud リソースとカスタムリソースに分けられ、以下の表に示します。
リソースエンティティの種類 | 説明 |
通常のリソース(Resource) |
|
データソースリソース(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 が依存するリソースの 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を使用できます。前処理中に、このパラメーターは対応する数値に置き換えられます。たとえば、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: AAを例にとります。BがAを参照し、Countが 2 の場合、Bの変換後の式の一部は、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