将 StackName 添加到 Cloudformation 资源
Prepend StackName to Cloudformation resources
我想拥有基于单个 CloudFormation 模板的多个堆栈,但我遇到了命名冲突。解决这个问题的最简单方法似乎是将 StackName
添加到每个重复的资源中,例如我的 lambda 函数或角色。
AWS 在 'Template Reference' section of the documentation 中讨论了 AWS::StackName
,但没有明确说明如何执行此操作。
如何将 StackName
添加到 CloudFormation 资源?
MyLambdaFunction
Type: "AWS:Serverless::Function"
Properties:
FunctionName: AWS::StackName + "-myLambdaFunction"
需要Ref
伪参数,使用Fn::Join
方法构造名称
MyLambdaFunction
Type: "AWS:Serverless::Function"
Properties:
FunctionName: !Join [ "", [ {"Ref": "AWS::StackName"}, "-myLambdaFunction" ]]
我更喜欢使用 Fn::Sub,因为我相信它比其他选择更容易阅读:
"RoleName": { "Fn::Sub" : "${AWS::StackName}-InstanceRole" },
YAML 版本:
RoleName: !Sub ${AWS::StackName}-InstanceRole
我想拥有基于单个 CloudFormation 模板的多个堆栈,但我遇到了命名冲突。解决这个问题的最简单方法似乎是将 StackName
添加到每个重复的资源中,例如我的 lambda 函数或角色。
AWS 在 'Template Reference' section of the documentation 中讨论了 AWS::StackName
,但没有明确说明如何执行此操作。
如何将 StackName
添加到 CloudFormation 资源?
MyLambdaFunction
Type: "AWS:Serverless::Function"
Properties:
FunctionName: AWS::StackName + "-myLambdaFunction"
需要Ref
伪参数,使用Fn::Join
方法构造名称
MyLambdaFunction
Type: "AWS:Serverless::Function"
Properties:
FunctionName: !Join [ "", [ {"Ref": "AWS::StackName"}, "-myLambdaFunction" ]]
我更喜欢使用 Fn::Sub,因为我相信它比其他选择更容易阅读:
"RoleName": { "Fn::Sub" : "${AWS::StackName}-InstanceRole" },
YAML 版本:
RoleName: !Sub ${AWS::StackName}-InstanceRole