disons que j'ai tous les paramètres nécessaires pour créer une pile cloudformation dans un fichier json mais que je veux remplacer certains paramètres du fichier de paramètres..est-ce possible?
aws cloudformation create-stack \ --stack-name sample-stack \ --template-body file://sample-stack.yaml \ --parameters file://sample-stack.json \ --capabilities CAPABILITY_IAM \ --disable-rollback \ --region us-east-1 \ --output json && \ aws cloudformation wait stack-create-complete \ --stack-name sample-stack
alors disons-le sont comme 10 paramètres dans le fichier sample-stack.json
MAIS j'ai comme 2 paramètres que je veux remplacer à partir de ce fichier.
Est-ce possible?
Merci
3 Réponses :
Ceci n'est pas disponible dans l'AWS CLI pour le moment, mais il existe une fonctionnalité demande sur GitHub. Pour l'instant, vous devrez créer un script pour générer vos remplacements avant de créer la pile. Une autre option potentielle est de stocker vos valeurs dans quelque chose que vous pouvez référencer dynamiquement, comme Parameter Store, et de les mettre à jour via l'API avant la création de la pile.
Si vous souhaitez mettre à jour une pile et ne spécifier que la liste des paramètres qui ont changé, vous pouvez jeter un œil à ce script shell que j'ai écrit.
Utilisation:
PARAMS='sample-stack.json' edit() { local key value pair for pair in "$@" ; do IFS='=' read -r key value <<< "$pair" jq --arg key "$key" \ --arg value "$value" \ '(.[] | select(.ParameterKey==$key) | .ParameterValue) |= $value' \ "$PARAMS" > x ; mv x "$PARAMS" done } cp $PARAMS $PARAMS.bak edit param1=newval1 param2=newval2
Pour résoudre votre problème, vous pouvez emprunter le edit ()
fonction:
â¶ bash update_stack.sh -h Usage: update_stack.sh [-h] STACK_NAME KEY1=VAL1 [KEY2=VAL2 ...] Updates CloudFormation stacks based on parameters passed here as key=value pairs. All other parameters are based on existing values.
Et puis créez votre pile normalement.
Que faire si je veux remplacer comme 3 valeurs de paramètre du fichier parameters.json
? à quoi ressemblera la commande jq
? .. comme param-key1, param-key2, param-key3 => param-value1, param-value2, param-value3 par exemple
@uberrebu, j'ai mis à jour la réponse pour afficher un script shell que j'ai écrit qui gère le cas de plus d'un paramètre. Laissez-moi savoir ce que vous pensez!
j'aimerai vraiment exécuter une seule commande qui n'impliquera pas de créer un autre fichier json .. j'aimerai utiliser le pouvoir de remplacement de jq
.. use case est juste pour modifier quelques paramètres
définissez toutes les valeurs des fichiers comme variables et utilisez un autre script pour transmettre les valeurs par défaut ou les écraser. Par exemple, j'ai mes fichiers jason sample-stack.json comme suit:
instance_type=t3.small envsubst < "${IN_FILENAME}" > "${OUT_FILENAME}"
dans le fichier de script, exécutez les commandes suivantes pour remplacer
[ { "ParameterKey": "InstanceType", "ParameterValue": "${instance_type}" }, { "ParameterKey": "DesiredSize", "ParameterValue": "${ASG_DESIRED_Number}" } ]
ce que vous devez faire est de remplacer les variables dont vous avez besoin. pour ceux qui n'ont pas besoin d'être modifiés, la valeur par défaut sera transmise.