【问题标题】:AWS CloudFormation CodePipeline, ParameterOverrides, pass list to a nested stackAWS CloudFormation CodePipeline、ParameterOverrides、将列表传递给嵌套堆栈
【发布时间】:2020-06-28 11:08:33
【问题描述】:

问题的范围:

AWS CodeBuild,ParametersOverrides 部分

Using Parameter Override Functions with CodePipeline Pipelines

1) 我可以将字符串传递给 ParameterOverrides, 然后将它们传递给嵌套堆栈,如下所述

-创建字符串参数

-将其传递给 AWS CodeBuild 项目的 ParameterOverrides 部分

-解析嵌套堆栈中的参数

引用官方文档: AWS::CloudFormation::Stack

如果使用 Ref 函数将参数值传递给嵌套 堆栈,逗号分隔的列表参数必须是字符串类型。在 换句话说,您不能传递类型为 CommaDelimitedList 到嵌套堆栈。

2) 我不知道如何将列表转换为字符串 在具有以下配置的 ParameterOverrides 部分内:

- 定义列表类型的参数 服务子网: 类型:列表 说明:与服务关联的子网

-尝试在 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 函数 将列表转换为字符串?

如果是的话,如果你能分享,我将不胜感激 和我一起举一些例子来说明如何做到这一点。

谢谢。

【问题讨论】:

    标签: amazon-web-services parameter-passing amazon-cloudformation aws-codebuild


    【解决方案1】:

    很遗憾,您不能在 Fn::Sub 中使用内部函数 Syntax Reference

    您仍然可以在 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 语句周围的方括号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-10
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2022-01-19
      • 2020-10-31
      • 2019-04-03
      相关资源
      最近更新 更多