

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à.

# Richiamo di URL di funzioni Lambda
<a name="urls-invocation"></a>

Un URL della funzione è un endpoint HTTP(S) dedicato alla funzione Lambda. È possibile creare e configurare un URL della funzione tramite la console Lambda o l'API Lambda.

**Suggerimento**  
Lambda offre due modi per richiamare una funzione tramite un endpoint HTTP: URL di funzione e Amazon API Gateway. Se non sei certo del metodo più adatto al tuo caso d'uso, consultare[Selezionare un metodo per richiamare la funzione Lambda tramite una richiesta HTTP](furls-http-invoke-decision.md).

Quando si crea un URL della funzione, Lambda genera automaticamente un endpoint URL univoco. Dopo aver creato un URL della funzione, il suo endpoint URL non cambia mai. Gli endpoint URL della funzione hanno il formato seguente:

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

**Nota**  
Gli URL delle funzioni non sono supportati nei seguenti paesiRegioni AWS: Asia Pacifico (Hyderabad) (`ap-south-2`), Asia Pacifico (Melbourne) (`ap-southeast-4`), Asia Pacifico (Malesia) (), Asia Pacifico (Nuova Zelanda`ap-southeast-5`) (), Asia Pacifico (Tailandia) ()`ap-southeast-6`, Asia Pacifico (Taipei`ap-southeast-7`) (), Canada occidentale (Calgary) ()`ap-east-2`, Europa (Spagna) ()`ca-west-1`, Europa (Zurigo) () `eu-south-2``eu-central-2`, Israele (Tel Aviv) () e Medio Oriente (Emirati Arabi Uniti) (). `il-central-1` `me-central-1`

Gli URL della funzione sono abilitati alla rete dual stack e supportano IPv4 e IPv6. Dopo aver configurato l'URL della funzione, è possibile richiamare la funzione attraverso il relativo endpoint HTTP(S) tramite un browser Web, curl, Postman o un client HTTP. Per richiamare un URL della funzione, è necessario disporre di autorizzazioni . Per ulteriori informazioni, consulta [Controllo accessi](urls-auth.md).

**Topics**
+ [Nozioni di base sul richiamo di URL di funzioni](#urls-invocation-basics)
+ [Payload di richieste e risposte](#urls-payloads)

## Nozioni di base sul richiamo di URL di funzioni
<a name="urls-invocation-basics"></a>

Se l'URL della funzione utilizza il tipo di autenticazione `AWS_IAM`, è necessario firmare ogni richiesta HTTP utilizzando [AWS Signature Version 4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html). Strumenti come awscurl, Postman e SigV4 Proxy offrono modalità integrate per firmare le richieste con Sigv4.

Se non utilizzi uno strumento per firmare le richieste HTTP all'URL della funzione, è necessario firmare manualmente ogni richiesta utilizzando Sigv4. Quando l'URL della funzione riceve una richiesta, Lambda calcola anche la firma Sigv4. Lambda elabora la richiesta solo se le firme corrispondono. Per le istruzioni su come firmare manualmente le richieste con SigV4, consulta [Firma delle richieste AWS con Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html) nella *Guida di riferimento generale di Riferimenti generali di Amazon Web Services*.

Se l'URL della funzione utilizza il tipo di autenticazione `NONE`, non è necessario firmare le richieste utilizzando Sigv4. Puoi richiamare la funzione utilizzando un browser Web, curl, Postman o un client HTTP.

Per verificare semplici richieste `GET` alla funzione, usa un browser Web. Ad esempio, se l'URL della funzione è `https://abcdefg.lambda-url.us-east-1.on.aws` e richiede un parametro stringa `message`, l'URL della richiesta potrebbe essere simile al seguente:

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

Per verificare altre richieste HTTP, ad esempio una richiesta `POST`, puoi utilizzare uno strumento come curl. Ad esempio, se desideri includere alcuni dati JSON in una richiesta `POST` all'URL della funzione, potresti utilizzare il comando curl seguente:

```
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
<a name="urls-payloads"></a>

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

I formati degli eventi di richiesta e risposta seguono lo stesso schema del [tipo di formato del payload di Gateway Amazon API versione 2.0](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format).

### Formato del payload di richiesta
<a name="urls-request-payload"></a>

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. Gli URL della funzione Lambda attualmente supportano il [tipo di formato del payload versione 2.0](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-develop-integrations-lambda.html#http-api-develop-integrations-lambda.proxy-format).  |  `2.0`  | 
|  `routeKey`  |  Gli URL della funzione non utilizzano questo parametro. Lambda lo imposta su `$default` come segnaposto.  |  `$default`  | 
|  `rawPath`  |  Percorso della richiesta. Ad esempio, se l'URL della richiesta è `https://{url-id}.lambda-url.{region}.on.aws/example/test/demo`, il valore raw del percorso è `/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 l'URL della richiesta è `https://{url-id}.lambda-url.{region}.on.aws/example?name=Jane`, il valore `queryStringParameters` è un oggetto JSON con una chiave di `name` e un valore di `Jane`.  |  `{"name": "Jane"}`  | 
|  `requestContext`  |  Un oggetto contenente informazioni aggiuntive sulla richiesta, ad esempio `requestId`, l'ora della richiesta e l'identità del chiamante se autorizzato tramite AWS Identity and Access Management (IAM).  |   | 
|  `requestContext.accountId`  |  L'ID Account AWS del proprietario della funzione.  |  `"123456789012"`  | 
|  `requestContext.apiId`  |  L'ID dell'URL della funzione.  |  `"33anwqw8fj"`  | 
|  `requestContext.authentication`  |  Gli URL della funzione non utilizzano questo parametro. Lambda lo imposta su `null`.  |  `null`  | 
|  `requestContext.authorizer`  |  Un oggetto contenente informazioni sull'identità del chiamante, se l'URL della funzione utilizza il tipo di autenticazione `AWS_IAM`. Altrimenti, Lambda lo imposta su `null`.  |   | 
|  `requestContext.authorizer.iam.accessKey`  |  La chiave di accesso dell'identità del chiamante.  |  `"AKIAIOSFODNN7EXAMPLE"`  | 
|  `requestContext.authorizer.iam.accountId`  |  L'ID Account AWS dell'identità del chiamante.  |  `"111122223333"`  | 
|  `requestContext.authorizer.iam.callerId`  |  L'ID (ID utente) del chiamante.  |  `"AIDACKCEVSQ6C2EXAMPLE"`  | 
|  `requestContext.authorizer.iam.cognitoIdentity`  |  Gli URL della funzione non utilizzano questo parametro. Lambda lo imposta su `null` o lo esclude dal JSON.  |  `null`  | 
|  `requestContext.authorizer.iam.principalOrgId`  |  L'ID dell'organizzazione principale associato all'identità del chiamante.  |  `"AIDACKCEVSQORGEXAMPLE"`  | 
|  `requestContext.authorizer.iam.userArn`  |  L'Amazon Resource Name (ARN) utente 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 dell'URL della funzione.  |  `"<url-id>.lambda-url.us-west-2.on.aws"`  | 
|  `requestContext.domainPrefix`  |  Il prefisso di dominio dell'URL della funzione.  |  `"<url-id>"`  | 
|  `requestContext.http`  |  Un oggetto contenente i dettagli sulla richiesta HTTP.  |   | 
|  `requestContext.http.method`  |  Il metodo HTTP utilizzato nella richiesta. I valori validi includono `GET`, `POST`, `PUT`, `HEAD`, `OPTIONS`, `PATCH` e `DELETE`.  |  `GET`  | 
|  `requestContext.http.path`  |  Percorso della richiesta. Ad esempio, se l'URL della richiesta è `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 connessione TCP immediata da cui proviene 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`  |  Gli URL della funzione non utilizzano questo parametro. Lambda lo imposta su `$default` come segnaposto.  |  `$default`  | 
|  `requestContext.stage`  |  Gli URL della funzione non utilizzano 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 epoch.  |  `"1631055022677"`  | 
|  `body`  |  Il corpo della richiesta. Se il tipo di contenuto della richiesta è binario, il corpo è con codifica base64.  |  `{"key1": "value1", "key2": "value2"}`  | 
|  `pathParameters`  |  Gli URL della funzione non utilizzano questo parametro. Lambda lo imposta su `null` o lo esclude dal JSON.  |  `null`  | 
|  `isBase64Encoded`  |  `TRUE` se il corpo è un payload binario e con codifica base64. `FALSE` in caso contrario.  |  `FALSE`  | 
|  `stageVariables`  |  Gli URL della funzione non utilizzano questo parametro. Lambda lo imposta su `null` o lo esclude dal JSON.  |  `null`  | 

### Formato del payload di risposta
<a name="urls-response-payload"></a>

Quando la funzione restituisce una risposta, Lambda analizza la risposta e la converte in una 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 Lambda restituisce un JSON valido e non restituisce un `statusCode`, Lambda presuppone quanto segue:
+ `statusCode` is `200`.
**Nota**  
I valori validi `statusCode` sono compresi tra 100 e 599.
+ `content-type` is `application/json`.
+ `body` è la risposta della funzione.
+ `isBase64Encoded` is `false`.

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

**Esempio di output per una risposta stringa**


| Risultato della funzione Lambda | Output di risposta interpretata | Risposta HTTP (cosa vede il client) | 
| --- | --- | --- | 
|  <pre>"Hello, world!"</pre>  |  <pre>{<br />  "statusCode": 200,<br />  "body": "Hello, world!",<br />  "headers": {<br />    "content-type": "application/json"<br />  },<br />  "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 200<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 15<br /><br />"Hello, world!"</pre>  | 

**Esempio di output per una risposta JSON**


| Risultato della funzione Lambda | Output di risposta interpretata | Risposta HTTP (cosa vede il client) | 
| --- | --- | --- | 
|  <pre>{<br />  "message": "Hello, world!"<br />}</pre>  |  <pre>{<br />  "statusCode": 200,<br />  "body": {<br />    "message": "Hello, world!"<br />  },<br />  "headers": {<br />    "content-type": "application/json"<br />  },<br />  "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 200<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 34<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

**Esempio di output per una risposta personalizzata**


| Risultato della funzione Lambda | Output di risposta interpretata | Risposta HTTP (cosa vede il client) | 
| --- | --- | --- | 
|  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 201<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 27<br />my-custom-header: Custom Value<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 

### Cookie
<a name="urls-cookies"></a>

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


| Risultato della funzione Lambda | Risposta HTTP (cosa vede il client) | 
| --- | --- | 
|  <pre>{<br />   "statusCode": 201,<br />    "headers": {<br />        "Content-Type": "application/json",<br />        "My-Custom-Header": "Custom Value"<br />    },<br />    "body": JSON.stringify({<br />        "message": "Hello, world!"<br />    }),<br />    "cookies": [<br />        "Cookie_1=Value1; Expires=21 Oct 2021 07:48 GMT",<br />        "Cookie_2=Value2; Max-Age=78000"<br />    ],<br />    "isBase64Encoded": false<br />}</pre>  |  <pre>HTTP/2 201<br />date: Wed, 08 Sep 2021 18:02:24 GMT<br />content-type: application/json<br />content-length: 27<br />my-custom-header: Custom Value<br />set-cookie: Cookie_1=Value2; Expires=21 Oct 2021 07:48 GMT<br />set-cookie: Cookie_2=Value2; Max-Age=78000<br /><br />{<br />  "message": "Hello, world!"<br />}</pre>  | 