如何从CloudFormation检查Systems Manager中的参数是否存在

时间:2018-11-11 21:45:39

标签: amazon-web-services amazon-cloudformation amazon-systems-manager

在阅读AWS文档here时,我发现以下语句:

  

AWS :: SSM :: Parameter :: Name
  Systems Manager参数密钥的名称。
  要传递参数密钥时,请使用此参数。例如,您可以使用此类型来验证参数是否存在。

每次得到以下提示时,我都无法使它起作用: 参数验证失败:参数名称的参数值...不存在。

是否应该尝试解析参数类型 AWS :: SSM :: Parameter :: Name ?无论如何,我一直在搜索并找到另一条语句here

  

列表中的第一个用于照原样传递参数键的名称。 CloudFormation将不会获取针对它存储的值。例如,您可以使用此类型来验证参数是否存在于参数存储中。

我可能无法正确理解它,因此我想请求一个关于如何从CloudFormation的Systems Manager中检查参数是否存在的示例?

用例:

我的主要区域的所有参数都存储在Systems Manager中,但是我的第二个区域(冗余)只有几个。考虑不在每个区域中两次创建Zone / RecorSet的示例。为此,我使用一个条件,如下所示:

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  MainRegion:
    Type: String
    Default: 'us-east-1'
  PrivateFullyQualifiedDomainName:
    Type: 'AWS::SSM::Parameter::Name'
    Default: '/company/route53/private'
Conditions:
  CreateUniqueResources: !Equals [ !Ref 'AWS::Region', !Ref MainRegion ]
Resources:
  Route53Stack:
    Type: 'AWS::CloudFormation::Stack'
    Condition: CreateUniqueResources
    Properties:
      TemplateURL: [some s3 bucket]
      Parameters:
        PrivateDomainName: !Ref PrivateFullyQualifiedDomainName
Outputs:
  TestParameterName:
    # Outputs: /company/route53/private
    Value: !Ref PrivateFullyQualifiedDomainName

还有嵌套堆栈:

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  PrivateDomainName:
    Type: 'AWS::SSM::Parameter::Value<String>'
Resources:
  [sutff...]
Outputs:
  TestParameterValue:
    # Outputs WHEN it exists: supersecretdomain.company.com
    Value: !Ref PrivateDomainName

0 个答案:

没有答案