首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将HostedZone NameServers指定为CloudFormation输出

将HostedZone NameServers指定为CloudFormation输出
EN

Stack Overflow用户
提问于 2019-03-19 05:04:00
回答 1查看 1.6K关注 0票数 8

我正在为许多域创建一个CFN堆栈。域名不是AWS注册中心,而是第三方注册中心。

我希望将来自SOA的名称服务器列表作为堆栈输出的一部分。但是,由于它们不是以字符串的形式返回的,但是,根据docs,"set",我不知道如何提取和返回它们。

详细信息:

根据AWS::Route53::HostedZone的文档,您可以使用

返回值 ..。 Fn:GetAtt Fn::GetAtt返回此类型的指定属性的值。以下是可用属性和示例返回值。 NameServers 返回特定宿主区域的名称服务器的**set**。例如: ns1.example.com。私有托管区域不支持此属性。

所以,我试着做:

代码语言:javascript
复制
Resources:
  MyZone:
    Type: 'AWS::Route53::HostedZone'
    Properties:
      Name: my.domain.    
...
Outputs:
  MyZone:
    Value: !Ref MyZone
  MyZoneServers:
    Value: !GetAtt MyZone.NameServers

但这意味着:

代码语言:javascript
复制
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的描述函数检索名称服务器,但是我的感觉是,我遗漏了一些非常明显的东西,所以不想添加额外的步骤。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-14 19:15:05

名称服务器的集合是一个字符串数组。为了输出它,您需要像这样使用!Join

代码语言:javascript
复制
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

您应该看到以下输出:

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55233961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档