Obtém a lista de parâmetros do template com aws cloudformation validate-template e
usa jq para sobrescrever os valores padrão com variáveis de ambiente, salvando o resultado em 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"Cada etapa do jq
| Etapa | Processamento |
|---|---|
sort_by(.ParameterKey) | Ordena alfabeticamente pelo nome da chave (estabiliza o diff) |
env[.ParameterKey] | Obtém a variável de ambiente com o mesmo nome. Se não definida, retorna null |
// .ParameterValue | Quando null, faz fallback para o valor padrão |
Padrão para obter valores existentes de uma stack já implantada
Quando se deseja gerar com base nos valores atualmente configurados na stack, em vez dos valores padrão do template, utiliza-se 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"Excluir parâmetros com DefaultValue nulo
Para excluir parâmetros que não possuem valor padrão definido no template.
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"Transformar em shell script
#!/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}"# Exemplo de execuçãoEnv1=value1 Env2=value2 ./generate-params.sh path/to/template.yaml
hsb.horse