Укажите серверы имен HostedZone в качестве выходов CloudFormation - PullRequest
0 голосов
/ 19 марта 2019

Я создаю стек CFN для нескольких доменов.Домен не с реестром AWS, а сторонним.

Я хочу, чтобы список серверов имен из SOA был частью стека Outputs.Однако, поскольку они не возвращаются в виде строки, но, согласно документам, это «набор», я не могу понять, как извлечь и вернуть их.

Подробности:

Согласно документам для AWS::Route53::HostedZone, вы можете получить список серверов имен с

Возвращаемыми значениями

[...]

Fn :: GetAtt

Fn :: GetAtt возвращает значение для указанного атрибута этого типа.Ниже приведены доступные атрибуты и примеры возвращаемых значений.

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 после создания стека, но мне кажется, что я упускаю что-то совершенно очевидное, поэтому не хочудобавить этот дополнительный шаг.

1 Ответ

2 голосов
/ 14 апреля 2019

Набор серверов имен представляет собой массив строк. Чтобы вывести его, вам нужно использовать !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

...