如何在 AWS CloudFormation 中將 CommaDelimitedList 參數傳遞給巢狀堆疊?
我想在 AWS CloudFormation 中將 CommaDelimitedList 參數傳遞給巢狀堆疊。
簡短說明
您無法將 CommaDelimitedList 類型的值傳遞給巢狀堆疊。請改為在父堆疊中使用 Fn::Join 內建函數,將 CommaDelimitedList 類型轉換成 String 類型。
解決方案
下列範例說明如何將 SecurityGroupIds 清單從父堆疊傳遞給巢狀堆疊。
1. 開啟父堆疊的 JSON 或 YAML 檔案,然後將 SecurityGroupIds 的 Type 設為 CommaDelimitedList。
在 JSON 檔案的 Resources 區段,Fn::Join 函數會傳回組合字串。在 YAML 檔案的 Resources 區段,!Join 函數會傳回組合字串。在 JSON 和 YAML 檔案中,組合字串都會將 SecurityGroupIds 參數類型從 CommaDelimitedList 轉換為 String。
父系 JSON 檔案的範例:
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "SubnetId": { "Type": "AWS::EC2::Subnet::Id" }, "SecurityGroupIds": { "Type": "List<AWS::EC2::SecurityGroup::Id>" }, "KeyName": { "Type": "AWS::EC2::KeyPair::KeyName" }, "ImageId": { "Type": "String" } }, "Resources": { "Instance": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://s3.amazonaws.com/cloudformation-templates-us-east-2/nested.yml", "Parameters": { "SubnetId": { "Ref": "SubnetId" }, "SecurityGroupIds": { "Fn::Join": [ ",", { "Ref": "SecurityGroupIds" } ] }, "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "ImageId" } } } } } }
父系 YAML 檔案的範例:
AWSTemplateFormatVersion: 2010-09-09 Parameters: SubnetId: Type: 'AWS::EC2::Subnet::Id' SecurityGroupIds: Type: 'List<AWS::EC2::SecurityGroup::Id>' KeyName: Type: 'AWS::EC2::KeyPair::KeyName' ImageId: Type: String Resources: Instance: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-2/nested.yml' Parameters: SubnetId: !Ref SubnetId SecurityGroupIds: !Join - ',' - !Ref SecurityGroupIds KeyName: !Ref KeyName ImageId: !Ref ImageId
**注意事項:**如果傳遞兩個子網路,如 ["subnet-aaaa, subnet-bbbb"],則 Fn::Join 的輸出為 {"subnet-aaaa, subnet-bbbb"}。
2. 在巢狀堆疊的 JSON 或 YAML 檔案中,將 SecurityGroupIds 的 Type 設為 CommaDelimitedList。
範例巢狀 JSON 檔案:
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "SubnetId": { "Type": "String" }, "SecurityGroupIds": { "Type": "CommaDelimitedList" }, "KeyName": { "Type": "String" }, "ImageId": { "Type": "String" } }, "Resources": { "Ec2instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" }, "KeyName": { "Ref": "KeyName" }, "SecurityGroupIds": { "Ref": "SecurityGroupIds" }, "SubnetId": { "Ref": "SubnetId" } } } } }
範例巢狀 YAML 檔案:
AWSTemplateFormatVersion: 2010-09-09 Parameters: SubnetId: Type: String SecurityGroupIds: Type: CommaDelimitedList KeyName: Type: String ImageId: Type: String Resources: Ec2instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref ImageId KeyName: !Ref KeyName SecurityGroupIds: !Ref SecurityGroupIds SubnetId: !Ref SubnetId
注意事項:在巢狀堆疊中,來自父堆疊的組合字串會以 CommaDelimitedList 傳遞給SecurityGroupIds。例如,值 {"sg-aaaaa, sg-bbbbb"} 會轉換回 ["sg-aaaaa", "sg-bbbbb"]。因此,SecurityGroupIds 必須由 SecurityGroupIds: !Ref SecurityGroupIds 直接參考,且不得作為字串清單。
相關資訊
相關內容
- 已提問 10 個月前lg...
- 已提問 9 個月前lg...
- 已提問 1 年前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前