在 SAM 模板 (YAML) 中引用元数据

问题描述 投票:0回答:2

如何引用 SAM 模板 (YAML) 上的“元数据名称”。 我尝试使用 Fn::Sub: config/${Metadata.Name} 如下,但出现验证错误。 有人可以帮忙吗? 或者是否可以在 template.yaml 的 cloudformation 中获取“堆栈名称”?

Metadata:
  AWS::ServerlessRepo::Application:
    Name: My-Serverless
    Description: My Serverless
    SemanticVersion: 1.0.0
Resources:
  ConfigurationParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Name:
        Fn::Sub: config/${Metadata.Name}
      Type: String
      Value: false
amazon-web-services aws-cloudformation aws-sam
2个回答
1
投票
      Environment:
        Variables:
          NAME: !Sub config/${Fn::GetMetadata: MyResource|Name}

0
投票

堆栈名称实际上是一个伪变量,并且通过

${AWS::StackName}
的常规替换“本地”可用。

对于元数据部分中声明的任何其他内容,我尝试了

!Sub
!GetAtt
的多种变体来注入元数据值,但没有成功,直到我偶然发现使用 YAML 锚点的建议。使用它相当简单,除非您想将它嵌入到另一个字符串中,在这种情况下您可以使用内部函数
Fn::Join
。假设地显示两者:

Metadata:
  AWS::ServerlessRepo::Application:
    Name: My-Serverless
    Description: My Serverless
    SemanticVersion: &semantic_version 1.0.0 # create the anchor and default value
Parameters:
  MySemanticVersion:
    Type: String
    Default: *semantic_version # inject the value directly,
                               # here demonstrating as a placeholder
                               # for later !Sub instead of !Join
Resources:
  ConfigurationParameter:
    Type: AWS::SSM::Parameter
    Properties:
      Name:
        Fn::Sub: config/${AWS::StackName} # replaces with "config/My-Serverless"
      Type: String
      Value: false
      Comment: !Sub My parameter from v${MySemanticVersion} # cleaner hack than the following
      Description: !Join ['', [My parameter from v, *semantic_version]]  # replaces with "My parameter from v1.0.0"
© www.soinside.com 2019 - 2024. All rights reserved.