Blog

Infrastruktur als Code auf AWS: Eine Einführung in CloudFormation

Bild von Ralitsa Dimitrova
Ralitsa Dimitrova
DevOps- und Cloud-Ingenieur
11.09.2025
Lesezeit: 10 Minuten.
Zuletzt aktualisiert am: 12.09.2025

Inhaltsübersicht

AWS CloudFormation ist ein Service, mit dem wir AWS- und Drittanbieter-Ressourcen bereitstellen können, indem wir die Infrastruktur als Code behandeln. Er ermöglicht uns konsistente und versionskontrollierte Bereitstellungen. Während es andere beliebte Tools für IaC wie Terraform und Pulumi gibt, wurde CloudFormation speziell für AWS-Ressourcen und -Services entwickelt. Es verwendet YAML- oder JSON-basierte Vorlagen, mit denen die meisten Benutzer bereits vertraut sind. Da es sich um den AWS-Service für Infrastruktur als Code handelt, gibt es mehr offizielle Schnellstarts, die von AWS bereitgestellt werden, und der AWS-Support ist besser in der Lage, zu helfen, wenn Hilfe benötigt wird.

Einer der Vorteile der Verwendung von CloudFormation ist, dass es keine Zustandsdatei gibt, die wir verwalten müssen. Die Bereitstellungen werden innerhalb des CloudFormation-Dienstes als "Stack" dargestellt. Stack Events zeigen die Bereitstellungsergebnisse der Ressourcen, die auf der Grundlage der bereitgestellten Vorlage erstellt/aktualisiert/gelöscht wurden.

In diesem Beitrag befassen wir uns mit den Grundlagen von CloudFormation, einschließlich Vorlagen, Stacks, Change Sets und verschachtelten Stacks, und untersuchen, wie diese Funktionen die Infrastrukturverwaltung vereinfachen und uns gleichzeitig mehr Kontrolle und Transparenz über unsere Bereitstellungen geben können.

Bei den Vorlagendateien haben wir die Wahl zwischen den Formaten JSON und YAML. YAML ist übersichtlicher und einfacher zu handhaben, weshalb es oft bevorzugt wird. Die Grundstruktur einer YAML-Vorlagendatei sieht wie folgt aus:

---

AWSTemplateFormatVersion: version date

Description:
  String

Metadata:
  template metadata

Parameters:
  set of parameters

Rules:
  set of rules

Mappings:
  set of mappings

Conditions:
  set of conditions

Transform:
  set of transforms

Resources:
  set of resources

Outputs:
  set of outputs

Schauen wir uns einige der am häufigsten verwendeten Abschnitte an.

Im Abschnitt Ressourcen können wir die AWS-Ressourcen angeben, die wir bereitstellen möchten. Er hat die folgende Struktur:

Resources:

  LogicalResourceName1:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1

      ...

  LogicalResourceName2:
    Type: AWS::ServiceName::ResourceType
    Properties:
      PropertyName1: PropertyValue1

      ...

Bei der Erstellung von Ressourcen ist die folgende AWS-Dokumentation sehr hilfreich, da sie Informationen über alle Ressourcentypen und ihre Eigenschaften enthält: AWS CloudFormation-Vorlagen-Referenzhandbuch

Im Abschnitt Parameter können wir benutzerdefinierte Werte für unsere Parameter zur Laufzeit angeben, wenn wir den Stack bereitstellen. Wenn wir ihn über die CloudFormation-Konsole bereitstellen, haben wir ein Dropdown-Feld oder ein leeres Feld, in dem wir den gewünschten Wert auswählen oder eingeben können. Das einzige erforderliche Attribut ist Type.

Parameters:
  ParameterLogicalID:
    Description: Information about the parameter
    Type: DataType
    Default: value
    AllowedValues:
      - value1
      - value2

  

Wenn Sie mehrere Stacks in demselben AWS-Konto und derselben Region haben, möchten Sie möglicherweise Informationen zwischen ihnen austauschen. Dies ist nützlich, wenn ein Stack die von einem anderen Stack erstellten Ressourcen nutzen muss.

Um Informationen zwischen Stapeln auszutauschen, müssen wir Ausgabewerte aus einem Stapel exportieren und in einen anderen Stapel importieren. Das Verfahren ist das folgende:

  1. In der Vorlage des ersten Stapels legen wir bestimmte Werte für den Export fest, indem wir das Feld Export im Abschnitt Outputs verwenden.
Outputs:
  OutputLogicalID:
    Description: Information about the value
    Value: Value to return
    Export:
      Name: Name of resource to export
  1. Dann müssen wir diesen Stack erstellen/aktualisieren, damit der Ausgabewert exportiert und für andere Stacks verfügbar wird. (In der CloudFormation-Konsole können wir die Ausgabewerte für einen bestimmten Stack auf der Registerkarte "Outputs" sehen).
  2. In der Vorlage des anderen Stapels können wir dann die Funktion Fn::ImportValue verwenden, um die exportierten Werte aus dem ersten Stapel zu importieren.
  3. Wenn wir den zweiten Stapel erstellen/aktualisieren, wird der exportierte Wert automatisch abgerufen.

Eine genauere Erläuterung der einzelnen Abschnitte finden Sie in der AWS-Dokumentation:

Abschnitte der AWS CloudFormation-Vorlage

Die CloudFormation-Stacks sind logische Gruppierungen von AWS-Ressourcen, die zu einem Projekt gehören sollen. Wenn Sie Ressourcen in dieser Ressourcengruppe hinzufügen, aktualisieren oder löschen möchten, können Sie dies durch Ändern des Stacks tun.

Erstellen eines Stacks - dies beinhaltet die Bereitstellung einer CloudFormation-Vorlage, die der Struktur und der Syntax folgt, die wir oben gezeigt haben. CloudFormation stellt dann die in der Vorlage beschriebenen Ressourcen bereit und konfiguriert sie.

Aktualisieren eines Stacks - dabei werden Änderungen an der Vorlage oder den Parametern vorgenommen. CloudFormation vergleicht das, was Sie übermitteln, mit dem aktuellen Zustand des Stacks und aktualisiert nur die geänderten Ressourcen. Es gibt zwei Methoden zur Aktualisierung von Stacks - mit Change Sets (wenn Sie eine Vorschau der Änderungen vor der Bereitstellung wünschen) oder über eine direkte Aktualisierung. Direkte Aktualisierung bedeutet, dass CloudFormation die Änderungen sofort bereitstellt.

Auf die Änderungssätze gehen wir später in diesem Beitrag noch genauer ein.

Löschen eines Stapels - damit werden alle mit dem Stapel verbundenen Ressourcen gelöscht.

Wenn Sie mit Stapeln arbeiten, müssen Sie den Statuscode Ihres Stapels verfolgen, um seinen Zustand zu kennen. Er sagt Ihnen, ob die Änderung erfolgreich war, ob sie fehlgeschlagen ist und zurückgenommen wurde, ob die Rücknahme erfolgreich war usw.

Um weitere Informationen darüber zu erhalten, was erstellt, aktualisiert oder gelöscht wurde und ob Fehler aufgetreten sind, sollten Sie Ihren Stapel auswählen und zur Registerkarte Ereignisse gehen. Dort sehen Sie die wahrscheinliche Ursache für den Fehler, wenn die Aktualisierung nicht erfolgreich war.

Im Folgenden finden Sie einige gängige Statuscodes und ihre Bedeutung:

  • CREATE_IN_PROGRESS - Laufende Erstellung von einem oder mehreren Stapeln.
  • CREATE_COMPLETE - Erfolgreiche Erstellung von einem oder mehreren Stapeln.
  • CREATE_FAILED - Fehlgeschlagene Erstellung eines oder mehrerer Stapel. Der Grund für den Fehler wird auf der Registerkarte Ereignisse angezeigt.
  • DELETE_IN_PROGRESS - Laufende Entfernung von einem oder mehreren Stapeln.
  • DELETE_COMPLETE - Erfolgreiche Löschung von einem oder mehreren Stapeln. Gelöschte Stapel werden aufbewahrt und sind 90 Tage lang einsehbar.
  • DELETE_FAILED - Fehlgeschlagenes Löschen eines oder mehrerer Stapel. Einige der Ressourcen konnten nicht gelöscht werden. Auf der Registerkarte Ereignisse können Sie sehen, warum. Sie müssen sie manuell löschen. (Ein möglicher Grund kann sein, dass die Ressource einen Abbruchschutz aktiviert hat).
  • UPDATE_IN_PROGRESS - Laufende Aktualisierung von einem oder mehreren Stapeln.
  • UPDATE_COMPLETE - Erfolgreiche Aktualisierung von einem oder mehreren Stapeln.
  • UPDATE_COMPLETE_CLEANUP_IN_PROGRESS - Laufende Entfernung alter Ressourcen für einen oder mehrere Stacks nach einer erfolgreichen Stack-Aktualisierung. Bei Stack-Aktualisierungen, bei denen Ressourcen ersetzt werden müssen, erstellt CloudFormation zunächst die neuen Ressourcen und löscht dann die alten Ressourcen, um Unterbrechungen Ihres Stacks zu vermeiden. In diesem Zustand wurde der Stack aktualisiert und ist nutzbar, aber CloudFormation löscht noch die alten Ressourcen.
  • UPDATE_ROLLBACK_IN_PROGRESS - Laufende Rückkehr eines oder mehrerer Stapel in den vorherigen Arbeitszustand nach einer fehlgeschlagenen Stapelaktualisierung. In diesem Zustand können Sie den Stapel nicht aktualisieren.
  • UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS - Laufende Entfernung neuer Ressourcen für einen oder mehrere Stacks nach einer fehlgeschlagenen Stack-Aktualisierung. In diesem Zustand wurde der Stack in seinen vorherigen Arbeitszustand zurückgerollt und ist nutzbar, aber CloudFormation löscht weiterhin alle neuen Ressourcen, die während der Stack-Aktualisierung erstellt wurden.
  • UPDATE_ROLLBACK_COMPLETE - Erfolgreiche Rückkehr eines oder mehrerer Stapel in einen vorherigen Arbeitszustand nach einer fehlgeschlagenen Stapelaktualisierung.
  • UPDATE_ROLLBACK_FAILED - Fehlgeschlagene Rückkehr eines oder mehrerer Stapel in einen früheren Arbeitszustand nach einer fehlgeschlagenen Stapelaktualisierung. In diesem Zustand können Sie den Stapel nicht aktualisieren. Sie haben die Möglichkeit, den Stack zu löschen oder den Rollback fortzusetzen. Um das Rollback fortzusetzen, müssen Sie zu Ihrem Stack gehen, auf Stack-Aktionen klicken und Rollback fortsetzen wählen. Im Abschnitt Zusatzinformationen sehen Sie, welche Ressourcen problematisch sind, und Sie können sie zum Überspringen markieren. Dann wird das Rollback erfolgreich abgeschlossen, und Sie müssen die fehlerhafte Ressource manuell reparieren. Wenn Sie keine dieser Maßnahmen durchführen möchten, können Sie sich an den Support wenden, um den Stack wieder in einen brauchbaren Zustand zu versetzen.

Informationen zu allen Stack-Statuscodes finden Sie in der folgenden AWS-Dokumentation:

CloudFormation-Stack-Ereignisse anzeigen

Anhand der Änderungssätze können Sie sehen, was genau aktualisiert wird, nachdem Sie eine bestimmte Änderung vorgenommen haben. Sie zeigen Ihnen den Ausführungsplan.

Nachdem Sie eine Änderung an Ihrer Vorlage vorgenommen haben, können Sie zur CloudFormation-Konsole gehen, auf Ihren Stack klicken, zur Registerkarte Änderungssätze gehen und einen Änderungssatz erstellen. Sie werden aufgefordert, eine Vorlage entweder von Ihrem lokalen Dateisystem oder von S3 bereitzustellen.

Infrastruktur-as-code

Dann werden Sie, ähnlich wie bei der Erstellung eines Stacks, aufgefordert, einen Wert für die Parameter und eine IAM-Rolle anzugeben, die der Stack zur Erstellung oder Aktualisierung der Ressourcen verwenden soll.

cloudformation-set-details
cloudformation-set-options

Nachdem Sie den Änderungssatz erstellt haben, können Sie die Unterschiede zwischen Ihrer aktuellen Vorlage und der neuen Vorlage sehen und sicherstellen, dass sie genau dem entspricht, was Sie ändern möchten, bevor Sie den Änderungssatz ausführen. Sie erhalten auch Informationen darüber, ob die Ressource ersetzt wird oder nicht.

cloudformation-demo-2
cloud-formation-property-level-changes

Wenn Sie bereit sind, den Änderungssatz auszuführen, können Sie auf die Schaltfläche Änderungssatz ausführen klicken, woraufhin Sie um folgende Angaben gebeten werden:

  • Wie sollte sich der Stapel im Falle eines Fehlers verhalten?
    • Alle Stack-Ressourcen auf den letzten bekannten stabilen Zustand zurücksetzen
    • Bewahren Sie den Status erfolgreich bereitgestellter Ressourcen, während Sie fehlgeschlagene Ressourcen auf den letzten bekannten stabilen Status zurücksetzen. Ressourcen ohne letzten bekannten stabilen Zustand werden bei der nächsten Stapeloperation gelöscht.
  • Was soll der Stack mit den neu erstellten Ressourcen während eines Rollbacks tun?
    • Behalten oder löschen Sie erstellte Ressourcen gemäß der ihnen beigefügten Löschungsrichtlinie.
    • Löschen Sie erstellte Ressourcen während eines Rollbacks unabhängig von der ihnen zugeordneten Löschrichtlinie.
Änderungssatz

Wenn Sie wiederholt identische Ressourcenkonfigurationen in mehreren Vorlagen erstellen, können Sie verschachtelte Stapel verwenden. Sie sind eine Möglichkeit, die gemeinsamen Konfigurationen in dedizierten Vorlagen zu trennen. Sie können einen verschachtelten Stack innerhalb eines übergeordneten Stacks erstellen, indem Sie die Ressource AWS::CloudFormation::Stack verwenden.

Hier ist ein Beispiel für einen übergeordneten Stapel mit zwei verschachtelten Stapeln - einer für eine Sicherheitsgruppe und ein weiterer für eine EC2-Instanz.

Die übergeordnete Vorlage:

AWSTemplateFormatVersion: "2010-09-09"
Description: Parent template with nested stacks for Security Group and EC2 Instance
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair to SSH into the instance
    Type: AWS::EC2::KeyPair::KeyName

Resources:
  SecurityGroupStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: <https://s3.amazonaws.com/demo-bucket/s3-nested-stack.yaml>

  EC2InstanceStack:
    Type: AWS::CloudFormation::Stack
    Properties:
      TemplateURL: <https://s3.amazonaws.com/demo-bucket/ec2-nested-stack.yaml>
      Parameters:
        KeyName: !Ref KeyName
        SecurityGroupId: !GetAtt SecurityGroupStack.Outputs.SecurityGroupId

Outputs:
  InstanceId:
    Description: The EC2 Instance ID
    Value: !GetAtt EC2InstanceStack.Outputs.InstanceId

Die verschachtelte Stapelvorlage der Sicherheitsgruppe:

AWSTemplateFormatVersion: "2010-09-09"
Description: Security Group for EC2 instance
Resources:
  InstanceSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Enable SSH access
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 100.200.100.200/32

Outputs:
  SecurityGroupId:
    Description: The Security Group ID
    Value: !Ref InstanceSecurityGroup

Die EC2-Instanz verschachtelte Stapelvorlage:

AWSTemplateFormatVersion: "2010-09-09"
Description: EC2 instance
Parameters:
  KeyName:
    Description: Name of an existing EC2 KeyPair
    Type: AWS::EC2::KeyPair::KeyName
  SecurityGroupId:
    Description: Security Group ID
    Type: String

Resources:
  EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t3.micro
      KeyName: !Ref KeyName
      ImageId: ami-08c40ec9ead489470
      SecurityGroupIds:
        - !Ref SecurityGroupId

Outputs:
  InstanceId:
    Description: The Instance id
    Value: !Ref EC2Instance

In der CloudFormation-Konsole werden die verschachtelten Stapel mit dem Label NESTED versehen.

aws-wolke-bildung

Jeder verschachtelte Stapel kann weitere verschachtelte Stapel enthalten. Der Wurzelstapel ist der oberste Stapel, zu dem letztlich alle verschachtelten Stapel gehören. Wenn ein Stapel NESTED ist, bedeutet dies, dass er einen unmittelbaren Elternstapel hat. Für die erste Ebene der verschachtelten Stapel ist der Wurzelstapel auch der übergeordnete Stapel.

CloudFormation verfügt über eine Option zur Erkennung von Abweichungen, die regelmäßig ausgeführt werden kann, um zu prüfen, ob die Konfiguration einer Ressource von der vorgesehenen Konfiguration abgewichen ist.

Im obigen Beispiel habe ich die eingehende Regel der Sicherheitsgruppe manuell geändert. Dann ging ich zu dem verschachtelten Stapel, der sie bereitstellte, und klickte auf Stapelaktionen > Drift erkennen. Ein Prozess zur Erkennung von Drifts wurde gestartet. Nachdem er abgeschlossen war, ging ich zu Stack-Aktionen > Driftergebnisse anzeigen. Dies zeigte mir, dass die Sicherheitsgruppe geändert worden war.

Drift

Wenn Sie die geänderte Ressource auf der Seite "Drifts" auswählen, können Sie auf " Driftdetails anzeigen " klicken und genau sehen, welche Eigenschaft geändert wurde. Wenn Sie dann zur AWS-Konsole gehen, die Änderung manuell rückgängig machen und Detect drift erneut ausführen, wird die Ressource, die zuvor den Status MODIFIED hatte, nun IN_SYNC angezeigt.

Eine andere Möglichkeit, die Synchronisierung zu beheben, besteht darin, die Ressource aus der Vorlage zu entfernen und den Stack-Aktualisierungsvorgang auszuführen. Nachdem die Ressource nicht mehr vom Stack verwaltet wird, sollten Sie sie wieder hinzufügen und den Stack erneut bereitstellen.

Wenn Sie mehrere Konten in einer AWS-Organisation verwalten und in der Lage sein müssen, dieselben Ressourcen automatisch für mehr als ein Konto und mehr als eine Region bereitzustellen, sollten Sie die Verwendung von CloudFormation Stack Sets in Betracht ziehen.

Ein Stack-Set kann als normale CloudFormation-Ressource mit dem Typ AWS::CloudFormation::StackSet bereitgestellt werden. In dieser Ressource können Sie Ziele angeben - das sind die Konten, für die Sie bereitstellen möchten. Wenn Sie die Stamm-ID Ihrer Organisation als Ziel festlegen, werden die beschriebenen Ressourcen im StackSet auf alle Konten angewendet, und wenn ein neues Konto hinzugefügt wird, können Sie sie automatisch darauf bereitstellen, indem Sie das StackSet erneut bereitstellen. Sie können auch alle Regionen angeben, für die Sie die benötigten Ressourcen bereitstellen möchten. Auf die Besonderheiten der Stack-Sets werden wir in einem anderen Beitrag näher eingehen.

CloudFormation bietet eine leistungsstarke Möglichkeit, die AWS-Infrastruktur mithilfe von Code zu definieren und bereitzustellen. Sie können Ihre Umgebung auf konsistente und reproduzierbare Weise beschreiben, indem Sie Vorlagen schreiben. Stacks und verschachtelte Stacks helfen Ihnen bei der effizienten Organisation und Verwaltung von Ressourcen, während Änderungssätze Ihnen Einblick in die Änderungen geben, bevor sie angewendet werden, wodurch das Fehlerrisiko minimiert wird.

Über die Grundlagen hinaus bietet CloudFormation Funktionen wie:

  • Rollback und automatische Ressourcenlöschung zum Schutz der Umwelt;
  • Ausführungspläne über Änderungssets, die Ihnen Einblick in die Änderungen geben, bevor sie angewendet werden, wodurch das Fehlerrisiko minimiert wird;
  • Option Drifterkennung;
  • Regions- und kontoübergreifende Bereitstellung für komplexe Setups über Stacksets.

Mit CloudFormation können wir die Infrastrukturverwaltung automatisieren, die Zuverlässigkeit verbessern und einen klaren, überprüfbaren Lebenszyklus der Infrastruktur aufrechterhalten.

Entdecken Sie die Dienstleistungen von ITGix und erfahren Sie mehr über unser Know-how.

Newsletter für Tech-Experten

Signal, kein Rauschen –

direkt in Ihren Posteingang.

Schließen Sie sich mehr als 12.000 Ingenieuren und Führungskräften aus der Wirtschaft an, die Praxisberichte zu SRE, DevOps und Cloud-nativer Zuverlässigkeit erhalten.

Tech-Blogs mit tiefgehenden Einblicken und Fallstudien
Neue Technologien, sorgfältig ausgewählt

Ihre geschäftliche E-Mail-Adresse

Wir gehen respektvoll mit Ihrem Posteingang um. Lesen Sie unsere Datenschutzerklärung.

Mehr Beiträge

Da die Verbreitung von IPv6 weiter zunimmt, benötigen Unternehmen, die Workloads auf AWS ausführen, zunehmend Netzwerkarchitekturen, die sowohl IPv4- als auch IPv6-Datenverkehr unterstützen. AWS bietet zwar native IPv6-Funktionen, doch die Integration...
Lesen
Die iGaming-Branche hängt vor allem von einer Sache ab: der ständigen Verfügbarkeit. Ob es sich nun um ein großes Sportereignis, ein Live-Casino-Turnier oder eine Markteinführung handelt – jede Minute...
Lesen
Kontakt aufnehmen
ITGix bietet Ihnen fachkundige Beratung und maßgeschneiderte DevOps-Services, um Ihr Unternehmenswachstum zu beschleunigen.
Newsletter für
Technik-Experten
Schließen Sie sich 12.000+ Geschäftsführern und Ingenieuren an, die Blogs, e-Books und Fallstudien Fallstudien über neue Technologie erhalten.