![](/img/trans.png)
[英]How to pass a list to a nested stack parameter in AWS CloudFormation?
[英]AWS CloudFormation CodePipeline, ParameterOverrides, pass list to a nested stack
問題范圍:
AWS CodeBuild,ParametersOverrides 部分
1) 我可以將字符串傳遞給 ParameterOverrides,然后將它們傳遞給嵌套堆棧,如下所述
- 創建一個字符串參數
- 將它傳遞給 AWS CodeBuild 項目的 ParameterOverrides 部分
-parse 嵌套堆棧中的參數
引用官方文檔: AWS::CloudFormation::Stack
如果使用 Ref 函數將參數值傳遞到嵌套堆棧,則逗號分隔的列表參數必須是 String 類型。 換句話說,您不能將 CommaDelimitedList 類型的值傳遞給嵌套堆棧。
2)我無法弄清楚如何使用以下配置將 List 轉換為 ParameterOverrides 部分中的字符串:
- 定義類型為列表 ServiceSubnets 的參數:類型:列表描述:與服務關聯的子網
- 嘗試將 ParameterOverrides 部分中的參數作為值傳遞給嵌套堆棧,應用 Join 函數將其轉換為字符串
ParameterOverrides: !Sub | { "ImageURI" : { "Fn::GetParam" : [ "BuildOutput", "imageDetail.json", "ImageURI" ] }, "ApplicationRepoName": "${ApplicationRepoName}", "Cluster": "${Cluster}", "ListenerArn": "${ListenerArn}", "TargetGroup": "${TargetGroup}", "ServiceDesiredCount": "${ServiceDesiredCount}", "ServiceLoadBalancerPath": "${ServiceLoadBalancerPath}", "ServiceContainerPort": "${ServiceContainerPort}", "ServiceSecurityGroups": { "Fn::Join" : [ ",", "${ServiceSecurityGroups}"] ] }, "ServiceSubnets": { "Fn::Join" : [ ",", "${ServiceSubnets}" ] }, "TaskContainerPort": "${TaskContainerPort}", "TaskCpu": "${TaskCpu}", "TaskMemory": "${TaskMemory}", "TaskExecutionRoleArn": "${TaskExecutionRoleArn}" }
所以我希望應該將 List 轉換為 String 並且應該傳遞 String 然后在嵌套堆棧中使用,但是,嘗試部署此類堆棧返回錯誤:
模板錯誤:Fn::Sub 表達式中的變量 ServiceSecurityGroups 未解析為字符串
我的問題:
是否可以在 ParameterOverrides 部分中使用 Join 函數將列表轉換為字符串?
如果是,如果您與我分享一些說明如何執行此操作的示例,我將不勝感激。
謝謝你。
不幸的是,您不能在 Fn::Sub 語法參考中使用內部函數
您仍然可以在 Fn::Sub 變量映射中使用其他內部函數,例如 Fn::Join。 因此,您的 ParameterOverrides 將如下所示:
ParameterOverrides: !Sub
- |
{
"ImageURI" : { "Fn::GetParam" : [ "BuildOutput", "imageDetail.json", "ImageURI" ] },
"ApplicationRepoName": "${ApplicationRepoName}",
"Cluster": "${Cluster}",
"ListenerArn": "${ListenerArn}",
"TargetGroup": "${TargetGroup}",
"ServiceDesiredCount": "${ServiceDesiredCount}",
"ServiceLoadBalancerPath": "${ServiceLoadBalancerPath}",
"ServiceContainerPort": "${ServiceContainerPort}",
"ServiceSecurityGroups": "${KEY_NAME_1}",
"ServiceSubnets": "${KEY_NAME_2}",
"TaskContainerPort": "${TaskContainerPort}",
"TaskCpu": "${TaskCpu}",
"TaskMemory": "${TaskMemory}",
"TaskExecutionRoleArn": "${TaskExecutionRoleArn}"
}
- KEY_NAME_1: !Join [ ",", [ !Ref ServiceSecurityGroups ] ]
KEY_NAME_2: !Join [ ",", [ !Ref ServiceSubnets ] ]
如果您的 ServiceSecurityGroups 和 ServiceSubnets 已經是列表,則刪除 !Ref 語句周圍的方括號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.