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) | 키 이름으로 알파벳 순 정렬(diff 를 안정적으로 만들기 위해) |
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