aws cloudformation validate-template でテンプレートのパラメータ一覧を取得し、
jq でデフォルト値を環境変数で上書きしながら parameters.json に書き出す。
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"jq の各ステップ
| ステップ | 処理 |
|---|---|
sort_by(.ParameterKey) | キー名でアルファベット順にソート(差分を安定させる) |
env[.ParameterKey] | 同名の環境変数を取得。未定義なら null |
// .ParameterValue | null のときはデフォルト値にフォールバック |
デプロイ済みスタックから既存値を取得するパターン
テンプレートのデフォルト値ではなく、現在スタックに設定されている値をベースに生成したい場合は 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"DefaultValue が null のパラメータを除外する
テンプレートにデフォルト値が設定されていないパラメータを除外したい場合。
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"シェルスクリプト化
#!/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}"# 実行例Env1=value1 Env2=value2 ./generate-params.sh path/to/template.yaml
hsb.horse