CloudFormation ist ein leistungsstarkes AWS-Angebot, mit dem AWS-Ressourcenstapel programmgesteuert erstellt werden können, z. B. die Webschicht einer Anwendung, eines Hochleistungscomputerclusters oder eines gesamten Anwendungsstapels mit einem einzigen API-Aufruf. Es ist immens mächtig. Die Verwendung wird sicherlich als eine gute AWS-Praxis angesehen, insbesondere wenn sie mit Chef, Puppet oder Cloud-Init kombiniert wird . Das Debuggen bringt mich zum Laster.
Nehmen Sie ein Produktionsbeispiel: Die Standard-Mongodb-Cluster-Vorlagen funktionieren bei mir nicht. Ich weiß nicht besonders warum. Ich bin sicher, es ist etwas Einfaches, wie es fast immer ist. Mein Problem ist nicht, dass ich nicht herausfinden kann, was los ist. Es dauert so, dass der Stapel zwischen 20 und 30 Minuten benötigt, um fehlzuschlagen, und dann weitere drei oder vier Minuten, um ihn zu löschen, vorausgesetzt, er löscht die Ressourcen überhaupt ordnungsgemäß.
Was vermisse ich? Ich kenne die --disable-rollback
Flagge und benutze sie wie Sauerstoff. Ich habe vor langer Zeit gelernt, Ausgangsnachrichten mit zu verpacken cfn-signal
und sie wie Ballast von einem sinkenden Schiff zu werfen. Wie kann ich den Vorlagen-Debugging-Prozess beschleunigen oder stecke ich meine Fehler eine halbe Stunde nach ihrer Erstellung für immer fest?
quelle
Antworten:
Verwenden Sie den
aws cloudformation validate-template
Befehl im AWS CLI-Tool. Es wird nur überprüft, ob Ihre Vorlage JSON oder YAML ist, nicht, ob Ihre Schlüssel und Werte korrekt sind (z. B. wird nicht nach Tippfehlern in Schlüsseln gesucht).quelle
aws cloudformation validate-template
in den neuen AWS CLI-Tools der Fall .aws cloudformation validate-template
und es wird nur überprüft, ob Ihre Vorlage JSON oder YAML gültig ist, nicht, ob Ihre Schlüssel und Werte korrekt sind (z. B. wird nicht nach Tippfehlern in Schlüsseln gesucht).Property validation failure: [Length of value {XYZ} for property {/RepositoryDescription} is greater than maximum allowed length {100}]
. Lautvalidate-template
Befehl war dies kein Problem, aber die Benutzeroberfläche gibt diesen Fehler zurück.Eine weitere Option, ein Jahr später, besteht darin, diese Vorlagen in eine Bibliothek eines Drittanbieters wie Troposphäre zu abstrahieren . Diese Bibliothek erstellt die JSON-Nutzdaten für Sie und führt unterwegs zahlreiche Überprüfungen durch. Dies löst auch das Problem "Wow, das Verwalten einer JSON-Datei mit 1000 Zeilen ist sicher traurig" .
quelle
Im Folgenden finden Sie einige Best-Practice-Vorschläge, die sich speziell auf die Verbesserung der Iterationsgeschwindigkeit komplexer CloudFormation-Vorlagenentwicklungen konzentrieren:
Verwenden Sie CloudFormation-Tools, um Vorlagen und Stapelaktualisierungen zu überprüfen
AWS hat diese bereits in einem eigenen Best Practices- Dokument beschrieben, daher werde ich sie nicht wiederholen:
Der Zweck dieses Schritts besteht darin, offensichtliche Syntax- oder logische Fehler zu erkennen, bevor tatsächlich eine Stapelerstellung / -aktualisierung durchgeführt wird.
Testressourcen isoliert
Bevor Sie eine einzelne CloudFormation-Ressource in einem komplexen Stapel verwenden, stellen Sie sicher, dass Sie das gesamte Ausmaß des Erstellungs- / Aktualisierungs- / Löschverhaltens dieser Ressource einschließlich etwaiger Nutzungsbeschränkungen und typischer Start- / Abbauzeiten genau kennen, indem Sie deren Verhalten in kleineren, eigenständigen Stapeln testen zuerst.
AWS::CloudFront::Distribution
kann das Erstellen / Aktualisieren / Löschen einer komplexen Ressource manchmal 30 bis 60 Minuten dauern , während eineAWS::EC2::SecurityGroup
Aktualisierung in Sekunden erfolgt.Erstellen Sie komplizierte Stapel in kleinen Schritten
Wenn Sie eine Stapelerstellung / -aktualisierung durchführen, führt ein Fehler in einer einzelnen Ressource dazu, dass der Stapel den gesamten Satz von Ressourcenänderungen zurücksetzt. Dies kann andere erfolgreich erstellte Ressourcen unnötig zerstören und beim Erstellen eines komplizierten Stapels mit einer langen Ressource sehr lange dauern Abhängigkeitsdiagramm der zugehörigen Ressourcen.
Die Lösung hierfür besteht darin, Ihren Stapel schrittweise in kleineren Update-Stapeln zu erstellen und jeweils eine (oder mehrere) Ressourcen hinzuzufügen. Auf diese Weise führt das Rollback bei einem Fehler bei der Erstellung / Aktualisierung von Ressourcen nicht dazu, dass die Ressourcen Ihres gesamten Stacks zerstört werden, sondern nur die Ressourcen, die im letzten Update geändert wurden.
Überwachen Sie den Fortschritt der Stapelaktualisierungen
Stellen Sie sicher, dass Sie den Fortschritt Ihrer Stapelaktualisierung überwachen, indem Sie die Ereignisse des Stapels anzeigen, während eine Erstellung / Aktualisierung durchgeführt wird. Dies ist der Ausgangspunkt für das Debuggen weiterer Probleme mit einzelnen Ressourcen.
quelle
Haben Sie sich den AWS CloudFormation-Vorlageneditor angesehen, der im AWS Toolkit für Eclipse enthalten ist ? Es verfügt über Syntaxhervorhebung, Vervollständigung von Anweisungen und Bereitstellung in AWS CloudFormation.
quelle
Spät zur Party, aber ich möchte auch hinzufügen, dass es sich lohnt, ein wenig Zeit damit zu verbringen, Ihren Editor zu konfigurieren und zu lernen. Ich weiß, das klingt als Antwort lächerlich einfach, aber probieren Sie es aus.
In meinem Fall habe ich mit vim viel besser abgeschnitten, nachdem ich einige Zeit mit der Installation von JSON-Syntax-Plugins verbracht hatte, und (endlich) die Falttechniken verstanden, um große CF-Dateien einfach zu navigieren. Meins schlägt jetzt Tippfehler vor (Kommas, wo sie nicht sein sollten usw.), und die Hervorhebung von Farben spart viel Zeit und gibt klare visuelle Hinweise.
Dies kann dazu beitragen, Syntaxfehler zu verringern. Logische Fehler in der Vorlage werden jedoch besser von anderen Tools behoben. Hoffentlich wird es eines Tages einen "Vorschau" -Modus für CF geben.
quelle
Für JetBrains-IDEs (IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion Gogland DataGrip Rider Android Studio) gibt es das AWS CloudFormation- Plugin, das die eingehende Überprüfung von JSON- und YAML-CFN-Vorlagen unterstützt
quelle
Der AWS CloudFormation-Linter bietet darüber hinaus zusätzliche statische Analysen
aws cloudformation validate-template
Sie werden darüber informiert, welche Ressourcentypen und Instanztypen in bestimmten Regionen nicht verfügbar sind, Eigenschaftswerte anhand zulässiger Werte validieren, zirkuläre Ressourcenabhängigkeiten, Syntaxfehler, Vorlagenbeschränkungen und vieles mehr abfangen
Neben der CLI ist die Installation eines Editor-Plugins wie der Visual Studio Code-Erweiterung, die bei jedem Speichern von Dateien ausgeführt wird , einer der beliebtesten Mechanismen, um sich daran zu erinnern, den Linter auszuführen
Andere Mechanismen wie Git-Hooks vor dem Festschreiben werden hier beschrieben
quelle
Wenn Sie mit EC2-Computern arbeiten, würde ich Ihnen empfehlen, sich am EC2-Computer anzumelden und die Datei boot.log (/var/log/boot.log in RHEL6 / Centos) zu beenden. Diese Datei wird mit all Ihren Shell-Aktivitäten aktualisiert (Aktivitäten wie Installation, Herunterladen von Dateien, Kopieren von Dateien usw.).
Verwenden Sie auch Editoren wie http://www.jsoneditoronline.org/ , um eine TREE-Darstellung Ihres JSON zu erhalten. Auf diese Weise können Sie die Reihenfolge der JSON-Elemente überprüfen.
Und wenn Sie Dateien aktualisieren, verwenden Sie immer Tools wie http://www.git-tower.com/blog/diff-tools-mac/ oder ein aktuelles Versionskontrollsystem, um sicherzustellen, dass Sie nicht versehentlich etwas geändert haben, das Ihr Skript beschädigen könnte.
quelle
Zusätzlich zum AWS CLI-
aws cloudformation validate-template
Befehl gibt es ein knotenbasiertes cfn-check- Tool, das eine eingehendere Validierung durchführt.quelle
Eine neue Funktion, die Cloudformation im vergangenen Dezember hinzugefügt wurde, war das Hinzufügen zusätzlicher Parametertypen . Mit diesen neuen Typen können Ihre Vorlagen eine stärkere Datenprüfung durchführen und beim Erstellen von Ressourcen und verschachtelten Cloudformation-Stapeln "ausfallsicher" sein. Sie haben auch die Möglichkeit, besser lesbare benutzerdefinierte Fehlermeldungen bereitzustellen, wenn ungültige Werte mithilfe des neuen ConstraintDescription-Attributs übergeben werden .
Die neuen Typen sind besonders hilfreich beim Umgang mit verschiedenen VPC-Ressourcen. Sie können sicherstellen, dass die Parameter für Ihre Vorlagen vom richtigen Typ sind und explizit einen einzelnen Wert gegenüber einer Liste erwarten.
Zum Beispiel:
quelle
Bitte überprüfen Sie meinen Cloudformation Validator unter https://pypi.org/project/cloudformation-validator/
Dadurch wird das Schema überprüft und anschließend eine Liste von Regeln erneut überprüft. Außerdem werden benutzerdefinierte Regeln berücksichtigt. Ich erlaube auch eine einfache Integration mit Bereitstellungstools.
quelle
Sie können den CloudFormation Designer auch von amazon hier verwenden: https://console.aws.amazon.com/cloudformation/designer/home?region=us-east-1
Fügen Sie einfach Ihre Vorlage (JSON) in den Bereich "Vorlage" ein und klicken Sie dann auf das Häkchensymbol, um Ihre Vorlage zu validieren. Alle Fehler werden im Bereich "Fehler" angezeigt.
Hoffe das hilft.
quelle