Bewährte Methoden für AWS CloudFormation - AWS CloudFormation

Bewährte Methoden für AWS CloudFormation

Bewährte Methoden sind Empfehlungen, mit denen Sie AWS CloudFormation im gesamten Workflow effektiver und sicher nutzen können. Erfahren Sie mehr dazu, wie Sie Stacks planen und organisieren, Vorlagen zum Beschreiben Ihrer Ressourcen und die Software-Anwendungen, die auf ihnen laufen, erstellen und Ihre Stacks und ihre Ressourcen verwalten. Die folgenden bewährten Methoden basieren auf realitätsnahen Erfahrungen aktueller CloudFormation-Kunden.

Stacks nach Lebenszyklus und Besitz organisieren

Verwenden Sie die Informationen zu Lebenszyklus und Besitz Ihrer AWS-Ressourcen, um zu entscheiden, welche Ressourcen wieder in den Stack aufgenommen werden sollten. Anfänglich können Sie alle Ihre Ressourcen einem Stack zuweisen, aber da Ihr Stack wächst und umfangreicher wird, kann die Verwaltung eines einzelnen Stack mühsam und zeitaufwändig sein. Durch die Gruppierung von Ressourcen mit gemeinsamen Lebenszyklen und Besitzeigenschaften können Eigentümer Änderungen an ihren Ressourcensätzen unter Anwendung ihrer eigenen Prozesse und Zeitpläne vornehmen, ohne andere Ressourcen zu beeinträchtigen.

Beispiel: Ein Team von Entwicklern und Technikern, dem eine Website gehört, die auf Instances mit automatische Skalierung hinter einem Load Balancer gehostet ist. Da die Website einen eigenen Lebenszyklus hat und vom Website-Team gepflegt wird, können Sie einen Stack für die Website und ihre Ressourcen erstellen. Nehmen wir einmal an, dass die Website auch Back-End-Datenbanken verwendet, bei denen sich die Datenbanken in einem separaten Stack befinden, die Eigentum von Datenbankadministratoren sind und von diesen gepflegt werden. Wenn das Website-Team oder das Datenbank-Team seine Ressourcen aktualisieren muss, so können sie dies tun, ohne dass dies Auswirkungen auf die Stacks der anderen hat. Wenn sich alle Ressourcen in einem einzigen Stack befinden, kann sich die Koordination und Übermittlung von Updates schwierig gestalten.

Für weitere Informationen über das Organisieren Ihrer Stacks können Sie zwei übliche Frameworks verwenden: eine mehrschichtige Architektur und eine Service-orientierte Architektur (SOA).

Eine geschichtete Architektur organisiert Stacks in mehrere horizontale Layers, die aufeinander aufbauen, wobei jede Layer über eine Abhängigkeit zur Layer direkt unter ihr verfügt. Sie können also einen oder mehrere Stacks auf jeder Layer haben, aber innerhalb jeder Layer sollten Ihre Stacks über AWS-Ressourcen mit ähnlichem Lebenszyklus und ähnlichen Besitzeigenschaften verfügen.

Bei einer serviceorientierten Architektur können Sie große Business-Probleme in überschaubare Teile organisieren. Jeder dieser Teile ist ein Service mit einem klar definierten Zweck und stellt eine eigenständige Funktionseinheit dar. Sie können diese Services einem Stack mit jeweils eigenem Lebenszyklus und eigene Besitzeigenschaften zuweisen. Diese Services (Stacks) können untereinander verbunden werden, sodass sie miteinander interagieren können.

Verwenden von Stack-übergreifenden Verweisen zum Export von gemeinsam genutzten Ressourcen

Wenn Sie Ihre AWS-Ressourcen basierend auf Lebenszyklus und Besitzeigenschaften organisieren, können Sie einen Stack mit Ressourcen aus einem anderen Stack erstellen. Sie können im Code festgelegte Werte oder Eingabeparameter verwenden, m Ressourcennamen und IDs weiterzugeben. Durch diese Methoden sind Vorlagen jedoch möglicherweise nur schwer erneut zu verwenden oder können den Overhead zum Ausführen des Stack vergrößern. Verwenden Sie stattdessen Stack-übergreifende Verweise, um Ressourcen aus einem Stack zu exportieren und in einem anderen Stack zu verwenden. Stacks können die exportierten Ressourcen verwenden, indem sie sie mithilfe der Fn::ImportValue-Funktion aufrufen.

Angenommen, Sie verfügen über ein Netzwerk-Stack mit VPC, Sicherheitsgruppe und Subnetz. Sie möchten, dass alle öffentliche Webanwendungen diese Ressourcen verwenden. Durch den Export der Ressourcen ermöglichen Sie allen Stacks mit öffentlichen Webanwendungen die Nutzung. Weitere Informationen finden Sie unter Walkthrough: Verweisen auf Ressourcenausgaben in einem anderen AWS CloudFormation-Stack.

Prüfen der Kontingente für alle Ressourcentypen

Bevor Sie einen Stack starten, stellen Sie sicher, dass Sie alle Ressourcen, die Sie erstellen wünschen, erstellen können, ohne an die Grenzen Ihres AWS-Kontos zu stoßen. Wenn Sie einen Grenzwert erreichen, kann CloudFormation Ihren Stapel nicht erfolgreich erstellen, bis Sie Ihr Kontingent erhöhen oder überflüssige Ressourcen löschen. Jeder Service kann verschiedene Grenzwerte haben, die Sie vor dem Starten eines Stacks kennen sollten. Sie können beispielsweise standardmäßig nur 200 CloudFormation-Stacks pro Region in Ihrem AWS-Konto starten. Weitere Informationen zu den Grenzwerten und wie Standard-Grenzwerte erhöht werden können finden Sie unter AWS-Service Limits im AWS General Reference.

Verwenden von Vorlagen zum Replizieren von Stacks in mehreren Umgebungen

Nachdem Sie Ihre Stacks und Ressourcen eingerichtet haben, können Sie Ihre Vorlagen für die Replikation Ihrer Infrastruktur in mehreren Umgebungen erneut verwenden. Sie können beispielsweise Umgebungen für Entwicklung, Tests und Produktion erstellen, sodass Sie Änderungen testen können, bevor Sie sie in Produktion geben. Um Vorlagen wiederverwendbar zu machen, verwenden Sie die Abschnitte für Parameter, Zuweisungen und Bedingungen, sodass Sie Ihre Stacks bei der Erstellung individuell anpassen können. Beispielsweise können Sie für Ihre Entwicklungsumgebungen einen Instance-Typ für niedrigere Kosten als für Ihre Produktionsumgebung festlegen. Aber alle weiteren Konfigurationen und Einstellungen bleiben gleich. Weitere Informationen zu Parameter, Zuweisungen und Bedingungen finden Sie unter Aufbau einer Vorlage.

Verwenden von Modulen, um Ressourcenkonfigurationen wiederzuverwenden

Wenn Ihre Infrastruktur wächst, können häufig wiederkehrende Muster entstehen, in denen Sie dieselben Komponenten in jeder Ihrer Vorlagen deklarieren. Module sind eine Möglichkeit für Sie, Ressourcenkonfigurationen für die Aufnahme in Stack-Vorlagen auf transparente, verwaltbare und wiederholbare Weise zu erstellen. Module können gängige Servicekonfigurationen und Best Practices als modulare, anpassbare Bausteine zusammenfassen, die Sie in Ihre Stack-Vorlagen aufnehmen können.

Diese Bausteine können für eine einzelne Ressource sein, wie Best Practices zum Definieren einer Amazon Elastic Compute Cloud (Amazon EC2)-Instance, oder sie können für mehrere Ressourcen verwendet werden, um gemeinsame Muster der Anwendungsarchitektur zu definieren. Diese Bausteine können in andere Module verschachtelt werden, sodass Sie Ihre Best Practices in höherwertige Bausteine stapeln können. CloudFormation-Module sind in der CloudFormation-Registry verfügbar, sodass Sie sie wie eine native Ressource verwenden können. Wenn Sie ein CloudFormation-Modul verwenden, wird die Modulvorlage in die verbrauchende Vorlage erweitert, die es Ihnen ermöglicht, mit einem Ref oder Fn::GetAtt auf die Ressourcen innerhalb des Moduls zuzugreifen. Weitere Informationen finden Sie unter Module.

Verwenden von AWS-spezifische Parametertypen

Wenn Ihre Vorlage Eingaben für vorhandene AWS-spezifische Werte erfordert, z. B. vorhandene Amazon Virtual Private Cloud-IDs oder einen Amazon EC2-Schlüsselpaarnamen, verwenden Sie AWS-spezifische Parameter-Typen. Sie können beispielsweise einen Parameter als Typ AWS::EC2::KeyPair::KeyName angeben, der einen vorhandenen Schlüsselpaarnamen übernimmt, der sich in Ihrem AWS-Konto und in der Region, in der Sie den Stack erstellen, befindet. AWS CloudFormation kann Werte für AWS-spezifische Parametertypen schnell validieren, bevor Sie Ihren Stack erstellen. Wenn Sie die CloudFormation-Konsole verwenden, zeigt CloudFormation eine Dropdown-Liste gültiger Werte an, sodass Sie die richtigen VPC-IDs oder Schlüsselpaarnamen nicht nachschlagen oder sich merken müssen. Weitere Informationen finden Sie unter Parameter.

Verwenden von Parameter-Einschränkungen

Mit Einschränkungen können Sie zulässige Eingabewerte beschreiben, sodass CloudFormation ungültige Werte vor dem Erstellen eines Stack abfängt. Sie können z. B. Mindestlänge, Maximallänge und zulässige Muster festlegen. Sie können beispielsweise für einen Datenbank-Benutzername-Wert festlegen Einschränkungen, sodass dieser mindestens aus acht Zeichen bestehen und alphanumerische Zeichen enthalten muss. Weitere Informationen finden Sie unter Parameter.

Verwenden Sie AWS::CloudFormation::Init zum Bereitstellen von Softwareanwendungen auf Amazon EC2-Instances

Wenn Sie Stacks starten, können Sie Software-Anwendungen auf Amazon EC2 Instances installieren und konfigurieren, indem Sie das Hilfsskript „cfn-init” und die AWS::CloudFormation::Init-Ressource verwenden. Wenn Sie AWS::CloudFormation::Init verwenden, können Sie die Konfigurationen, die Sie wünschen, beschreiben statt die einzelnen Verfahrensschritte. Sie können Konfigurationen auch aktualisieren, ohne Instances neu zu erstellen. Und für den Fall, dass Ihre Konfiguration Probleme macht, erstellt CloudFormation Protokolle, die Sie verwenden können, um diese Probleme zu untersuchen.

Legen Sie in Ihrer Vorlage den Installations- und Konfigurationsstatus in der Ressource AWS::CloudFormation::Init fest. Eine Schritt-für-Schritt-Anleitung für die Verwendung von „cfn-init” und AWS::CloudFormation::Init finden Sie unter Bereitstellen von Anwendungen auf Amazon EC2 mit AWS CloudFormation.

Verwenden der neuesten Hilfsskripts

Die Hilfsskripte werden regelmäßig aktualisiert. Stellen Sie sicher, dass Sie den folgenden Befehl in die UserData-Eigenschaft Ihrer Vorlage aufnehmen, bevor Sie die Hilfsskripte aufrufen, um sicherzustellen, dass Ihre gestarteten Instances die neuesten Hilfsskripte erhalten:

yum install -y aws-cfn-bootstrap

Weitere Informationen über das Abrufen der neuesten Hilfsskripte finden Sie unter Referenz für CloudFormation-Hilfsskripts.

Validieren von Vorlagen vor ihrer Verwendung

Bevor Sie eine Vorlage verwenden, um einen Stack zu erstellen oder zu aktualisieren, können Sie diese mit CloudFormation validieren. Durch die Validierung einer Vorlage finden Sie mögliche Syntax-Fehler und semantische Fehler, beispielsweise Zirkelbezüge, bevor CloudFormation Ressourcen erstellt. Wenn Sie die CloudFormation-Konsole verwenden, validiert die Konsole die Vorlage nach Eingabe der Eingabeparameter automatisch. Verwenden Sie für die AWS-CLI oder das AWS CLI- oder CloudFormation-API den Befehl aws cloudformation validate-template oder die Aktion ValidateTemplate.

Bei der Validierung wird von CloudFormation geprüft, ob die Vorlage gültiger JSON-Code ist. Wenn dies nicht der Fall ist, wird von CloudFormation geprüft, ob die Vorlage gültiger YAML-Code ist. Wenn beide Prüfungen fehlschlagen, gibt CloudFormation einen Vorlagenvalidierungsfehler zurück.

Prüfen von Vorlagen auf die Einhaltung von Organisationsrichtlinien

Sie können Ihre Vorlage auch auf die Einhaltung der von Organisationsrichtlinien überprüfen. AWS CloudFormation-Guard (cfn-guard) ist ein Open-Source-Befehlszeilenschnittstellen-Tool (CLI), das eine Policy-as-Code-Sprache zur Definition von Regeln bereitstellt, die sowohl erforderliche als auch untersagte Ressourcenkonfigurationen überprüfen können. Anschließend können Sie Ihre Vorlagen anhand dieser Regeln validieren. Beispielsweise können Administratoren Regeln erstellen, um sicherzustellen, dass Benutzer immer verschlüsselte Amazon S3-Buckets erstellen.

Entwickler können cfn-guard entweder lokal bei der Bearbeitung von Vorlagen oder automatisch als Teil einer CI/CD-Pipeline verwenden, um die Bereitstellung nicht konformer Ressourcen zu unterbinden.

Darüber hinaus enthält cfn-guard eine Funktion, rulegen, mit der Sie Regeln aus vorhandenen kompatiblen CloudFormation-Vorlagen extrahieren können.

Weitere Informationen finden Sie im cfn-guard-Repository auf GitHub.

Verwalten aller Stack-Ressourcen mit AWS CloudFormation

Verwenden Sie nach dem Starten eines Stack die CloudFormation-Konsole, API oder die AWS-CLI, um die Ressourcen in Ihrem Stack zu aktualisieren. Nehmen Sie keine Änderungen an Stack-Ressourcen außerhalb von CloudFormation vor. Andernfalls stimmen Ihre Stack-Vorlage und der aktuelle Status Ihrer Stack-Ressourcen möglicherweise nicht mehr überein, was zu Fehlern führen kann, wenn Sie den Stack aktualisieren oder löschen. Weitere Informationen finden Sie unter Schrittweiser Walkthrough: Aktualisierung eines Stacks.

Erstellen von Änderungssätzen vor der Aktualisierung von Stacks

Mit Hilfe von Änderungssätzen können Sie sehen, wie sich vorgeschlagene Änderungen an einem Stack auf Ihre laufenden Ressourcen auswirken können, bevor Sie sie implementieren. CloudFormation nimmt keine Änderungen an Ihrem Stack vor, bis Sie den Änderungssatz ausführen, so dass Sie entscheiden können, ob Sie mit Ihren vorgeschlagenen Änderungen fortfahren oder einen anderen Änderungssatz anlegen möchten.

Verwenden Sie Änderungssätze, um zu prüfen, wie Ihre Änderungen Ihre laufenden Ressourcen – insbesondere kritische Ressourcen – beeinflussen können. Wenn Sie beispielsweise den Namen einer Amazon RDS-Datenbank Instance ändern, erstellt CloudFormation eine neue Datenbank und löscht die alte. Sie verlieren die Daten in der alten Datenbank, es sei denn, Sie haben sie bereits gespeichert. Wenn Sie einen Änderungssatz erstellen, werden Sie sehen, dass Ihre Änderung Ihrer Datenbank ersetzt. Auf diese Weise können Sie planen, bevor Sie Ihren Stack aktualisieren. Weitere Informationen finden Sie unter Aktualisieren von Stacks mithilfe von Änderungssätzen.

Verwenden von Stack-Richtlinien

Stack-Richtlinien helfen Ihnen dabei, kritische Stack-Ressourcen vor unerwünschten Aktualisierungen zu schützen, durch die Ressourcen unterbrochen oder sogar ersetzt werden können. Eine Stack-Richtlinie ist ein JSON-Dokument, in dem dargelegt wird, welche Aktionen auf designierten Ressourcen ausgeführt werden können. Geben Sie bei der Erstellung eines Stack mit kritischen Ressourcen immer auch eine Stack-Richtlinie an.

Bei der Aktualisierung eines Stack müssen Sie die geschützten Ressourcen, die Sie aktualisieren möchten, explizit angeben. Andernfalls werden keine Änderungen an geschützten Ressourcen vorgenommen. Weitere Informationen finden Sie unter Verhindern von Aktualisierungen der Stack-Ressourcen.

Verwenden von Code-Bewertungen und Revisionskontrollen für die Verwaltung Ihrer Vorlagen

Ihre Stack-Vorlagen beschreiben die Konfiguration Ihrer AWS-Ressourcen, z. B. die Eigenschaftswerte. Um Änderungen zu prüfen und den genauen Verlauf Ihrer Ressourcen zu pflegen, verwenden Sie Prüfungen und Revisionskontrollen. Diese Methoden können Ihnen dabei helfen, Änderungen zwischen verschiedenen Versionen Ihrer Vorlagen zu verfolgen, die Ihnen wiederum dabei helfen, Änderungen an Ihren Stack-Ressourcen zu verfolgen. Außerdem können Sie durch die Pflege des Verlaufs Ihren Stack stets auf eine bestimmte Version Ihrer Vorlage zurücksetzen.

Aktualisieren Sie Ihre Amazon EC2-Linux-Instances regelmäßig

Führen Sie auf Ihren Amazon EC2 Linux Instances und Amazon EC2 Linux Instances, die in CloudFormation erstellt wurden, regelmäßig den Befehl yum update aus, um das RPM-Paket zu aktualisieren. Auf diese Weise wird sichergestellt, dass Sie die neuesten Fixes und Sicherheits-Updates erhalten.