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.
Richten Sie die Lambda-Proxyintegration für API Gateway mit dem ein AWS CLI
In diesem Abschnitt zeigen wir, wie Sie eine Proxyintegration API mit dem AWS CLI Lambda einrichten. Ausführliche Anweisungen zur Verwendung der API Gateway-Konsole zur Konfiguration einer Proxyressource mit der Lambda-Proxyintegration finden Sie unterTutorial: Erstellen Sie eine REST API mit einer Lambda-Proxyintegration.
Als Beispiel verwenden wir die folgende Lambda-Beispielfunktion als Backend von: API
export const handler = function(event, context, callback) { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; callback(null, res); };
Vergleicht man dies mit dem benutzerdefinierten Lambda-Integrations-Setup inRichten Sie benutzerdefinierte Lambda-Integrationen in Gateway ein API, kann die Eingabe für diese Lambda-Funktion in den Anforderungsparametern und im Hauptteil ausgedrückt werden. Sie haben mehr Spielraum, um dem Client die Weitergabe der gleichen Eingabedaten zu ermöglichen. Hier kann der Client den Namen von "greeter" als Abfragezeichenfolgeparameter, Kopfzeile oder Texteigenschaft übergeben. Die Funktion kann außerdem die benutzerdefinierte Lambda-Integration unterstützen. Die API Einrichtung ist einfacher. Sie müssen keine Methoden- oder Integrationsantwort konfigurieren.
So richten Sie eine Lambda-Proxyintegration mit dem AWS CLI
-
Rufen Sie den
create-rest-api
Befehl auf, um ein API zu erstellen:aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2
Notieren Sie sich den
id
Wert (te6si5ach7
) API des Ergebnisses in der Antwort:{ "name": "HelloWorldProxy (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }
Sie benötigen den API
id
gesamten Abschnitt. -
Rufen Sie den Befehl
get-resources
auf, um dieid
der Stammressource zu ermitteln.aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2
Die erfolgreiche Antwort wird wie folgt angezeigt:
{ "items": [ { "path": "/", "id": "krznpq9xpg" } ] }
Notieren Sie den
id
-Wert (krznpq9xpg
) der Ressource. Sie benötigen diese in den nächsten Schritten. -
Rufen Sie
create-resource
auf, um eine API Gateway-Ressource zu erstellen von/greeting
:aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part {proxy+}
Eine erfolgreiche Antwort ähnelt dem folgenden Beispiel:
{ "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }
Notieren Sie den ausgegebenen
id
-Wert (2jf6xt
) der{proxy+}
-Ressource. Sie benötigen die ID, um im nächsten Schritt eine Methode auf der/{proxy+}
-Ressource zu erstellen. -
Rufen Sie
put-method
zum Erstellen einerANY
-MethodenanforderungANY /{proxy+}
auf:aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"
Eine erfolgreiche Antwort ähnelt dem folgenden Beispiel:
{ "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }
Diese API Methode ermöglicht es dem Client, Grüße von der Lambda-Funktion im Backend zu empfangen oder zu senden.
-
Rufen Sie
put-integration
auf, um die Integration derANY /{proxy+}
-Methode mit einer Lambda-Funktion namensHelloWorld
einzurichten. Diese 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 \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method ANY \ --type AWS_PROXY \ --integration-http-method POST \ --uri arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:HelloWorld/invocations \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole
Wichtig
Für Lambda-Integrationen müssen Sie die HTTP Methode von
POST
für die Integrationsanforderung gemäß der Spezifikation der Lambda-Serviceaktion für Funktionsaufrufen verwenden. Die IAM Rolle vonapigAwsProxyRole
muss Richtlinien haben, die es demapigateway
Dienst ermöglichen, Lambda-Funktionen aufzurufen. Weitere Hinweise zu IAM Berechtigungen finden Sie unter. APIGateway-Berechtigungsmodell zum Aufrufen eines APIIm Erfolgsfall sieht die Ausgabe folgendermaßen oder ähnlich aus:
{ "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:HelloWorld/invocations", "httpMethod": "POST", "cacheNamespace": "vvom7n", "credentials": "arn:aws:iam::1234567890:role/apigAwsProxyRole", "type": "AWS_PROXY" }
Anstatt eine IAM Rolle für anzugeben
credentials
, können Sie den Befehl add-permission aufrufen, um ressourcenbasierte Berechtigungen hinzuzufügen. Das macht die API Gateway-Konsole. -
Rufen Sie
create-deployment
auf, API um das in einertest
Phase bereitzustellen:aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
-
Testen API Sie das mit den folgenden URL C-Befehlen in einem Terminal.
Aufrufen von API mit dem Abfragezeichenfolgenparameter von
?greeter=jane
:curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'
Aufrufen von API mit einem Header-Parameter von
greeter:jane
:curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'
Aufrufen von API mit einem Hauptteil von
{"greeter":"jane"}
:curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -d '{ "greeter": "jane" }'
In allen Fällen ist die Ausgabe eine Antwort mit dem folgenden Antworttext: 200
Hello, jane!