logo hsb.horse
← Retour à l’index des snippets

Snippets

Générer un parameter.json à partir d'un template CloudFormation

Un snippet pour générer automatiquement un parameters.json en combinant aws cloudformation validate-template et jq, en appliquant les variables d'environnement.

Publié: Mis à jour:

Récupérez la liste des paramètres d’un template avec aws cloudformation validate-template, puis utilisez jq pour remplacer les valeurs par défaut par des variables d’environnement et écrire le résultat dans 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"

Étapes jq

ÉtapeDescription
sort_by(.ParameterKey)Trie par nom de clé dans l’ordre alphabétique (pour stabiliser les diffs)
env[.ParameterKey]Récupère la variable d’environnement du même nom. null si elle n’est pas définie
// .ParameterValueSi null, repli sur la valeur par défaut

Récupérer les valeurs d’un stack déployé

Pour générer le fichier à partir des valeurs actuellement configurées dans le stack plutôt qu’à partir des valeurs par défaut du template, utilisez 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"

Exclure les paramètres sans valeur par défaut

Pour exclure les paramètres dont la valeur par défaut n’est pas définie dans le 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"

Version script shell

#!/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
# Exemple d'utilisation
Env1=value1 Env2=value2 ./generate-params.sh path/to/template.yaml