Blog
Neun Gründe, CloudFormation anstelle von Terraform zu verwenden

Ich liebe CloudFormation, und ich liebe Terraform. Ich verwende beide Tools häufig in Blogbeiträgen, in Kursen und bei Kunden. Ich werde oft gefragt, ob ich mich zwischen CloudFormation und Terraform entscheiden soll. In diesem Blogbeitrag möchte ich Ihnen einige Funktionen von CloudFormation vorstellen, um Ihnen die Entscheidung zu erleichtern. Funktionen, die einfach zu verwenden sind und bei der Auswahl des richtigen Tools für die Ausführung von Produktions-Workloads eine wichtige Rolle spielen.
Staat
Wenn eine Vorlage in CloudFormation bereitgestellt wird, wird der Status im CloudFormation-Dienst verwaltet. Sie müssen den Statusspeicher nicht erstellen, pflegen und sichern - das ist alles kostenlos integriert. Der Status kann nicht exportiert werden, so dass Dinge wie Geheimnisse und Passwörter im Status niemals offengelegt werden.
Prüfpfad
Der Service CloudTrail führt ein Audit-Protokoll über alle API-Aktionen in Ihrem AWS-Konto. Das bedeutet auch, dass alle Ihre CloudFormation-Bereitstellungsaktionen und die damit geänderten Ressourcen in CloudTrail aufgezeichnet werden. Wenn Sie Tausende von Stacks haben und/oder in einer stark regulierten Umgebung arbeiten, sind Audit Trails ein sehr wichtiges Thema. Es ist von Haus aus abgedeckt. Um sicherzustellen, dass der Audit Trail keinen unauffindbaren Benutzer wie "deploy" enthält, sollten Sie den folgenden Befehl zur Rollenübernahme in Ihre Deployment-Pipeline implementieren.
REPO="appx"
COMMIT="41a5f427"
USER="donkey12"
$ aws sts assume-role
--external-id "AnotherSecret"
--role-arn arn:aws:iam::123456789012:role/cfn-deploy
--role-session-name $REPO-$COMMIT-$USER
Geheimnisse
Es gibt eine Reihe von AWS-Services zum Speichern von Geheimnissen, wie den SSM Parameter Store. CloudFormation verfügt über native Unterstützung, um ein Geheimnis aus dem SSM Parameter Store abzurufen und ohne es irgendwo offenzulegen, an den Enddienst weiterzugeben. Zum Beispiel ein API-Schlüssel für einen Drittanbieter-Service.
Beispiele
Dies ist zwar keine wirkliche Funktion, aber dennoch ein sehr guter Grund, CloudFormation in Betracht zu ziehen. Es gibt wirklich Tausende von CloudFormation-Vorlagen, die online verfügbar sind. Fangen Sie nicht bei Null an, um eine Vorlage zu erstellen, sondern nehmen Sie sich ein paar Minuten Zeit, um von all diesen Beispielen zu profitieren.
Unterstützen Sie
Nicht, dass Sie jemals Support für CloudFormation benötigen, aber es ist gut, dafür zu sorgen, dass der "Support" abgedeckt ist. Ich habe einige Erfahrungen gemacht, bei denen Unternehmen Support brauchten, weil ihre Terraform-Statusdatei beschädigt war. Ich habe auch Erfahrungen gemacht, bei denen Terraform eine so große Rolle spielte, dass sie Hashicorp um einen Supportvertrag baten und es ziemlich teuer war, nur um das Kästchen zu überprüfen. Es ist also gut zu wissen, dass der CloudFormation-Support Teil des AWS-Supportvertrags ist, und vielleicht brauchen Sie auch nie Support.
Erweitern von CloudFormation
CloudFormation unterstützt mehr als 400 Ressourcentypen. Manchmal wird ein neuer Dienst nicht unterstützt, oder Sie möchten einen Dienst eines Drittanbieters in Ihre CloudFormation aufnehmen. Gut zu wissen, dass es sehr einfach ist, CloudFormation mit benutzerdefinierten Ressourcen zu erweitern. Benutzerdefinierte Ressourcen sind einfach Lambda-Funktionen, so dass Sie in jeder beliebigen Sprache schreiben können. In unserem binx.io/blog finden Sie eine Vielzahl von Beispielen.
Linting / Compliance
Wenn Sie Entwickler sind, kennen Sie wahrscheinlich den Begriff "Linting". Für CloudFormation gibt es zwei empfohlene Tools: cfn-lint und cfn-nag, und wahrscheinlich noch mehr. Linters arbeiten als Kommandozeilen-Tool, lokal und als Teil Ihrer Deployment-Pipeline. Sie sind auch Teil Ihrer bevorzugten IDE. Linters helfen bei der Validierung von Vorlagen und bei der Prüfung, ob sie den Best Practices und Sicherheitsprinzipien entsprechen. Ein Beispiel: Während der Erstellung der Vorlagen erhalten Sie sofort eine Rückmeldung, ob eine Eigenschaft fehlt oder falsch konfiguriert ist. Wie z.B. ein S3-Bucket mit öffentlichem Zugriff oder eine Sicherheitsgruppe, deren Port 22 für die ganze Welt offen ist.
Drift-Erkennung
Eine neue Funktion, die mit der Zeit immer mehr Dienste unterstützt, ist die "Drift-Erkennung". Wenn Sie eine Prüfung zur Drifterkennung initiieren, vergleicht CloudFormation die aktuelle Stack-Konfiguration mit der in der Vorlage, die zur Erstellung oder Aktualisierung des Stacks verwendet wurde, angegebenen Konfiguration und meldet alle Unterschiede, wobei Sie detaillierte Informationen zu jedem einzelnen erhalten. Terraform unterstützt ebenfalls die Erkennung von Drifts, so dass dies keinen Unterschied macht, aber in CloudFormation ist es einfach, die Prüfung zu automatisieren. Zum Beispiel: Benachrichtigung in Slack oder per E-Mail, dass der Stack gedriftet ist und Sie Maßnahmen ergreifen müssen.
Machen Sie es einfacher
Wenn Sie mehrere CloudFormation-Vorlagen und Stacks haben, wird es ziemlich schwierig, diese zu verwalten. Auch die Automatisierung der Bereitstellung über die CLI wird zu einem umfangreichen Bash-Skript oder benutzerdefinierten Tool. Eines dieser Tools, das ich Ihnen empfehle, ist
- Es unterstützt gängige Programmiersprachen wie TypeScript und Python, was vielen Entwicklern gefallen wird.
- Es vereinfacht 1000+ Zeilen yaml-Code auf nur 20 oder 30. CDK befindet sich derzeit in der öffentlichen Beta-Phase, aber ich persönlich glaube, dass es in Zukunft nativ von CloudFormation unterstützt wird. Da es mit CloudFormation abwärtskompatibel ist, ist es leicht zu migrieren.
Was fehlt noch?
Einige Unternehmen haben manuell mit AWS begonnen. Derzeit ist es nicht möglich, bestehende Ressourcen in einem CloudFormation Stack hinzuzufügen. Wenn Sie z.B. eine RDS-Instanz manuell erstellt haben und die Konfiguration zusammen mit anderen Ressourcen in einem CloudFormation Stack beibehalten möchten, ist das nicht möglich. Sie müssen den Stack neu erstellen und die Daten oder den Status migrieren.
Fazit
Für den Produktionseinsatz empfehle ich CloudFormation zu verwenden. Wenn Sie bereits Terraform verwenden, wird die Umstellung auf CloudFormation einige Stunden oder Tage dauern, aber Sie erhalten die aufgeführten Vorteile. Um all diese Vorteile in Terraform zu erhalten, wird es Sie wahrscheinlich viel mehr kosten. PS. Ich habe diesen Blogbeitrag auf eine Stunde begrenzt. Natürlich ist mir das nicht gelungen, aber ich habe es trotzdem viel schneller geschafft als bei allen anderen Blogbeiträgen. Ich bin offen für Diskussionen zur Verbesserung des Blogbeitrags. Vielleicht haben Sie etwas hinzuzufügen oder einen Verbesserungsvorschlag, dann lassen Sie es mich bitte wissen!
Verfasst von
Martijn van Dongen
Unsere Ideen
Weitere Blogs
Contact



