Benutzerdefinierte Lambda-Integrationen in API Gateway einrichten - Amazon API Gateway

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 Lambda-Integration eingerichtet wird, erstellen wir ein API Gateway-API, 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:

Node.js
export const handler = function(event, context, callback) { var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; if (event.greeter==null) { callback(new Error('Missing the required greeter parameter.')); } else if (event.greeter === "") { res.body = "Hello, World"; callback(null, res); } else { res.body = "Hello, " + event.greeter +"!"; callback(null, res); } };
Python
import json def lambda_handler(event, context): print(event) res = { "statusCode": 200, "headers": { "Content-Type": "*/*" } } if event['greeter'] == "": res['body'] = "Hello, World" elif (event['greeter']): res['body'] = "Hello, " + event['greeter'] + "!" else: raise Exception('Missing the required greeter parameter.') return res

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
  1. Rufen Sie den Befehl create-rest-api auf, um eine API zu erstellen:

    aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2

    Notieren Sie den in der Antwort für die API-id angegebenen Wert (te6si5ach7).

    { "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }

    Sie benötigen die API-id in diesem Abschnitt.

  2. Rufen Sie den Befehl get-resources auf, um die id der Stammressource zu ermitteln.

    aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2

    Die erfolgreiche Antwort lautet folgendermaßen:

    { "items": [ { "path": "/", "id": "krznpq9xpg" } ] }

    Notieren Sie den id-Wert (krznpq9xpg) der Ressource. Sie benötigen diese in den nächsten Schritten.

  3. Rufen Sie create-resource auf, um eine API Gateway-Ressource /greeting zu erstellen:

    aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part greeting

    Eine erfolgreiche Antwort ähnelt dem folgenden Beispiel:

    { "path": "/greeting", "pathPart": "greeting", "id": "2jf6xt", "parentId": "krznpq9xpg" }

    Notieren Sie den ausgegebenen id-Wert (2jf6xt) der greeting-Ressource. Sie benötigen die ID, um im nächsten Schritt eine Methode auf der /greeting-Ressource zu erstellen.

  4. Rufen Sie put-method zum Erstellen einer GET /greeting?greeter={name}-API-Methodenanforderung auf:

    aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=false

    Eine erfolgreiche Antwort ähnelt dem folgenden Beispiel:

    { "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.

  5. Rufen Sie put-method-response auf, um auf die Anforderung von 200 OK die Antwort GET /greeting?greeter={name} einzurichten:

    aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200

  6. Rufen Sie put-integration auf, um die Integration der GET /greeting?greeter={name}-Methode mit einer Lambda-Funktion namens HelloWorld einzurichten. Die Funktion beantwortet die Anforderung mit der Nachricht "Hello, {name}!", sofern der greeter-Parameter angegeben wurde, oder "Hello, World!", wenn kein Abfragezeichenfolgeparameter festgelegt wurde.

    aws apigateway put-integration \ --region us-west-2 \ --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/apigAwsProxyRole

    Die hier bereitgestellte Mapping-Vorlage übersetzt den greeter-Abfragezeichenfolgeparameter in den greeter-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 POST für die Integrationsanfrage verwenden. Der uri-Parameter ist der ARN der Aktion, die die Funktion aufruft.

    Im Erfolgsfall sollte die Ausgabe in etwa folgendermaßen aussehen:

    { "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 apigAwsProxyRole muss über Richtlinien verfügen, die es dem apigateway-Service erlauben, Lambda-Funktionen aufzurufen. Anstatt eine IAM-Rolle für credentials bereitzustellen, 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.

  7. Rufen Sie put-integration-response auf, um die Integrationsantwort zur Übergabe der Ausgabe der Lambda-Funktion an den Client als Antwort auf die 200 OK-Methode einzurichten.

    aws apigateway put-integration-response \ --region us-west-2 \ --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 erfolgreiche Antwort sollte nachstehender Antwort entsprechen:

    { "selectionPattern": "", "statusCode": "200" }
  8. Rufen Sie create-deployment auf, um die API für eine test-Stufe bereitzustellen:

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  9. 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'