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.

Du möchtest mithilfe der Cloud durchstarten? Dann kann ich dir auf dreierlei Weise meine Unterstützung anbieten:
  1. Mein Well-Informed Newsletter erscheint alle zwei Wochen und hält dich auf dem neusten Stand.
  2. In einem AWS Well-Architected Review entfalten wir deine vollen Potenziale!
  3. Bei einem persönlichen Beratungsgespräch lösen wir deine Probleme.
Du benötigst noch mehr Informationen? Dann nimm gerne direkt Kontakt mit mir auf.


    Bitte lese dir unsere Datenschutzerklärung durch.

    Hendric Jabs

    Hendric Jabs

    Ich bin Wirtschaftsinformatiker (M. Sc.) und AWS Cloud Solutions Architect. Seit 2014 beschäftige ich mich leidenschaftlich mit Amazon Web Services und habe bereits seit 2015 einer Vielzahl von Kunden zu einer erfolgreichen Cloud Nutzung verholfen. Im Jahr 2021 habe ich für das Digital Career Institute den ersten AWS re/Start Kurs in Deutschland als leitender Dozent durchgeführt.
    LinkedIn
    XING
    Email