阅读此处的 AWS 文档,我发现了以下语句:
AWS::SSM::Parameter::Name
Systems Manager 参数键的名称。
当您要传递参数键时使用此参数。例如,您可以使用此类型来验证参数是否存在。
我无法让它工作,每次我得到:参数验证失败:参数值......参数名称......不存在。
它应该尝试解析参数类型AWS::SSM::Parameter::Name吗?不管怎样,我一直在寻找,在这里找到了另一个说法:
列表中的第一个用于按原样传递参数键的名称。CloudFormation 不会获取针对它存储的值。例如,您可以使用此类型来验证参数是否存在于 Parameter Store 中。
我可能没有正确理解它,所以我想请求一个示例,说明如何检查 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