J'ai apporté des mises à jour à mon groupe Auto Scaling, mais je n'ai pas obtenu les résultats attendus lors d'une mise à jour de pile AWS CloudFormation.
Brève description
La ressource AWS::AutoScaling::AutoScalingGroup utilise l'attribut UpdatePolicy pour définir la manière dont un groupe Auto Scaling est mis à jour lors de la mise à jour de la pile AWS CloudFormation. Si vous ne disposez pas des paramètres corrects configurés pour l'attribut UpdatePolicy votre mise à jour continue peut produire des résultats inattendus.
Vous pouvez utiliser la stratégie AutoScalingRollingUpdate pour contrôler la façon dont AWS CloudFormation gère les mises à jour continues pour un groupe Auto Scaling. Cette approche courante conserve le même groupe Auto Scaling, puis remplace les anciennes instances en fonction des paramètres que vous définissez.
Remarque : la résolution suivante se concentre uniquement sur la stratégie AutoScalingRollingUpdate. Vous pouvez utiliser la stratégie AutoScalingReplacingUpdate pour restaurer immédiatement la pile sans échec.
La stratégie AutoScalingRollingUpdate prend en charge les options de configuration suivantes :
"UpdatePolicy": {
"AutoScalingRollingUpdate": {
"MaxBatchSize": Integer,
"MinInstancesInService": Integer,
"MinSuccessfulInstancesPercent": Integer,
"PauseTime": String,
"SuspendProcesses": [ List of processes ],
"WaitOnResourceSignals": Boolean
}
}
Solution
Pour déterminer ce qui empêche votre groupe Auto Scaling de se mettre à jour correctement lors de la mise à jour d'une pile, envisagez les scénarios de dépannage suivants :
Configurer WaitOnResourceSignals et PauseTime pour empêcher tout problème lié à un signal de réussite
Dans votre stratégie AutoScalingRollingUpdate définissez la propriété WaitOnResourceSignals sur false.
Remarque : si WaitOnResourceSignals est défini sur true, PauseTime passe à une valeur de délai d'expiration. AWS CloudFormation attend de recevoir un signal de réussite jusqu'à la durée maximale spécifiée par la valeur PauseTime. Si aucun signal n'est reçu, AWS CloudFormation annule la mise à jour. Ensuite, AWS CloudFormation restaure la pile avec les mêmes paramètres, y compris la même valeur PauseTime. Pour plus d'informations, consultez la section Ajouter une UpdatePolicy à un groupe Auto Scaling.
Configurer MinSuccessfulInstancesPercent pour éviter la restauration de la pile
Si vous remplacez un grand nombre d'instances au cours d'une mise à jour continue et que vous attendez un signal de réussite pour chaque instance, définissez la valeur de la propriété MinSuccessfulInstancesPercent dans votre stratégie AutoScalingRollingUpdate.
Remarque : Configurer la propriétéMinSuccessfulInstancesPercent empêche uniquement AWS CloudFormation de restaurer toute la pile en cas d'échec du lancement d'une seule instance. Pour plus d'informations, consultez Attribut UpdatePolicy.
Configurer SuspendProcesses pour éviter toute modification inattendue du groupe Auto Scaling
Lors d'une mise à jour continue, suspendez les processus Auto Scaling suivants :
- Vérification de l'état
- ReplaceUnhealthy
- AZRebalance
- AlarmNotification
- ScheduledActions
Important : si vous utilisez votre groupe Auto Scaling avec Elastic Load Balancing, ne suspendez pas les processus suivants : Launch, Terminate et AddToLoadBalancer. Ces processus sont requis pour effectuer des mises à jour continues.
Remarque : si une action de dimensionnement inattendue modifie l'état du groupe Auto Scaling pendant une mise à jour continue, la mise à jour peut échouer. L'échec peut résulter d'une vue incohérente du groupe Auto Scaling par AWS CloudFormation.