AWS Cloudformation - Es können nicht mehrere Subnetzzuordnungen zu einer öffentlichen Routing-Tabelle hinzugefügt werden

7

Wir haben eine VPC mit einem Internet-Gateway. Wir haben 3 Subnetze (eines in jedem AZ) und möchten eine Routing-Tabelle für alle drei verwenden. Diese RT enthält eine Regel zum Weiterleiten von 0.0.0.0/0 an das igw. Wenn wir jedoch versuchen, dieser RT mehr als ein Subnetz zuzuordnen, schlägt die Stapelerstellung beim Erstellen der Routing-Regel fehl und gibt die folgende Fehlermeldung aus:

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

Das ist seltsam, weil das IgW nicht an ein Subnetz angeschlossen ist, sondern an die VPC selbst.

Was ich tun muss, um die Vorlage zum Laufen zu bringen, ist, nur eine Subnetzzuordnung mit der RT zu haben und anschließend den Stapel mit den anderen beiden zu aktualisieren.

Ich habe versucht, 2 Wartebedingungen hinzuzufügen, eine an die Erstellung der RT und die andere an die Erstellung der Routing-Regel, aber sie beheben das Problem nicht - ich erhalte immer noch den gleichen Fehler bei derselben verdammten Regel :(

Kann jemand etwas Licht ins Dunkel bringen, was ich tun muss, um dieses Problem zu beheben?

Marcus
quelle

Antworten:

5

Sind Sie sicher, dass Sie das InternetGatway an eine VPC angeschlossen haben (oder an dieselbe VPC wie die Routentabelle)? In der Wolkenbildung sieht das so aus wie ...

    "AttachInternetGateway" : {
       "Type" : "AWS::EC2::VPCGatewayAttachment",
       "Properties" : {
          "VpcId" : { "Ref" : "YourVpc" },
          "InternetGatewayId" : { "Ref" : "InternetGateway" }
       }
    },
Tim Witham
quelle
5

Wie @Marcus in seiner Antwort auf seine eigene Frage erklärte; Es ist das Fehlen des DependsOn- Attributs, wenn Sie einen AWS :: EC2 :: Route- Eintrag erstellen, in dem Sie ein Gateway angeben .

Für Routeneinträge, die ein Gateway angeben, müssen Sie eine Abhängigkeit von der Gateway-Anhangsressource angeben.

Nachdem ich den gleichen Fehler erhalten und mir am Kopf gekratzt habe, wie dies fehlgeschlagen ist, wenn das IGW an die VPC angeschlossen ist, war es eine einfache Änderung in der AWS::EC2::RouteDeklaration.

Fehlerhaftes CFN:

"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"}
    }
}

Arbeits-CFN:

"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"}
    }
}
Lantrix
quelle
1
Vielen Dank für das Codebeispiel. das war genau mein problem!
Sixty4bit
2

Ich habe eine Lösung gefunden. Ich war mit den Wartebedingungen auf dem richtigen Weg, aber es stellte sich heraus, dass ich der Regel ein DependsOn- Attribut hinzufügen musste , damit es von der zuerst erstellten IgW abhing.

Marcus
quelle
1
Kannst du eine Antwort akzeptieren? Wenn dies der Fall ist, können Sie den von Ihnen verwendeten Code anzeigen?
Tedder42
0

So ordnen wir mehrere Subnetze derselben Routentabelle zu:

...
"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" }}
},
... 

Und es funktioniert gut. Auf diese Weise verbinde ich eine IGW-gesteuerte Routentabelle mit 2 öffentlichen Subnetzen und eine andere NAT-gesteuerte Routentabelle mit 4 privaten Subnetzen.

Evgeny Goldin
quelle
Es schlägt auf der AWS :: EC2 :: Route fehl, wenn mehr als eine AWS :: EC2 :: SubnetRouteTableAssociation auf die AWS :: EC2 :: RouteTable verweist
Marcus
So füge ich eine Route hinzu:{ "Type": "AWS::EC2::Route", "Properties": { "DestinationCidrBlock": "0.0.0.0/0", "RouteTableId": { "Ref": "RouteTableIGW" }, "GatewayId": { "Ref": "IGW" }}}
Evgeny Goldin
Ja, so sieht meine ziemlich aus :( Ich denke, dass ich irgendwo einen DependsOn verwenden muss, ich muss die Dokumentation noch einmal durchsehen
Marcus
Ich habe es überprüft - wir haben keine Abhängigkeiten für deklarierte VPC-Teile. Vielleicht ist es etwas mit der Region zu tun, wir sind in us-west-2.
Evgeny Goldin
-1

Sie sollten das Attachgateway zum Anhängen mehrerer Subnetze mit Routentabelle und Internet-Gateways verwenden. Somit verbindet es das Internetgateway mit dem VPC

user211428
quelle