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.
Aufrufen einer Lambda-Funktion mithilfe eines Amazon API Gateway-Endpunkts
Mithilfe von Amazon API Gateway können Sie ein Web API mit einem HTTP Endpunkt für Ihre Lambda-Funktion erstellen. APIGateway bietet Tools zum Erstellen und Dokumentieren von WebanwendungenAPIs, die HTTP Anfragen an Lambda-Funktionen weiterleiten. Sie können den Zugriff auf Ihre API mit Authentifizierungs- und Autorisierungskontrollen sichern. Sie APIs können den Datenverkehr über das Internet bereitstellen oder nur innerhalb Ihres Computers darauf zugreifenVPC.
In Ihren Ressourcen werden eine oder mehrere Methoden API definiert, z. B. GET oderPOST. Methoden haben eine Integration, die Anfragen an eine Lambda-Funktion oder einen anderen Integrationstyp weiterleitet. Sie können jede Ressource und jede Methode einzeln definieren oder spezielle Ressourcen- und Methodenarten verwenden, um alle Anforderungen abzugleichen, die einem Muster entsprechen. Eine Proxy-Ressource fängt alle Pfade unter einer Ressource ab. Die ANY
Methode erfasst alle HTTP Methoden.
Sections
Einen Typ wählen API
APIGateway unterstützt drei Typen von Lambda-FunktionenAPIs, die Lambda-Funktionen aufrufen:
-
HTTPAPI: Ein leichtes Gerät mit niedriger Latenz. RESTful API
-
RESTAPI: Ein anpassbares, RESTful API funktionsreiches.
-
WebSocket API: Ein WebAPI, das dauerhafte Verbindungen zu Clients für die Vollduplex-Kommunikation unterhält.
HTTPAPIsund REST APIs verarbeiten sowohl RESTful APIs HTTP Anfragen als auch Antworten. HTTPAPIssind neuer und wurden mit der API Gateway-Version 2 erstelltAPI. Die folgenden Funktionen sind neu für HTTPAPIs:
HTTPAPIFunktionen
-
Automatische Bereitstellungen – wenn Sie Routen oder Integrationen ändern, werden Änderungen automatisch in Phasen bereitgestellt, bei denen die automatische Bereitstellung aktiviert ist.
-
Standardphase — Sie können eine Standardphase (
$default
) erstellen, um Anfragen im Stammverzeichnis Ihrer API Phase zu bearbeitenURL. Bei benannten Phasen müssen Sie den Schrittnamen am Anfang des Pfades angeben. -
CORSKonfiguration — Sie können Ihre Konfiguration so konfigurierenAPI, dass sie ausgehenden Antworten CORS Header hinzufügt, anstatt sie manuell in Ihrem Funktionscode hinzuzufügen.
RESTAPIssind die Klassiker RESTfulAPIs, die API Gateway seit der Markteinführung unterstützt. RESTAPIsverfügen derzeit über mehr Anpassungs-, Integrations- und Verwaltungsfunktionen.
RESTAPIFunktionen
-
Integrationstypen — REST APIs unterstützt benutzerdefinierte Lambda-Integrationen. Mit einer benutzerdefinierten Integration können Sie nur den Text der Anforderung an die Funktion senden oder eine Transformationsvorlage auf den Anforderungstext anwenden, bevor Sie sie an die Funktion senden.
-
Zugriffskontrolle — REST APIs unterstützt mehr Optionen für Authentifizierung und Autorisierung.
-
Überwachung und Rückverfolgung — REST APIs unterstützt die AWS X-Ray Ablaufverfolgung und zusätzliche Protokollierungsoptionen.
Einen ausführlichen Vergleich finden Sie unter Wählen Sie zwischen HTTP APIs und REST APIs im APIGateway Developer Guide.
WebSocket APIsVerwenden Sie auch die API Gateway-Version 2 API und unterstützen Sie einen ähnlichen Funktionsumfang. Verwenden Sie a WebSocket API für Anwendungen, die von einer dauerhaften Verbindung zwischen dem Client und profitierenAPI. WebSocket APIsstellt eine Vollduplex-Kommunikation bereit, was bedeutet, dass sowohl der Client als auch der kontinuierlich Nachrichten senden API können, ohne auf eine Antwort warten zu müssen.
HTTPAPIsunterstützt ein vereinfachtes Ereignisformat (Version 2.0). Das folgende Beispiel zeigt ein Ereignis von einem HTTPAPI.
Beispiel APIGateway-Proxy-Ereignis (HTTPAPI)
{
"version": "2.0",
"routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
"rawPath": "/default/nodejs-apig-function-1G3XMPLZXVXYI",
"rawQueryString": "",
"cookies": [
"s_fid=7AABXMPL1AFD9BBF-0643XMPL09956DE2",
"regStatus=pre-register"
],
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
...
},
"requestContext": {
"accountId": "123456789012",
"apiId": "r3pmxmplak",
"domainName": "r3pmxmplak.execute-api.us-east-2.amazonaws.com",
"domainPrefix": "r3pmxmplak",
"http": {
"method": "GET",
"path": "/default/nodejs-apig-function-1G3XMPLZXVXYI",
"protocol": "HTTP/1.1",
"sourceIp": "205.255.255.176",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
},
"requestId": "JKJaXmPLvHcESHA=",
"routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI",
"stage": "default",
"time": "10/Mar/2020:05:16:23 +0000",
"timeEpoch": 1583817383220
},
"isBase64Encoded": true
}
Weitere Informationen finden Sie unter Erstellen von AWS Lambda Proxyintegrationen für HTTP APIs in API Gateway.
Hinzufügen eines Endpunkts zur Lambda-Funktion
So fügen Sie Ihrer Lambda-Funktion einen öffentlichen Endpunkt hinzu
Öffnen Sie die Seite Funktionen
der Lambda-Konsole. -
Wählen Sie eine Funktion aus.
-
Wählen Sie unter Function overview (Funktionsübersicht) die Option Add trigger (Trigger hinzufügen).
-
Wählen Sie APIGateway aus.
-
Wählen Sie Create an API oder Use a existing API.
-
NeuAPI: Wählen Sie als APITyp HTTPAPI. Weitere Informationen finden Sie unter Einen Typ wählen API.
-
APIExistierend: Wählen Sie das API aus der Drop-down-Liste aus oder geben Sie die API ID ein (z. B. r3pmxmplak).
-
-
Wählen Sie unter Security (Sicherheit) die Option Open (Öffnen) aus.
-
Wählen Sie Add aus.
Proxy-Integration
APIDas Gateway APIs besteht aus Stufen, Ressourcen, Methoden und Integrationen. Die Phase und die Ressource bestimmen den Pfad des Endpunkts:
APIPfadformat
-
/prod/
– Dieprod
-Phase und die Root-Ressource. -
/prod/user
– Dieprod
-Phase und dieuser
-Ressource. -
/dev/{proxy+}
– Jede Route in derdev
-Phase. -
/
— (HTTPAPIs) Die Standard-Stage- und Root-Ressource.
Eine Lambda-Integration ordnet einer Lambda-Funktion eine Pfad- und HTTP Methodenkombination zu. Sie können API Gateway so konfigurieren, dass der Hauptteil der HTTP Anfrage unverändert übergeben wird (benutzerdefinierte Integration) oder dass der Anforderungstext in einem Dokument gekapselt wird, das alle Anforderungsinformationen einschließlich Header, Ressource, Pfad und Methode enthält.
Weitere Informationen finden Sie unter Lambda-Proxyintegrationen in API Gateway.
Ereignisformat
Amazon API Gateway ruft Ihre Funktion synchron mit einem Ereignis auf, das eine JSON Darstellung der HTTP Anfrage enthält. Bei einer benutzerdefinierten Integration ist das Ereignis der Text der Anforderung. Bei einer Proxy-Integration hat das Ereignis eine definierte Struktur. Das folgende Beispiel zeigt ein Proxy-Ereignis von einem API Gateway aus. REST API
Beispiel APIGateway-Proxy-Ereignis (RESTAPI)
{
"resource": "/",
"path": "/",
"httpMethod": "GET",
"requestContext": {
"resourcePath": "/",
"httpMethod": "GET",
"path": "/Prod/",
...
},
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
"Host": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5e66d96f-7491f09xmpl79d18acf3d050",
...
},
"multiValueHeaders": {
"accept": [
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
],
"accept-encoding": [
"gzip, deflate, br"
],
...
},
"queryStringParameters": null,
"multiValueQueryStringParameters": null,
"pathParameters": null,
"stageVariables": null,
"body": null,
"isBase64Encoded": false
}
Reaktionsformat
APIGateway wartet auf eine Antwort von Ihrer Funktion und leitet das Ergebnis an den Anrufer weiter. Für eine benutzerdefinierte Integration definieren Sie eine Integrationsantwort und eine Methodenantwort, um die Ausgabe der Funktion in eine Antwort umzuwandeln. HTTP Für eine Proxy-Integration muss die Funktion mit einer Darstellung der Antwort in einem bestimmten Format antworten.
Das folgende Beispiel zeigt ein Antwortobjekt aus einer Node.js-Funktion. Das Antwortobjekt stellt eine erfolgreiche HTTP Antwort dar, die ein JSON Dokument enthält.
Beispiel index.mjs – Antwortobjekt der Proxy-Integration (Node.js)
var response = {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"isBase64Encoded": false,
"multiValueHeaders": {
"X-Custom-Header": ["My value", "My other value"],
},
"body": "{\n \"TotalCodeSize\": 104330022,\n \"FunctionCount\": 26\n}"
}
Die Lambda-Laufzeit serialisiert das Antwortobjekt in JSON und sendet es an die. API The API analysiert die Antwort und verwendet sie, um eine HTTP Antwort zu erstellen, die dann an den Client gesendet wird, der die ursprüngliche Anfrage gestellt hat.
Beispiel HTTPAntwort
< HTTP/1.1 200 OK < Content-Type: application/json < Content-Length: 55 < Connection: keep-alive < x-amzn-RequestId: 32998fea-xmpl-4268-8c72-16138d629356 < X-Custom-Header: My value < X-Custom-Header: My other value < X-Amzn-Trace-Id: Root=1-5e6aa925-ccecxmplbae116148e52f036 < { "TotalCodeSize": 104330022, "FunctionCount": 26 }
Berechtigungen
Amazon API Gateway erhält die Genehmigung zum Aufrufen Ihrer Funktion anhand der ressourcenbasierten Richtlinie der Funktion. Sie können die Aufrufberechtigung für eine gesamte PhaseAPI, Ressource oder Methode oder Methode gewähren oder eingeschränkten Zugriff gewähren.
Wenn Sie Ihrer Funktion mithilfe der Lambda-Konsole, der API Gateway-Konsole oder in einer AWS SAM Vorlage eine hinzufügen, wird die ressourcenbasierte Richtlinie der Funktion automatisch aktualisiert. API Es folgt eine Beispiel-Funktionsrichtlinie.
Beispiel Funktionsrichtlinie
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "nodejs-apig-functiongetEndpointPermissionProd-BWDBXMPLXE2F", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:nodejs-apig-function-1G3MXMPLXVXYI", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:execute-api:us-east-2:111122223333:ktyvxmpls1/*/GET/" } } } ] }
Sie können die Berechtigungen für Funktionsrichtlinien manuell mit den folgenden Vorgängen verwalten: API
Verwenden Sie den add-permission
Befehl, um einer vorhandenen API Datei die Aufrufberechtigung zu erteilen. Beispiel:
aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-get --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET/"
Die Ausgabe sollte folgendermaßen aussehen:
{ "Statement": "{\"Sid\":\"apigateway-test-2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET\"}}}" }
Anmerkung
Wenn sich Ihre Funktion und Ihr Name API unterscheiden AWS-Regionen, ARN muss die Regionskennung in der Quelle mit der Region der Funktion übereinstimmen, nicht mit der Region derAPI. Wenn API Gateway eine Funktion aufruft, verwendet es eine Ressource, ARN die auf der ARN von basiertAPI, aber so geändert wurde, dass sie der Region der Funktion entspricht.
Die Quelle ARN in diesem Beispiel gewährt die Erlaubnis für eine Integration auf der GET Methode der Root-Ressource in der Standardphase vonAPI, mit IDmnh1xmpli7
. Sie können ein Sternchen in der Quelle verwendenARN, um Berechtigungen für mehrere Stufen, Methoden oder Ressourcen zu erteilen.
Ressourcenmuster
-
mnh1xmpli7/*/GET/*
— GET Methode für alle Ressourcen in allen Phasen. -
mnh1xmpli7/prod/ANY/user
— ANY Methode für dieuser
Ressource in derprod
Phase. -
mnh1xmpli7/*/*/*
– Jede Methode bei allen Ressourcen in allen Phasen.
Weitere Informationen zum Anzeigen der Richtlinie und zum Entfernen von Anweisungen finden Sie unter Arbeiten mit ressourcenbasierten IAM Richtlinien in Lambda.
Beispielanwendung
Die Beispiel-App APIGateway with Node.js