AWS Cloudformation - não é possível adicionar várias associações de sub-rede a uma tabela de roteamento público

8

Temos um VPC com um gateway de Internet. Temos 3 sub-redes (uma em cada AZ) e queremos usar uma tabela de roteamento para todas as três. Esta RT contém uma regra para rotear 0.0.0.0/0 para o igw. No entanto, quando tentamos associar mais de uma sub-rede a essa RT, a criação da pilha falha ao criar a regra de roteamento, fornecendo a seguinte mensagem de erro:

route table rtb-xxxxxxx and network gateway igw-xxxxx belong to different networks.

Isso é estranho porque o igw não está conectado a uma sub-rede, está anexado à própria VPC.

O que preciso fazer para que o modelo funcione é ter apenas uma associação de sub-rede com o RT e depois atualizar a pilha com os outros dois.

Eu tentei adicionar 2 Condições de Espera, uma ligada à criação do RT e outra à criação da regra de roteamento, mas elas não corrigem o problema - ainda recebo o mesmo erro na mesma regra. : (

Alguém pode lançar alguma luz sobre o que preciso fazer para corrigir esse problema?

    
por Marcus 27.11.2013 / 18:50

5 respostas

5

tem a certeza que ligou o InternetGatway a um VPC (ou ao mesmo VPC que a tabela de rotas). Na formação de nuvens isso parece algo como ...

    "AttachInternetGateway" : {
       "Type" : "AWS::EC2::VPCGatewayAttachment",
       "Properties" : {
          "VpcId" : { "Ref" : "YourVpc" },
          "InternetGatewayId" : { "Ref" : "InternetGateway" }
       }
    },
    
por 02.09.2014 / 07:21
5

Como @Marcus explicou em sua resposta à sua própria pergunta; é a falta do atributo DependsOn quando você cria um Entrada AWS :: EC2 :: Rota onde você especifica um Gateway .

For route entries that specify a gateway, you must specify a dependency on the gateway attachment resource.

Tendo recebido o mesmo erro e coçando minha cabeça a respeito de como isso falhou quando o IGW foi anexado ao VPC, foi uma mudança simples na declaração AWS::EC2::Route .

CFN com falha:

"VPC" : {
    "Type" : "AWS::EC2::VPC",
    "Properties" : {"CidrBlock" : "10.1.0.0/16"}
},
"InternetGateway" : {
    "Type" : "AWS::EC2::InternetGateway"
},
"InternetGatewayAttachment" : {
    "Type" : "AWS::EC2::VPCGatewayAttachment",
    "Properties" : {
        "VpcId" : {"Ref" : "VPC"},
        "InternetGatewayId" : {"Ref" : "InternetGateway"}
    }
},
"ManagementRouteTable" : {
    "Type" : "AWS::EC2::RouteTable",
    "Properties" : {
        "VpcId" : {"Ref" : "VPC"}
    }
},
"NATDefaultRoute" : {
    "Type" : "AWS::EC2::Route",
    "Properties" : {
        "RouteTableId" : {"Ref" : "ManagementRouteTable"},
        "DestinationCidrBlock" : "0.0.0.0/0",
        "GatewayId" : {"Ref" : "InternetGateway"}
    }
}

CFN de trabalho:

"VPC" : {
    "Type" : "AWS::EC2::VPC",
    "Properties" : {"CidrBlock" : "10.1.0.0/16"}
},
"InternetGateway" : {
    "Type" : "AWS::EC2::InternetGateway"
},
"InternetGatewayAttachment" : {
    "Type" : "AWS::EC2::VPCGatewayAttachment",
    "Properties" : {
        "VpcId" : {"Ref" : "VPC"},
        "InternetGatewayId" : {"Ref" : "InternetGateway"}
    }
},
"ManagementRouteTable" : {
    "Type" : "AWS::EC2::RouteTable",
    "Properties" : {
        "VpcId" : {"Ref" : "VPC"}
    }
},
"NATDefaultRoute" : {
    "DependsOn" : "InternetGatewayAttachment",
    "Type" : "AWS::EC2::Route",
    "Properties" : {
        "RouteTableId" : {"Ref" : "ManagementRouteTable"},
        "DestinationCidrBlock" : "0.0.0.0/0",
        "GatewayId" : {"Ref" : "InternetGateway"}
    }
}
    
por 07.12.2015 / 01:13
3

Eu encontrei uma correção. Eu estava no caminho certo com as Condições de Espera, no entanto, descobri que eu precisava adicionar um DependsOn atribui à regra de modo que dependesse do igw que está sendo criado primeiro.

    
por 28.11.2013 / 11:09
0

É assim que associamos várias sub-redes à mesma tabela de rotas:

...
"PublicSubnetA": {
    "Type": "AWS::EC2::Subnet",
    "Properties": { "AvailabilityZone": "..",
                    "CidrBlock": "...",
                    "VpcId": { "Ref": "VPC" },
                    "Tags": [ .. ] }},
"PublicSubnetB": {
    "Type": "AWS::EC2::Subnet",
    "Properties": { "AvailabilityZone": "..",
                    "CidrBlock": "...",
                    "VpcId": { "Ref": "VPC" },
                    "Tags": [ .. ] }},
"RouteTableIGW": {
    "Type": "AWS::EC2::RouteTable",
    "Properties": { "VpcId": { "Ref": "VPC" },
                    "Tags": [ .. ]}},
"...": {
    "Type": "AWS::EC2::SubnetRouteTableAssociation",
    "Properties": { "RouteTableId": { "Ref": "RouteTableIGW" },
                    "SubnetId":     { "Ref": "PublicSubnetA" }}
},
"...": {
    "Type": "AWS::EC2::SubnetRouteTableAssociation",
    "Properties": { "RouteTableId": { "Ref": "RouteTableIGW" },
                     "SubnetId":    { "Ref": "PublicSubnetB" }}
},
... 

E funciona muito bem. Eu associo dessa forma uma Tabela de Rota dirigida por IGW com 2 sub-redes públicas e outra tabela de Rota direcionada por NAT com 4 sub-redes privadas.

    
por 27.11.2013 / 22:07
-1

Você deve usar a passagem para anexar várias sub-redes com a tabela de rotas e os gateways da Internet. Assim, atribui o internetgateway com o vpc

    
por 03.03.2014 / 10:05