logo hsb.horse
← Zur Snippets-Übersicht

Snippets

parameter.json aus einem CloudFormation-Template generieren

Ein Snippet zur automatischen Generierung einer parameters.json durch die Kombination von aws cloudformation validate-template und jq unter Berücksichtigung von Umgebungsvariablen.

Veröffentlicht: Aktualisiert:

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.

Terminal window
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

SchrittVerarbeitung
sort_by(.ParameterKey)Alphabetisch nach Schlüsselname sortieren (für stabile Diffs)
env[.ParameterKey]Umgebungsvariable mit gleichem Namen abrufen. Wenn nicht definiert, dann null
// .ParameterValueFallback 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.

Terminal window
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.

Terminal window
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 bash
set -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}"
Terminal window
# Ausführungsbeispiel
Env1=value1 Env2=value2 ./generate-params.sh path/to/template.yaml