Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
Ich habe eine CloudFormation-Vorlage oder eine OpenAPI-Definition verwendet, um eine REST-API mit Lambda-Integration zu erstellen. Warum erhalte ich vom API Gateway die Fehlermeldung „Execution failed“ (Ausführung fehlgeschlagen)?
Ich habe eine AWS CloudFormation-Vorlage verwendet, um eine Amazon API Gateway-REST-API mit AWS Lambda-Integration zu erstellen. Wenn ich die API-Methode verwende, um meine Lambda-Funktion aufzurufen, erhalte ich eine Fehlermeldung und einen 500-Statuscode.
Kurzbeschreibung
Wenn du über eine API Gateway-REST-API mit Lambda-Integration verfügst, muss die API die HTTP-Methode verwenden, um die Backend-Lambda-Funktion aufzurufen. Wenn du eine andere HTTP-Methode für die Backend-Integrationsanforderung verwendest, z. B. ANY oder GET, schlägt der Aufruf fehl. API Gateway gibt dann eine Fehlermeldung zurück, die dem folgenden Beispiel in Amazon CloudWatch Logs ähnelt:
Mon Oct 14 14:08:49 UTC 2019 : Received response. Status: 403, Integration latency: 3 msMon 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: Du kannst weiterhin jede HTTP-Methode für das Frontend der REST-API einrichten.
Wenn du eine REST-API mit Lambda-Integration erstellst, verwende eine der folgenden Methoden, um POST für die Backend-Integrationsanforderung anzugeben:
- CloudFormation-Vorlage
- OpenAPI-Definition
- AWS Command Line Interface (AWS CLI)
- SDKs
- Cloud Development Kit (CDK)
Hinweis: Wenn du die API Gateway-Konsole verwendest, um eine Lambda-Integration zu konfigurieren, wird die Backend-Integrationsanforderung automatisch auf POST gesetzt.
Lösung
Hinweis: Wenn du beim Ausführen von AWS CLI-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.
Eine bewährte Methode 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 du verwendest, um die HTTP-Methode für die Backend-Integrationsanforderung in POST zu ändern, hängt von der ursprünglichen Vorlagendefinition ab. Der Prozess zum Aktualisieren eines von CloudFormation bereitgestellten API-Gateways unterscheidet sich von dem Vorgang zum Aktualisieren eines von OpenAPI erstellten API-Gateways.
In CloudFormation erstellte API-Gateways
Für API-Gateways, die CloudFormation erstellt hat, musst du die Stack-Vorlage aktualisieren. Wenn du die Ressource AWS::ApiGateway::Method in deiner CloudFormation-Vorlage definiert hast, um deine Methode zu erstellen, aktualisiere die HttpMethod-Eigenschaft auf POST. Anweisungen findest du unter Beispiele.
Wenn deine Methode eine OpenAPI-Definition für die Body-Eigenschaft der Ressource AWS::ApiGateway::RestAPI verwendet, setze httpMethod in deiner API-Definitionsdatei auf POST. Anweisungen findest du unter x-amazon-apigateway-integration-Objekt. Siehe auch Beispiel-Swagger-Vorlage im GitHub-Repository von aws-samples.
Um deine API zu aktualisieren, führe AWS CloudFormation-Stack-Updates mit der bearbeiteten Vorlage aus:
"x-amazon-apigateway-integration" : { "type" : "aws", "httpMethod" : "POST"
API-Gateways, die außerhalb von CloudFormation erstellt wurden
Verwende die Konsole, um die Methode zu aktualisieren
Führe die folgenden Schritte aus:
- Öffne die API Gateway-Konsole.
- Wähle deine API aus.
- Wähle unter Ressourcen die HTTP-Methode aus, die in Lambda integriert ist.
- Wähle unter Methodenausführung die Option Integrationsanfrage aus.
- Bearbeite in Integrationsanfrage für die HTTP-Methode den Namen der Lambda-Funktion.
- Wenn du aufgefordert wirst, der Lambda-Funktion eine Berechtigung hinzuzufügen, wähle OK aus.
- Stelle deine API bereit.
- (Optional) Teste die HTTP-Methode, die in Lambda integriert ist.
Hinweis: Jedes Mal, wenn du in der Eingabeaufforderung Berechtigung zur Lambda-Funktion hinzufügen auf OK klickst, fügt die Konsole der Ressourcenrichtlinie der Lambda-Funktion eine neue Anweisung hinzu. Stelle sicher, dass du die Größenbeschränkung der Ressourcenrichtlinie nicht überschreitest. Weitere Informationen findest du unter Konfiguration, Bereitstellung und Ausführung von Funktionen und Einrichten einer API-Integrationsanforderung mithilfe der API Gateway-Konsole.
Verwendung der AWS CLI, um die Methode zu aktualisieren
Führe die folgenden Schritte aus:
-
Führe den Befehl put-integration 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 -
Um die konfigurierten Ressourcen für eine API in einer vorhandenen Phase bereitzustellen, führe den Befehl create-deployment aus:
aws apigateway create-deployment \--rest-api-id 1234123412 \ --stage-name dev \ --description 'Deployment to an existing dev stage'
Verwendung eines OpenAPI-Definitionsimports, um die Methode zu aktualisieren
Führe die folgenden Schritte aus:
- Setze den httpMethod-Eigenschaftswert in deiner API-Definitionsdatei auf POST. Anweisungen findest du im x-amazon-apigateway-integration-Objekt und im Beispiel für eine Swagger-Vorlage im GitHub-Repository aws-samples.
- Um deine API zu aktualisieren, importiere die bearbeitete API-Definitionsdatei in API Gateway. Informationen zum Aktualisieren einer vorhandenen API-Definition findest du unter Importieren einer OpenAPI-Datei.
Verwandte Informationen
AWS::ApiGateway::Method-Integration
Wie behebe ich HTTP-502-Fehler bei REST-APIs in API Gateway mit Lambda-Proxy-Integration?
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 4 Monaten