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.yaml
hsb.horse