
Argus - stock.adobe.com
Sieben häufige Fehler in AWS CloudFormation beheben
AWS CloudFormation automatisiert die Verwaltung von Ressourcen, erfordert jedoch Know-how. Best Practices helfen, Syntaxfehler, Abhängigkeiten und Berechtigungsprobleme zu vermeiden.
AWS CloudFormation bietet eine zuverlässige Möglichkeit zur Verwaltung von AWS-Ressourcen – allerdings ist damit ein gewisser Lernaufwand verbunden.
CloudFormation, der native Infrastructure-as-Code-Dienst des Unternehmens, kann durch Automatisierung die Abläufe optimieren. Der Dienst hat jedoch seine eigenen Besonderheiten und Troubleshooting-Mechanismen, die vom Entwickler oder DevOps-Ingenieur, der ihn nutzt, berücksichtigt werden müssen. Häufige Fehler betreffen die Syntaxbildung, die Konfiguration von Vorlagen und Aktualisierungen. Zu den Best Practices für die Fehlerbehebung in CloudFormation gehören die folgenden:
- Verwenden Sie Kommentare in Vorlagen.
- Überprüfen Sie die Informationen in der CloudFormation-Konsole.
- Überprüfen Sie die Ressourcenabhängigkeiten.
- Formatieren Sie die Syntax korrekt.
Erfahren Sie, wie Sie Fehler in CloudFormation beheben können, indem Sie diese Best Practices befolgen.
Verwenden Sie Kommentare, um Kontext zu liefern
Entwickler erstellen CloudFormation-Vorlagen im JSON- oder YAML-Format. Diese Vorlagen definieren die Gruppe von Cloud-Ressourcen, die zum Starten eines CloudFormation-Stacks erforderlich sind. Kommentare sind nützlich, um Kontext oder zusätzliche Informationen hinzuzufügen, die für eine Vorlage und die zu startenden Ressourcen relevant sind.
YAML ist in der Regel ein weniger ausführliches Format als JSON für CloudFormation-Vorlagen. YAML unterstützt auch Kommentare in der Vorlage, JSON hingegen nicht. Ohne den Kontext aus Kommentaren riskieren Entwickler, durch Konfigurationsänderungen und Aktualisierungen Fehler einzuführen.

Vermeiden Sie Konfigurationsfehler
Entwickler und Ingenieure müssen CloudFormation-Stacks erstellen, die Ressourcen in mehreren Umgebungen starten können. Die Konfiguration für die Entwicklung unterscheidet sich beispielsweise von der für Qualitätssicherung, Staging und Produktion. Daher muss die Vorlage in der Lage sein, Stacks mit unterschiedlichen Konfigurationen basierend auf ihrer Bereitstellungsphase zu starten. Durch Drift Detection können Sie feststellen, ob sich Ressourcen außerhalb von CloudFormation verändert wurden und es so zu Konfigurationsabweichungen kommen kann.
Verwenden Sie Funktionen wie Parameter und Zuordnungen, um unterschiedliche Konfigurationswerte für Ressourcen zu unterstützen. Beispielsweise kann ein Parameter oder eine Zuordnungsfunktion die Größe einer EC2-Instanz für die Entwicklungsphase im Vergleich zur Produktion konfigurieren. Die Instanzgröße im Build ändert sich entsprechend dem gestarteten Stack, ohne dass eine aktualisierte oder separate Vorlage erforderlich ist.
Verwenden Sie die CloudFormation-Konsole
AWS rendert einen Stack-Status, wenn ein CloudFormation-Stack gestartet oder aktualisiert wird, entweder über das SDK, die AWS-Befehlszeilenschnittstelle (CLI) oder die Konsole. CREATE_COMPLETE, UPDATE_COMPLETE und UPDATE_COMPLETE_CLEANUP_IN_PROGRESS sind typische Stack-Status, die einen erfolgreichen Vorgang anzeigen.
Wenn während der Erstellung oder Aktualisierung des Stacks ein Fehler auftritt, gibt CloudFormation Statusmeldungen wie CREATE_FAILED, UPDATE_FAILED und UPDATE_ROLLBACK_COMPLETE zurück. Die CloudFormation-Konsole kann einige Einblicke in diese Statusmeldungen geben.
Beim Troubleshooting lassen sich Details am einfachsten über die CloudFormation-Konsole anzeigen, nicht über die CLI oder das SDK. Klicken Sie auf den Stack, für den Sie Fehler beheben möchten, und verwenden Sie die Registerkarte Events. Hier werden detaillierte Informationen zum Status jeder Ressource und zum Grund für etwaige Fehler angezeigt.

Suchen Sie nach Syntaxfehlern
Syntaxfehler treten häufig auf. Nach dem Übermitteln der CloudFormation-Vorlage zeigt CloudFormation möglicherweise eine Meldung in der Konsole an, in der ein Fehler und dessen Position in der Vorlage detailliert beschrieben werden. Wenn ein Problem mit dem JSON- oder YAML-Format vorliegt, lässt die Konsole die Übermittlung der Vorlage nicht zu. In diesem Beispiel wird die folgende Meldung angezeigt:
"Template format error: YAML not well-formed. (line <number>, column <number>".
Für diese Art von generischen Fehlern gibt es Online-Tools, die bei der Identifizierung von Problemen mit dem JSON- oder YAML-Format hilfreich sind, darunter die folgenden:
- JSON Lint
- YAML Lint
- JSON Formatter
- YAML Validator
Für AWS-spezifische Fehler enthält die AWS-Dokumentation Details zur erwarteten CloudFormation-Syntax für jeden Typ der unterstützten Ressourcen.
Überprüfen Sie Berechtigungen
CloudFormation führt Aktionen auf Administratorebene aus, beispielsweise das Erstellen, Aktualisieren oder Löschen von AWS-Ressourcen. Es kann unter anderem Amazon EC2/Relational Database Service-Instanzen, S3 Buckets, Virtual Private Clouds oder Sicherheitsgruppen managen. Daher muss jeder, der CloudFormation-Aufgaben ausführt, über erweiterte Berechtigungen für AWS Identity and Access Management (IAM) verfügen, die diese Aktionen ermöglichen. Eine IAM-Rolle oder ein IAM-Benutzer ohne entsprechende Berechtigungen stößt auf Fehler, die die Fertigstellung des Builds oder Stack-Updates innerhalb von CloudFormation verhindern.
Es ist auch wichtig, die IAM-Berechtigungen zu kontrollieren und IAM-Entitäten so einzurichten, dass sie nur Aktionen ausführen, die für die Rolle des AWS-Entwicklers oder -Administrators relevant sind. AWS bietet die Möglichkeit, während des Erstellungs- oder Aktualisierungsprozesses eines Stacks eine IAM-Rolle an CloudFormation zu übergeben. In beiden Fällen ermöglicht die korrekte Konfiguration der erforderlichen IAM-Berechtigungen in einer IAM-Rolle CloudFormation die Ausführung der erforderlichen Aktionen zur Verwaltung der AWS-Ressourcen des Stacks.
Stellen Sie sicher, dass alle Abhängigkeiten verfügbar sind
Das Erstellen eines Stacks aus AWS-Komponenten ist mit mehreren Abhängigkeiten verbunden, die vom Ressourcentyp und der spezifischen Konfiguration abhängen. Wenn beispielsweise eine EC2-Instanz für die Bereitstellung in einem bestimmten Subnetz konfiguriert ist, muss das Subnetz verfügbar sein, bevor die Instanz gestartet werden kann. Dasselbe gilt für andere Parameter, wie zum Beispiel Sicherheitsgruppen-IDs und Netzwerkschnittstellenkonfigurationen. Wenn diese Abhängigkeiten nicht erfüllt sind, gibt CloudFormation Fehler aus.
Verwenden Sie das Attribut DependsOn, um sicherzustellen, dass keine Ressourcen gestartet werden, bevor alle Abhängigkeiten erfüllt sind. Dieser Parameter unterstützt Abhängigkeiten entweder im aktuellen CloudFormation-Stack oder in anderen Stacks.
Vermeiden Sie Probleme bei der Aktualisierung
Ein weiterer häufiger Fehler bei der Aktualisierung von CloudFormation-Stacks wird durch den Status UPDATE_ROLLBACK_FAILED angezeigt. Dies tritt auf, wenn eine Stack-Aktualisierung nicht erfolgreich ist, CloudFormation jedoch nicht alle relevanten Ressourcen auf ihren vorherigen Zustand zurücksetzen kann. In diesem Fall kann der AWS-Entwickler mit dem Rollback der Aktualisierung fortfahren, muss jedoch angeben, ob die betroffenen Ressourcen übersprungen oder erneut zurückgesetzt werden sollen. Das Überspringen der betroffenen Ressourcen kann manuelle Aktualisierungen nach Abschluss der Stack-Aktualisierung erforderlich machen, was zu menschlichen Fehlern und übersehenen Änderungen führen kann.
Entwickler können unerwünschte Aktualisierungen eines Stacks auslösen. Dieser potenziell störende Fehler kann zu Datenverlusten, zum Löschen oder Ersetzen von Ressourcen und anderen Ereignissen führen, die einer Anwendung schaden können. Um diese Art von Fehler zu vermeiden, erstellen Sie ein Änderungssatz (Change Set), um eine Vorschau der Aktualisierungen einer CloudFormation-Vorlage anzuzeigen, anstatt die Stack-Aktualisierung direkt anzuwenden. Entwickler können vor der Aktualisierung die betroffenen Ressourcen anzeigen, die Art der anzuwendenden Aktionen festlegen (wie Hinzufügen, Ändern und Entfernen) und die Aktualisierung genehmigen oder ablehnen.