#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, чтобы увидеть некоторые из этих встроенных ошибок при создании шаблонов вместе со ссылками на автозаполнение и документацию:
Попробуйте переключить синтаксис на !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»,