gpt4 book ai didi

aws-cloudformation - 指定 HostedZone 名称服务器作为 CloudFormation 输出

转载 作者:行者123 更新时间:2023-12-03 15:56:29 25 4
gpt4 key购买 nike

我正在为多个域创建 CFN 堆栈。该域不属于 AWS 注册表,而是第三方注册表。

我希望将 SOA 中的名称服务器列表作为堆栈输出的一部分。但是,由于它们不是作为字符串返回,而是根据文档返回“集合”,所以我不知道如何提取和返回它们。

详细信息:

根据AWS::Route53::HostedZone的文档,您可以通过以下方式获取名称服务器列表

Return Values

[...]

Fn::GetAtt

Fn::GetAtt returns a value for a specified attribute of this type. The following are the available attributes and sample return values.

NameServers

Returns the **set** of name servers for the specific hosted zone. For example: ns1.example.com.

This attribute is not supported for private hosted zones.

所以,我尝试这样做:

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 的描述函数检索名称服务器,但我的感觉是我错过了一些完全明显的东西,因此不想添加额外的步骤。

最佳答案

名称服务器集是一个字符串数组。为了输出它,您需要像这样使用 !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

您应该看到以下输出: Console screenshot of CloudFormation Outputs

关于aws-cloudformation - 指定 HostedZone 名称服务器作为 CloudFormation 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55233961/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com