AWS CloudFormation の同じ親スタック内にある 2 つのネストされたスタック間で、値を渡したり共有したりすることを考えています。
簡単な説明
この解決方法では、以下を前提としています。
- 同じ親スタックの一部である NestedStackA と NestedStackB がある。
- NestedStackA の値を NestedStackB で使用する。
解決方法
- FSP AWS CloudFormation テンプレートで、ソーススタック(NestedStackA)の出力として共有する値を渡します。以下の JSON と YAML の例を参照してください。
JSON:
"Outputs": {
"SharedValueOutput": {
"Value": "yourValue",
"Description": "You can refer to any resource from the template."
}
}
YAML:
Outputs:
SharedValueOutput:
Value: yourValue
Description: You can refer to any resource from the template.
- FSP 送信先スタック (NestedStackB) でパラメータを作成します。以下の JSON と YAML の例を参照してください。
JSON:
"Parameters": {
"SharedValueParameter": {
"Type": "String",
"Description": "The shared value will be passed to this parameter by the parent stack."
}
}
YAML:
Parameters:
SharedValueParameter:
Type: String
Description: The shared value will be passed to this parameter by parent stack.
- FSP NestedStackA からの出力値を、NestedStackB のパラメータ値として渡します。親スタックでこの値にアクセスするには、[Fn:: GetAtt] 関数を使用します。NestedStackA の論理名と Outputs.NestedStackOutputName 形式の出力値の名前を使用します。以下の JSON と YAML の例を参照してください。
JSON:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"NestedStackA": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "<S3 URL for the template>"
}
},
"NestedStackB": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "<S3 URL for the template>",
"Parameters": {
"SharedValueParameter": {
"Fn::GetAtt": [
"NestedStackA",
"Outputs.SharedValueOutput"
]
}
}
}
}
}
}
YAML:
AWSTemplateFormatVersion: 2010-09-09
Resources:
NestedStackA:
Type: 'AWS::CloudFormation::Stack'
Properties:
TemplateURL: <S3 URL for the template>
NestedStackB:
Type: 'AWS::CloudFormation::Stack'
Properties:
TemplateURL: <S3 URL for the template>
Parameters:
SharedValueParameter:
Fn::GetAtt:
- NestedStackA
- Outputs.SharedValueOutput
関連情報
ネストされたスタックの使用
AWS::CloudFormation::Stack
AWS CloudFormation テンプレートスニペット