Comment lancer des mises à jour continues lorsque la configuration de lancement na pas été modifiée dans CloudFormation ?

Dernière mise à jour : 16/08/2022

Je souhaite lancer des mises à jour continues dans mon groupe Auto Scaling à chaque mise à jour de la pile AWS CloudFormation, sans modifier la configuration de lancement.

Brève description

Vous pouvez lancer des mises à jour continues pour un groupe Auto Scaling uniquement si des conditions spécifiques de l'attribut UpdatePolicy sont respectées.

Pour lancer des mises à jour continues, vous pouvez créer un paramètre de basculement dans la configuration de lancement de votre modèle CloudFormation. Toutefois, si vous modifiez la valeur du paramètre de basculement au cours d'une mise à jour de pile, la propriété UserData est alors modifiée. Toute modification de UserData nécessite un remplacement. CloudFormation détecte la modification de UserData, puis remplace la ressource LaunchConfiguration. Ce remplacement lance la mise à jour continue Auto Scaling, définie par l'attribut UpdatePolicy.

Solution

Les étapes suivantes supposent que votre stratégie AutoScalingRollingUpdate est configurée pour votre groupe Auto Scaling et que ce dernier est configuré pour faire référence à LaunchConfiguration.

Important : veillez à ne pas perturber d'autres éléments dans la propriété UserData lorsque vous ajoutez le paramètre de basculement à votre modèle. De plus, n'ajoutez pas le paramètre de basculement avant cfn-signal.

1.    Dans votre modèle CloudFormation, définissez Toggle comme paramètre.

JSON :

"Parameters": {
        "Toggle": {
            "Type": "String",
            "AllowedValues": ["true","false"],
            "Default": "true"
        }
    }

YAML :

Parameters:
  Toggle:
    Type: String
    AllowedValues:
      - 'true'
      - 'false'
    Default: 'true'

2.    Dans la configuration de lancement de votre modèle, faites référence au paramètre de basculement dans la propriété UserData, puis lancez votre pile. Consultez les exemples JSON et YAML suivants.

JSON :

"LaunchConfig" : {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Properties" : {
     "ImageId" : { "Ref" : "ImageID" },
     "UserData" : { "Fn::Base64" : { "Ref" : "Toggle" }
         ...
         ...
     },        
  "InstanceType" : { "Ref" : "Type" }
  }
}

YAML :

LaunchConfig:
  Type: 'AWS::AutoScaling::LaunchConfiguration'
  Properties:
    ImageId: !Ref ImageID
    UserData:
      'Fn::Base64': !Ref Toggle
      ...
      ...
    InstanceType: !Ref Type

Important : pour lancer des mises à jour continues lorsque vous mettez à jour votre pile, remplacez la valeur true du paramètre par la valeur false ou la valeur false par true en fonction de sa valeur initiale.

Remarque : vous pouvez utiliser le paramètre de basculement dans les propriétés où une mise à jour requiert le remplacement, par exemple, LaunchConfigurationName, et pour les ressources comme AWS::EC2::LaunchTemplate.


Cet article vous a-t-il été utile ?


Avez-vous besoin d'aide pour une question technique ou de facturation ?