【问题标题】:Prepend StackName to Cloudformation resources将 StackName 附加到 Cloudformation 资源
【发布时间】:2019-04-15 15:28:25
【问题描述】:

我想拥有基于单个 CloudFormation 模板的多个堆栈,但我遇到了命名冲突。解决此问题的最简单方法似乎是将StackName 添加到每个重复资源之前(或附加),例如我的 lambda 函数或角色。

AWS 在'Template Reference' section of the documentation 中谈到了AWS::StackName,但没有明确说明如何做到这一点。

如何将 StackName 添加到 CloudFormation 资源?

MyLambdaFunction
  Type: "AWS:Serverless::Function"
  Properties:
    FunctionName: AWS::StackName + "-myLambdaFunction"

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation naming


    【解决方案1】:

    我更喜欢使用Fn::Sub,因为我相信它比其他选项更容易阅读:

    "RoleName": { "Fn::Sub" : "${AWS::StackName}-InstanceRole" },
    

    【讨论】:

    • 需要更多支持。即使在 YAML 模板中,Join 也可能是难以理解的混乱,而 Sub 则非常简单。 YMMV。
    【解决方案2】:

    你需要Ref伪参数并使用Fn::Join方法来构造名字

    MyLambdaFunction
      Type: "AWS:Serverless::Function"
      Properties:
        FunctionName: !Join [ "", [ {"Ref": "AWS::StackName"}, "-myLambdaFunction" ]]
    

    【讨论】:

      【解决方案3】:

      YAML 版本:

      RoleName: !Sub ${AWS::StackName}-InstanceRole
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-30
        • 1970-01-01
        • 2019-03-02
        • 1970-01-01
        • 2020-06-26
        相关资源
        最近更新 更多