Effizienter arbeiten mit AWS CloudFormation (3/3)
Im dritten Teil der AWS-CloudFormation-Serie zeigt AWS Experte Rinon Belegu, wie man Conditions in Templates für die Ausgabe in einer Entwicklungsumgebung oder Produktivumgebung nutzen kann.
Im letzten Blog haben wir uns den groben Aufbau eines CloudFormation Templates angeschaut und sind darauf eingegangen, wie wir mit Hilfe von Parametern und Mappings unsere gewünschten Ressourcen erstellen lassen können. Im letzten Teil dieser Serie, schauen wir uns noch an, wie wir Bedingungen im CloudFormation Template einsetzen und die Angaben zu den erstellten Ressourcen ausgeben können.
Conditions
Mit Hilfe von Bedingungen können wir anhand von Parametern entscheiden, welche Ressourcen wie erstellt werden sollen. Zudem kann eine Bedingung auch dazu verwendet werden zu entscheiden, ob eine Ausgabe gemacht wird oder nicht. Das klassische Beispiel für die Verwendung von Bedingungen ist die Parametrisierung des Templates anhand des Umgebungs-Typs welcher erstellt werden soll. Ein Beispiel dazu ist, dass wir dasselbe CloudFormation Template dazu verwenden möchten , eine Entwicklungsumgebung und eine Produktivumgebung zu erstellen. Jedoch möchten wir die Entwicklungsumgebung im Gegensatz zur Produktivumgebung nicht öffentlich zugänglich machen. Um dies zu erreichen, brauchen wir zuerst einmal die Möglichkeit, den Stack zu parametrisieren. Wie wir im vorhergehenden Blog gelernt haben, können wir dies mit sogenannten Parametern machen. In unserem Beispiel haben wir einen Parameter welcher die Werte «dev» und prod» enthalten kann.
Basierend auf dem Parameter können wir nun Bedingungen erstellen. Für unser Beispiel erstellen wir zwei Bedingungen.
In unserem Beispiel wird in den Bedingungen geprüft, ob die Eingabe aus dem Parametersektor dev oder prod enthält. (Zur Definition von Bedingungen können intrinsische Funktionen wie z.B. Fn::If, Fn::Not oder wie in unserem Beispiel FN::Equals verwendet werden.)
Enthält der Parameter «EnvironmentName» den Wert «dev», so ist der Wert der Bedingung «CreateSecurityGroupDev» = true und die Bedingung «CreateSecurityGroupProd» = false. Ist der Wert des Parameters «EnvironmentName» = prod, so ist der Wert der Bedingung «CreateSecurityGroupDev» = false und die Bedingung «CreateSecurityGroupProd» = true.
Hat man die Bedingungen und Parameter definiert, kann man diese bei den Ressourcen und für die Ausgaben nutzen. Führen wir unser Beispiel weiter;
Im Ressourcen Abschnitt definieren wir die beiden Security Groups, welche je nach Parametereingabe erstellt wird. Des Weiteren definieren wir die Instanz und weisen der Instanz anhand der Parametereingabe die entsprechende Security Group zu.
Schauen wir uns zuerst die Bedingung in der Security Group an. Um zu entscheiden, ob die Security Group erstellt werden soll oder nicht, hat man die Möglichkeit eine Bedingung hinzuzufügen. In unserem Beispiel ist dies für die Security Group der Entwicklungsumgebung die Zeile «”Condition”: “CreateSecurityGroupDev”,». Ist diese Bedingung «true», so wird die Security Group erstellt. Ist diese «false», so wird sie nicht erstellt. Dasselbe wird auch für die Security Group der Produktivumgebung gemacht. So wird nur die Security Group erstellt, welche auch wirklich benötig wird.
Nun müssen wir noch die Instanz zu Security Group hinzufügen. Dies kann man z.B. mit der intrinsischen Funktion Fn::If machen. Wir verwenden in unserem Beispiel die Fn::If Funktion um der Eigenschaft unserer Instanz die entsprechende Security Group zuzuweisen. Dies sieht in unserem Beispiel wie folgt aus.
Mit der Funktion Fn::If wird hier definiert, dass wenn die Bedingung «CreateSecurityGroupDev»=true ist, die Instanz der Security Group DevSecGroup zugewiesen wird und wenn die Bedingung «CreateSecurityGroupDev»=false ist, wird sie der Security Group ProdSecGroup zugewiesen.
Nun da wir unsere Ressourcen anhand unserer Eingaben erstellt haben, möchten wir nach erfolgreichem erstellen des Stacks auch noch gewisse Eigenschaften der erstellten Umgebung erhalten wie z.B. Instanz ID, Security Group, etc. Dies können wir mit Hilfe von Outputs machen.
Outputs
Im Abschnitt Outputs deklarieren wir Ausgabewerte, welche in anderen Stacks wieder importiert, in Antworten zurückgegeben oder in der CloudFormation Konsole angezeigt werden sollen. In unserem Beispiel haben wir drei Ausgaben definiert. Die Instanz ID und die Security Groups.
Wie man im Beispiel sieht, haben die beiden Ausgaben der Security Groups eine Bedingung. Dies ist dieselbe Bedingung, welche wir im vorhergehenden Kapitel definiert haben. Mit dieser Bedingung wird nur diejenige Security Group ausgegeben, welche auch erstellt wurde. Die Ausgaben sieht man nach Erstellung des Stacks im Reiter Outputs. In unserem Beispiel wurde eine Entwicklungsumgebung erstellt und entsprechend wurde auch die Security Group «DevSecGroup» erstellt und ausgegeben.
Im Template Ausschnitt sieht man auch noch das Feld «Export». Diese Option kann genutzt werden, um Ressourcen-Informationen so zu exportieren, dass diese Stack-übergreifend verwendet werden können. Diese Exportwerte werden in der CloudFormation Konsole im Menüpunkt Export angezeigt.
Habe ich nun weitere Stacks, welche auch diese Security Group verwenden, kann ich auf den exportierten Wert referenzieren.
Ein Hinweis; habe ich einen Stack, der auf eine Ressource eines anderen Stacks verweist, kann der Mutter-Stack erst gelöscht werden, wenn der Stack, welcher auf die Ressource referenziert, gelöscht wurde. Wir haben hier also Abhängigkeiten.
Ich hoffe, ich konnte euch einen kurzen Einblick in die Verwendung von Bedingungen und Ausgaben für CloudFormation geben. Das Thema CloudFormation ist sehr umfangreich und ich werde bestimmt noch weitere Blogs zu diesem Thema schreiben.
Seminare zu Amazon Web Services AWSGanz gleich, ob Sie gerade erst einsteigen oder Ihre Kenntnisse vertiefen möchten: Digicomp bietet Ihnen als autorisierter Trainingspartner von Amazon Web Services die passenden Schulungen an sieben Standorten. Das umfassende Kursangebot deckt folgende AWS-Bereiche ab: |
Ganz gleich, ob Sie gerade erst einsteigen oder Ihre Kenntnisse vertiefen möchten: Digicomp bietet Ihnen als autorisierter Trainingspartner von Amazon Web Services die passenden Schulungen an sieben Standorten. Das umfassende Kursangebot deckt folgende AWS-Bereiche ab: