Aufrufen von Lambda-Funktions-URLs
Eine Funktions-URL ist ein dedizierter HTTPS-Endpunkt für Ihre Lambda-Funktion. Sie können eine Funktions-URL über die Lambda-Konsole oder die Lambda-API erstellen und konfigurieren.
Tipp
Lambda bietet zwei Möglichkeiten, Ihre Funktion über einen HTTP-Endpunkt aufzurufen: Funktions-URLs und Amazon API Gateway. Wenn Sie sich nicht sicher sind, welche Methode für Ihren Anwendungsfall am besten geeignet ist, siehe Wählen Sie eine Methode, um Ihre Lambda-Funktion über eine HTTP-Anfrage aufzurufen.
Wenn Sie eine Funktions-URL erstellen, generiert Lambda automatisch einen eindeutigen URL-Endpunkt für Sie. Sobald Sie eine Funktions-URL erstellt haben, ändert sich ihr URL-Endpunkt nie mehr. Funktions-URL-Endpunkte haben das folgende Format:
https://<url-id>.lambda-url.<region>.on.aws
Anmerkung
Funktions-URLs werden in den folgenden AWS-Regionen nicht unterstützt: Asien-Pazifik (Hyderabad) (ap-south-2), Asien-Pazifik (Melbourne) (ap-southeast-4), Asien-Pazifik (Malaysia) (ap-southeast-5), Asien-Pazifik (Neuseeland) (ap-southeast-6), Asien-Pazifik (Thailand) (ap-southeast-7), Asien-Pazifik (Taipeh) (ap-east-2), Kanada West (Calgary) (ca-west-1), Europa (Spanien) (eu-south-2), Europa (Zürich) (eu-central-2), Israel (Tel Aviv) (il-central-1) und Naher Osten (VAE) (me-central-1).
Funktions-URLs sind Dual-Stack-fähig und unterstützen IPv4 und IPv6. Nachdem Sie Ihre Funktions-URL konfiguriert haben, können Sie Ihre Funktion über ihren HTTP(S)-Endpunkt über einen Webbrowser, cURL, Postman oder einen beliebigen HTTP-Client aufrufen. Um eine Funktions-URL aufzurufen, müssen Sie lambda:InvokeFunctionUrl- und lambda:InvokeFunction-Berechtigungen haben. Weitere Informationen finden Sie unter Zugriffskontrolle.
Grundlagen des Aufrufs von Funktions-URLs
Wenn Ihre Funktions-URL den Auth-Typ AWS_IAM hat, müssen Sie jede HTTP-Anfrage mit der AWS Signature Version 4 (SigV4) signieren. Tools wie Postman
Wenn Sie kein Tool verwenden, um HTTP-Anfragen an Ihre Funktions-URL zu signieren, müssen Sie jede Anfrage manuell mit SigV4 signieren. Wenn Ihre Funktions-URL eine Anfrage erhält, berechnet Lambda auch die SigV4-Signatur. Nur wenn die Signaturen übereinstimmen, verarbeitet Lambda die Anfrage. Anweisungen zum manuellen Signieren Ihrer Anforderungen mit SigV4 finden Sie unter Signieren von AWS-Anforderungen mit Signature Version 4 im Allgemeine Amazon Web Services-Referenz.
Wenn Ihre Funktions-URL den Authentifizierungstyp NONE verwendet, müssen Sie Ihre Anfragen nicht mit SigV4 signieren. Sie können Ihre Funktion per Webbrowser, cURL, Postman oder einem beliebigen HTTP-Client aufrufen.
Um einfache GET-Anfragen an Ihre Funktion zu testen, verwenden Sie einen Webbrowser. Wenn Ihre Funktions-URL zum Beispiel https://abcdefg.lambda-url.us-east-1.on.aws ist und sie einen Zeichenfolgeparameter message aufnimmt, könnte Ihre Anforderungs-URL folgendermaßen aussehen:
https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld
Um andere HTTP-Anfragen zu testen, z. B. eine POST-Anfrage, können Sie ein Tool wie cURL verwenden. Wenn Sie z. B. einige JSON-Daten in eine POST-Anfrage an Ihre Funktions-URL aufnehmen möchten, können Sie den folgenden cURL-Befehl verwenden:
curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \ -H 'content-type: application/json' \ -d '{ "example": "test" }'
Anfordern und Beantworten von Nutzlasten
Wenn ein Client Ihre Funktions-URL aufruft, ordnet Lambda die Anforderung einem Ereignisobjekt zu, bevor es sie an Ihre Funktion übergibt. Die Antwort Ihrer Funktion wird dann einer HTTP-Antwort zugeordnet, die Lambda über die Funktions-URL an den Client zurücksendet.
Die Formate für Anforderungs- und Antwortereignisse folgen dem gleichen Schema wie die Amazon-API-Gateway-Nutzlastformatversion 2.0.
Anforderungsnutzlastformat
Eine Anforderungsnutzlast hat die folgende Struktur:
{ "version": "2.0", "routeKey": "$default", "rawPath": "/my/path", "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", "cookies": [ "cookie1", "cookie2" ], "headers": { "header1": "value1", "header2": "value1,value2" }, "queryStringParameters": { "parameter1": "value1,value2", "parameter2": "value" }, "requestContext": { "accountId": "123456789012", "apiId": "<urlid>", "authentication": null, "authorizer": { "iam": { "accessKey": "AKIA...", "accountId": "111122223333", "callerId": "AIDA...", "cognitoIdentity": null, "principalOrgId": null, "userArn": "arn:aws:iam::111122223333:user/example-user", "userId": "AIDA..." } }, "domainName": "<url-id>.lambda-url.us-west-2.on.aws", "domainPrefix": "<url-id>", "http": { "method": "POST", "path": "/my/path", "protocol": "HTTP/1.1", "sourceIp": "123.123.123.123", "userAgent": "agent" }, "requestId": "id", "routeKey": "$default", "stage": "$default", "time": "12/Mar/2020:19:03:58 +0000", "timeEpoch": 1583348638390 }, "body": "Hello from client!", "pathParameters": null, "isBase64Encoded": false, "stageVariables": null }
| Parameter | Beschreibung | Beispiel |
|---|---|---|
|
|
Die Nutzlastformatversion für dieses Ereignis. Lambda-Funktions-URLs unterstützen derzeit die Nutzlastformatversion 2.0. |
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
|
|
Der Anforderungspfad. Wenn die Anforderungs-URL beispielsweise |
|
|
|
Die Rohzeichenfolge, die die Abfragezeichenfolge-Parameter der Anforderung enthält. Zu den unterstützten Zeichen gehören |
|
|
|
Ein Array, das alle Cookies enthält, die im Rahmen der Anforderung gesendet wurden. |
|
|
|
Die Liste der Anforderungs-Header, die als Schlüssel-Wert-Paare dargestellt werden. |
|
|
|
Die Abfrageparameter für die Anforderung. Wenn die Anforderungs-URL beispielsweise |
|
|
|
Ein Objekt, das zusätzliche Informationen über die Anforderung enthält, z. B. |
|
|
|
Die AWS-Konto-ID des Funktionsbesitzers. |
|
|
|
Die ID der Funktions-URL. |
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
|
|
Ein Objekt, das Informationen über die Aufruferidentität enthält, wenn die Funktions-URL den Authentifizierungstyp |
|
|
|
Der Zugriffsschlüssel der Anruferidentität. |
|
|
|
Die AWS-Konto-Identitäts-ID des Anrufers. |
|
|
|
Die ID (Benutzer-ID) des Aufrufers. |
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
|
|
Die Prinzipal-Organisations-ID, die mit der Anruferidentität verknüpft ist. |
|
|
|
Der Benutzer-ARN (Amazon-Ressourcenname) der Anruferidentität. |
|
|
|
Die Benutzer-ID des Anrufers. |
|
|
|
Der Domain-Name der Funktions-URL. |
|
|
|
Das Domain-Präfix der Funktions-URL. |
|
|
|
Ein Objekt, das Details zur HTTP-Anforderung enthält. |
|
|
|
Die in der Anforderung verwendete HTTP-Methode. Gültige Werte sind unter anderem |
|
|
|
Der Anforderungspfad. Zum Beispiel, wenn die Anforderungs-URL |
|
|
|
Das Protokoll der Anforderung. |
|
|
|
Die Quell-IP-Adresse der TCP-Verbindung, von der die Anforderung stammt. |
|
|
|
Der Headerwert der Benutzer-Agent-Anforderung. |
|
|
|
Die ID der aktuellen Aufrufanforderung. Sie können diese ID verwenden, um Aufrufprotokolle zu verfolgen, die sich auf Ihre Funktion beziehen. |
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
|
|
Der Zeitstempel der Anfrage. |
|
|
|
Die Uhrzeit der Anfrage in Unix-Epochen-Zeit. |
|
|
|
Der Text der Anforderung. Wenn der Inhaltstyp der Anforderung binär ist, ist der Text base64-kodiert. |
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
|
|
|
|
|
|
Funktions-URLs verwenden diesen Parameter nicht. Lambda setzt dies auf |
|
Antwortnutzlastformat
Wenn Ihre Funktion eine Antwort zurückgibt, analysiert Lambda die Antwort und konvertiert sie in eine HTTP-Antwort. Funktionsantwortnutzlasten haben das folgende Format:
{ "statusCode": 201, "headers": { "Content-Type": "application/json", "My-Custom-Header": "Custom Value" }, "body": "{ \"message\": \"Hello, world!\" }", "cookies": [ "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT", "Cookie_2=Value2; Max-Age=78000" ], "isBase64Encoded": false }
Lambda leitet das Antwortformat für Sie ab. Wenn Ihre Funktion gültiges JSON zurückgibt und keinen statusCode zurückgibt, geht Lambda von Folgendem aus:
-
statusCodeis200.Anmerkung
Die gültigen
statusCodeliegen im Bereich von 100 bis 599. -
content-typeisapplication/json. -
bodyist die Antwort der Funktion. -
isBase64Encodedisfalse.
Die folgenden Beispiele zeigen, wie die Ausgabe Ihrer Lambda-Funktion der Antwortnutzlast und die Antwortnutzlast der endgültigen HTTP-Antwort zugeordnet wird. Wenn der Client Ihre Funktions-URL aufruft, wird die HTTP-Antwort angezeigt.
Beispielausgabe für eine Zeichenfolgeantwort
| Lambda-Funktionsausgabe | Interpretierte Antwortausgabe | HTTP-Antwort (was der Client sieht) |
|---|---|---|
|
|
|
Beispielausgabe für eine JSON-Antwort
| Lambda-Funktionsausgabe | Interpretierte Antwortausgabe | HTTP-Antwort (was der Client sieht) |
|---|---|---|
|
|
|
Beispielausgabe für eine benutzerdefinierte Antwort
| Lambda-Funktionsausgabe | Interpretierte Antwortausgabe | HTTP-Antwort (was der Client sieht) |
|---|---|---|
|
|
|
Cookies
Um Cookies von Ihrer Funktion zurückzugeben, fügen Sie set-cookie-Header nicht manuell hinzu. Fügen Sie stattdessen die Cookies in Ihr Antwortnutzlastobjekt ein. Lambda interpretiert dies automatisch und fügt sie als set-cookie-Header in Ihre HTTP-Antwort ein, wie im folgenden Beispiel gezeigt.
| Lambda-Funktionsausgabe | HTTP-Antwort (was der Client sieht) |
|---|---|
|
|