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?
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:
- CloudFormation-Vorlage
- OpenAPI-Definition
- AWS Command Line Interface (AWS CLI)
- Software Development Kits (SDK)
- Cloud Development Kit (CDK)
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
- Wählen Sie in der API Gateway-Konsole Ihre API aus.
- Wählen Sie im Bereich Ressources (Ressourcen) die HTTP-Methode aus, die über die Lambda-Integration verfügt.
- Wählen Sie im Bereich Method Execution(Methodenausführung) die Option Integration Request (Integrationsanforderung) aus.
- 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.
- Wenn Sie aufgefordert werden, der Lambda-Funktion eine Berechtigung hinzuzufügen, wählen Sie OK.
- Stellen Sie Ihre API bereit.
- (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
- 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
- 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
- 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 die bearbeitete API-Definitionsdatei in API Gateway importieren. Informationen zum Aktualisieren einer vorhandenen API-Definition finden Sie unter Importieren einer OpenAPI-Datei.
Verwandte Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr