簡體   English   中英

AWS CloudFormation CodePipeline、ParameterOverrides、將列表傳遞給嵌套堆棧

[英]AWS CloudFormation CodePipeline, ParameterOverrides, pass list to a nested stack

問題范圍:

AWS CodeBuild,ParametersOverrides 部分

在 CodePipeline 管道中使用參數覆蓋函數

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM