Облачная информация: Fn :: GetAtt: не работает для конечной точки.Адрес в AWS :: RDS :: DBInstance

#amazon-web-services #amazon-cloudformation

#amazon-веб-сервисы #aws-облачная информация

Вопрос:

Когда я пытаюсь обновить или создать набор изменений для стека, который использует Fn::GetAtt: Database.Endpoint.Address (где Database — логическое имя AWS::RDS::DBInstance ресурса), попытка завершается неудачей Template error: every Fn::GetAtt object requires two non-empty parameters, the resource name and the resource attribute .

По-видимому, это связано с тем, что CloudFormation декодирует YAML в следующий JSON:

 [
  'Database',
  'Endpoint',
  'Address'
]
  

Это явно три параметра, когда их должно быть два. Это известная ошибка?

Ответ №1:

Fn::GetAtt ожидает массив с двумя параметрами. !GetAtt позволяет использовать точечную нотацию, которую вы пытаетесь использовать.

Любой из них должен работать для вас:

Fn::GetAtt: [ "Database", "Endpoint.Address" ]

!GetAtt Database.Endpoint.Address

Ресурсы:

Комментарии:

1. К сожалению, по какой-либо причине, которую я не могу предугадать, ни один из них не работает. У меня есть запрос в службу поддержки, отправленный в AWS, и я обновлю этот пост с любыми выводами.

2. можете ли вы опубликовать более полную версию своего шаблона CF? возможно, есть какие-то проблемы с разделением / вложенностью функций.

3. также было бы полезно узнать, получаете ли вы ту же ошибку или другую ошибку сейчас

Ответ №2:

Рекомендуем попробовать линтер CloudFormation в VSCode, чтобы увидеть некоторые из этих встроенных ошибок при создании шаблонов вместе со ссылками на автозаполнение и документацию:

Расширение кода Visual Studio

Попробуйте переключить синтаксис на !GetAtt Database.Endpoint.Address

Ответ №3:

Возможно, вы используете его в инструкции linux / unix и что-то упускаете в синтаксисе, например, запятую (,) или скобки ([)

Пример — здесь ожидается, что после базы данных GetAtt будет стоять запятая (,).Конечная точка.Адрес. Если вы пропустите это, то Linter не выдаст ошибку, поскольку она находится в контексте скрипта Linux, а Cloud Formation не выдаст правильное сообщение об ошибке.

» wp core config —dbname='», !Ref DatabaseName, «‘ —dbuser='», !Ref DatabaseMasterUsername, «‘ —dbpass='», !Ref DatabaseMasterPassword, «‘ —dbhost='», !GetAtt Database.Конечная точка.Адрес, «‘ —dbprefix=wp_ —allow-root n»,