Wie behebe ich Fehler im Zusammenhang mit Lambda-Triggern in Amazon Cognito?

Lesedauer: 4 Minute
0

Ich möchte die Fehler beheben, die bei der Konfiguration von AWS Lambda-Funktionen als Trigger in Amazon Cognito auftreten.

Auflösung

Die folgenden Fehler müssen häufig behoben werden, wenn Sie Lambda-Trigger in Amazon Cognito verwenden.

"PreSignUp invocation failed due to error AccessDeniedException." (Der PreSignup-Aufruf ist aufgrund des Fehlers AccessDeniedException fehlgeschlagen.)

Hinweis: Der Triggertyp wird in der Fehlermeldung erwähnt. Beispielsweise reagiert eine Lambda-Funktion, die als PreSignup-Trigger an Ihren Benutzerpool angehängt ist, mit dem vorherigen Fehler.

Grund für den Fehler

Wenn Sie Ihrem Benutzerpool über die Amazon Cognito-Konsole eine Lambda-Funktion als Trigger hinzufügen, führt Amazon Cognito die folgenden Aktionen aus:

  • Fügt der Ressourcenrichtlinie der Funktion die erforderliche Berechtigung hinzu. Diese Ressourcenrichtlinie ermöglicht es Amazon Cognito, die Funktion bei bestimmten Ereignisauslösertypen aufzurufen.
  • Zeigt die folgende Meldung an: "Permission to invoke Lambda function - You are granting Amazon Cognito permission to invoke this Lambda function on your behalf. Amazon Cognito will add a resource-based policy statement to the function." (Erlaubnis zum Aufrufen der Lambda-Funktion – Sie erteilen Amazon Cognito die Erlaubnis, diese Lambda-Funktion in Ihrem Namen aufzurufen. Amazon Cognito fügt der Funktion eine ressourcenbasierte Richtlinienerklärung hinzu.)

Dieser Fehler tritt auch auf, wenn Sie die Funktion löschen, die Sie als Trigger hinzugefügt haben. Wenn Sie einen Lambda-Trigger löschen, müssen Sie den entsprechenden Trigger im Benutzerpool aktualisieren. Wenn Sie beispielsweise den Post-Authentifizierungs-Trigger löschen, müssen Sie den Post-Authentifizierungs-Trigger im entsprechenden Benutzerpool auf keinen setzen.

Beheben des Fehlers

Wenn Sie einen Trigger außerhalb der Amazon Cognito-Konsole erstellen, müssen Sie explizit Berechtigungen hinzufügen, wenn Sie den Trigger dem Benutzerpool zuweisen. Verwenden Sie ein AWS SDK, AWS Command Line Interface (AWS CLI) oder Amazon CloudFormation, um Berechtigungen hinzuzufügen.

Wenn Sie Berechtigungen hinzufügen, ruft Amazon Cognito die Funktion nur im Namen Ihres Benutzerpools und Kontos auf. Um Berechtigungen von der Lambda-Konsole aus hinzuzufügen, folgen Sie den Schritten unter Verwenden von ressourcenbasierten Richtlinien für Lambda. Sie können auch denAddPermission-Vorgang verwenden.

Im Folgenden finden Sie ein Beispiel für eine ressourcenbasierte Lambda-Richtlinie, die es Amazon Cognito ermöglicht, eine Funktion aufzurufen. Der Benutzerpool hat die Bedingung aws:SourceArn und das Konto hat die Bedingung aws:SourceAccount.

Hinweis: Ersetzen Sie example_lambda_function_arn, example_account_number und example_user_pool_arn durch Ihre eigenen Werte.

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "lambda-allow-cognito",
      "Effect": "Allow",
      "Principal": {
        "Service": "cognito-idp.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "example_lambda_function_arn",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "example_account_number"
        },
        "ArnLike": {
          "AWS:SourceArn": "example_user_pool_arn"
        }
      }
    }
  ]
}

"Error in authentication, please contact the app owner." (Fehler bei der Authentifizierung, bitte wenden Sie sich an den Besitzer der App.)

Grund für den Fehler

Dieser Fehler tritt aus zwei Gründen auf:

  • Mit Ausnahme von benutzerdefinierten Absender-Lambda-Triggern ruft Amazon Cognito Lambda-Funktionen synchron auf. Die Funktion muss innerhalb von 5 Sekunden antworten. Wenn die Funktion nicht reagiert, versucht Amazon Cognito den Anruf erneut. Nach drei erfolglosen Versuchen läuft die Funktion ab. Sie können den 5-Sekunden-Timeout-Wert nicht ändern.
  • Wenn Amazon Cognito innerhalb von 5 Sekunden keine Antwort vom Auslöser erhält, gibt Amazon Cognito nach drei erfolglosen Versuchen den Fehler zurück.

Beheben des Fehlers

Wenn die Funktion das Timeout erreicht, wenden Sie bewährte Methoden für die Arbeit mit Lambda-Funktionen an, um die Funktion zu optimieren. Sie können festlegen, dass die Lambda-Funktion, die dem Benutzerpool zugeordnet ist, asynchron eine zweite Lambda-Funktion aufruft. Mit diesem Setup können die Funktionen alle erforderlichen Aktionen ohne Timeout ausführen.

"PreSignUp failed with error Syntax error in module lambda_function." (PreSignUp fehlgeschlagen mit Fehler Syntaxfehler im Modul Lambda_Funktion.)

Grund für den Fehler

Amazon Cognito gibt diesen Fehler zurück, wenn Ihre Lambda-Funktion Syntaxfehler enthält.

Beheben des Fehlers

Überprüfen Sie den Funktionscode erneut und korrigieren Sie alle Syntaxfehler.

"PreSignUp failed with error Syntax error in module lambda_function." (PreSignUp ist mit dem Fehlerhandler 'lambda_handler' fehlgeschlagen; fehlt im Modul; Lambda_function.)

Grund für den Fehler

Die Laufzeiteinstellungen der Funktion enthalten einen Handler-Parameter. Wenn für HandlerInfo falsche Informationen oder Syntax festgelegt sind, kann die Funktion nicht ausgeführt werden und führt zu diesem Fehler.

Beheben des Fehlers

Konfigurieren Sie den Handler-Parameter in der Konfiguration Ihrer Funktion, um der Lambda-Laufzeitumgebung mitzuteilen, welche Handler-Methode aufgerufen werden soll. 

Wenn Sie eine Funktion in Python konfigurieren, ist der Wert der Handler-Einstellung der Dateiname und der Name des Handler-Moduls, getrennt durch einen Punkt. Beispielsweise ruft main.handler die in main.py definierte Handler-Methode auf.

Weitere Hinweise zur Handler-Syntax finden Sie unter Ändern der Laufzeitumgebung.

Verwandte Informationen

Wichtige Überlegungen

Benutzerdefinierte AWS Lambda-Laufzeiten

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren