Warum erhalte ich vom API Gateway die Fehlermeldung „Execution failed due to configuration error“ (Die Ausführung ist aufgrund der Konfiguration fehlgeschlagen), nachdem ich eine CloudFormation-Vorlage oder eine OpenAPI-Definition verwendet habe, um eine REST-API mit einer Lambda-Integration zu erstellen?

Lesedauer: 5 Minute
0

Ich habe eine AWS CloudFormation-Vorlage (oder OpenAPI-Definition) verwendet, um eine Amazon API Gateway-REST-API mit AWS Lambda-Integration zu erstellen. Wenn ich versuche, meine Lambda-Funktion mithilfe der API-Methode aufzurufen, erhalte ich die folgende Fehlermeldung und einen 500-Statuscode: „Execution failed due to configuration error“ (Die Ausführung ist aufgrund eines Konfigurationsfehlers fehlgeschlagen). Was verursacht den Fehler und wie behebe ich das Problem?

Kurzbeschreibung

Wenn Sie über eine API Gateway-REST-API mit Lambda-Integration verfügen, muss die API die Backend-Lambda-Funktion mithilfe der HTTP-Methode POST aufrufen. Wenn Sie eine andere HTTP-Methode (z. B. ANY oder GET) für die Backend-Integrationsanforderung verwenden, schlägt der Aufruf fehl. API Gateway gibt dann eine Fehlermeldung zurück, die dem folgenden Beispiel in Ihren Amazon CloudWatch Logs ähnelt:

Mon Oct 14 14:08:49 UTC 2019 : Received response. Status: 403, Integration latency: 3 ms
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response headers: {Date=Mon, 14 Oct 2019 14:08:49 GMT, Content-Length=130, Connection=keep-alive, x-amzn-RequestId=abc1d2ef-34ab-56c7-de8f-90123a456789}
Mon Oct 14 14:08:49 UTC 2019 : Endpoint response body before transformations: <AccessDeniedException>
<Message>Unable to determine service/operation name to be authorized</Message>
</AccessDeniedException>
Mon Oct 14 14:08:49 UTC 2019 : Lambda invocation failed with status: 403. Lambda request id: abc1d2ef-34ab-56c7-de8f-90123a456789
Mon Oct 14 14:08:49 UTC 2019 : Execution failed due to configuration error:
Mon Oct 14 14:08:49 UTC 2019 : Method completed with status: 500

Hinweis: Sie können weiterhin jede HTTP-Methode für das Frontend Ihrer REST-API einrichten.

Sie müssen die POST-Methode für die Backend-Integrationsanforderung angeben, wenn Sie eine REST-API mit Lambda-Integration mithilfe einer der folgenden Methoden erstellen:

Hinweis: Wenn Sie die API Gateway-Konsole verwenden, um eine Lambda-Integration zu konfigurieren, wird die Backend-Integrationsanforderung automatisch auf POST gesetzt.

Lösung

Die bewährte Methode von CloudFormation besteht darin, alle Stack-Ressourcen über AWS CloudFormation zu verwalten und keine Änderungen an den Stack-Ressourcen außerhalb von CloudFormation vorzunehmen.

Die Methode, die verwendet wird, um die HTTP-Methode für die Backend-Integrationsanforderung in POST zu ändern, hängt von der ursprünglichen Vorlagendefinition ab. Beispielsweise unterscheidet sich der Prozess zur Aktualisierung eines mit CloudFormation bereitgestellten API-Gateways von einem API-Gateway, das mit OpenAPI oder der AWS-CLI erstellt wurde.

Um die Anforderungsmethode der Integration auf POST für API-Gateways zu ändern, die mit CloudFormation erstellt wurden

Anweisungen finden Sie unter Ändern einer Stack-Vorlage.

A. Wenn Ihre Methode erstellt wurde, indem Sie die Ressource AWS::ApiGateway::Method in Ihrer CloudFormation-Vorlage definiert haben, aktualisieren Sie die Eigenschaft HttpMethod auf POST. Anweisungen finden Sie im Abschnitt Beispiele der Dokumentation zu AWS::ApiGateway::Method.

B. Wenn Ihre Methode eine OpenAPI-Definition als Wert der Body-Eigenschaft der AWS::ApiGateway::RestAPI-Ressource enthält: Setzen Sie den HttpMethod-Eigenschaftswert in Ihrer API-Definitionsdatei auf POST.  Eine Anleitung finden Sie im x-amazon-apigateway-integration-Objekt und im Beispiel für eine Swagger-Vorlage im GitHub-Repository aws-samples.

Aktualisieren Sie Ihre API, indem Sie AWS CloudFormation-Stack-Updates mit der bearbeiteten Vorlage ausführen:

"x-amazon-apigateway-integration" : {
    "type" : "aws",

    "httpMethod" : "POST"

Ändern der HTTP-Methode der Backend-Integration auf POST für API-Gateways, die außerhalb von CloudFormation erstellt wurden

Aktualisierungsmethode mithilfe der Konsole

  1. Wählen Sie in der API Gateway-Konsole Ihre API aus.
  2. Wählen Sie im Bereich Ressources (Ressourcen) die HTTP-Methode aus, die über die Lambda-Integration verfügt.
  3. Wählen Sie im Bereich Method Execution(Methodenausführung) die Option Integration Request (Integrationsanforderung) aus.
  4. Bearbeiten Sie im Bereich Integration Request (Integrationsanforderung) für die HTTP-Methode den Lambda-Funktionsnamen, indem Sie auf das Stiftsymbol rechts neben dem Funktionsnamen klicken und dann auf das Häkchensymbol klicken, das rechts angezeigt wird.
  5. Wenn Sie aufgefordert werden, der Lambda-Funktion eine Berechtigung hinzuzufügen, wählen Sie OK.
  6. Stellen Sie Ihre API bereit.
  7. (Optional) Testen Sie die HTTP-Methode mit der Lambda-Integration.

**Hinweis:**Die Konsole fügt der Ressourcenrichtlinie der Lambda-Funktion jedes Mal eine neue Anweisung hinzu, wenn OK in der Eingabeaufforderung Add Permission to Lambda Function (Berechtigung zur Lambda-Funktion hinzufügen) ausgewählt wird. Notieren Sie sich die Größe der Ressourcenrichtlinie Ihrer Funktion, um sicherzustellen, dass die Größenbeschränkung der Ressourcenrichtlinie nicht überschritten wird. Siehe: Konfiguration, Bereitstellung und Ausführung von Funktionen.

Weitere Informationen finden Sie unter Erste Schritte mit API Gateway und Einrichten einer API-Integrationsanforderung mithilfe der API Gateway-Konsole.

Aktualisieren der Methode mithilfe der AWS-CLI

  1. Führen Sie die put-integration-Methode aus, um die HTTP-Integrationsmethode auf POST zu aktualisieren:
aws apigateway put-integration \
--rest-api-id 1234123412 \
--resource-id a1b2c3 \
--http-method ANY \
--type AWS \
--integration-http-method POST \
--uri 'arn:aws:apigateway:us-west-2:lambda:path//2015-03-31/functions/arn:aws:lambda:us-east-1:123412341234:function:function_name/invocations
  1. Stellen Sie die konfigurierten Ressourcen für eine API in einer vorhandenen Phase bereit:
aws apigateway create-deployment \
--rest-api-id 1234123412 \
--stage-name dev \
--description 'Deployment to an existing dev stage'

Hinweis: Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

Aktualisieren der Methode mithilfe des OpenAPI-Definitionsimports

  1. Setzen Sie den HttpMethod-Eigenschaftswert in Ihrer API-Definitionsdatei auf POST. Eine Anleitung finden Sie im x-amazon-apigateway-integration-Objekt und im Beispiel für eine Swagger-Vorlage im GitHub-Repository aws-samples.
  2. Aktualisieren Sie Ihre API, indem Sie die bearbeitete API-Definitionsdatei in API Gateway importieren. Informationen zum Aktualisieren einer vorhandenen API-Definition finden Sie unter Importieren einer OpenAPI-Datei.

Verwandte Informationen

AWS::ApiGateway::Method-Integration

TUTORIAL: Erstellen Sie eine Calc-REST-API mit zwei AWS-Serviceintegrationen und einer Lambda-Non-Proxy-Integration

Ich habe meine Lambda-Integration in Amazon API Gateway mithilfe einer Phasenvariablen definiert. Warum erhalte ich einen „Internal server error“ (Internen Serverfehler) und einen 500-Statuscode, wenn ich die API-Methode aufrufe?

Wie behebe ich die HTTP 502-Fehler „Malformed Lambda proxy response“ (Fehlerhafte Lambda-Proxy-Antwort) von API Gateway-REST-APIs?

Wie behebe ich die Fehler „Invalid mapping expression specified“ (Ungültiger Zuordnungsausdruck angegeben) von API Gateway?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren