logo hsb.horse
← Voltar para o índice de snippets

Snippets

Gerar parameters.json a partir de um template CloudFormation

Snippet que combina aws cloudformation validate-template e jq para gerar automaticamente um parameters.json refletindo variáveis de ambiente.

Publicado: Atualizado:

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.

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"

Cada etapa do jq

EtapaProcessamento
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
// .ParameterValueQuando 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.

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"

Excluir parâmetros com DefaultValue nulo

Para excluir parâmetros que não possuem valor padrão definido no template.

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"

Transformar em shell script

#!/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
# Exemplo de execução
Env1=value1 Env2=value2 ./generate-params.sh path/to/template.yaml