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

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

阅读AWS文档here,我发现以下声明:

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

我无法使其工作,每次我得到:参数验证失败:参数值...参数名称...不存在。

是否应该尝试解析参数类型AWS::SSM::Parameter::Name?不管怎样,我继续寻找,发现了另一个说法这里

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

我可能没有正确理解它,所以我想请求一个关于 如何从 CloudFormation 检查 Systems Manager 中是否存在参数?

的示例

使用案例:

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

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
amazon-web-services aws-cloudformation amazon-systems-manager
1个回答
0
投票

据发现,有一种开箱即用的方法可以使用 Cloudformation 检查某个参数是否存在。不过,您可以创建由 Lambda 函数支持的自定义资源,该函数可以在运行时为您提供所需的信息。

© www.soinside.com 2019 - 2024. All rights reserved.