Lambda-Funktion aufrufen URLs - AWS Lambda

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.

Lambda-Funktion aufrufen URLs

Eine Funktion URL ist ein dedizierter HTTP (S) -Endpunkt für Ihre Lambda-Funktion. Sie können eine Funktion URL über die Lambda-Konsole oder das API Lambda erstellen und konfigurieren. Wenn Sie eine Funktion erstellenURL, generiert Lambda automatisch einen eindeutigen URL Endpunkt für Sie. Sobald Sie eine Funktion erstellt habenURL, ändert sich ihr URL Endpunkt nie. URLFunktionsendpunkte haben das folgende Format:

https://<url-id>.lambda-url.<region>.on.aws
Anmerkung

Funktionen URLs werden in den folgenden Ländern nicht unterstützt AWS-Regionen: Asien-Pazifik (Hyderabad) (ap-south-2), Asien-Pazifik (Melbourneap-southeast-4) (), Asien-Pazifik (Malaysiaap-southeast-5) (), 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 (UAE) (). me-central-1

Function URLs ist Dual-Stack-fähig und unterstützt und. IPv4 IPv6 Nachdem Sie Ihre Funktion konfiguriert habenURL, können Sie Ihre Funktion über ihren HTTP (S) -Endpunkt über einen Webbrowser, Curl, Postman oder einen beliebigen Client aufrufen. HTTP Um eine Funktion aufzurufenURL, benötigen Sie Berechtigungen. lambda:InvokeFunctionUrl Weitere Informationen finden Sie unter Zugriffskontrolle.

Grundlagen des URL Funktionsaufrufs

Wenn Ihre Funktion den URL AWS_IAM Authentifizierungstyp verwendet, müssen Sie jede HTTP Anfrage mit AWS Signature Version 4 (Sigv4) signieren. Tools wie awscurl, Postman und AWS SigV4-Proxy bieten integrierte Möglichkeiten, Ihre Anfragen mit SigV4 zu signieren.

Wenn Sie kein Tool verwenden, um HTTP Anfragen an Ihre Funktion zu signierenURL, müssen Sie jede Anfrage manuell mit Sigv4 signieren. Wenn Ihre Funktion eine Anfrage URL erhält, berechnet Lambda auch die SigV4-Signatur. Nur wenn die Signaturen übereinstimmen, verarbeitet Lambda die Anfrage. Anweisungen zum manuellen Signieren Ihrer Anfragen mit Sigv4 finden Sie unter Signieren von AWS Anfragen mit Signature Version 4 im Handbuch.Allgemeine Amazon Web Services-Referenz

Wenn Ihre Funktion den URL NONE Authentifizierungstyp verwendet, müssen Sie Ihre Anfragen nicht mit Sigv4 signieren. Sie können Ihre Funktion mit einem Webbrowser, Curl, Postman oder einem beliebigen Client aufrufen. HTTP

Um einfache GET-Anfragen an Ihre Funktion zu testen, verwenden Sie einen Webbrowser. Wenn Ihre Funktion beispielsweise URL ist https://abcdefg.lambda-url.us-east-1.on.aws und sie einen Zeichenkettenparameter annimmtmessage, URL könnte Ihre Anfrage wie folgt 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 beispielsweise einige JSON Daten in eine POST Anfrage an Ihre Funktion aufnehmen möchtenURL, 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 Funktion aufruftURL, ordnet Lambda die Anfrage einem Ereignisobjekt zu, bevor sie an Ihre Funktion übergeben wird. Die Antwort Ihrer Funktion wird dann einer HTTP Antwort zugeordnet, die Lambda über die Funktion an den Client zurücksendet. URL

Die Anforderungs- und Antwortereignisformate folgen demselben Schema wie das Amazon API Gateway-Payload-Format Version 2.0.

Anforderungsnutzlastformat

Eine Anforderungsnutzlast hat die folgende Struktur:

{ "version": "2.0", "routeKey": "$default", "rawPath": "/my/path", "rawQueryString": "parameter1=value1&parameter1=value2&parameter2=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

version

Die Nutzlastformatversion für dieses Ereignis. Die Lambda-Funktion unterstützt URLs derzeit das Payload-Format Version 2.0.

2.0

routeKey

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf $default als Platzhalter.

$default

rawPath

Der Anforderungspfad. Wenn die Anfrage beispielsweise URL lautethttps://{url-id}.lambda-url.{region}.on.aws/example/test/demo, dann ist der Rohwert des Pfads/example/test/demo.

/example/test/demo

rawQueryString

Die Rohzeichenfolge, die die Abfragezeichenfolge-Parameter der Anforderung enthält. Zu den unterstützten Zeichen gehören a-z, A-Z, 0-9, ., _, -, %, &, =, und +.

"?parameter1=value1&parameter2=value2"

cookies

Ein Array, das alle Cookies enthält, die im Rahmen der Anforderung gesendet wurden.

["Cookie_1=Value_1", "Cookie_2=Value_2"]

headers

Die Liste der Anforderungs-Header, die als Schlüssel-Wert-Paare dargestellt werden.

{"header1": "value1", "header2": "value2"}

queryStringParameters

Die Abfrageparameter für die Anforderung. Wenn die Anfrage beispielsweise URL lautethttps://{url-id}.lambda-url.{region}.on.aws/example?name=Jane, dann ist der queryStringParameters Wert ein JSON Objekt mit dem Schlüssel name und dem Wert vonJane.

{"name": "Jane"}

requestContext

Ein Objekt, das zusätzliche Informationen über die Anfrage enthält, z. B. die requestId Uhrzeit der Anfrage und die Identität des Aufrufers, sofern er über AWS Identity and Access Management (IAM) autorisiert wurde.

requestContext.accountId

Die AWS-Konto ID des Funktionsbesitzers.

"123456789012"

requestContext.apiId

Die ID der FunktionURL.

"33anwqw8fj"

requestContext.authentication

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf null.

null

requestContext.authorizer

Ein Objekt, das Informationen über die Identität des Anrufers enthält, wenn die Funktion den URL Authentifizierungstyp verwendetAWS_IAM. Ansonsten setzt Lambda dies auf null.

requestContext.authorizer.iam.accessKey

Der Zugriffsschlüssel der Anruferidentität.

"AKIAIOSFODNN7EXAMPLE"

requestContext.authorizer.iam.accountId

Die AWS-Konto ID der Anruferidentität.

"111122223333"

requestContext.authorizer.iam.callerId

Die ID (Benutzer-ID) des Aufrufers.

"AIDACKCEVSQ6C2EXAMPLE"

requestContext.authorizer.iam.cognitoIdentity

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf null oder schließt es aus. JSON

null

requestContext.authorizer.iam.principalOrgId

Die Prinzipal-Organisations-ID, die mit der Anruferidentität verknüpft ist.

"AIDACKCEVSQORGEXAMPLE"

requestContext.authorizer.iam.userArn

Der Amazon Resource Name (ARN) des Benutzers der Anruferidentität.

"arn:aws:iam::111122223333:user/example-user"

requestContext.authorizer.iam.userId

Die Benutzer-ID des Anrufers.

"AIDACOSFODNN7EXAMPLE2"

requestContext.domainName

Der Domainname der FunktionURL.

"<url-id>.lambda-url.us-west-2.on.aws"

requestContext.domainPrefix

Das Domänenpräfix der FunktionURL.

"<url-id>"

requestContext.http

Ein Objekt, das Details zur HTTP Anfrage enthält.

requestContext.http.method

Die in dieser Anfrage verwendete HTTP Methode. Gültige Werte sind unter anderem GET, POST, PUT, HEAD, OPTIONS, PATCH und DELETE.

GET

requestContext.http.path

Der Anforderungspfad. Wenn die Anfrage beispielsweise URL lautethttps://{url-id}.lambda-url.{region}.on.aws/example/test/demo, dann ist der Pfadwert/example/test/demo.

/example/test/demo

requestContext.http.protocol

Das Protokoll der Anforderung.

HTTP/1.1

requestContext.http.sourceIp

Die Quell-IP-Adresse der unmittelbaren TCP Verbindung, die die Anfrage stellt.

123.123.123.123

requestContext.http.userAgent

Der Headerwert der Benutzer-Agent-Anforderung.

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) Gecko/20100101 Firefox/42.0

requestContext.requestId

Die ID der aktuellen Aufrufanforderung. Sie können diese ID verwenden, um Aufrufprotokolle zu verfolgen, die sich auf Ihre Funktion beziehen.

e1506fd5-9e7b-434f-bd42-4f8fa224b599

requestContext.routeKey

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf $default als Platzhalter.

$default

requestContext.stage

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf $default als Platzhalter.

$default

requestContext.time

Der Zeitstempel der Anfrage.

"07/Sep/2021:22:50:22 +0000"

requestContext.timeEpoch

Die Uhrzeit der Anfrage in Unix-Epochen-Zeit.

"1631055022677"

body

Der Text der Anforderung. Wenn der Inhaltstyp der Anforderung binär ist, ist der Text base64-kodiert.

{"key1": "value1", "key2": "value2"}

pathParameters

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf null oder schließt es aus. JSON

null

isBase64Encoded

TRUE, wenn der Text eine binäre Nutzlast hat und base64-kodiert ist. Ansonsten FALSE.

FALSE

stageVariables

Die Funktion verwendet diesen Parameter URLs nicht. Lambda setzt dies auf null oder schließt es aus. JSON

null

Antwortnutzlastformat

Wenn Ihre Funktion eine Antwort zurückgibt, analysiert Lambda die Antwort und wandelt sie in eine HTTP Antwort um. 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 valid zurückgibt JSON und kein a zurückgibtstatusCode, geht Lambda von Folgendem aus:

  • statusCode ist 200.

  • content-type ist application/json.

  • body ist die Antwort der Funktion.

  • isBase64Encoded ist false.

Die folgenden Beispiele zeigen, wie die Ausgabe Ihrer Lambda-Funktion der Antwortnutzlast zugeordnet wird und wie die Antwortnutzlast der endgültigen Antwort zugeordnet wird. HTTP Wenn der Client Ihre Funktion aufruftURL, sieht er die Antwort. HTTP

Beispielausgabe für eine Zeichenkettenantwort

Lambda-Funktionsausgabe Interpretierte Antwortausgabe HTTPAntwort (was der Kunde sieht)
"Hello, world!"
{ "statusCode": 200, "body": "Hello, world!", "headers": { "content-type": "application/json" }, "isBase64Encoded": false }
HTTP/2 200 date: Wed, 08 Sep 2021 18:02:24 GMT content-type: application/json content-length: 15 "Hello, world!"

Beispielausgabe für eine JSON Antwort

Lambda-Funktionsausgabe Interpretierte Antwortausgabe HTTPAntwort (was der Kunde sieht)
{ "message": "Hello, world!" }
{ "statusCode": 200, "body": { "message": "Hello, world!" }, "headers": { "content-type": "application/json" }, "isBase64Encoded": false }
HTTP/2 200 date: Wed, 08 Sep 2021 18:02:24 GMT content-type: application/json content-length: 34 { "message": "Hello, world!" }

Beispielausgabe für eine benutzerdefinierte Antwort

Lambda-Funktionsausgabe Interpretierte Antwortausgabe HTTPAntwort (was der Kunde sieht)
{ "statusCode": 201, "headers": { "Content-Type": "application/json", "My-Custom-Header": "Custom Value" }, "body": JSON.stringify({ "message": "Hello, world!" }), "isBase64Encoded": false }
{ "statusCode": 201, "headers": { "Content-Type": "application/json", "My-Custom-Header": "Custom Value" }, "body": JSON.stringify({ "message": "Hello, world!" }), "isBase64Encoded": false }
HTTP/2 201 date: Wed, 08 Sep 2021 18:02:24 GMT content-type: application/json content-length: 27 my-custom-header: Custom Value { "message": "Hello, world!" }

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.

Lambda-Funktionsausgabe HTTPAntwort (was der Kunde sieht)
{ "statusCode": 201, "headers": { "Content-Type": "application/json", "My-Custom-Header": "Custom Value" }, "body": JSON.stringify({ "message": "Hello, world!" }), "cookies": [ "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT", "Cookie_2=Value2; Max-Age=78000" ], "isBase64Encoded": false }
HTTP/2 201 date: Wed, 08 Sep 2021 18:02:24 GMT content-type: application/json content-length: 27 my-custom-header: Custom Value set-cookie: Cookie_1=Value2; Expires=21 Oct 2021 07:48 GMT set-cookie: Cookie_2=Value2; Max-Age=78000 { "message": "Hello, world!" }