3
votes

remplacer les paramètres dans le fichier de paramètres pour cloudformation

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


0 commentaires

3 Réponses :


1
votes

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.


0 commentaires

0
votes

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.


3 commentaires

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



0
votes

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.


0 commentaires