Endlich! AWS CloudFormation lernt ForEach

Don't Repeat Yourself - Dieses Pattern ist Best Practice für jegliche Art von Programmierung. Hierdurch kannst du menschliche Fehler reduzieren und deinen Code schlank und verständlich gestalten.

Terraform Benutzer kennen Konstrukte wie count oder for_each schon eine ganze Weile. Doch CloudFormation hinkt hier etwas hinterher.

Nun hat AWS aber, auf Wunsch der Community, nachgebessert.

Die neue Fn::ForEach Funktion kannst du durch eine Spracherweiterung nutzen. Ich persönlich bevorzuge das YAML-Format für CloudFormation Templates, daher sind die nachfolgenden Beispiele entsprechend formatiert.

Die ForEach-Funktion kannst du in der Resources, Condition und Outputs Sektion verwenden.

Wenn du also beispielsweise für dein Monitoring System SNS-Topics für deine Alarme aus verschiedenen Umgebungen erstellen, kannst du das in Zukunft wie folgt machen.

				
					AWSTemplateFormatVersion: 2010-09-09
Transform: 'AWS::LanguageExtensions'
Resources:
  'Fn::ForEach::CWAlarmSNSTopics':
    - Environment
    - - Development
      - Test
      - Production
    - 'SnsTopicAlarm${Environment}':
        Type: 'AWS::SNS::Topic'
        Properties:
          TopicName: !Ref Environment

				
			

Zeile 2 führt eine Transformation durch. Diese liest das Template ein, wandelt gewisse Sprachkonstrukte um und resultiert in einem Template, welches nativen CloudFormation Code enthält. In diesem Fall wird hierdurch das Tempalte eingelesen und das Sprachkonstrukt für Fn::ForEach in Einzelressourcen umgewandelt.

Zeile 4 enthält das ForEach-Konstrukt und einen Identifikationsschlüssel. Dieser muss eindeutig sein. In diesem Fall ist es CWAlarmSNSTopics.

In Zeile 5 ist der Name der Variablen, welche in der ForEach Schleife genutzt wird, definiert.

Zeile 6-8 ist eine Liste von Werten, die der Variablen zugeordnet werden.

Zeile 9 ist ein Ressourcenidentifikator, wie du ihn bestimmt schon in normalen CloudFormation Templates gesehen hast. Die Besonderheit hieran ist, dass die Variable aus Zeile 5 verwendet wird.

Die weiteren Zeilen definieren ein SNS-Topic. Dies ist nun wieder altbekannter CloudFormation Code.

Das Resultat beim Ausführen dieses Templates sind drei Ressourcen:

				
					{
    "AWSTemplateFormatVersion": "2010-09-09",
    "Resources": {
        "SnsTopicAlarmDevelopment": {
            "Type": "AWS::SNS::Topic",
            "Properties": {
                "TopicName": "Development"
            }
        },
        "SnsTopicAlarmTest": {
            "Type": "AWS::SNS::Topic",
            "Properties": {
                "TopicName": "Test"
            }
        },
        "SnsTopicAlarmProduction": {
            "Type": "AWS::SNS::Topic",
            "Properties": {
                "TopicName": "Production"
            }
        }
    }
}
				
			

Wie du sehen kannst, lässt sich hierdurch Code Duplizierung vermeiden.

Mehr Informationen findest du in der offiziellen Dokumentation.

Wann immer du so weit bist, dies sind die Arten, wie wir dich unterstützen können:

  1. Führe unseren kostenlosen Cloud-Reifegrad Self-Check durch und erhalte eine Einschätzung deiner aktuellen Cloud-Architektur.
  2. Wir verhelfen unseren Kunden zu einer erfolgreichen Cloud-Migration und -Optimierung. Wenn du Unterstützung benötigst, lass uns reden!
  3. Du möchtest wissen, wie es um deine Cloud-Infrastruktur steht? Dann ist ein Architektur-Review für dich interessant!
Teile diesen Beitrag:

Verwandte Beiträge