我正在为许多域创建一个CFN堆栈。域名不是AWS注册中心,而是第三方注册中心。
我希望将来自SOA的名称服务器列表作为堆栈输出的一部分。但是,由于它们不是以字符串的形式返回的,但是,根据docs,"set",我不知道如何提取和返回它们。
详细信息:
根据AWS::Route53::HostedZone的文档,您可以使用
返回值 ..。 Fn:GetAtt Fn::GetAtt返回此类型的指定属性的值。以下是可用属性和示例返回值。 NameServers 返回特定宿主区域的名称服务器的**set**。例如: ns1.example.com。私有托管区域不支持此属性。
所以,我试着做:
Resources:
MyZone:
Type: 'AWS::Route53::HostedZone'
Properties:
Name: my.domain.
...
Outputs:
MyZone:
Value: !Ref MyZone
MyZoneServers:
Value: !GetAtt MyZone.NameServers但这意味着:
An error occurred (ValidationError) when calling the UpdateStack operation: Template format error: The Value field of every Outputs member must evaluate to a String.当我只输出区域裁判时,它工作得很好,得到Z.区域的字符串。
我尝试过各种其他的技巧和方法,主要是使用各种内部函数,如!Split、!Select等。我似乎找不到这个“集合”是什么:列表?逗号分隔的字符串?(在这种情况下,!Split应该可以工作)
在堆栈创建之后,我可以通过Route53的描述函数检索名称服务器,但是我的感觉是,我遗漏了一些非常明显的东西,所以不想添加额外的步骤。
发布于 2019-04-14 19:15:05
名称服务器的集合是一个字符串数组。为了输出它,您需要像这样使用!Join:
Resources:
MyZone:
Type: 'AWS::Route53::HostedZone'
Properties:
Name: my.domain.
...
Outputs:
MyZone:
Value: !Ref MyZone
MyZoneServers:
Value: !Join [',', !GetAtt MyZone.NameServers] # or any other delimiter that suits you您应该看到以下输出:

https://stackoverflow.com/questions/55233961
复制相似问题