Comment puis-je résoudre l'erreur que je reçois dans AWS CodeDeploy lorsque mon déploiement est épuisé en attendant un rappel d'état ?

Dernière mise à jour : 28/12/2020

Je souhaite résoudre l'erreur suivante dans AWS CodeDeploy : « Le déploiement a expiré en attendant un rappel d'état. CodeDeploy attend un rappel d'état dans l'heure suivante à l'appel d'un hook de déploiement ».

Brève description

Généralement, vous créez des fonctions de test de validation AWS Lambda pour plusieurs hooks d'événements de cycle de vie (tels que BeforeInstall, AfterInstall, BeforeAllowTraffic et AfterAllowTraffic) dans vos déploiements Amazon Elastic Container Service (Amazon ECS). Ensuite, vous attendez une réponse réussie ou échouée du test de validation.

Toutefois, vous recevez cette erreur si votre fonction AWS Lambda ne renvoie pas un état d'exécution réussi ou échoué du CodeDeploy dans la limite de temps par défaut de 60 minutes.

Résolution

1.    Vérifiez les données de vos journaux à partir d'AWS CloudWatch Logs pour vous assurez que le temps d'exécution de votre fonction Lambda est supérieur à 60 minutes.

2.    Attachez l'autorisation PutLifeCycleEventHookExecutionStatus à votre rôle d'exécution Lambda. Par exemple :

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "codedeploy:PutLifecycleEventHookExecutionStatus",
            "Resource": "*"
        }
    ]
}

Remarque : l'autorisation PutLifeCycleEventHookExecutionStatus n'est pas incluse par défaut dans la stratégie CodeDeployFullAccess d’AWS Identity and Access Management (IAM) gérée par AWS. Vous devez attacher la stratégie manuellement.

3.    Vérifiez que votre fonction Lambda possède la méthode PutLifeCycleEventHookExecutionStatus pour renvoyer une réponse à CodeDeploy. Par exemple :

codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
     if (err) {
          // Validation failed.
          console.log('AfterAllowTestTraffic validation tests failed');
          console.log(err, err.stack);
          callback("CodeDeploy Status update failed");
     } else {
          // Validation succeeded.
          console.log("AfterAllowTestTraffic validation tests succeeded");callback(null, "AfterAllowTestTraffic validation tests succeeded");
 		}

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


Besoin d'aide pour une question technique ou de facturation ?