Das AWS CDK als CloudFormation Preprocessor

Mit dem AWS Cloud Development Kit lässt sich einfach Infrastruktur programmieren. Mit bekannten Sprachen, wie Python oder TypeScript, können alle Funktionalitäten von AWS CloudFormation eingesetzt werden. Neben den bewährten Möglichkeiten durch die Basis aus CloudFormation Templates, bietet das CDK viele weitere Funktionalitäten die typischen Probleme und Unhandlichkeiten ausgleichen.

AWS CloudFormation ist ein mächtiger Service von AWS und die Grundlage vieler unserer Projekte und Kundenaufträge. Das einzige, was CloudFormation in manchen Situationen unhandlich macht, ist die starre beschreibende Funktionsweise. Es fehlt gelegentlich einfach ein CloudFormation Preprocessor mit dem statisches YAML generiert werden kann.

Natürlich, man kann dies für rudimentäre Funktionen selbst bauen, oder findet bei GitHub das ein oder andere Projekt mit genau diesem Ziel. Aber jedes weitere Tooling erhöht die Komplexität von Projekten; vor allem, wenn es Tools von Drittanbietern sind, oder – im schlimmsten Fall – private Projekte die auf GitHub irgendwann nicht mehr gepflegt werden.

Cloud Development Kit

Wenn man beim Einsatz vom AWS Cloud Development Kit darauf achtet, nur die Bausteine zu nutzen, die sich mit nativen CloudFormation Templates abbilden lassen, kann man das CDK hervorragend als Preprocessor für CloudFormation Templates nutzen. Um beispielsweise einen S3 Bucket mit CloudFormation anzulegen, genügt ein einfaches Template ohne viel Konfiguration:

Resources:
  ExampleBucket:
    Type: AWS::S3::Bucket

Mit dem AWS CDK in TypeScript kann innerhalb eines CloudFormation Stacks ein S3 Bucket mit dem @aws-cdk/aws-s3 Modul ebenso einfach angelegt werden:

new s3.Bucket(this, "ExampleBucket");

Bei typischen Projekten, die das Cloud Development Kit zur Verwaltung der Infrastruktur nutzen, wird der CloudFormation Stack irgendwann mit cdk deploy erstellt und deployt. Irgendwo in diesem Prozess muss das CDK folglich das CloudFormation Template erstellen und es an die entsprechende API von AWS schicken.

Diese Funktion kann mit cdk synth auch manuell ausgeführt werden. So lässt sich das mit CDK erstellte CloudFromation Template ausgeben und somit auch unabhängig vom Cloud Development Kit verwenden.

$ > cdk synth

Resources:
  bucket43879C71:
    Type: AWS::S3::Bucket
    UpdateReplacePolicy: Retain
    DeletionPolicy: Retain

Wer auf native CloudFormation Templates setzen will (oder muss), kann so zumindest das CDK einsetzen, um die Pflege der CloudFormation Templates bei komplexen Projekten angenehmer zu gestalten.

Sebastian ist Senior Cloud Consultant bei superluminar GmbH, AWS Serverless Hero und AWS Certified Solutions Architect. Er schreibt hier auf Deutsch über AWS, Serverless, Software Entwicklung, Go, TypeScript und React. Englische Artikel sind auf seiner Webseite sbstjn.com oder auf Twitter unter @sbstjn zu finden.