Mit aws cloudformation validate-template wird die Parameterliste des Templates abgerufen,
und mit jq werden die Standardwerte durch Umgebungsvariablen überschrieben und in parameters.json geschrieben.
aws cloudformation validate-template \ --template-body "file://path/to/template" \ --query "Parameters[].{ParameterKey:ParameterKey,ParameterValue:DefaultValue}" \ | jq 'sort_by(.ParameterKey)' \ | jq 'map( .ParameterValue = (env[.ParameterKey] // .ParameterValue) )' > "parameters.json"Die einzelnen jq-Schritte
| Schritt | Verarbeitung |
|---|---|
sort_by(.ParameterKey) | Alphabetisch nach Schlüsselname sortieren (für stabile Diffs) |
env[.ParameterKey] | Umgebungsvariable mit gleichem Namen abrufen. Wenn nicht definiert, dann null |
// .ParameterValue | Fallback auf Standardwert, wenn null |
Muster: Vorhandene Werte aus einem bereits deploytes Stack abrufen
Wenn die Generierung nicht auf den Standardwerten des Templates, sondern auf den aktuell im Stack gesetzten Werten basieren soll, verwendet man describe-stacks.
aws cloudformation describe-stacks \ --stack-name "your-stack-name" \ --query "Stacks[0].Parameters[].{ParameterKey:ParameterKey,ParameterValue:ParameterValue}" \ | jq 'sort_by(.ParameterKey)' \ | jq 'map( .ParameterValue = (env[.ParameterKey] // .ParameterValue) )' > "parameters.json"Parameter ohne DefaultValue ausschließen
Wenn Parameter ohne Standardwert im Template ausgeschlossen werden sollen.
aws cloudformation validate-template \ --template-body "file://path/to/template" \ --query "Parameters[].{ParameterKey:ParameterKey,ParameterValue:DefaultValue}" \ | jq '[.[] | select(.ParameterValue != null)]' \ | jq 'sort_by(.ParameterKey)' \ | jq 'map( .ParameterValue = (env[.ParameterKey] // .ParameterValue) )' > "parameters.json"Als Shell-Skript
#!/usr/bin/env bashset -euo pipefail
TEMPLATE="${1:?Usage: $0 <template-path> [output-path]}"OUTPUT="${2:-parameters.json}"
aws cloudformation validate-template \ --template-body "file://${TEMPLATE}" \ --query "Parameters[].{ParameterKey:ParameterKey,ParameterValue:DefaultValue}" \ | jq 'sort_by(.ParameterKey)' \ | jq 'map( .ParameterValue = (env[.ParameterKey] // .ParameterValue) )' > "${OUTPUT}"
echo "Generated: ${OUTPUT}"# AusführungsbeispielEnv1=value1 Env2=value2 ./generate-params.sh path/to/template.yamlPraxishinweis
Dieses Snippet passt gut, wenn dieselbe Operation oder Prüfung im Umfeld von aws, cloudformation, cli, shell, jq nicht immer wieder neu geschrieben werden soll. Als kleine Hilfsfunktion bleibt aufrufender Code leichter lesbar.
Wenn jedoch Verzweigungen und Voraussetzungen zunehmen, sollte nicht alles in ein einziges Snippet gepackt werden. Getrennte Schritte und klar abgegrenzte Helfer bleiben auf Dauer wartbarer.
hsb.horse