Mon déploiement AWS CodeDeploy expire et renvoie l'erreur suivante : « The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked. »
Brève description
Ce problème peut survenir lorsque vous utilisez CodeDeploy pour déployer un service Amazon Elastic Container Service (Amazon ECS) avec un test de validation.
Si le test ne renvoie pas de réponse Réussi ou Échec dans les 60 minutes suivant l'appel d'un hook d'événement de cycle de vie, CodeDeploy renvoie l'erreur suivante :
« The deployment timed out while waiting for a status callback. CodeDeploy expects a status callback within one hour after a deployment hook is invoked. »
Remarque : Le délai d'expiration par défaut pour le rappel de statut d'une fonction AWS Lambda de type hook de cycle de vie est de 60 minutes.
Pour résoudre l'erreur, vérifiez que la fonction Lambda de type hook de cycle de vie utilise la méthode requise et dispose des autorisations AWS Identity and Access Management (IAM) requises.
Résolution
Vérifiez la cause de l'erreur en consultant vos CloudWatch Logs
Pour obtenir des instructions, consultez la section Comment récupérer les données de journal d'Amazon CloudWatch Logs ?
Vérifiez que la fonction Lambda de type hook de cycle de vie dispose des autorisations IAM requises
Assurez-vous que la fonction Lambda de type hook de cycle de vie utilise un rôle d'exécution qui inclut l'autorisation suivante : PutLifecycleEventHookExecutionStatus.
Remarque : L'autorisation PutLifecycleEventHookExecutionStatus n'est pas incluse par défaut dans la stratégie IAM CodeDeployFullAccess gérée par AWS.
Consultez l'exemple suivant d’instruction d'autorisations PutLifecycleEventHookExecutionStatus :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "codedeploy:PutLifecycleEventHookExecutionStatus",
"Resource": "*"
}
]
}
Vérifiez que la fonction Lambda de type hook de cycle de vie inclut la méthode requise pour renvoyer une réponse de statut à CodeDeploy
Assurez-vous que la fonction Lambda de type hook de cycle de vie inclut la méthode putLifecycleEventHookExecutionStatus.
Pour en savoir plus, consultez la section Étape 3 : Créer une fonction Lambda de type hook de cycle de vie dans le guide de l'utilisateur de CodeDeploy.
Consultez l'exemple suivant de méthode putLifecycleEventHookExecutionStatus pour une fonction Lambda de type hook de cycle de vie :
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");
}