Bei meiner AWS-CodeDeploy-Bereitstellung läuft das Timeout ab und es wird der folgende Fehler zurückgegeben: „Beim Warten auf einen Status-Callback ist es bei der Bereitstellung zu einem Timeout gekommen. CodeDeploy erwartet innerhalb einer Stunde nach dem Aufruf eines Bereitstellungs-Hook einen Status-Callback.“
Kurzbeschreibung
Dieses Problem kann auftreten, wenn du CodeDeploy verwendest, um einen Amazon Elastic Container Service (Amazon ECS)-Service mit einem Validierungstest bereitzustellen.
Wenn der Test innerhalb von 60 Minuten nach dem Aufrufen eines Lebenszyklus-Event-Hook keine Antwort mit Erfolgreich oder Fehlgeschlagen zurückgibt, gibt CodeDeploy den folgenden Fehler zurück:
„Beim Warten auf einen Status-Callback ist es bei der Bereitstellung zu einem Timeout gekommen. CodeDeploy erwartet innerhalb einer Stunde nach dem Aufruf eines Bereitstellungs-Hook einen Status-Callback.“
**Hinweis:**Das standardmäßige Timeout-Limit für den Status-Callback der AWS-Lambda-Funktion eines Lebenszyklus-Hook beträgt 60 Minuten.
Um den Fehler zu beheben, stelle sicher, dass die Lambda-Funktion eines Lebenszyklus-Hook über die erforderliche Methode und die AWS Identity and Access Management (IAM)-Berechtigungen verfügt.
Behebung
Bestätigung der Ursache des Fehlers, indem du deine CloudWatch Logs überprüfst
Anweisungen findest du unter Wie rufe ich Protokolldaten von Amazon CloudWatch Logs ab?
Sicherstellen, dass die Lambda-Funktion eines Lebenszyklus-Hook über die erforderlichen IAM-Berechtigungen verfügt
Stelle sicher, dass die Lambda-Funktion eines Lebenszyklus-Hook über eine Ausführungsrolle verfügt, die die folgende Berechtigung beinhaltet: PutLifecycleEventHookExecutionStatus.
Hinweis: Die PutLifecycleEventHookExecutionStatus-Berechtigung ist standardmäßig nicht in der von AWS verwalteten IAM-Richtlinie CodeDeployFullAccess enthalten.
Sieh dir das folgende Beispiel für die Berechtigungsanweisung PutLifecycleEventHookExecutionStatus an:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "codedeploy:PutLifecycleEventHookExecutionStatus",
"Resource": "*"
}
]
}
Sicherstellen, dass die Lambda-Funktion eines Lebenszyklus-Hook die erforderliche Methode enthält, um eine Statusantwort an CodeDeploy zurückzugeben
Stelle sicher, dass die Lambda-Funktion eines Lebenszyklus-Hook die Methode putLifecycleEventHookExecutionStatus enthält.
Weitere Informationen findest du unter Schritt 3: Erstelle eine Lambda-Funktion eines Lebenszyklus-Hook im CodeDeploy-Benutzerhandbuch.
Sieh dir das folgende Beispiel der Methode der Lambda-Funktion eines Lebenszyklus-Hook putLifecycleEventHookExecutionStatus an:
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");
}