Invocare la funzione Lambda URLs - AWS Lambda

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Invocare la funzione Lambda URLs

Una funzione URL è un endpoint HTTP (S) dedicato per la funzione Lambda. Puoi creare e configurare una funzione URL tramite la console Lambda o Lambda. API Quando crei una funzioneURL, Lambda genera automaticamente un URL endpoint unico per te. Una volta creata una funzioneURL, il suo URL endpoint non cambia mai. URLGli endpoint della funzione hanno il seguente formato:

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

URLsLe funzioni non sono supportate nei seguenti paesi Regioni AWS: Asia Pacifico (Hyderabad) (ap-south-2), Asia Pacifico (Melbourne) (ap-southeast-4), Asia Pacifico (Malaysia) (ap-southeast-5), Canada occidentale (Calgary) (), Europa (Spagnaca-west-1) (), Europa (Zurigoeu-south-2) () (), Israele (Tel Aviveu-central-2) () e Medio Oriente (il-central-1) (). UAE me-central-1

URLsLe funzioni sono abilitate al dual stack, supportano e. IPv4 IPv6 Dopo aver configurato la funzioneURL, è possibile richiamarla tramite il suo endpoint HTTP (S) tramite un browser Web, curl, Postman o qualsiasi client. HTTP Per richiamare una funzioneURL, è necessario disporre delle autorizzazioni. lambda:InvokeFunctionUrl Per ulteriori informazioni, consulta Controllo accessi.

Nozioni di base sull'invocazione delle funzioni URL

Se la funzione URL utilizza il tipo di AWS_IAM autenticazione, è necessario firmare ogni HTTP richiesta utilizzando AWS Signature Version 4 (SigV4). Strumenti come awscurl, Postman e AWS SigV4 Proxy offrono modalità integrate per firmare le richieste con Sigv4.

Se non utilizzi uno strumento per firmare HTTP le richieste alla tua funzioneURL, devi firmare manualmente ogni richiesta utilizzando SigV4. Quando la funzione URL riceve una richiesta, Lambda calcola anche la firma SigV4. Lambda elabora la richiesta solo se le firme corrispondono. Per istruzioni su come firmare manualmente le richieste con SigV4, consulta Firmare le AWS richieste con Signature Version 4 nella Guida.Riferimenti generali di Amazon Web Services

Se la funzione URL utilizza il tipo di NONE autenticazione, non è necessario firmare le richieste utilizzando SigV4. Puoi richiamare la tua funzione utilizzando un browser web, curl, Postman o qualsiasi altro client. HTTP

Per verificare semplici richieste GET alla funzione, usa un browser Web. Ad esempio, se la tua funzione URL è https://abcdefg.lambda-url.us-east-1.on.aws e utilizza un parametro stringamessage, la tua richiesta URL potrebbe essere simile alla seguente:

https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld

Per testare altre HTTP richieste, come una POST richiesta, puoi usare uno strumento come curl. Ad esempio, se desideri includere alcuni JSON dati in una POST richiesta alla tua funzioneURL, puoi usare il seguente comando curl:

curl -v 'https://abcdefg.lambda-url.us-east-1.on.aws/?message=HelloWorld' \ -H 'content-type: application/json' \ -d '{ "example": "test" }'

Payload di richieste e risposte

Quando un client chiama la tua funzioneURL, Lambda mappa la richiesta a un oggetto evento prima di passarla alla tua funzione. La risposta della funzione viene quindi mappata su una HTTP risposta che Lambda invia al client tramite la funzione. URL

I formati degli eventi di richiesta e risposta seguono lo stesso schema del formato di payload di Amazon API Gateway versione 2.0.

Formato del payload di richiesta

Un payload di richiesta ha la seguente struttura:

{ "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 }
Parametro Descrizione Esempio

version

Il tipo di formato del payload per questo evento. La funzione Lambda URLs attualmente supporta il formato payload versione 2.0.

2.0

routeKey

La funzione URLs non utilizza questo parametro. Lambda lo imposta su $default come segnaposto.

$default

rawPath

Percorso della richiesta. Ad esempio, se la richiesta URL èhttps://{url-id}.lambda-url.{region}.on.aws/example/test/demo, il valore del percorso non elaborato è/example/test/demo.

/example/test/demo

rawQueryString

La stringa raw contenente i parametri della stringa di query della richiesta. I caratteri supportati includono a-z, A-Z, 0-9, ., _, -, %, &, = e +.

"?parameter1=value1&parameter2=value2"

cookies

Un array contenente tutti i cookie inviati come parte della richiesta.

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

headers

L'elenco delle intestazioni della richiesta, presentate come coppie chiave-valore.

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

queryStringParameters

I parametri di query per la richiesta. Ad esempio, se la richiesta URL èhttps://{url-id}.lambda-url.{region}.on.aws/example?name=Jane, il queryStringParameters valore è un JSON oggetto con una chiave di name e un valore diJane.

{"name": "Jane"}

requestContext

Un oggetto che contiene informazioni aggiuntive sulla richiesta, ad esempio l'requestIdora della richiesta e l'identità del chiamante, se autorizzato tramite AWS Identity and Access Management (IAM).

requestContext.accountId

L' Account AWS ID del proprietario della funzione.

"123456789012"

requestContext.apiId

L'ID della funzioneURL.

"33anwqw8fj"

requestContext.authentication

La funzione URLs non utilizza questo parametro. Lambda lo imposta su null.

null

requestContext.authorizer

Un oggetto che contiene informazioni sull'identità del chiamante, se la funzione URL utilizza il tipo di AWS_IAM autenticazione. Altrimenti, Lambda lo imposta su null.

requestContext.authorizer.iam.accessKey

La chiave di accesso dell'identità del chiamante.

"AKIAIOSFODNN7EXAMPLE"

requestContext.authorizer.iam.accountId

L' Account AWS ID dell'identità del chiamante.

"111122223333"

requestContext.authorizer.iam.callerId

L'ID (ID utente) del chiamante.

"AIDACKCEVSQ6C2EXAMPLE"

requestContext.authorizer.iam.cognitoIdentity

La funzione URLs non utilizza questo parametro. Lambda lo imposta null o lo esclude da. JSON

null

requestContext.authorizer.iam.principalOrgId

L'ID dell'organizzazione principale associato all'identità del chiamante.

"AIDACKCEVSQORGEXAMPLE"

requestContext.authorizer.iam.userArn

L'utente Amazon Resource Name (ARN) dell'identità del chiamante.

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

requestContext.authorizer.iam.userId

L'ID utente dell'identità del chiamante.

"AIDACOSFODNN7EXAMPLE2"

requestContext.domainName

Il nome di dominio della funzione. URL

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

requestContext.domainPrefix

Il prefisso di dominio della funzione. URL

"<url-id>"

requestContext.http

Un oggetto che contiene dettagli sulla HTTP richiesta.

requestContext.http.method

Il HTTP metodo utilizzato in questa richiesta. I valori validi includono GET, POST, PUT, HEAD, OPTIONS, PATCH e DELETE.

GET

requestContext.http.path

Percorso della richiesta. Ad esempio, se la richiesta URL èhttps://{url-id}.lambda-url.{region}.on.aws/example/test/demo, il valore del percorso è/example/test/demo.

/example/test/demo

requestContext.http.protocol

Il protocollo della richiesta.

HTTP/1.1

requestContext.http.sourceIp

L'indirizzo IP di origine della TCP connessione immediata che effettua la richiesta.

123.123.123.123

requestContext.http.userAgent

Il valore dell'intestazione della richiesta User-Agent.

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

requestContext.requestId

L'l'ID della richiesta di richiamo. È possibile utilizzare questo ID per tenere traccia dei registri dei richiami correlati alla funzione.

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

requestContext.routeKey

La funzione URLs non utilizza questo parametro. Lambda lo imposta su $default come segnaposto.

$default

requestContext.stage

La funzione URLs non utilizza questo parametro. Lambda lo imposta su $default come segnaposto.

$default

requestContext.time

Il timestamp della richiesta.

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

requestContext.timeEpoch

Il timestamp della richiesta, in formato temporale Unix.

"1631055022677"

body

Il corpo della richiesta. Se il tipo di contenuto della richiesta è binario, il corpo è con codifica base64.

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

pathParameters

La funzione URLs non utilizza questo parametro. Lambda lo imposta null o lo esclude da. JSON

null

isBase64Encoded

TRUE se il corpo è un payload binario e con codifica base64. FALSE in caso contrario.

FALSE

stageVariables

La funzione URLs non utilizza questo parametro. Lambda lo imposta null o lo esclude da. JSON

null

Formato del payload di risposta

Quando la funzione restituisce una risposta, Lambda analizza la risposta e la converte in risposta. HTTP I payload di risposta della funzione hanno il formato seguente:

{ "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 deduce il formato di risposta per l'utente. Se la funzione restituisce un valore valido JSON e non restituisce un valorestatusCode, Lambda presuppone quanto segue:

  • statusCode è 200.

  • content-type è application/json.

  • body è la risposta della funzione.

  • isBase64Encoded è false.

Gli esempi seguenti mostrano come l'output della funzione Lambda viene mappato al payload di risposta e come il payload di risposta viene mappato alla risposta finale. HTTP Quando il client richiama la tua funzioneURL, vede la risposta. HTTP

Esempio di output per una risposta in formato stringa

Risultato della funzione Lambda Output di risposta interpretata HTTPrisposta (cosa vede il cliente)
"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!"

Esempio di output per una JSON risposta

Risultato della funzione Lambda Output di risposta interpretata HTTPrisposta (cosa vede il cliente)
{ "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!" }

Esempio di output per una risposta personalizzata

Risultato della funzione Lambda Output di risposta interpretata HTTPrisposta (cosa vede il cliente)
{ "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!" }

Cookie

Per restituire i cookie della funzione, non aggiungere manualmente intestazioni set-cookie. Al contrario, includi i cookie nell'oggetto payload di risposta. Lambda lo interpreta automaticamente e li aggiunge come set-cookie intestazioni nella HTTP risposta, come nell'esempio seguente.

Risultato della funzione Lambda HTTPrisposta (ciò che vede il cliente)
{ "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!" }