Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Benutzerdefinierte Lambda-Integrationen in API Gateway einrichten
Um zu zeigen, wie die benutzerdefinierte (nicht-Proxy-)Lambda-Integration eingerichtet wird, erstellen wir ein API in API Gateway, um die GET /greeting?greeter={name}-Methode zum Aufrufen einer Lambda-Funktion bereitzustellen. Verwenden Sie eine der folgenden Lambda-Beispielfunktionen für Ihre API.
Verwenden Sie eine der folgenden Lambda-Beispielfunktionen:
Die Funktion gibt die Nachricht "Hello, {name}!" zurück, sofern der greeter-Parameterwert keine leere Zeichenfolge ist. Wenn der "Hello, World!"-Wert eine leere Zeichenfolge ist, wird als Antwort greeter zurückgegeben. Die Funktion gibt eine Fehlermeldung zurück, "Missing the required greeter
parameter." wenn der "greeter"-Parameter in der eingehenden Anforderung nicht festgelegt ist. Wir geben der Funktion den Namen HelloWorld.
Sie können sie in der Lambda-Konsole oder mithilfe der AWS CLI erstellen. In diesem Abschnitt definieren wir diese Funktion mithilfe des folgenden ARN:
arn:aws:lambda:us-east-1:123456789012:function:HelloWorld
Wenn die Lambda-Funktion im Backend eingerichtet ist, fahren Sie mit dem Einrichten der API fort.
Um die benutzerdefinierte Lambda-Integration einzurichten, verwenden Sie AWS CLI
-
Verwenden Sie den folgenden create-rest-apiBefehl, um eine API zu erstellen:
aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'Die Ausgabe sieht wie folgt aus:
{ "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "rootResourceId" : "krznpq9xpg", "createdDate": 1508461860 }In diesem Beispiel verwenden Sie durchgängig die API
id(te6si5ach7) und dierootResourceId(krznpq9xpg). -
Verwenden Sie den folgenden create-rest-api-Befehl, um eine API-Gateway-Ressource mit dem Namen
/greetingzu erstellen:aws apigateway create-resource \ --rest-api-id te6si5ach7 \ --parent-id krznpq9xpg \ --path-part greetingDie Ausgabe sieht wie folgt aus:
{ "path": "/greeting", "pathPart": "greeting", "id": "2jf6xt", "parentId": "krznpq9xpg" }Sie verwenden den
id-Wert der Ressourcegreeting(2jf6xt), um im nächsten Schritt eine Methode für die Ressource/greetingzu erstellen. -
Verwenden Sie den folgenden put-method-Befehl, um eine API-Methodenanforderung von
GET /greeting?greeter={name}zu erstellen:aws apigateway put-method --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=falseDie Ausgabe sieht wie folgt aus:
{ "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.querystring.greeter": false } }Diese API-Methode gestattet dem Client, einen Gruß über die Lambda-Funktion am Backend zu empfangen. Der
greeter-Parameter ist optional, da das Backend entweder einen anonymen Aufrufer oder einen selbst identifizierten Aufrufer verarbeiten sollte. -
Verwenden Sie den folgenden put-method-responseBefehl, um die
200 OKAntwort auf die Methodenanforderung von einzurichtenGET /greeting?greeter={name}:aws apigateway put-method-response \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 -
Verwenden Sie den folgenden put-integration-Befehl, um die Integration der
GET /greeting?greeter={name}-Methode mit einer Lambda-Funktion mit dem NamenHelloWorldeinzurichten. Die Funktion beantwortet die Anforderung mit der Nachricht"Hello, {name}!", sofern dergreeter-Parameter angegeben wurde, oder"Hello, World!", wenn kein Abfragezeichenfolgeparameter festgelegt wurde.aws apigateway put-integration \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --type AWS \ --integration-http-method POST \ --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations \ --request-templates '{"application/json":"{\"greeter\":\"$input.params('greeter')\"}"}' \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRoleDie hier bereitgestellte Mapping-Vorlage übersetzt den
greeter-Abfragezeichenfolgeparameter in dengreeter-Parameter der JSON-Nutzlast. Dies ist notwendig, da die Eingabe einer Lambda-Funktion im Textkörper ausgedrückt werden muss.Wichtig
Für Lambda-Integrationen müssen Sie entsprechend der Spezifikation der Lambda-Service-Aktion für Funktionsaufrufe die HTTP-Methode
POSTfür die Integrationsanfrage verwenden. Deruri-Parameter ist der ARN der Aktion, die die Funktion aufruft.Die Ausgabe sieht wie folgt aus:
{ "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations", "httpMethod": "POST", "requestTemplates": { "application/json": "{\"greeter\":\"$input.params('greeter')\"}" }, "cacheNamespace": "krznpq9xpg", "credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole", "type": "AWS" }Die IAM-Rolle
apigAwsProxyRolemuss über Richtlinien verfügen, die es demapigateway-Service erlauben, Lambda-Funktionen aufzurufen. Anstatt eine IAM-Rolle fürcredentialsbereitzustellen, können Sie den Befehl add-permission aufrufen, um ressourcenbasierte Berechtigungen hinzuzufügen. Auf diese Weise fügt die API Gateway-Konsole diese Berechtigungen hinzu. -
Verwenden Sie den folgenden put-integration-responseBefehl, um die Integrationsantwort so einzurichten, dass die Ausgabe der Lambda-Funktion als
200 OKMethodenantwort an den Client übergeben wird:aws apigateway put-integration-response \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 \ --selection-pattern ""Beim Festlegen des Auswahlmusters auf eine leere Zeichenfolge lautet die voreingestellte Antwort
200 OK.Die Ausgabe sieht wie folgt aus:
{ "selectionPattern": "", "statusCode": "200" } -
Verwenden Sie den folgenden create-deployment-Befehl, um die API für eine
test-Stufe bereitzustellen:aws apigateway create-deployment \ --rest-api-id te6si5ach7 \ --stage-name test -
Testen Sie die API mithilfe des folgenden cURL-Befehls in einem Terminal:
curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=me' \ -H 'authorization: AWS4-HMAC-SHA256 Credential={access_key}/20171020/us-west-2/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=f327...5751'