У меня есть два файла Cloudformation, которые используются для создания двух разных стеков, каждый из которых содержит VPC. Один из них - это административный VPC, который будет использоваться для доступа к другому VPC через ssh и все такое, типичный вариант использования бастиона.
Я запускаю административный VPC, а затем передаю его идентификатор во второй файл CF в качестве параметра специально с типом идентификатора VPC:
"AdminVPC": {
"Description": "ID of the admin VPC",
"Type": "AWS::EC2::VPC::Id"
}
Но затем, когда я пытаюсь настроить сетевой ACL VPC, я делаю
"Type": "AWS::EC2::NetworkAclEntry",
"Properties": {
"CidrBlock": {
"Fn::GetAtt": [
{
"Ref": "AdminVPC"
},
"CidrBlock"
]
},
Что, когда я запускаю проверку ecs cf, выдает только сообщение
An error occurred (ValidationError) when calling the ValidateTemplate operation: Internal Failure
Он отлично работает, если я просто закодирую в блоке CIDR, например
"CidrBlock": "0.0.0.0/0",
Но претензия документов который:
Так что я не уверен, что не так с этим использованием ...
первый аргумент Fn::GetAtt
должно быть именем логического ресурса, определенного в вашем шаблоне, поэтому строка должна быть одним из ресурсов, созданных в шаблоне.
При использовании типов параметров AWS все, что передается в шаблон, - это идентификатор этого ресурса, поэтому единственное значение, содержащееся в {"Ref": "AdminVPC"}
было бы что-то вроде vpc-abc123
. Вы не передаете VPC в шаблон, только его идентификатор.
Решением вашей проблемы было бы принять CIDR в качестве параметра в шаблоне, шаблон, создающий VPC, должен иметь выход, который использует {"Fn::GetAtt": ["AdminVPC", "CidrBlock"]}