2017-02-08 14 views
0

CloudFormation Anfänger hier. Ich habe geforscht und an der Entwicklung einer CloudFormation-Vorlage gearbeitet, die schließlich als Ausgangspunkt für eine Entwicklungsumgebung für mein Team dienen wird.AWS CloudFormation Fehler mit Internet Gateway

Ich habe durch einige Kurse und Beispiele online Stückchen und Stücke ausgewählt und waren relativ erfolgreich in meinem kleinen Versuch ... Bis heute Abend.

Ich versuche jetzt, ein Internet-Gateway an meine VPC anzuhängen, was dazu führt, dass der Stack-Erstellungsjob fehlschlägt und zurückgesetzt wird. Das Internet-Gateway wird nicht anhängen und für das Leben von mir kann ich einfach nicht feststellen, warum.

Meine vollständige Vorlage ist hier. Es ist geplant, eine VPC mit zwei öffentlichen und zwei privaten Subnetzen zu erstellen. An die beiden öffentlichen Subnetze wird ein Internet-Gateway angeschlossen. Dies ist der Punkt, an dem der Fehler auftritt. Wenn ich die Internet Gateway-Erstellung auskommentiere, ist die Vorlage erfolgreich. Vielen Dank im Voraus für Ihre Hilfe.

AWSTemplateFormatVersion: '2010-09-09' 

Resources: 
    DevVPC: 
    Type: AWS::EC2::VPC 
    Properties: 
     CidrBlock: 10.0.0.0/16 
     EnableDnsSupport: 'true' 
     EnableDnsHostnames: 'true' 
     InstanceTenancy: default 
    Tags: 
    - Key: Name 
    Value: dev-vpc 

    DevRoute53HostedZone: 
    Type: "AWS::Route53::HostedZone" 
    Properties: 
     HostedZoneConfig: 
     Comment: "aws hosted dev environment" 
     Name: "mydomain.oregon-dev.local" 
     VPCs: 
     - 
      VPCId: !Ref DevVPC 
      VPCRegion: "us-west-2" 

    DevPublicSubnetA: 
Type: AWS::EC2::Subnet 
Properties: 
    VpcId: !Ref DevVPC 
    CidrBlock: 10.0.8.0/25 
    AvailabilityZone: "us-west-2a" 
    Tags: 
    - Key: Name 
    Value: DevPublicSubnetA 

    DevPublicSubnetB: 
     Type: AWS::EC2::Subnet 
     Properties: 
     VpcId: !Ref DevVPC 
     CidrBlock: 10.0.8.128/25 
     AvailabilityZone: "us-west-2b" 
     Tags: 
     - Key: Name 
      Value: DevPublicSubnetB 

    DevPrivateSubnetA: 
    Type: AWS::EC2::Subnet 
    Properties: 
     VpcId: !Ref DevVPC 
     CidrBlock: 10.0.9.0/25 
     AvailabilityZone: "us-west-2a" 
     Tags: 
     - Key: Name 
     Value: DevPrivateSubnetA 

    DevPrivateSubnetB: 
    Type: AWS::EC2::Subnet 
    Properties: 
     VpcId: !Ref DevVPC 
     CidrBlock: 10.0.9.128/25 
     AvailabilityZone: "us-west-2b" 
     Tags: 
     - Key: Name 
     Value: DevPrivateSubnetB 

    RouteTable: 
    Type: AWS::EC2::RouteTable 
    Properties: 
     VpcId: 
     Ref: DevVPC 
     Tags: 
     - Key: Name 
     Value: DevRouteTable 

    DevRoute: 
    Type: AWS::EC2::Route 
    DependsOn: NonProdNATGateway 
    Properties: 
     RouteTableId: 
     Ref: RouteTable 
     DestinationCidrBlock: 0.0.0.0/0 
     GatewayId: 
     Ref: NonProdNATGateway 

    NonProdNATEIP: 
    Type: AWS::EC2::EIP 
    Properties: 
     Domain: vpc 

    NonProdNATGateway: 
    Type: AWS::EC2::NatGateway 
    Properties: 
     AllocationId: !GetAtt NonProdNATEIP.AllocationId 
     SubnetId: !Ref DevPublicSubnetA 
     SubnetId: !Ref DevPublicSubnetB 
    DependsOn: 
     - NonProdNATEIP 
     - DevPublicSubnetA 
     - DevPublicSubnetB 

    NonProdGWVPCAttachment: 
    Type: AWS::EC2::VPCGatewayAttachment 
    Properties: 
     InternetGatewayId: !Ref NonProdNATGateway 
     VpcId: !Ref DevVPC 
    DependsOn: 
     - NonProdNATGateway 

    Route: 
    Type: AWS::EC2::Route 
    Properties: 
     RouteTableId: 
     Ref: RouteTable 
     DestinationCidrBlock: 0.0.0.0/0 
     NatGatewayId: 
     Ref: NonProdNATGateway 

    PrivateRouteTableAssociation: 
    Type: AWS::EC2::SubnetRouteTableAssociation 
    Properties: 
     RouteTableId: !Ref RouteTable 
     SubnetId: !Ref DevPrivateSubnetA 
     SubnetId: !Ref DevPrivateSubnetB 

    PublicRouteTableAssociation: 
    Type: AWS::EC2::SubnetRouteTableAssociation 
    Properties: 
     RouteTableId: !Ref RouteTable 
     SubnetId: !Ref DevPublicSubnetA 
     SubnetId: !Ref DevPublicSubnetB 

Mappings: 
    R53EnvironmentMapping: 
    dev: 
     oregonawslocal: mydomain.oregon-dev.local 

Outputs: 

    DevPublicSubnetA: 
    Description: ID for dev subnet A 
    Value: !Ref DevPublicSubnetA 
    Export: 
     Name: DevPublicSubnetA 

    DevPublicSubnetB: 
    Description: ID for dev subnet B 
    Value: !Ref DevPublicSubnetB 
    Export: 
     Name: DevPublicSubnetB 

    DevPrivateSubnetA: 
    Description: ID for dev subnet A 
    Value: !Ref DevPrivateSubnetA 
    Export: 
     Name: DevPrivateSubnetA 

    DevPrivateSubnetB: 
    Description: ID for dev subnet B 
    Value: !Ref DevPrivateSubnetB 
    Export: 
     Name: DevPrivateSubnetB 

    DevRoute53OregonAWSLocalHostedZone: 
    Description: Hosted zone ID for hosted zone 
    Value: !Ref DevRoute53HostedZone 
    Export: 
     Name: DevRoute53OregonAWSLocalHostedZone 

    DevRoute53OregonAWSLocalHostedZoneName: 
    Description: Hosted zone name for hosted zone 
    Value: !FindInMap [R53EnvironmentMapping, dev, oregonawslocal] 
    Export: 
     Name: DevRoute53OregonAWSLocalHostedZoneName 
+0

Ein NAT Gateway ist nicht dasselbe wie ein Internet Gateway, aber Sie haben 'InternetGatewayId:! Ref NonProdNATGateway'. –

Antwort

0

Wie Michael - sqlbot in einem comment erwähnt, ein Problem ist, dass Sie eine AWS::EC2::NATGateway Ressource in der InternetGatewayId Unterkunft sind Referenzierung AWS::EC2::VPCGatewayAttachment Ressource, die eine AWS::EC2::InternetGateway Ressource erfordert.

und Internet Gateways sind zwei verschiedene Arten von AWS-Ressourcen - ein NAT-Gateway bietet einen ausgehenden Internetzugang für ein privates Teilnetz, während ein Internet-Gateway einen bidirektionalen Internetzugang für ein öffentliches Teilnetz bereitstellt.

Ein weiteres Problem ist, dass Sie zwei separate Sätze von AWS::EC2::RouteTable und AWS::EC2::Route Ressourcen benötigen, einen Satz für Ihr öffentliches Subnetz und einen anderen für Ihr privates Subnetz. Die öffentliche Route sollte GatewayId haben, die auf das Internet-Gateway verweist, und die private Route sollte NatGatewayId haben, die auf das NAT-Gateway verweist.

Schließlich haben Sie einige ungültige doppelte SubnetId Eigenschaften in mehreren Ressourcen (NatGateway, SubnetRouteTableAssociation) - jede dieser Ressourcen nur Punkte akzeptiert eine einzelne ID Subnet.

Da Sie eine Cloudformation Anfänger sind, empfehle ich AWS Quick Start ‚s Amazon VPC Architecturetemplate zu beginnen schnell mit einer Referenz VPC-Architektur nutzen. Diese von AWS unterstützte Vorlage erstellt eine einzelne VPC, die sowohl öffentliche als auch private Subnetze in jeder angegebenen Availability Zone enthält (Sie stellen 2-4 Availability Zones als Parameter bereit). Sie können diese Vorlage später an Ihre speziellen Anforderungen anpassen, falls erforderlich, oder sie als Referenz für die Konfiguration der Ressourcen Ihrer eigenen Vorlage verwenden.

+0

Vielen Dank für das Feedback, es gab mir eine Menge Arbeit, wenn ich mich morgen wieder mit diesem Thema beschäftige. – 8675309

Verwandte Themen