Wie behebe ich den Fehler, den ich in AWS CodeDeploy erhalte, wenn bei meiner Bereitstellung ein Timeout auftritt, während ich auf einen Statusrückruf warte?

Lesedauer: 2 Minute
0

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 Sie CodeDeploy verwenden, 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, stellen Sie 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ätigen Sie die Ursache des Fehlers, indem Sie Ihre CloudWatch Logs überprüfen

Anweisungen finden Sie unter Wie rufe ich Protokolldaten von Amazon CloudWatch Logs ab?

Stellen Sie sicher, dass die Lambda-Funktion eines Lebenszyklus-Hook über die erforderlichen IAM-Berechtigungen verfügt

Stellen Sie 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.

Sehen Sie sich das folgende Beispiel für die Berechtigungsanweisung PutLifecycleEventHookExecutionStatus an:

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

Stellen Sie sicher, dass die Lambda-Funktion eines Lebenszyklus-Hook die erforderliche Methode enthält, um eine Statusantwort an CodeDeploy zurückzugeben

Stellen Sie sicher, dass die Lambda-Funktion eines Lebenszyklus-Hook die Methode putLifecycleEventHookExecutionStatus enthält.

Weitere Informationen finden Sie in Schritt 3: Erstellen Sie eine Lambda-Funktion eines Lebenszyklus-Hook im CodeDeploy-Benutzerhandbuch.

Sehen Sie sich 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");
         }

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr