Назад | Перейти на главную страницу

CloudFormation VPC GetAtt Parameter Внутренняя ошибка

У меня есть два файла 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",

Но претензия документов который:

  1. Использование GetAtt для снятия блока CIDR с идентификатора vpc должно работать
  2. Для имени атрибута Fn :: GetAtt вы можете использовать функцию Ref.

Так что я не уверен, что не так с этим использованием ...

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

При использовании типов параметров AWS все, что передается в шаблон, - это идентификатор этого ресурса, поэтому единственное значение, содержащееся в {"Ref": "AdminVPC"} было бы что-то вроде vpc-abc123 . Вы не передаете VPC в шаблон, только его идентификатор.

Решением вашей проблемы было бы принять CIDR в качестве параметра в шаблоне, шаблон, создающий VPC, должен иметь выход, который использует {"Fn::GetAtt": ["AdminVPC", "CidrBlock"]}