如何在SAM模板(YAML)中引用Metadata名称及获取CloudFormation栈名称?
SAM模板问题解答
1. 引用Metadata.Name报错的原因及修复
CloudFormation内置函数(如Fn::Sub)无法直接读取模板根层级的Metadata字段——Metadata仅用于向工具、服务(比如AWS Serverless Repository)提供元数据,不属于资源属性可直接调用的变量范畴。
修复方案:将需要复用的名称值抽离到Parameters中,实现一处定义多处引用:
Parameters: AppName: Type: String Default: My-Serverless Metadata: AWS::ServerlessRepo::Application: Name: !Ref AppName Description: My Serverless SemanticVersion: 1.0.0 Resources: ConfigurationParameter: Type: AWS::SSM::Parameter Properties: Name: Fn::Sub: config/${AppName} Type: String Value: false
2. 获取CloudFormation栈名称的方法
可以直接使用CloudFormation的**伪参数AWS::StackName**获取当前栈名称,无需额外配置:
拼接使用(结合Fn::Sub)
Resources: ConfigurationParameter: Type: AWS::SSM::Parameter Properties: Name: Fn::Sub: config/${AWS::StackName} Type: String Value: false
直接引用
如果不需要字符串拼接,直接用!Ref AWS::StackName即可获取栈名称的原始字符串。
内容的提问来源于stack exchange,提问作者wapt49
相关产品推荐
相关产品推荐

