Infrastruktur-Änderungen sichtbar machen mit CDK Pipelines
December 22, 2020Das AWS Cloud Development Kit (kurz CDK) ist ein großartiges Werkzeug, um Infrastruktur mit Code zu beschreiben. Hier und hier haben wir uns schon eingehender mit dem CDK und seinen Vorzügen beschäftigt. Besonders das Construct CDK Pipelines ist eine enorme Erleichterung, da es das Erstellen von CI / CD Pipelines auch über AWS Account Grenzen hinweg ermöglicht.
Das Problem
Leider ist CDK Pipelines noch in einem sehr frühen Entwicklungsstadium und es fehlen noch einige essenzielle Funktionen.
Es ist zum Beispiel nicht einfach möglich, den Befehl cdk diff
zu verwenden, um sich die Auswirkungen einer Codeänderung auf einen via CDK Pipelines erstellten Stack anzeigen zu lassen. Gerade dies ist aber in der Infrastrukturentwicklung eine häufig benötigte Aktion. Nur so kann man sichergehen, dass die letzte Codeänderung nicht den gerade erstellten EKS Cluster wieder löscht.
Die Lösung
Um sich die Änderungen via cdk diff
für einen bestimmten Stack anzeigen zu lassen, sind die folgen Schritte notwendig:
- Synthetisieren der CDK App mit den aktuellen Codeänderungen via
cdk synth
- Im lokalen Ausgabeverzeichnis “cdk.out” nach dem Verzeichnis der Stage suchen, in der sich der Stack befindet, für den die Änderungen angezeigt werden sollen (“assembly-PIPELINE_STACK_NAME-STAGE_NAME”)
- In dem in Schritt 2 identifizierten Verzeichnis den gewünschten Stack finden
- Dann
cdk diff
mit den eben ermittelten Werten aufrufen:cdk diff -a cdk.out/assembly-PIPELINE_STACK_NAME-STAGE_NAME STACK_NAME
Hierbei ist zu beachten, dass der Befehl mit den jeweiligen Rechten des AWS Account ausgeführt werden muss, in dem sich der Stack befindet. Dies geht zum Beispiel sehr gut mit verschieden aws cli Profilen: cdk diff ... --profile devAccount
Ein wenig mehr Komfort
Um diese Schritte nicht immer wieder mühselig von Hand auszuführen, benutzen wir eine Shell-Funktion in Verbindung mit dem großartigen commandline fuzzy finder fzf:
function cdk-diff() {
if ! [ -d "cdk.out" ]; then
echo "no 'cdk.out' dir fount. Go to your apps root dir and run 'cdk synth'."
return
fi
stage=$(ls cdk.out | grep 'assembly-' | fzf)
stack=$(ls cdk.out/$stage/*.template.json | sed -E "s|cdk\.out\/${stage}\/(.+)\.template\.json|\1|" | fzf)
npx cdk diff -a cdk.out/${stage} $stack $@
}
So können wir einfach in unserem CDK Projektverzeichnis den Befehl cdk-diff
ausführen und erst die richtige Stage und dann den richtigen Stack auswählen.