Einrichten der Lambda-Proxy-Integration für API Gateway mithilfe von AWS CLI
In diesem Abschnitt zeigen wir Ihnen, wie Sie mithilfe von AWS CLI eine API mit der Lambda-Proxy-Integration einrichten. Detaillierte Anweisungen zur Verwendung der API Gateway-Konsole zur Konfiguration einer Proxy-Ressource mit der Lambda-Proxy-Integration finden Sie unter Tutorial: Erstellen einer REST-API mit einer Lambda-Proxy-Integration.
Als Beispiel verwenden wir die folgende Lambda-Beispielfunktion als Backend der API:
export const handler = async(event, context) => { 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 + "!"; return res };
Vergleicht man dies mit der benutzerdefinierten Lambda-Integrationseinrichtung unter Benutzerdefinierte Lambda-Integrationen in API Gateway einrichten, kann die Eingabe für diese Lambda-Funktion in den Anfrageparametern und im Text definiert 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-Proxy-Integration mithilfe der AWS CLI ein:
-
Verwenden Sie den folgenden create-rest-api-Befehl, um eine API zu erstellen:
aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'
Die Ausgabe sieht wie folgt aus:
{ "name": "HelloWorldProxy (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-resource-Befehl, um eine API-Gateway-Ressource mit dem Namen
/greeting
zu erstellen:aws apigateway create-resource \ --rest-api-id te6si5ach7 \ --parent-id krznpq9xpg \ --path-part {proxy+}
Die Ausgabe sieht wie folgt aus:
{ "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }
Sie verwenden den
id
-Wert der Ressource{proxy+}
(2jf6xt
), um im nächsten Schritt eine Methode für die Ressource/{proxy+}
zu erstellen. -
Verwenden Sie die folgende put-method, um eine
ANY
-Methodenanforderung vonANY /{proxy+}
zu erstellen:aws apigateway put-method --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"
Die Ausgabe sieht wie folgt aus:
{ "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }
Diese API-Methode gestattet dem Client, einen Gruß über die Lambda-Funktion am Backend zu empfangen oder zu senden.
-
Verwenden Sie den folgenden put-integration-Befehl, um die Integration der
ANY /{proxy+}
-Methode mit einer Lambda-Funktion mit dem NamenHelloWorld
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 \ --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 entsprechend der Spezifikation der Lambda-Service-Aktion für Funktionsaufrufe die HTTP-Methode
POST
für die Integrationsanfrage verwenden. Die IAM-RolleapigAwsProxyRole
muss über Richtlinien verfügen, die es demapigateway
-Service erlauben, Lambda-Funktionen aufzurufen. Weitere Informationen zu IAM-Berechtigungen finden Sie unter API Gateway-Berechtigungsmodell für den Aufruf einer API.Die Ausgabe sieht wie folgt 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
credentials
bereitzustellen, können Sie den Befehl add-permission verwenden, um ressourcenbasierte Berechtigungen hinzuzufügen. Dies erledigt die API Gateway-Konsole. -
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 der folgenden cURL-Befehle in einem Terminal.
API-Aufruf mit dem Abfragezeichenfolgeparameter
?greeter=jane
:curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'
API-Aufruf mit einem Header-Parameter
greeter:jane
:curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'
API-Aufruf mit einem Textkörper-Parameter
{"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!