Falha interna do parâmetro GetAtt VPC do CloudFormation

1

Eu tenho dois arquivos Cloudformation sendo usados para fazer duas pilhas diferentes contendo um VPC cada. Um é um admin VPC que será usado para acessar o outro VPC via ssh e tudo o que, típico caso de uso bastiony.

Giro o VPC do administrador e depois passo seu ID para o segundo arquivo CF como parâmetro especificamente com o tipo de ID do VPC:

"AdminVPC": {
  "Description": "ID of the admin VPC",
  "Type": "AWS::EC2::VPC::Id"
}

Mas quando estou tentando configurar a rede ACL da VPC, estou fazendo

"Type": "AWS::EC2::NetworkAclEntry",
  "Properties": {
    "CidrBlock": {
      "Fn::GetAtt": [
        {
          "Ref": "AdminVPC"
        },
        "CidrBlock"
      ]
    },

Qual, quando eu executo um ecs cf validate, produz apenas a mensagem

An error occurred (ValidationError) when calling the ValidateTemplate operation: Internal Failure

Funciona bem se eu apenas codificar em um bloco CIDR como

"CidrBlock": "0.0.0.0/0",

Mas os documentos reivindicam :

  1. Usando um GetAtt para obter o bloco CIDR fora do ID do vpc deve funcionar
  2. Para o nome do atributo Fn :: GetAtt, você pode usar a função Ref.

Então, não tenho certeza do que está errado com esse uso ...

    
por Ernest Mueller 25.08.2016 / 21:34

1 resposta

1

o primeiro argumento para Fn::GetAtt deve ser o nome do recurso lógico definido em seu modelo, portanto, a sequência deve ser um dos Recursos criados no modelo.

Ao usar os tipos de parâmetro do AWS, tudo o que é transmitido ao modelo é o id desse recurso; portanto, o único valor contido em {"Ref": "AdminVPC"} seria algo como vpc-abc123 . Você não passa o VPC para o modelo, apenas o seu id.

A solução para o seu problema seria aceitar o CIDR como um parâmetro no modelo, o modelo que cria o VPC deve ter uma saída que use {"Fn::GetAtt": ["AdminVPC", "CidrBlock"]}

    
por 25.08.2016 / 22:08