17

Ich habe ein Cloud-Skript, das versucht, eine VPC mit einem Subnetz pro AZ zu erstellen.Gibt es eine Möglichkeit für Cloudformation, verfügbare Zonen für die Subnetzerstellung abzufragen?

Wenn ich laufen:

aws ec2 describe-availablity-zones 

ich 4 Zonen zurückgekehrt:

"AvailabilityZones": [ 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1a" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1b" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1c" 
    }, 
    { 
     "State": "available", 
     "RegionName": "us-east-1", 
     "Messages": [], 
     "ZoneName": "us-east-1d" 
    } 
] 

aber wenn ich versuche, meinen Stack zu erstellen, erhalte ich eine Fehlermeldung:

"ResourceStatusReason": "Value (us-east-1a) for parameter availabilityZone 
    is invalid. Subnets can currently only be created in the following 
    availability zones: us-east-1c, us-east-1b, us-east-1d.", 

Ich gebe den AZ mit

an

Gibt es eine Möglichkeit zu überprüfen, ob die AZ wirklich für die Erstellung eines Subnetzes verfügbar ist?

Antwort

6

Leider hatte ich das gleiche Problem. Hierfür gibt es keine Methode in CloudFormation, und die Zonen können sich je AWS-Konto unterscheiden. Dies ist eine Einschränkung der VPC-Infrastruktur und wird sich wahrscheinlich nicht ändern. Ihre einzige Option sein, um die Zonen codieren, die Sie in Ihrer Cloudformation-Vorlage gefunden haben, anstelle von Fn :: Wählen Sie zum Beispiel:

„AvailabilityZone“: „us-east-1b“

Alternativ, wenn Sie verlassen AvailabilityZone leer, das Standardverhalten wäre AWS wird automatisch eines für Sie auswählen.

+0

Sie können sie nicht leer lassen, da wir in jedem AZ eine VPC mit Subnetzen erstellen - das Problem ist nicht, dass alle zurückgegebenen Subnetze Subnetze zulassen! – chris

+0

Wenn also eine Zone VPC-Subnetze nicht zulässt, wozu dient sie dann, wenn Sie sie in VPC hosten? Ignoriere einfach diese Zone und behandle die 3 Zonen, die sie unterstützen. – Arya

+0

Das ist ein manueller Prozess - Wenn ich Subnetze basierend auf Fn :: Select mit Index 0, 1 und 2 erstelle, wird es manchmal scheitern, weil es tatsächlich 4 AZs gibt, aber nicht alle Subnetze zulassen – chris

6

Dies ist möglicherweise nicht hilfreich für den CLI-Ansatz oder Ihr genaues Szenario - aber mit der AWS Management Console funktioniert das reibungslos.

Mit den letzten Aktualisierungen mit den CloudFormation-Parametern können Sie die AZs, die zu den angegebenen AZs gehören, genau lokalisieren.

Dies wäre sehr praktisch während der DR/DR Drills und machen die CFN-Vorlage Region unabhängig.

enter image description here

"Parameters": { 
    "SubnetAZ": { 
     "Description": "Availability Zone of the Subnet", 
     "Type": "AWS::EC2::AvailabilityZone::Name" 
    } 
} 

Weitere Informationen zu den CloudFormation Parametern

+0

Fn :: GetAZs stellt die verfügbaren und verwendbaren Verfügbarkeitszonen zur Verfügung, solange Sie einen Standard-VPC mit einem Subnetz in jedem AZ haben! was übrigens alle neuen aws accounts haben, solange man sie nicht manuell löscht. – hellomichibye

+0

@Naveen Ich denke, in Ihrem Snippet haben Sie gemeint: 'List ' anstelle von 'AWS :: EC2 :: AvailabilityZone :: Name' – Somar

2

Fn :: GetAZs die verfügbaren und nutzbare Verfügbarkeitszonen bieten, solange Sie ein Standard-VPC mit einem Sub-Netz in jedem AZ haben! was übrigens alle neuen aws accounts haben, solange man sie nicht manuell löscht.

+0

Ich habe gesehen, Fn :: GetAZs Rückkehr unbrauchbar Zonen. –

+0

dann haben Sie keine Standard-Subnetze – hellomichibye

+0

Dies ist ein wirklich interessantes _ "Feature" _. Wurde dies in AWS Docs dokumentiert? –

-2

Ich komme um die Einschränkung herum, indem ich json als Ausdrucksmedium vermeide. Ich verwende Troposphäre, um meine Wolkenbildungsvorlagen zu erstellen. (https://github.com/cloudtools/troposphere)

Sie müssten jedoch eine Art Tooling um die Bereitstellung von Cloud-Templates für einzelne Regionen bereitstellen.