

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

# Comprensione dei metodi di invocazione della funzione Lambda
<a name="lambda-invocation"></a>

Dopo aver implementato la tua funzione Lambda, puoi richiamarla in diversi modi:
+ La [console Lambda](testing-functions.md): utilizza la console Lambda per creare rapidamente un evento di test per richiamare la tua funzione.
+ L'[AWS SDK: usa l'SDK](https://aws.amazon.com/developer/tools/) per richiamare la AWS tua funzione a livello di codice.
+ L'API [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html): utilizza l'API Lambda Invoke per richiamare direttamente la tua funzione.
+ The [AWS Command Line Interface (AWS CLI)](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/invoke.html): utilizzate il `aws lambda invoke` AWS CLI comando per richiamare direttamente la funzione dalla riga di comando.
+ Un [endpoint HTTP (S) URL di una funzione](urls-configuration.md): utilizza la funzione URLs per creare un endpoint HTTP (S) dedicato che puoi utilizzare per richiamare la tua funzione.

Tutti questi metodi sono modi *diretti* per richiamare la tua funzione. In Lambda, un caso d'uso comune consiste nel richiamare la funzione in base a un evento che si verifica altrove nell'applicazione. Alcuni servizi possono richiamare una funzione Lambda con ogni nuovo evento. Si chiama [trigger](lambda-services.md). Per i servizi basati su flussi e code, Lambda richiama la funzione con batch di record. Ciò è detto [strumento di mappatura dell'origine degli eventi](invocation-eventsourcemapping.md).

Quando si invoca una funzione, è possibile scegliere di invocarla in modo sincrono o asincrono. Con l'[invocazione sincrona](invocation-sync.md), è necessario attendere che la funzione elabori l'evento e restituisca una risposta. Con l'invocazione [asincrona](invocation-async.md), Lambda accoda l'evento per l'elaborazione e restituisce una risposta immediatamente. Il [parametro della richiesta `InvocationType` nell'API Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#API_Invoke_RequestParameters) determina il modo in cui Lambda richiama la tua funzione. Un valore di `RequestResponse` indica una invocazione sincrona mentre un valore `Event` indica una invocazione asincrona.

[Per richiamare la tua funzione IPv6, usa gli endpoint dual-stack pubblici di Lambda.](https://docs.aws.amazon.com/general/latest/gr/rande.html#dual-stack-endpoints) Gli endpoint dual-stack supportano entrambi e. IPv4 IPv6 Gli endpoint dual-stack Lambda utilizzano la seguente sintassi:

```
protocol://lambda.us-east-1.api.aws
```

Puoi anche usare la [funzione Lambda URLs](urls-configuration.md) per richiamare funzioni. IPv6 Gli endpoint URL della funzione hanno il formato seguente:

```
https://url-id.lambda-url.us-east-1.on.aws
```

Se l'invocazione della funzione genera un errore, per le invocazioni sincrone, visualizza il messaggio di errore nella risposta e riprova a richiamare manualmente. Per l'invocazione asincrona, Lambda gestisce i nuovi tentativi e può inviare i record di invocazione a una [destinazione](invocation-async-retain-records.md#invocation-async-destinations).

# Richiamare una funzione Lambda in modo sincrono
<a name="invocation-sync"></a>

Quando si invoca una funzione in modo sincrono, Lambda esegue la funzione e attende una risposta. Quando l'esecuzione di una funzione termina, Lambda restituisce la risposta dal codice della funzione con dati aggiuntivi, ad esempio la versione della funzione invocata. Per invocare una funzione in modo sincrono con l'AWS CLI, utilizzare il comando `invoke`.

```
aws lambda invoke --function-name my-function \
    --cli-binary-format raw-in-base64-out \
    --payload '{ "key": "value" }' response.json
```

L'opzione **cli-binary-format** è necessaria se si utilizza la versione 2 della AWS CLI. Per rendere questa impostazione come predefinita, esegui `aws configure set cli-binary-format raw-in-base64-out`. Per ulteriori informazioni, consulta la pagina [AWS CLI supported global command line options](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) nella *Guida per l'utente di AWS Command Line Interface versione 2*.

Verrà visualizzato l'output seguente:

```
{
    "ExecutedVersion": "$LATEST",
    "StatusCode": 200
}
```

Il seguente diagramma mostra i client che richiamano una funzione Lambda in modo sincrono. Lambda invia gli eventi direttamente alla funzione e invia la risposta della funzione all'invoker.

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/invocation-sync.png)


Il `payload` è una stringa che contiene un evento in formato JSON. Il nome del file in cui l'AWS CLI scrive la risposta dalla funzione è `response.json`. Se la funzione restituisce un oggetto o un errore, il corpo della risposta è l'oggetto o l'errore in formato JSON. Se la funzione termina senza errori, il corpo della risposta è `null`.

**Nota**  
Lambda non attende il completamento delle estensioni esterne prima di inviare la risposta. Le estensioni esterne vengono eseguite come processi indipendenti nell'ambiente di esecuzione e continuano l'esecuzione dopo che la chiamata della funzione è stata completata. Per ulteriori informazioni, consulta [Aumentare le funzioni Lambda utilizzando le estensioni Lambda](lambda-extensions.md).

L'output del comando, che viene visualizzato nel terminale, include informazioni dalle intestazioni nella risposta da Lambda. Sono incluse la versione che ha elaborato l'evento (utile quando si utilizzano gli [alias](configuration-aliases.md)) e il codice di stato restituito da Lambda. Se Lambda è stato in grado di eseguire la funzione, il codice di stato è 200, anche se la funzione ha restituito un errore.

**Nota**  
Per le funzioni con un lungo timeout, il client potrebbe essere scollegato durante l'invocazione sincrona mentre è in attesa della risposta. Configurare il client HTTP, l'SDK, il firewall o il sistema operativo per consentire le connessioni lunghe con timeout o le impostazioni keep-alive.

Se Lambda non è in grado di eseguire la funzione, l'errore viene visualizzato nell'output.

```
aws lambda invoke --function-name my-function \
    --cli-binary-format raw-in-base64-out \
    --payload value response.json
```

Verrà visualizzato l'output seguente:

```
An error occurred (InvalidRequestContentException) when calling the Invoke operation: Could not parse request body into json: Unrecognized token 'value': was expecting ('true', 'false' or 'null')
 at [Source: (byte[])"value"; line: 1, column: 11]
```

AWS CLI è uno strumento open source che consente di interagire con i servizi AWS tramite i comandi nella shell a riga di comando. Per completare le fasi riportate in questa sezione, è necessario disporre della [AWS CLI versione 2](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

È possibile utilizzare [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) per recuperare i log per una chiamata utilizzando l'opzione di comando `--log-type`. La risposta include un campo `LogResult` che contiene fino a 4 KB di log con codifica base64 del richiamo.

**Example recuperare un ID di log**  
Nell'esempio seguente viene illustrato come recuperare un *ID di log* dal `LogResult` campo per una funzione denominata `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail
```
Verrà visualizzato l'output seguente:  

```
{
    "StatusCode": 200,
    "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...",
    "ExecutedVersion": "$LATEST"
}
```

**Example decodificare i log**  
Nello stesso prompt dei comandi, utilizzare l'`base64` utilità per decodificare i log. Nell'esempio seguente viene illustrato come recuperare i log codificati in base64 per `my-function`.  

```
aws lambda invoke --function-name my-function out --log-type Tail \
--query 'LogResult' --output text --cli-binary-format raw-in-base64-out | base64 --decode
```
L'opzione **cli-binary-format** è necessaria se si utilizza la versione 2 della AWS CLI. Per rendere questa impostazione come predefinita, esegui `aws configure set cli-binary-format raw-in-base64-out`. Per ulteriori informazioni, consulta la pagina [AWS CLI supported global command line options](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) nella *Guida per l'utente di AWS Command Line Interface versione 2*.  
Verrà visualizzato l'output seguente:  

```
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST
"AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib",
END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8
REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8  Duration: 79.67 ms      Billed Duration: 80 ms         Memory Size: 128 MB     Max Memory Used: 73 MB
```
L'utilità `base64` è disponibile su Linux, macOS e [Ubuntu su Windows](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Gli utenti macOS potrebbero dover utilizzare `base64 -D`.

Per ulteriori informazioni sulle API `Invoke`, incluso un elenco completo di parametri, intestazioni ed errori, consulta [Invoke (Invoca)](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html).

Quando si invoca una funzione direttamente, è possibile controllare la risposta agli errori e riprovare. L'AWS CLI e l'SDK AWS, inoltre, riprovano automaticamente sugli errori di timeout del client, di throttling e di servizio. Per ulteriori informazioni, consulta [Informazioni sul comportamento relativo ai nuovi tentativi in Lambda](invocation-retries.md).

# Richiamo di una funzione Lambda in modo sincrono
<a name="invocation-async"></a>

Diversi Servizi AWS, come Amazon Simple Storage Service (Amazon S3) e Amazon Simple Notification Service (Amazon SNS), chiamano le funzioni in modo asincrono per elaborare gli eventi. Puoi anche richiamare una funzione Lambda in modo asincrono utilizzando la AWS Command Line Interface (AWS CLI) o uno degli SDK AWS. Quando si richiama una funzione in modo asincrono, non si attende una risposta dal codice della funzione. Si passa l'evento a Lambda e Lambda si occupa del resto. È possibile configurare il modo in cui Lambda gestisce gli errori e invia i record di invocazione a una risorsa a valle come Amazon Simple Queue Service (Amazon SQS) o Amazon EventBridge (EventBridge) per concatenare i componenti dell'applicazione.

Il seguente diagramma mostra i client che richiamano una funzione Lambda in modo asincrono. Lambda accoda gli eventi prima di inviarli alla funzione.

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/features-async.png)


Per l'invocazione asincrona, Lambda inserisce l'evento in una coda e restituisce una risposta di esito positivo senza ulteriori informazioni. Un processo separato legge gli eventi dalla coda ed esegue la funzione.

 Per richiamare una funzione Lambda in modo asincrono utilizzando la AWS Command Line Interface (AWS CLI) o uno degli SDK AWS, imposta il parametro [InvocationType](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html#lambda-Invoke-request-InvocationType) su `Event`. L'esempio di codice seguente mostra un comando AWS CLI per invocare una funzione.

```
aws lambda invoke \
  --function-name my-function  \
  --invocation-type Event \
  --cli-binary-format raw-in-base64-out \
  --payload '{ "key": "value" }' response.json
```

Verrà visualizzato l'output seguente:

```
{
    "StatusCode": 202
}
```

L'opzione **cli-binary-format** è necessaria se si utilizza la versione 2 della AWS CLI. Per rendere questa impostazione come predefinita, esegui `aws configure set cli-binary-format raw-in-base64-out`. Per ulteriori informazioni, consulta la pagina [AWS CLI supported global command line options](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html#cli-configure-options-list) nella *Guida per l'utente di AWS Command Line Interface versione 2*.

Il file di output (`response.json`) non contiene informazioni, ma è comunque creato quando si esegue il comando. Se Lambda non è in grado di aggiungere l'evento alla coda, il messaggio di errore viene visualizzato nell'output del comando.

# In che modo Lambda gestisce gli errori e i nuovi tentativi con una invocazione asincrona
<a name="invocation-async-error-handling"></a>

Lambda gestisce la coda di eventi asincroni della funzione ed effettua nuovi tentativi in caso di errori. Se la funzione restituisce un errore, per impostazione predefinita Lambda prova a eseguirla altre due volte, con un minuto di attesa tra i primi due tentativi e due minuti tra il secondo e il terzo. Gli errori di funzione includono gli errori restituiti dal codice della funzione e gli errori restituiti dal runtime della funzione, ad esempio timeout.

Se la funzione non dispone di sufficiente concorrenza per elaborare tutti gli eventi, ulteriori richieste saranno sottoposte a throttling. Per gli errori di limitazione (429) e gli errori di sistema (serie 500), Lambda restituisce l'evento alla coda e prova a eseguire nuovamente la funzione per un massimo di 6 ore. L'intervallo tra i tentativi aumenta esponenzialmente da 1 secondo dopo il primo tentativo a un massimo di 5 minuti. Se la coda contiene molte voci, Lambda aumenta l'intervallo dei tentativi e riduce la velocità con cui legge gli eventi dalla coda.

Anche se la funzione non restituisce un errore, è possibile che riceva lo stesso evento da Lambda più volte perché la coda stessa alla fine è coerente. Se la funzione non è in grado di seguire gli eventi in entrata, gli eventi possono anche essere eliminati dalla coda senza essere inviati alla funzione. Verificare che il codice della funzione gestisca normalmente gli eventi duplicati e che si disponga di sufficiente concorrenza per gestire tutte le invocazioni.

Quando la coda è molto lunga, i nuovi eventi potrebbero diventare datati prima che Lambda abbia la possibilità di inviarli alla funzione. Quando un evento scade o fallisce tutti i tentativi di elaborazione, Lambda lo scarta. È possibile [configurare la gestione degli errori](invocation-async-configuring.md) per una funzione per ridurre il numero di tentativi eseguiti da Lambda o per eliminare più rapidamente gli eventi non elaborati. Configurare una coda DLQ per conservare gli eventi scartati. Per registrare le registrazioni delle chiamate non riuscite (ad esempio timeout o errori di runtime), [create](invocation-async-retain-records.md#invocation-async-destinations) una destinazione in caso di errore. 

# Configurazione delle impostazioni di gestione degli errori per le invocazioni asincrone Lambda
<a name="invocation-async-configuring"></a>

Usa le seguenti impostazioni per configurare il modo in cui Lambda gestisce gli errori e i nuovi tentativi per le invocazioni di funzioni asincrone:
+ [MaximumEventageInSeconds](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html#lambda-PutFunctionEventInvokeConfig-request-MaximumEventAgeInSeconds): il tempo massimo in secondi per cui Lambda conserva un evento nella coda degli eventi asincroni prima di eliminarlo.
+ [MaximumRetryAttempts](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html#lambda-PutFunctionEventInvokeConfig-request-MaximumRetryAttempts): il numero massimo di tentativi che Lambda effettua quando la funzione restituisce un errore.

Utilizza la console Lambda o AWS CLI per configurare le impostazioni di gestione degli errori per una funzione, una versione o un alias.

------
#### [ Console ]

**Per configurare la gestione degli errori**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegliere una funzione.

1. Scegliere **Configuration (Configurazione)**, quindi scegli **Asynchronous invocation (Chiamata asincrona)**.

1. In **Asynchronous invocation (Chiamata asincrona)**, scegliere **Edit (Modifica)**.

1. Configura le impostazioni seguenti.
   + **Maximum age of event (Età massima dell'evento)**: il tempo massimo per cui Lambda conserva un evento nella coda degli eventi asincroni, fino a 6 ore.
   + **Retry attempts (Nuovi tentativi):** il numero di tentativi che Lambda effettua quando la funzione restituisce un errore, tra 0 e 2.

1. Selezionare **Salva**.

------
#### [ AWS CLI ]

Per configurare l'invocazione asincrona con la AWS CLI, utilizza il comando [put-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/put-function-event-invoke-config.html). Nell'esempio seguente viene configurata una funzione con una durata massima dell'evento di 1 ora e senza ulteriori tentativi.

```
aws lambda put-function-event-invoke-config \ 
  --function-name error \
  --maximum-event-age-in-seconds 3600 \
  --maximum-retry-attempts 0
```

Il comando `put-function-event-invoke-config` sovrascrive qualsiasi configurazione esistente sulla funzione, versione o alias. Per configurare un'opzione senza reimpostarne altre, utilizza [update-function-event-invoke-config](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-event-invoke-config.html). Nell'esempio seguente Lambda viene configurato per inviare un record a una coda SQS standard denominata `destination` quando non è possibile elaborare un evento.

```
aws lambda update-function-event-invoke-config \
  --function-name my-function \
  --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'
```

------

Verrà visualizzato l'output seguente:

```
{
    "LastModified": 1573686021.479,
    "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST",
    "MaximumRetryAttempts": 0,
    "MaximumEventAgeInSeconds": 3600,
    "DestinationConfig": {
        "OnSuccess": {},
        "OnFailure": {}
    }
}
```

Quando un evento di invocazione supera l'età massima o fallisce tutti i nuovi tentativi, Lambda lo scarta. Per conservare una copia degli eventi eliminati, configurare una [destinazione](invocation-async-retain-records.md#invocation-async-destinations) dell'evento non riuscito.

# Acquisizione dei record delle invocazioni asincrone Lambda
<a name="invocation-async-retain-records"></a>

Lambda può inviare record di chiamate asincrone a uno dei seguenti. Servizi AWS
+ **Amazon SQS**: una coda SQS standard
+ **Amazon SNS**: un argomento SNS standard
+ **Amazon S3**: un bucket Amazon S3 (solo in caso di errore)
+ **AWS Lambda**: una funzione Lambda
+ **Amazon EventBridge**: un bus per EventBridge eventi

Il record di invocazione contiene dettagli sulla richiesta e la risposta in formato JSON. È possibile configurare destinazioni separate per gli eventi che vengono elaborati correttamente e per quelli che restituiscono un errore a ogni tentativo di elaborazione. In alternativa, è possibile configurare una coda standard di Amazon SQS o un argomento standard di Amazon SNS come coda DLQ per gli eventi scartati. Per le code DLQ, Lambda invia solo il contenuto dell'evento, senza dettagli sulla risposta.

Se Lambda non è in grado di inviare un record a una destinazione che hai configurato, invia una `DestinationDeliveryFailures` metrica ad Amazon. CloudWatch Ciò può verificarsi se la configurazione include un tipo di destinazione non supportato, ad esempio una coda FIFO di Amazon SQS o un argomento FIFO di Amazon SNS. Gli errori di recapito possono verificarsi anche a causa di errori di autorizzazioni e limiti di dimensione. Per ulteriori informazioni sui parametri di invocazione Lambda, consulta [Parametri di invocazione](monitoring-metrics-types.md#invocation-metrics).

**Nota**  
Per impedire l'attivazione di una funzione, è possibile impostare la simultaneità riservata della funzione su zero. Quando si imposta la simultaneità riservata su zero per una funzione chiamata in modo asincrono, Lambda inizia a inviare i nuovi eventi alla [coda DLQ](#invocation-dlq) configurata o alla [destinazione degli eventi](#invocation-async-destinations) in caso di errore, senza nuovi tentativi. Per elaborare gli eventi inviati mentre la simultaneità riservata era impostata su zero, è necessario utilizzare gli eventi dalla coda DLQ o dalla destinazione degli eventi in caso di errore.

## Aggiunta di una destinazione
<a name="invocation-async-destinations"></a>

Per mantenere i record delle chiamate asincrone, aggiungi una destinazione alla funzione. È possibile scegliere di inviare a una destinazione le chiamate riuscite o non riuscite. Ogni funzione può avere più destinazioni, quindi è possibile configurare destinazioni separate per eventi riusciti e non riusciti. Ogni record inviato alla destinazione è un documento JSON con i dettagli relativi alla chiamata. Come per le impostazioni di gestione degli errori, è possibile impostare le destinazioni su una funzione, una versione della funzione o un alias.

**Suggerimento**  
Puoi anche conservare i record delle chiamate non riuscite per i seguenti tipi di mappatura delle sorgenti degli eventi: Amazon Kinesis[, Amazon](kinesis-on-failure-destination.md#kinesis-on-failure-destination-console) [DynamoDB e Apache Kafka (Amazon](services-dynamodb-errors.md) MSK [e Apache Kafka](kafka-on-failure.md#kafka-onfailure-destination) autogestito).<a name="destinations-permissions"></a>

La tabella seguente elenca le destinazioni supportate per i record di chiamata asincrona. Affinché Lambda invii correttamente i record alla destinazione prescelta, assicurati che il [ruolo di esecuzione](lambda-intro-execution-role.md) della funzione disponga anche delle autorizzazioni pertinenti. La tabella descrive anche il modo in cui ogni tipo di destinazione riceve il record di chiamata JSON.


| Tipo di destinazione | Autorizzazione richiesta | Formato JSON specifico della destinazione | 
| --- | --- | --- | 
|  Coda Amazon SQS  |  [come: SendMessage](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)  |  Lambda passa il record di chiamata come `Message` alla destinazione.  | 
|  Argomento Amazon SNS  |  [sns:Publish](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html)  |  Lambda passa il record di chiamata come `Message` alla destinazione.  | 
|  Bucket Amazon S3 (solo in caso di errore)  |  [s3: PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) [s3: ListBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/invocation-async-retain-records.html)  | 
|  funzione Lambda  |  [lambda: InvokeFunction](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)  |  Lambda passa il record di chiamata come payload alla funzione.  | 
|  EventBridge  |  [eventi: PutEvents](https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_PutEvents.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/invocation-async-retain-records.html)  | 

**Nota**  
[Per le destinazioni Amazon S3, se hai abilitato la crittografia sul bucket utilizzando una chiave KMS, la tua funzione necessita anche dell'autorizzazione kms:. GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)

**Importante**  
Quando usi Amazon SNS come destinazione, tieni presente che Amazon SNS ha un limite massimo di dimensione dei messaggi di 256 KB. Se il payload di chiamata asincrona si avvicina a 1 MB, il record di chiamata (che include il payload originale più metadati aggiuntivi) potrebbe superare il limite di Amazon SNS e causare errori di consegna. Prendi in considerazione l'utilizzo di destinazioni Amazon SQS o Amazon S3 per payload più grandi.

La procedura seguente descrive come configurare una destinazione per una funzione che utilizza la console Lambda e la AWS CLI.

------
#### [ Console ]

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegliere una funzione.

1. In **Function overview (Panoramica delle funzioni)**, scegliere **Add destination (Aggiungi destinazione)**.

1. Per **Source (Origine)**, scegliere **Asynchronous invocation (Chiamata asincrona)**.

1. Per **Condition (Condizione)** scegliere tra le seguenti opzioni:
   + **In caso di errore**: viene inviato un record quando l'evento fallisce tutti i tentativi di elaborazione o supera l'età massima.
   + **On success (In caso di esito positivo):** viene inviato un record quando la funzione elabora correttamente un'invocazione asincrona.

1. Per **Destination type (Tipo di destinazione)**, scegliere il tipo di risorsa che riceve il record di invocazione.

1. Per **Destination (Destinazione)**, scegliere una risorsa.

1. Scegli **Save** (Salva).

------
#### [ AWS CLI ]

[Per configurare una destinazione utilizzando AWS CLI, esegui il comando -config. update-function-event-invoke](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-event-invoke-config.html) Nell'esempio seguente Lambda viene configurato per inviare un record a una coda SQS standard denominata `destination` quando non è possibile elaborare un evento.

```
aws lambda update-function-event-invoke-config \
  --function-name my-function \
  --destination-config '{"OnFailure":{"Destination": "arn:aws:sqs:us-east-1:123456789012:destination"}}'
```

------

### Best practice di sicurezza per destinazioni Amazon S3
<a name="s3-destination-security"></a>

L'eliminazione di un bucket S3 configurato come destinazione senza rimuovere la destinazione dalla configurazione della funzione può creare un rischio per la sicurezza. Se un altro utente conosce il nome del bucket di destinazione, può ricreare il bucket nel proprio Account AWS. I record delle invocazioni non riuscite verranno inviati al relativo bucket, esponendo potenzialmente i dati della tua funzione.

**avvertimento**  
Per assicurarti che i record di invocazione della tua funzione non possano essere inviati a un bucket S3 in un altro Account AWS, aggiungi una condizione al ruolo di esecuzione della funzione che limiti le `s3:PutObject` autorizzazioni ai bucket del tuo account. 

Di seguito viene illustrato un esempio di policy IAM che limita le autorizzazioni `s3:PutObject` della funzione ai bucket presenti nell'account. Questa policy fornisce inoltre a Lambda l'autorizzazione `s3:ListBucket` necessaria per utilizzare un bucket S3 come destinazione.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "S3BucketResourceAccountWrite",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::*/*",
                "arn:aws:s3:::*"
            ],
            "Condition": {
                "StringEquals": {
                    "s3:ResourceAccount": "111122223333"
                }
            }
        }
    ]
}
```

Per aggiungere una politica di autorizzazioni al ruolo di esecuzione della tua funzione utilizzando Console di gestione AWS o AWS CLI, consulta le istruzioni nelle seguenti procedure:

------
#### [ Console ]

**Per aggiungere una policy di autorizzazioni al ruolo di esecuzione di una funzione (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Seleziona la funzione Lambda di cui si desidera modificare il ruolo di esecuzione.

1. Nella scheda **Configurazione** scegli **Autorizzazioni**.

1. Nella scheda **Ruolo di esecuzione**, seleziona il **nome del ruolo** della funzione per aprire la pagina della console IAM del ruolo.

1. Aggiungi una policy di autorizzazioni di base al ruolo completando le seguenti operazioni:

   1. Nel riquadro **Policy di autorizzazioni**, scegli **Aggiungi autorizzazioni**, poi **Crea policy in linea**.

   1. Nell'**editor delle policy**, seleziona **JSON**.

   1. Incolla la policy che desideri aggiungere nell'editor (sostituendo il codice JSON esistente), quindi scegli **Avanti**.

   1. In **Dettagli della policy**, specifica un **nome per la policy**.

   1. Scegli **Crea policy**.

------
#### [ AWS CLI ]

**Per aggiungere una policy di autorizzazioni al ruolo di esecuzione di una funzione (CLI)**

1. Crea un documento di policy JSON con le autorizzazioni richieste e salvalo in una directory locale.

1. Utilizza il comando della CLI `put-role-policy` di IAM per aggiungere le autorizzazioni per il ruolo di esecuzione di una funzione. Esegui il comando seguente dalla directory in cui hai salvato il documento di policy JSON e sostituisci il nome del ruolo, il nome della policy e il documento di policy con i tuoi valori.

   ```
   aws iam put-role-policy \
   --role-name my_lambda_role \
   --policy-name LambdaS3DestinationPolicy \
   --policy-document file://my_policy.json
   ```

------

### Record di invocazione di esempio
<a name="destination-example-record"></a>

Quando un'invocazione corrisponde alla condizione, Lambda invia un [documento JSON](#destinations-permissions) con i dettagli sull'invocazione alla destinazione. L'esempio seguente mostra un record di invocazione per un evento che non è stato possibile elaborare per tre volte a causa di un errore di funzione.

**Example**  

```
{
    "version": "1.0",
    "timestamp": "2019-11-14T18:16:05.568Z",
    "requestContext": {
        "requestId": "e4b46cbf-b738-xmpl-8880-a18cdf61200e",
        "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function:$LATEST",
        "condition": "RetriesExhausted",
        "approximateInvokeCount": 3
    },
    "requestPayload": {
        "ORDER_IDS": [
            "9e07af03-ce31-4ff3-xmpl-36dce652cb4f",
            "637de236-e7b2-464e-xmpl-baf57f86bb53",
            "a81ddca6-2c35-45c7-xmpl-c3a03a31ed15"
        ]
    },
    "responseContext": {
        "statusCode": 200,
        "executedVersion": "$LATEST",
        "functionError": "Unhandled"
    },
    "responsePayload": {
        "errorMessage": "RequestId: e4b46cbf-b738-xmpl-8880-a18cdf61200e Process exited before completing request"
    }
}
```

Il record di invocazione contiene dettagli sull'evento, la risposta e il motivo per cui il record è stato inviato.

### Tracciamento delle richieste verso le destinazioni
<a name="destinations-tracing"></a>

È possibile utilizzare AWS X-Ray per visualizzare una vista connessa di ogni richiesta mentre viene messa in coda, elaborata da una funzione Lambda e inviata al servizio di destinazione. Quando si attiva il tracciamento X-Ray per una funzione o un servizio che richiama una funzione, Lambda aggiunge un'intestazione X-Ray alla richiesta e passa l'intestazione al servizio di destinazione. Le tracce dei servizi upstream vengono collegate automaticamente alle tracce delle funzioni Lambda a valle e dei servizi di destinazione, creando una end-to-end visualizzazione dell'intera applicazione. Per ulteriori informazioni sul tracciamento, consulta [Visualizza le chiamate alla funzione Lambda utilizzando AWS X-Ray](services-xray.md).

## Aggiunta di una coda DLQ
<a name="invocation-dlq"></a>

In alternativa a una [destinazione in caso di errore](#invocation-async-destinations), è possibile configurare la funzione con una coda DLQ per salvare gli eventi eliminati per ulteriori elaborazioni. Una coda DLQ agisce allo stesso modo di una destinazione in caso di errore in quanto viene utilizzata quando un evento non riesce a tutti i tentativi di elaborazione o scade senza essere elaborato. Tuttavia, è possibile aggiungere o rimuovere una coda DLQ solo a livello di funzione. Le versioni della funzione utilizzano le stesse impostazioni della coda DLQ della versione non pubblicata (\$1LATEST). Le destinazioni in caso di errore supportano anche destinazioni aggiuntive e includono dettagli sulla risposta della funzione nel record di invocazione.

Per rielaborare gli eventi in una coda DLQ, è possibile impostarla come [origine eventi](invocation-eventsourcemapping.md) per la funzione Lambda. In alternativa, è possibile recuperare gli eventi manualmente.

È possibile scegliere una coda standard di Amazon SQS o un argomento standard di Amazon SNS per la coda DLQ. Le code FIFO e gli argomenti FIFO di Amazon SNS non sono supportati.
+ [Coda Amazon SQS](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-create-queue.html): una coda conserva gli eventi non riusciti finché non vengono richiamati. Scegli una coda standard Amazon SQS se prevedi che una singola entità, come una funzione Lambda o un CloudWatch allarme, elabori l'evento non riuscito. Per ulteriori informazioni, consulta [Utilizzo di Lambda con Amazon SQS](with-sqs.md).
+ [Argomento Amazon SNS](https://docs.aws.amazon.com/sns/latest/gsg/CreateTopic.html) – Un argomento invia gli eventi non riusciti a una o più destinazioni. Scegli un argomento standard di Amazon SNS se ti aspetti che più entità agiscano su un evento non riuscito. Ad esempio, puoi configurare un argomento per inviare eventi a un indirizzo e-mail, una funzione Lambda, and/or un endpoint HTTP. Per ulteriori informazioni, consulta [Richiamo di funzioni Lambda mediante notifiche Amazon SNS](with-sns.md).

Per inviare gli eventi a una coda o argomento, la funzione necessita di autorizzazioni aggiuntive. Aggiungi una policy con le [autorizzazioni necessarie](#destinations-permissions) per il [ruolo di esecuzione](lambda-intro-execution-role.md) di una funzione. Se la coda o l'argomento di destinazione è crittografato con una AWS KMS chiave gestita dal cliente, assicurati che sia il ruolo di esecuzione della funzione che la politica [basata sulle risorse](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html) della chiave contengano le autorizzazioni pertinenti.

Dopo aver creato il target e l'aggiornamento del ruolo di esecuzione della funzione, aggiungere la coda DLQ alla funzione. È possibile configurare più funzioni per l'invio di eventi allo stesso oggetto.

------
#### [ Console ]

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegliere una funzione.

1. Scegliere **Configuration (Configurazione)**, quindi scegli **Asynchronous invocation (Chiamata asincrona)**.

1. In **Asynchronous invocation (Chiamata asincrona)**, scegliere **Edit (Modifica)**.

1. Imposta il **servizio coda DLQ** su **Amazon SQS** o **Amazon SNS**.

1. Scegliere l'argomento o la coda target.

1. Scegli **Save** (Salva).

------
#### [ AWS CLI ]

Per configurare una coda di lettere morte con, usa il comando. AWS CLI[update-function-configuration](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-function-configuration.html)

```
aws lambda update-function-configuration \
  --function-name my-function \
  --dead-letter-config TargetArn=arn:aws:sns:us-east-1:123456789012:my-topic
```

------

Lambda invia l'evento alla coda DLQ così com'è, con ulteriori informazioni negli attributi. Queste informazioni possono essere utilizzate per identificare l'errore restituito dalla funzione o correlare l'evento ai log o a una traccia AWS X-Ray .

**Attributi dei messaggi della coda DLQ**
+ **RequestID** (String) – L'ID della richiesta di invocazione. La richiesta IDs viene visualizzata nei registri delle funzioni. È inoltre possibile utilizzare l'SDK X-Ray per registrare l'ID di richiesta su un attributo nella traccia. Si possono quindi cercare le tracce in base all'ID richiesta nella console X-Ray.
+ **ErrorCode**(Numero): il codice di stato HTTP.
+ **ErrorMessage**(String) — Il primo 1 KB del messaggio di errore.

Se Lambda non riesce a inviare un messaggio alla coda delle lettere non scritte, elimina l'evento ed emette la metrica. [DeadLetterErrors](monitoring-metrics-types.md) Questo può accadere a causa di mancanza di autorizzazioni oppure se le dimensioni totali del messaggio superano il limite per la coda o l'argomento target. Ad esempio, supponiamo che una notifica Amazon SNS con un corpo di dimensioni prossime a 1 MB attivi una funzione che genera un errore. In tal caso, i dati relativi a eventi aggiunti da Amazon SNS, combinati con gli attributi aggiunti da Lambda, possono far sì che il messaggio superi le dimensioni massime consentite nella coda DLQ.

Se si utilizza Amazon SQS come origine eventi, configurare una coda DLQ sulla coda Amazon SQS stessa e non sulla funzione Lambda. Per ulteriori informazioni, consulta [Utilizzo di Lambda con Amazon SQS](with-sqs.md).

# Richiamo di funzioni Lambda durevoli
<a name="durable-invocation"></a>

Le funzioni Lambda durevoli possono essere richiamate utilizzando gli stessi metodi delle funzioni Lambda predefinite, ma con importanti considerazioni per le esecuzioni di lunga durata. Questa sezione descrive i modelli di invocazione, la gestione dell'esecuzione e le migliori pratiche per funzioni durevoli.

## Limiti di invocazione sincrona
<a name="synchronous-invocation-limits"></a>

Le chiamate sincrone di funzioni Lambda durevoli sono limitate a 15 minuti, come le funzioni Lambda predefinite. Se la funzione duratura deve essere eseguita per più di 15 minuti, deve essere richiamata in modo asincrono.

**Quando utilizzare la chiamata sincrona:** utilizzala per funzioni durevoli che vengono completate entro 15 minuti e quando sono necessari risultati immediati, come flussi di lavoro di approvazione rapidi o brevi attività di elaborazione dei dati.

## Richiamata asincrona per flussi di lavoro di lunga durata
<a name="asynchronous-invocation"></a>

Per funzioni durevoli che possono durare più di 15 minuti, utilizzate la chiamata asincrona. Ciò consente alla funzione di continuare a funzionare mentre il client riceve un riconoscimento immediato.

------
#### [ TypeScript ]

```
import { LambdaClient, InvokeCommand } from "@aws-sdk/client-lambda";

const client = new LambdaClient({});

// Asynchronous invocation
const command = new InvokeCommand({
  FunctionName: "my-durable-function",
  InvocationType: "Event", // Asynchronous
  Payload: JSON.stringify({ orderId: "12345" })
});

await client.send(command);
```

------
#### [ Python ]

```
import boto3
import json

client = boto3.client('lambda')

# Asynchronous invocation
response = client.invoke(
    FunctionName='my-durable-function',
    InvocationType='Event',  # Asynchronous
    Payload=json.dumps({'order_id': '12345'})
)
```

------

## Gestione dell'esecuzione APIs
<a name="execution-management-apis"></a>

Lambda consente APIs di gestire e monitorare le esecuzioni di funzioni durevoli, tra cui elencare le esecuzioni, ottenere lo stato dell'esecuzione e interrompere le esecuzioni in esecuzione.

------
#### [ TypeScript ]

```
// Get execution status
const statusCommand = new InvokeCommand({
  FunctionName: "my-durable-function",
  InvocationType: "RequestResponse",
  Payload: JSON.stringify({ 
    action: "getStatus", 
    executionId: "exec-123" 
  })
});

const result = await client.send(statusCommand);
```

------
#### [ Python ]

```
# Get execution status
response = client.invoke(
    FunctionName='my-durable-function',
    InvocationType='RequestResponse',
    Payload=json.dumps({
        'action': 'get_status',
        'execution_id': 'exec-123'
    })
)
```

------

# In che modo Lambda elabora i record provenienti da origini eventi basate su flussi e code
<a name="invocation-eventsourcemapping"></a>

Uno *strumento di mappatura dell'origine degli eventi* è una risorsa Lambda che legge gli elementi da servizi basati su flussi o code e richiama una funzione con batch di record. All'interno di uno strumento di mappatura dell'origine degli eventi, risorse chiamate *poller di eventi* cercano attivamente nuovi messaggi e richiamano funzioni. Per impostazione predefinita, Lambda scala automaticamente i poller di eventi, ma per determinati tipi di origini eventi, puoi utilizzare la [modalità provisioning](#invocation-eventsourcemapping-provisioned-mode) per controllare il numero minimo e massimo di poller di eventi dedicati allo strumento di mappatura dell'origine degli eventi.

I seguenti servizi utilizzano gli strumenti di mappatura dell'origine degli eventi per richiamare le funzioni Lambda:
+ [Amazon DocumentDB (compatibile con MongoDB) (Amazon DocumentDB)](with-documentdb.md)
+ [Amazon DynamoDB](with-ddb.md)
+ [Amazon Kinesis](with-kinesis.md)
+ [Amazon MQ](with-mq.md)
+ [Amazon Managed Streaming for Apache Kafka (Amazon MSK)](with-msk.md)
+ [Apache Kafka gestito dal cliente](with-kafka.md)
+ [Amazon Simple Queue Service (Amazon SQS)](with-sqs.md)

**avvertimento**  
Gli strumenti di mappatura dell'origine degli eventi elaborano ogni evento almeno una volta e può verificarsi un'elaborazione duplicata dei record. Per evitare potenziali problemi legati agli eventi duplicati, ti consigliamo vivamente di rendere idempotente il codice della funzione. Per ulteriori informazioni, consulta [Come posso rendere idempotente la mia funzione Lambda](https://repost.aws/knowledge-center/lambda-function-idempotent) nel Knowledge Center. AWS 

## In che modo gli strumenti di mappatura dell'origine degli eventi differiscono dai trigger diretti
<a name="eventsourcemapping-trigger-difference"></a>

*Alcuni Servizi AWS possono richiamare direttamente le funzioni Lambda utilizzando i trigger.* Questi servizi inviano eventi a Lambda e la funzione viene richiamata immediatamente quando si verifica l'evento specificato. I trigger sono adatti per eventi discreti ed elaborazione in tempo reale. Quando [crei un trigger utilizzando la console Lambda, la console](lambda-services.md#lambda-invocation-trigger) interagisce con il AWS servizio corrispondente per configurare la notifica degli eventi su quel servizio. Il trigger viene effettivamente archiviato e gestito dal servizio che genera gli eventi, non da Lambda. Ecco alcuni esempi di servizi che utilizzano i trigger per richiamare le funzioni Lambda:
+ **Amazon Simple Storage Service (Amazon S3):** richiama una funzione quando un oggetto viene creato, eliminato o modificato in un bucket. Per ulteriori informazioni, consulta [Tutorial: uso di un trigger Amazon S3 per richiamare una funzione Lambda](with-s3-example.md).
+ **Amazon Simple Notification Service (Amazon SNS)**: richiama una funzione quando un messaggio è pubblicato in un argomento SNS. Per ulteriori informazioni, consulta [Tutorial: Utilizzo AWS Lambda con Amazon Simple Notification Service](with-sns-example.md).
+ **Gateway Amazon API:** richiama una funzione quando viene effettuata una richiesta API a un endpoint specifico. Per ulteriori informazioni, consulta [Richiamo di funzione Lambda utilizzando un endpoint Gateway Amazon API](services-apigateway.md).

Gli strumenti di mappatura dell'origine degli eventi sono risorse Lambda create e gestite all'interno del servizio Lambda. Gli strumenti di mappatura dell'origine degli eventi sono progettate per l'elaborazione di dati o messaggi in streaming ad alto volume dalle code. L'elaborazione dei record da un flusso o da una coda in batch è più efficiente rispetto all'elaborazione dei record singolarmente. 

## Comportamento di batching
<a name="invocation-eventsourcemapping-batching"></a>

Per impostazione predefinita, una mappatura delle origini eventi raggruppa i registri in un unico payload che Lambda invia alla funzione. Per ottimizzare il comportamento del batch, è possibile configurare una finestra di batch ([MaximumBatchingWindowInSeconds](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-MaximumBatchingWindowInSeconds)) e una dimensione del batch ([BatchSize](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-response-BatchSize)). Una finestra di batch è il tempo massimo per la raccolta dei registri in un singolo payload. La dimensione del batch è il numero massimo di registri in un singolo batch. Lambda richiama la funzione in presenza dei tre criteri seguenti:
+ **La finestra di dosaggio raggiunge il valore massimo.** Il comportamento predefinito della finestra di batch varia in base alla specifica origine eventi.
  + **Per le origini eventi Kinesis, DynamoDB e Amazon SQS:** la finestra di batch di default è 0 secondi. Ciò significa che Lambda richiama la funzione non appena i record sono disponibili. Per impostare una finestra di batch, configura `MaximumBatchingWindowInSeconds`. È possibile impostare questo parametro su qualsiasi valore da compreso tra 0 e 300 secondi con incrementi di 1 secondo. Se si configura una la finestra di batch, la finestra successiva inizia non appena viene completato il precedente richiamo della funzione.
  + **Per le origini degli eventi di Amazon MSK, Apache Kafka autogestito, Amazon MQ e Amazon DocumentDB** la finestra di batch predefinita è 500 ms. È possibile configurare `MaximumBatchingWindowInSeconds` su qualsiasi valore da 0 secondi a 300 secondi con incrementi di secondi. Nella modalità preimpostata per le mappature delle sorgenti degli eventi Kafka, quando si configura una finestra di batch, la finestra successiva inizia non appena viene completato il batch precedente. Nelle mappature delle sorgenti di eventi Kafka senza provisioning, quando si configura una finestra di batch, la finestra successiva inizia non appena viene completata la precedente invocazione della funzione. Per ridurre al minimo la latenza quando si utilizzano le mappature delle sorgenti degli eventi Kafka in modalità provisioning, impostate su 0. `MaximumBatchingWindowInSeconds` Questa impostazione assicura che Lambda inizi l'elaborazione del batch successivo immediatamente dopo aver completato la chiamata della funzione corrente. Per ulteriori informazioni sull'elaborazione a bassa latenza, consulta. [Apache Kafka a bassa latenza](with-kafka-low-latency.md)
  + **Per le sorgenti di eventi Amazon MQ e Amazon DocumentDB:** la finestra di batch predefinita è di 500 ms. È possibile configurare `MaximumBatchingWindowInSeconds` su qualsiasi valore da 0 secondi a 300 secondi con incrementi di secondi. Una finestra di batch inizia non appena arriva il primo registro.
**Nota**  
Perché è possibile modificare `MaximumBatchingWindowInSeconds` solo in incrementi di secondi, non puoi tornare alla finestra di batch predefinita di 500 ms dopo averla modificata. Per ripristinare la finestra di batch predefinita, è necessario creare una nuova mappatura dell'origine eventi.
+ **Le dimensioni del batch sono soddisfatte.** La dimensione minima del batch è 1. La dimensione predefinita e massima del batch dipendono dall'origine eventi. Per ulteriori informazioni su questi valori, consulta le specifiche di [BatchSize](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html#lambda-CreateEventSourceMapping-request-BatchSize) per l'operazione API `CreateEventSourceMapping`.
+ **La dimensione del payload raggiunge [6 MB](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html).** Tale limite non è modificabile.

Il diagramma seguente illustra queste tre configurazioni. Supponiamo che una finestra di batch inizi a `t = 7` secondi. Nel primo scenario, la finestra di batch raggiunge il suo massimo di 40 secondi a `t = 47` secondi dopo aver accumulato 5 registri. Nel secondo scenario, la dimensione del batch raggiunge 10 prima della scadenza della finestra di batch, quindi la finestra di batch termina in anticipo. Nel secondo scenario, il valore massimo del payload viene raggiunta prima della scadenza della finestra di batch, quindi la finestra di batch termina in anticipo.

![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/batching-window.png)


Consigliamo di eseguire il test con dimensioni di batch e record diverse in modo che la frequenza di polling di ogni origine eventi sia regolata in base alla velocità con cui la funzione è in grado di completare l'attività. Il [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)`BatchSize`parametro controlla il numero massimo di record che possono essere inviati alla funzione con ogni chiamata. Una dimensione di batch maggiore può spesso assorbire in modo più efficiente il costo associato all'invocazione in un set di record più grande, aumentando in tal modo il throughput.

Lambda non attende il completamento di alcuna [estensione](lambda-extensions.md) prima di inviare il batch successivo per l'elaborazione. In altre parole, le estensioni possono continuare a funzionare mentre Lambda elabora il successivo batch di record. Ciò può causare problemi di limitazione in caso di violazione delle impostazioni o dei limiti di [simultaneità](lambda-concurrency.md). Per rilevare se si tratta di un potenziale problema, monitora le tue funzioni e verifica se i [parametri di simultaneità](monitoring-concurrency.md#general-concurrency-metrics) per lo strumento di mappatura dell'origine degli eventi sono superiori al previsto. A causa degli intervalli ridotti tra le invocazioni, Lambda potrebbe segnalare brevemente un utilizzo della simultaneità maggiore rispetto al numero di partizioni. Ciò può essere vero anche per le funzioni Lambda senza estensioni.

Per impostazione predefinita, se la funzione restituisce un errore, l'intera mappatura del batch viene rielaborato fino a quando la funzione non restituisce esito positivo o gli elementi nel batch scadono. Per garantire l'ordine di elaborazione, l'elaborazione della mappatura delle fonti eventi per gli shard interessati viene messa in pausa finché l'errore non viene risolto. Per le origini di flusso (DynamoDB e Kinesis), è possibile configurare il numero massimo di tentativi che Lambda effettua quando la funzione restituisce un errore. Gli errori di servizio o le limitazioni per cui il batch non raggiunge la funzione non vengono conteggiati ai fini dei tentativi ripetuti. È inoltre possibile configurare lo strumento di mappatura dell'origine degli eventi per inviare un record di invocazione a una [destinazione](invocation-async-retain-records.md#invocation-async-destinations) quando elimina un batch di eventi.

## Modalità provisioning
<a name="invocation-eventsourcemapping-provisioned-mode"></a>

Gli strumenti di mappatura dell'origine degli eventi Lambda utilizzano i poller di eventi per interrogare l'origine eventi alla ricerca di nuovi messaggi. Per impostazione predefinita, Lambda gestisce la scalabilità automatica di questi poller in base al volume dei messaggi. Quando il traffico di messaggi aumenta, Lambda aumenta automaticamente il numero di poller di eventi per gestire il carico e li riduce quando il traffico diminuisce.

In modalità provisioned, puoi ottimizzare la velocità effettiva della mappatura delle sorgenti degli eventi definendo limiti minimi e massimi per le risorse di polling dedicate che rimangono pronte a gestire i modelli di traffico previsti. Queste risorse si scalano automaticamente 3 volte più velocemente per gestire picchi improvvisi nel traffico degli eventi e forniscono una capacità 16 volte superiore per elaborare milioni di eventi. Questo ti aiuta a creare carichi di lavoro basati sugli eventi altamente reattivi con requisiti prestazionali rigorosi.

In Lambda, un event poller è un'unità di calcolo con funzionalità di throughput che variano in base al tipo di origine dell'evento. Per Amazon MSK e Apache Kafka autogestito, ogni event poller può gestire fino al 5% MB/sec del throughput o fino a 5 chiamate simultanee. Ad esempio, se la fonte dell'evento produce un payload medio di 1 MB e la durata media della funzione è di 1 secondo, un singolo event poller di eventi Kafka può supportare 5 MB/sec velocità effettiva e 5 chiamate Lambda simultanee (presupponendo che non vi sia alcuna trasformazione del payload). Per Amazon SQS, ogni event poller può gestire fino all'1% MB/sec del throughput o fino a 10 chiamate simultanee. L'utilizzo della modalità provisioned comporta costi aggiuntivi in base all'utilizzo dell'event poller. Per i dettagli sui prezzi, vedere [Prezzi di AWS Lambda](https://aws.amazon.com/lambda/pricing/).

La modalità provisioned è disponibile per Amazon MSK, Apache Kafka autogestite e sorgenti di eventi Amazon SQS. Mentre le impostazioni di simultaneità consentono di controllare la scalabilità della funzione, la modalità provisioning consente di controllare il throughput dello strumento di mappatura dell'origine degli eventi. Per garantire le massime prestazioni, potrebbe essere necessario regolare entrambe le impostazioni in modo indipendente.

La modalità Provisioned è ideale per applicazioni in tempo reale che richiedono una latenza di elaborazione degli eventi costante, come le società di servizi finanziari che elaborano i feed di dati di mercato, le piattaforme di e-commerce che forniscono consigli personalizzati in tempo reale e le società di gioco che gestiscono le interazioni tra giocatori dal vivo.

Ogni event poller supporta una capacità di throughput diversa:
+ Per Amazon MSK e Apache Kafka autogestito: fino al 5% MB/sec della velocità effettiva o fino a 5 richiami simultanei
+ Per Amazon SQS: fino all'1% MB/sec del throughput o fino a 10 richiami simultanei o fino a 10 chiamate API di polling SQS al secondo.

Per le mappature delle sorgenti di eventi Amazon SQS, puoi impostare il numero minimo di poller tra 2 e 200 con un valore predefinito di 2 e il numero massimo tra 2 e 2.000 con un valore predefinito di 200. Lambda ridimensiona il numero di sondaggi di eventi tra il minimo e il massimo configurati, aggiungendo rapidamente fino a 1.000 simultanee al minuto per fornire un'elaborazione coerente e a bassa latenza degli eventi.

Per le mappature delle sorgenti degli eventi Kafka, puoi impostare il numero minimo di poller tra 1 e 200 con un valore predefinito di 1 e il numero massimo tra 1 e 2.000 con un valore predefinito di 200. Lambda ridimensiona il numero di sondaggi degli eventi tra il minimo e il massimo configurati in base al backlog degli eventi nell'argomento per fornire un'elaborazione a bassa latenza degli eventi.

Tieni presente che per le sorgenti di eventi Amazon SQS, l'impostazione di concorrenza massima non può essere utilizzata con la modalità provisioned. Quando si utilizza la modalità provisioned, è possibile controllare la concorrenza tramite l'impostazione del numero massimo di poller di eventi.

Per informazioni dettagliate sulla configurazione della modalità provisioning, consulta le sezioni seguenti:
+ [Configurazione della modalità provisioning per gli strumenti di mappatura dell'origine degli eventi Amazon MSK](kafka-scaling-modes.md)
+ [Configurazione della modalità provisioning per lo strumento di mappatura dell'origine degli eventi di Apache Kafka autogestito](kafka-scaling-modes.md#kafka-provisioned-mode)
+ [Utilizzo della modalità provisioning con le mappature delle sorgenti degli eventi di Amazon SQS](with-sqs.md#sqs-provisioned-mode)

Per ridurre al minimo la latenza in modalità provisioned, impostate su 0. `MaximumBatchingWindowInSeconds` Questa impostazione assicura che Lambda inizi l'elaborazione del batch successivo immediatamente dopo aver completato la chiamata della funzione corrente. Per ulteriori informazioni sull'elaborazione a bassa latenza, consulta. [Apache Kafka a bassa latenza](with-kafka-low-latency.md)

Dopo aver configurato la modalità provisioning, puoi osservare l'utilizzo dei poller di eventi per il tuo carico di lavoro monitorando il parametro `ProvisionedPollers`. Per ulteriori informazioni, consulta [Parametri dello strumento di mappatura dell'origine degli eventi](monitoring-metrics-types.md#event-source-mapping-metrics).

## API della mappatura dell'origine eventi
<a name="event-source-mapping-api"></a>

Per gestire un'origine eventi con la [AWS Command Line Interface (AWS CLI)](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) o un [SDK AWS](https://aws.amazon.com/getting-started/tools-sdks/), è possibile utilizzare le seguenti operazioni API:
+ [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)
+ [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html)
+ [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)
+ [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)
+ [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)

# Utilizzo di tag negli strumenti di mappatura dell'origine degli eventi
<a name="tags-esm"></a>

Puoi taggare gli strumenti di mappatura dell'origine degli eventi per organizzare e gestire le risorse. I tag sono coppie chiave-valore a forma libera associate alle risorse supportate su Servizi AWS. Per ulteriori informazioni sui casi d'uso dei tag, consulta [Strategie di tagging comuni nella Guida AWS](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#tag-strategies) *alle risorse di etichettatura e all'editor di tag*. 

Gli strumenti di mappatura dell'origine degli eventi sono associati a funzioni che possono avere i propri tag. Gli strumenti di mappatura dell'origine degli eventi non ereditano automaticamente i tag dalle funzioni. Puoi utilizzare l' AWS Lambda API per visualizzare e aggiornare i tag. Puoi anche visualizzare e aggiornare i tag mentre gestisci una mappatura specifica dell'origine degli eventi nella console Lambda, compresi quelli che utilizzano la modalità Provisioned per Amazon SQS.

## Autorizzazioni necessarie per lavorare con i tag
<a name="esm-tags-required-permissions"></a>

Per consentire a un'identità AWS Identity and Access Management (IAM) (utente, gruppo o ruolo) di leggere o impostare tag su una risorsa, concedile le autorizzazioni corrispondenti:
+ **lambda: ListTags** —Quando una risorsa contiene dei tag, concedi questa autorizzazione a chiunque debba richiamarla. `ListTags` Per le funzioni con tag, questa autorizzazione è necessaria anche per `GetFunction`.
+ **lambda: TagResource** —Concedi questa autorizzazione a chiunque abbia bisogno di chiamare `TagResource` o eseguire un tag durante la creazione.

Facoltativamente, valuta la possibilità di concedere anche l'UntagResourceautorizzazione **lambda:** per consentire `UntagResource` le chiamate alla risorsa.

Per ulteriori informazioni, consulta [Policy IAM basate sull'identità per Lambda](access-control-identity-based.md).

## Utilizzo di tag con la console Lambda
<a name="tags-esm-console"></a>

Puoi utilizzare la console Lambda per creare mappature delle sorgenti di eventi con tag, aggiungere tag alle mappature delle sorgenti di eventi esistenti e filtrare le mappature delle sorgenti degli eventi per tag, comprese quelle configurate in modalità Provisioned per Amazon SQS.

Quando aggiungi un trigger per i servizi basati su flussi e code supportati tramite la console Lambda, Lambda crea automaticamente uno strumento di mappatura dell'origine degli eventi. Per ulteriori informazioni su queste origini eventi, consulta [In che modo Lambda elabora i record provenienti da origini eventi basate su flussi e code](invocation-eventsourcemapping.md). Per creare uno strumento di mappatura dell'origine degli eventi nella console, sono necessari i prerequisiti seguenti:
+ Una funzione .
+ Un'origine eventi proveniente da un servizio interessato.

È possibile aggiungere i tag come parte della stessa interfaccia utente utilizzata per creare o aggiornare i trigger.

**Per aggiungere un tag durante la creazione di uno strumento di mappatura dell'origine degli eventi**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione .

1. In **Panoramica delle funzioni**, scegliere **Aggiungi trigger**.

1. In **Configurazione trigger**, nell'elenco a discesa, scegli il nome del servizio da cui proviene l'origine eventi.

1. Fornisci la configurazione di base per la tua origine eventi. Per ulteriori informazioni sulla configurazione dell'origine eventi, consulta la sezione per il servizio correlato in [Richiamare Lambda con eventi di altri servizi AWS](lambda-services.md).

1. In **Configurazione dello strumento di mappatura dell'origine degli eventi**, scegli **Impostazioni aggiuntive**.

1. In **Tag**, seleziona **Aggiungi nuovo tag**.

1. Nel campo **Chiave**, inserisci la chiave del tag. *Per informazioni sulle restrizioni relative ai tag, consulta [Limiti e requisiti di denominazione dei tag nella Guida alle risorse di etichettatura e all'editor di](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) tag. AWS *

1. Scegliere **Aggiungi**.

**Per aggiungere tag a uno strumento di mappatura dell'origine degli eventi esistente**

1. Apri [Strumenti di mappatura dell'origine degli eventi](https://console.aws.amazon.com/lambda/home#/event-source-mappings) nella console Lambda.

1. Dall'elenco delle risorse, scegli l'**UUID** per lo strumento di mappatura dell'origine degli eventi corrispondente alla **funzione** e all'**ARN dell'origine eventi**.

1. Dall'elenco delle schede sotto il **riquadro di configurazione generale**, scegli **Tag**.

1. Scegliere **Gestisci tag**.

1. Scegliere **Aggiungi nuovo tag**.

1. Nel campo **Chiave**, inserisci la chiave del tag. Per informazioni sulle restrizioni relative ai tag, consulta [Limiti e requisiti di denominazione dei tag nella Guida alle risorse di etichettatura e](https://docs.aws.amazon.com//tag-editor/latest/userguide/best-practices-and-strats.html#id_tags_naming_best_practices) all'editor di *tag AWS *.

1. Scegli **Save** (Salva).

**Per filtrare gli strumenti di mappatura dell'origine degli eventi per tag**

1. Apri [Strumenti di mappatura dell'origine degli eventi](https://console.aws.amazon.com/lambda/home#/event-source-mappings) nella console Lambda.

1. Scegli la barra di ricerca.

1. Dall'elenco a discesa, seleziona la chiave di tag sotto **Tag**.

1. Seleziona **Usa: "nome-tag"** per vedere tutti gli strumenti di mappatura dell'origine degli eventi etichettati con questa chiave, oppure scegli un **operatore** per filtrare ulteriormente in base al valore.

1. Seleziona il valore del tag da filtrare in base a una combinazione di chiave e valore del tag.

La barra di ricerca supporta anche la ricerca di chiavi di tag. Immetti il nome di una chiave per trovarla nell'elenco.

## Usare i tag con il AWS CLI
<a name="tags-esm-cli"></a>

Puoi aggiungere e rimuovere tag sulle risorse Lambda esistenti, inclusi gli strumenti di mappatura dell'origine degli eventi, con l'API Lambda. Puoi aggiungere i tag anche quando crei uno strumento di mappatura dell'origine degli eventi, che ti consente di mantenere etichettata una risorsa per tutto il suo ciclo di vita.

### Aggiornamento dei tag con il tag Lambda APIs
<a name="tags-esm-api-config"></a>

Puoi aggiungere e rimuovere tag per le risorse Lambda supportate tramite le operazioni [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)e [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html)API.

Puoi chiamare queste operazioni tramite la AWS CLI. Per aggiungere i tag a una risorsa esistente, utilizza il comando `tag-resource`. Questo esempio aggiunge due tag, uno con la chiave *Department* e uno con la chiave*CostCenter*.

```
aws lambda tag-resource \
--resource arn:aws:lambda:us-east-2:123456789012:resource-type:my-resource \
--tags Department=Marketing,CostCenter=1234ABCD
```

Pr rimuovere i tag, utilizza il comando `untag-resource`. Questo esempio rimuove il tag con la chiave*Department*.

```
aws lambda untag-resource --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier \
--tag-keys Department
```

### Aggiunta di tag durante la creazione di uno strumento di mappatura dell'origine degli eventi
<a name="tags-esm-on-create"></a>

Per creare una nuova mappatura delle sorgenti di eventi Lambda con tag, utilizza l'[CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html)operazione API. Specifica il parametro `Tags`. È possibile richiamare questa operazione con il `create-event-source-mapping` AWS CLI comando e l'`--tags`opzione. *Per ulteriori informazioni sul comando CLI, vedere [create-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/create-event-source-mapping.html)nel Command Reference AWS CLI .*

Prima di utilizzare il parametro `Tags` con `CreateEventSourceMapping`, assicurati che il tuo ruolo disponga dell'autorizzazione per etichettare le risorse oltre alle normali autorizzazioni necessarie per questa operazione. Per ulteriori informazioni sulle autorizzazioni per il tagging, consulta [Autorizzazioni necessarie per lavorare con i tag](#esm-tags-required-permissions).

### Visualizzazione dei tag con il tag Lambda APIs
<a name="tags-esm-api-view"></a>

Per visualizzare i tag applicati a una risorsa Lambda specifica, utilizza l'operazione API `ListTags`. Per ulteriori informazioni, consulta [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html).

Puoi richiamare questa operazione con il `list-tags` AWS CLI comando fornendo un ARN (Amazon Resource Name).

```
aws lambda list-tags --resource arn:aws:lambda:us-east-1:123456789012:resource-type:resource-identifier
```

### Filtro delle risorse per tag
<a name="tags-esm-filtering"></a>

Puoi utilizzare l'operazione AWS Resource Groups Tagging API [GetResources](https://docs.aws.amazon.com/resourcegroupstagging/latest/APIReference/API_GetResources.html)API per filtrare le tue risorse in base ai tag. L'operazione `GetResources` riceve fino a 10 filtri, ognuno dei quali contenente una chiave di tag e un massimo di 10 valori di tag. Fornisci `GetResources` con un `ResourceType` per filtrare in base a tipi di risorse specifiche.

È possibile richiamare questa operazione utilizzando il `get-resources` AWS CLI comando. Per esempi di utilizzo di `get-resources`, consulta [get-resources](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/resourcegroupstaggingapi/get-resources.html#examples) nella *Riferimento ai comandi CLI di AWS *. 

# Controllare gli eventi che Lambda invia alla funzione
<a name="invocation-eventfiltering"></a>

Puoi utilizzare il filtraggio degli eventi per controllare quali record di un flusso o di una coda Lambda invia alla funzione. Ad esempio, puoi aggiungere un filtro in modo che la tua funzione elabori solo i messaggi Amazon SQS contenenti determinati parametri di dati. Il filtraggio degli eventi funziona solo con determinati strumenti di mappatura dell'origine degli eventi. È possibile aggiungere filtri alle mappature delle sorgenti degli eventi per quanto segue: Servizi AWS
+ Amazon DynamoDB
+ Flusso di dati Amazon Kinesis
+ Amazon MQ
+ Amazon Managed Streaming for Apache Kafka (Amazon MSK)
+ Apache Kafka gestito dal cliente
+ Amazon Simple Queue Service (Amazon SQS)

Per informazioni specifiche sul filtraggio con origini eventi specifiche, consulta [Utilizzo di filtri con diversi Servizi AWS](#filtering-by-service). Lambda non supporta il filtraggio degli eventi per Amazon DocumentDB.

Per impostazione predefinita, è possibile definire fino a cinque filtri diversi per una singola mappatura dell'origine degli eventi. I tuoi filtri sono collegati ORed logicamente. Se un record proveniente dall'origine dell'evento soddisfa uno o più filtri, Lambda include il record nell'evento successivo che invia alla funzione. Se nessuno dei filtri è soddisfatto, Lambda scarta il record.

**Nota**  
Se devi definire più di cinque filtri per un'origine eventi, puoi richiedere un aumento della quota fino a 10 filtri per ciascuna origine eventi. Se provi ad aggiungere più filtri di quelli consentiti dalla quota corrente, Lambda restituisce un errore quando provi a creare l'origine degli eventi.

**Topics**
+ [

## Nozioni di base sul filtraggio di eventi
](#filtering-basics)
+ [

## Gestione dei record che non soddisfano i criteri di filtraggio
](#filtering-criteria-not-met)
+ [

## Sintassi delle regole di filtro
](#filtering-syntax)
+ [

## Collegamento dei criteri di filtro a una mappatura dell'origine evento (console)
](#filtering-console)
+ [

## Collegamento dei criteri di filtro a una mappatura dell'origine evento (AWS CLI)
](#filtering-cli)
+ [

## Collegamento dei criteri di filtro a una mappatura dell'origine evento (AWS SAM)
](#filtering-sam)
+ [

## Crittografia dei criteri di filtro
](#filter-criteria-encryption)
+ [

## Utilizzo di filtri con diversi Servizi AWS
](#filtering-by-service)

## Nozioni di base sul filtraggio di eventi
<a name="filtering-basics"></a>

Un oggetto criterio di filtro (`FilterCriteria`) è una struttura costituita da un elenco di filtri (`Filters`). Ogni filtro è una struttura che definisce un modello di filtraggio degli eventi (`Pattern`). Un modello è una rappresentazione di stringa di una regola di filtraggio JSON. La struttura di un oggetto `FilterCriteria` è come segue.

```
{
   "Filters": [
        {
            "Pattern": "{ \"Metadata1\": [ rule1 ], \"data\": { \"Data1\": [ rule2 ] }}"
        }
    ]
}
```

Per una maggiore chiarezza, ecco il valore del `Pattern` del filtro espanso in JSON semplice.

```
{
    "Metadata1": [ rule1 ],
    "data": {
        "Data1": [ rule2 ]
    }
}
```

Il modello di filtraggio può includere proprietà dei metadati, proprietà dei dati o entrambe. I parametri dei metadati disponibili e il formato dei parametri dei dati variano a seconda del Servizio AWS che funge da origine dell'evento. Ad esempio, supponiamo che la mappatura dell'origine degli eventi riceva il seguente record da una coda Amazon SQS:

```
{
    "messageId": "059f36b4-87a3-44ab-83d2-661975830a7d",
    "receiptHandle": "AQEBwJnKyrHigUMZj6rYigCgxlaS3SLy0a...",
    "body": "{\\n \"City\": \"Seattle\",\\n \"State\": \"WA\",\\n \"Temperature\": \"46\"\\n}",
    "attributes": {
        "ApproximateReceiveCount": "1",
        "SentTimestamp": "1545082649183",
        "SenderId": "AIDAIENQZJOLO23YVJ4VO",
        "ApproximateFirstReceiveTimestamp": "1545082649185"
    },
    "messageAttributes": {},
    "md5OfBody": "e4e68fb7bd0e697a0ae8f1bb342846b3",
    "eventSource": "aws:sqs",
    "eventSourceARN": "arn:aws:sqs:us-east-2:123456789012:my-queue",
    "awsRegion": "us-east-2"
}
```
+ Le **Proprietà dei metadati** sono i campi contenenti informazioni sull'evento che ha creato il record. Nel record Amazon SQS di esempio, le proprietà dei metadati includono campi come `messageID``eventSourceArn` e `awsRegion`.
+ Le **Proprietà dei dati** sono i campi del record contenenti i dati del flusso o della coda. Nell'esempio di evento Amazon SQS, la chiave per il campo dati è `body` e le proprietà dei dati sono i campi `City`, `State` e `Temperature`.

Diversi tipi di origine degli eventi utilizzano valori di chiave differenti per i rispettivi campi di dati. Per filtrare le proprietà dei dati, assicurati di utilizzare la chiave corretta nel modello del filtraggio. Per un elenco delle chiavi di filtraggio dei dati e per vedere esempi di modelli di filtro per ciascuna delle chiavi supportate Servizio AWS, consulta. [Utilizzo di filtri con diversi Servizi AWS](#filtering-by-service)

Il filtraggio degli eventi è in grado di gestire il filtraggio JSON multi-livello. Considera, ad esempio, il seguente frammento di un record da un flusso DynamoDB:

```
"dynamodb": {
    "Keys": {
        "ID": {
            "S": "ABCD"
        }
        "Number": {
            "N": "1234"
    },
    ...
}
```

Supponi di voler elaborare solo i record in cui il valore della chiave di ordinamento `Number` è 4567. In questo caso, l'oggetto `FilterCriteria` appare così:

```
{
    "Filters": [
        {
            "Pattern": "{ \"dynamodb\": { \"Keys\": { \"Number\": { \"N\": [ "4567" ] } } } }"
        }
    ]
}
```

Per una maggiore chiarezza, ecco il valore del `Pattern` del filtro espanso in JSON semplice. 

```
{
    "dynamodb": {
        "Keys": {
            "Number": {
                "N": [ "4567" ]
                }
            }
        }
}
```

## Gestione dei record che non soddisfano i criteri di filtraggio
<a name="filtering-criteria-not-met"></a>

Il modo in cui Lambda gestisce i record che non soddisfano i criteri di filtro dipende dall'origine eventi.
+ Per **Amazon SQS**, se un messaggio non soddisfa i criteri di filtraggio, Lambda rimuove automaticamente il messaggio dalla coda. Non è necessario eliminare manualmente questi messaggi in Amazon SQS.
+ Per **Kinesis** e **DynamoDB**, una volta che i criteri di filtraggio valutano un record, l'iteratore di flussi passa oltre questo record. Se il registro non soddisfa i criteri di filtro, non è necessario eliminare manualmente il registro dall'origine evento. Dopo il periodo di conservazione, Kinesis e DynamoDB eliminano automaticamente questi vecchi record. Se vuoi che i record vengano eliminati prima, consulta [Modifica del periodo di conservazione dei dati](https://docs.aws.amazon.com/streams/latest/dev/kinesis-extended-retention.html).
+ Per i messaggi **Amazon MSK**, **Apache Kafka autogestiti** e **Amazon MQ**, Lambda elimina i messaggi che non corrispondono a tutti i campi inclusi nel filtro. Per Amazon MSK e Apache Kafka autogestito, Lambda esegue il commit degli offset per i messaggi corrispondenti e non corrispondenti dopo aver richiamato correttamente la funzione. Per Amazon MQ, Lambda riconosce i messaggi corrispondenti dopo aver richiamato con successo la funzione e riconosce i messaggi non corrispondenti quando li filtra.

## Sintassi delle regole di filtro
<a name="filtering-syntax"></a>

Per le regole di filtro, Lambda supporta EventBridge le regole di Amazon e utilizza la stessa sintassi di. EventBridge Per ulteriori informazioni, consulta i [modelli di EventBridge eventi](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html) di *Amazon nella Amazon EventBridge User Guide*.

Di seguito è riportato un riepilogo di tutti gli operatori di confronto disponibili per il filtro eventi Lambda.


| Operatore di confronto | Esempio | Sintassi delle regole | 
| --- | --- | --- | 
|  Null  |  UserID è nullo  |  "UserID": [ nullo ]  | 
|  Empty  |  LastName è vuoto  |  "LastName": [""]  | 
|  Equals  |  Il nome è "Alice"  |  "Nome": [ "Alice" ]  | 
|  Uguale a (ignora maiuscole e minuscole)  |  Il nome è "Alice"  |  «Nome»: [\$1"equals-ignore-case«: «alice»\$1]  | 
|  And  |  La posizione è "New York" e il giorno è "lunedì"  |  "Luogo": [ "New York" ], "Giorno": ["lunedì"]  | 
|  Or  |  PaymentType è «Credito» o «Debito»  |  "PaymentType«: [«Credito», «Debito"]  | 
|  Or (campi multipli)  |  La posizione è "New York" o il giorno è "lunedì".  |  "\$1or": [ \$1 "Location": [ "New York" ] \$1, \$1 "Day": [ "Monday" ] \$1 ]   | 
|  Not  |  Il tempo è qualsiasi tranne "piovoso"  |  "Meteo": [ \$1 "anything-but": [ "Piove" ] \$1 ]  | 
|  Numerico (uguale)  |  Il prezzo è 100  |  "Prezzo": [ \$1 "numerico": [ "=", 100 ] \$1 ]  | 
|  Numerico (intervallo)  |  Il prezzo è superiore a 10 e inferiore o uguale a 20  |  "Prezzo": [ \$1 "numerico": [ ">", 10, "<=", 20 ] \$1 ]  | 
|  Exists  |  ProductName esiste  |  "ProductName«: [\$1«exists»: vero\$1]  | 
|  Does not exist  |  ProductName non esiste  |  "ProductName«: [\$1«exists»: false\$1]  | 
|  Begins with  |  La Regione è negli Stati Uniti  |  "Regione": [ \$1"prefisso": "us-" \$1 ]  | 
|  Ends with  |  FileName termina con un'estensione.png.  |  "FileName«: [\$1«suffix»: «.png»\$1]   | 

**Nota**  
Ad esempio EventBridge, per le stringhe, Lambda utilizza la corrispondenza character-by-character esatta senza ripiegamento tra maiuscole e minuscole o qualsiasi altra normalizzazione delle stringhe. Per i numeri Lambda utilizza anche la rappresentazione di stringhe. Ad esempio, 300, 300.0 e 3.0e2 non sono considerati uguali.

Tieni presente che l'operatore Exists funziona solo sui nodi foglia nell'origine eventi JSON. Non corrisponde ai nodi intermedi. Ad esempio, con il seguente codice JSON, lo schema di filtro `{ "person": { "address": [ { "exists": true } ] } }"` non troverebbe una corrispondenza perché `"address"` è un nodo intermedio.

```
{
  "person": {
    "name": "John Doe",
    "age": 30,
    "address": {
      "street": "123 Main St",
      "city": "Anytown",
      "country": "USA"
    }
  }
}
```

## Collegamento dei criteri di filtro a una mappatura dell'origine evento (console)
<a name="filtering-console"></a>

Seguire questi passaggi per creare una nuova mappatura delle origini eventi con criteri di filtro utilizzando la console Lambda.

**Per creare una nuova mappatura dell'origine evento con criteri di filtro (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegliere il nome di una funzione per la creazione di una mappatura dell'origine evento.

1. In **Panoramica delle funzioni**, scegliere **Aggiungi trigger**.

1. Per **Trigger configuration** (Configurazione trigger), scegliere un tipo di attivazione che supporta il filtraggio degli eventi. Per un elenco dei servizi supportati, consulta l'elenco all'inizio di questa pagina.

1. Espandere **Additional settings** (Impostazioni aggiuntive).

1. Alla voce **Filter criteria** (Criteri di filtro), seleziona **Add** (Aggiungi), quindi definisci e immetti i filtri. Ad esempio, è possibile inserire i seguenti valori.

   ```
   { "Metadata" : [ 1, 2 ] }
   ```

   Ciò indica a Lambda di elaborare solo i registri in cui il campo `Metadata` è uguale a 1 o 2. Puoi continuare a selezionare **Aggiungi** per aggiungere altri filtri fino al numero massimo consentito.

1. Una volta completata l'aggiunta di filtri, scegli **Salva**.

Quando si inseriscono i criteri di filtraggio utilizzando la console, si inserisce solo il modello di filtraggio e non è necessario fornire la chiave `Pattern` o le virgolette di escape. Nel passaggio 6 delle istruzioni precedenti, `{ "Metadata" : [ 1, 2 ] }` corrisponde ai `FilterCriteria` seguenti.

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Dopo aver creato la mappatura dell'origine eventi nella console, è possibile visualizzare il `FilterCriteria` formattato nei dettagli del trigger. Per altri esempi di creazione di filtri per gli eventi utilizzando la console, consulta la pagina [Utilizzo di filtri con diversi Servizi AWS](#filtering-by-service).

## Collegamento dei criteri di filtro a una mappatura dell'origine evento (AWS CLI)
<a name="filtering-cli"></a>

Supponiamo che si desideri che una mappatura dell'origine eventi abbia i seguenti `FilterCriteria`:

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

Per creare una nuova mappatura dell'origine degli eventi con questi criteri di filtro utilizzando AWS Command Line Interface (AWS CLI), esegui il comando seguente.

```
aws lambda create-event-source-mapping \
    --function-name my-function \
    --event-source-arn arn:aws:sqs:us-east-2:123456789012:my-queue \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

Questo [ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)comando crea una nuova mappatura dell'origine degli eventi Amazon SQS per una funzione `my-function` con quanto specificato. `FilterCriteria`

Per aggiungere questi criteri di filtraggio a una mappatura dell'origine degli eventi esistente, esegui il comando seguente.

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"Metadata\" : [ 1, 2 ]}"}]}'
```

Si noti che per aggiornare una mappatura di origine eventi, è necessario il suo UUID. È possibile ottenere l'UUID da una chiamata. [ list-event-source-mappings](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-event-source-mappings.html) Lambda restituisce anche l'UUID nella risposta CLI. [ create-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-event-source-mapping.html)

Per rimuovere i criteri di filtro da un'origine di eventi, puoi eseguire il [ update-event-source-mapping](https://docs.aws.amazon.com/cli/latest/reference/lambda/update-event-source-mapping.html)comando seguente con un oggetto vuoto. `FilterCriteria`

```
aws lambda update-event-source-mapping \
    --uuid "a1b2c3d4-5678-90ab-cdef-11111EXAMPLE" \
    --filter-criteria "{}"
```

Per ulteriori esempi di creazione di filtri di eventi utilizzando il AWS CLI, vedere[Utilizzo di filtri con diversi Servizi AWS](#filtering-by-service).

## Collegamento dei criteri di filtro a una mappatura dell'origine evento (AWS SAM)
<a name="filtering-sam"></a>

 Supponiamo di voler configurare un'origine di eventi in modo AWS SAM da utilizzare i seguenti criteri di filtro: 

```
{
   "Filters": [
      {
          "Pattern": "{ \"Metadata\" : [ 1, 2 ] }"
      }
   ]
}
```

 Per aggiungere questi criteri di filtro allo strumento di mappatura dell'origine degli eventi, inserisci il seguente frammento nel modello YAML delle origini eventi.

```
FilterCriteria: 
  Filters: 
    - Pattern: '{"Metadata": [1, 2]}'
```

 Per ulteriori informazioni sulla creazione e la configurazione di un AWS SAM modello per la mappatura delle sorgenti di un evento, consultate la [ EventSource](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-property-function-eventsource.html)sezione della Guida per gli AWS SAM sviluppatori. Per altri esempi di creazione di filtri di eventi utilizzando AWS SAM modelli, consulta. [Utilizzo di filtri con diversi Servizi AWS](#filtering-by-service) 

## Crittografia dei criteri di filtro
<a name="filter-criteria-encryption"></a>

Per impostazione predefinita, Lambda non crittografa l'oggetto dei criteri di filtro. Nei casi d'uso in cui è possibile includere informazioni riservate nell'oggetto dei criteri di filtro, è possibile utilizzare la propria [chiave KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys) per crittografarlo.

Dopo aver crittografato l'oggetto dei criteri di filtro, puoi visualizzarne la versione in testo semplice utilizzando una [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)chiamata API. È necessario disporre delle autorizzazioni `kms:Decrypt` per poter visualizzare correttamente i criteri di filtro in testo non crittografato.

**Nota**  
Se l'oggetto dei criteri di filtro è crittografato, Lambda oscura il valore del `FilterCriteria` campo nella risposta alle chiamate. [ListEventSourceMappings](https://docs.aws.amazon.com/lambda/latest/api/API_ListEventSourceMappings.html) Invece, questo campo viene visualizzato come `null`. Per vedere il vero valore di`FilterCriteria`, usa l'[GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API.  
Per visualizzare il valore decrittografato di `FilterCriteria` nella console, assicurati che il tuo ruolo IAM contenga le autorizzazioni per. [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)

Puoi specificare la tua chiave KMS tramite la console, l'API, la CLI o CloudFormation.

**Per crittografare i criteri di filtro con una chiave KMS di proprietà del cliente (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Selezionare **Add trigger** (Aggiungi trigger). Se hai già un trigger esistente, scegli la scheda **Configurazione**, quindi scegli **Trigger**. Seleziona il trigger esistente e scegli **Modifica**.

1. Seleziona la casella di controllo accanto a **Crittografa con chiave KMS gestita dal cliente**.

1. Per **Scegli una chiave di crittografia KMS gestita dal cliente**, seleziona una chiave abilitata esistente o crea una nuova chiave. A seconda dell'operazione, sono necessarie alcune o tutte le seguenti autorizzazioni: `kms:DescribeKey`, `kms:GenerateDataKey` e `kms:Decrypt`. Utilizza la policy delle chiavi KMS per concedere queste autorizzazioni.

Se utilizzi la tua chiave KMS, le seguenti operazioni API devono essere permesse nella [policy della chiave](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html):
+ `kms:Decrypt`: deve essere concesso al principale del servizio Lambda regionale (`lambda.AWS_region.amazonaws.com`). Ciò permette a Lambda per decrittografare i dati con questa chiave KMS.
  + Per evitare un [problema di confused deputy tra servizi](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html), la policy della chiave utilizza la chiave di condizione globale [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn). Il valore corretto della chiave `aws:SourceArn` è l'ARN della risorsa dello strumento di mappatura dell'origine degli eventi, quindi puoi aggiungerlo alla tua policy solo dopo averne rilevato l'ARN. Lambda inoltra inoltre le chiavi `aws:lambda:FunctionArn` e `aws:lambda:EventSourceArn` e i rispettivi valori nel [contesto di crittografia](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) quando effettua una richiesta di decrittografia a KMS. Affinché la richiesta di decrittografia abbia successo, questi valori devono corrispondere alle condizioni specificate nella policy della chiave. Non è necessario includere EventSourceArn fonti di eventi Kafka gestite in modo autonomo poiché non dispongono di un. EventSourceArn
+ `kms:Decrypt`— Deve essere concesso anche al preside che intende utilizzare la chiave per visualizzare i criteri di filtro in chiaro nelle nostre chiamate API. [GetEventSourceMapping[DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)
+ `kms:DescribeKey`: fornisce i dettagli della chiave gestita dal cliente per consentire al principale specificato di utilizzare la chiave.
+ `kms:GenerateDataKey`: fornisce le autorizzazioni a Lambda per generare una chiave di dati per crittografare i criteri di filtro per conto del principale specificato [(](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)crittografia a busta).

Puoi utilizzarlo AWS CloudTrail per tenere traccia AWS KMS delle richieste che Lambda effettua per tuo conto. Per esempi di CloudTrail eventi, consulta[Monitoraggio delle chiavi di crittografia per Lambda](security-encryption-at-rest.md#encryption-key-monitoring).

Consigliamo inoltre di utilizzare la chiave di condizione [https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service](https://docs.aws.amazon.com/kms/latest/developerguide/conditions-kms.html#conditions-kms-via-service) per limitare l'uso della chiave KMS solo alle richieste provenienti da Lambda. Il valore di questa chiave è il principale del servizio Lambda regionale (`lambda.AWS_region.amazonaws.com`). Di seguito è riportata una policy della chiave di esempio che concede tutte le autorizzazioni pertinenti:

**Example AWS KMS politica chiave**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "example-key-policy-1",
    "Statement": [
        {
            "Sid": "Allow Lambda to decrypt using the key",
            "Effect": "Allow",
            "Principal": {
                "Service": "lambda.us-east-1.amazonaws.com"
            },
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "*",
            "Condition": {
                "ArnEquals" : {
                    "aws:SourceArn": [
                        "arn:aws:lambda:us-east-1:123456789012:event-source-mapping:<esm_uuid>"
                    ]
                },
                "StringEquals": {
                    "kms:EncryptionContext:aws:lambda:FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:test-function",
                    "kms:EncryptionContext:aws:lambda:EventSourceArn": "arn:aws:sqs:us-east-1:123456789012:test-queue"
                }
            }
        },
        {
            "Sid": "Allow actions by an AWS account on the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key to specific roles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:role/ExampleRole"
            },
            "Action": [
                "kms:Decrypt",
                "kms:DescribeKey",
                "kms:GenerateDataKey"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals" : {
                    "kms:ViaService": "lambda.us-east-1.amazonaws.com"
                }
            }
        }
    ]
}
```

Per utilizzare la propria chiave KMS per crittografare i criteri di filtro, è possibile utilizzare anche il seguente [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) AWS CLI comando. Specifica l'ARN della chiave KMS con il flag `--kms-key-arn`.

```
aws lambda create-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Se disponi di una mappatura della fonte degli eventi esistente, usa invece il [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html) AWS CLI comando. Specifica l'ARN della chiave KMS con il flag `--kms-key-arn`.

```
aws lambda update-event-source-mapping --function-name my-function \
    --maximum-batching-window-in-seconds 60 \
    --event-source-arn arn:aws:sqs:us-east-1:123456789012:my-queue \
    --filter-criteria "{\"filters\": [{\"pattern\": \"{\"a\": [\"1\", \"2\"]}\" }]}" \
    --kms-key-arn arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599
```

Questa operazione sovrascrive qualsiasi chiave KMS specificata in precedenza. Se specifichi il flag `--kms-key-arn` insieme a un argomento vuoto, Lambda smette di usare la chiave KMS per crittografare i criteri di filtro. Torna invece a utilizzare per impostazione predefinita una chiave di proprietà di Amazon.

Per specificare la tua chiave KMS in un CloudFormation modello, usa la `KMSKeyArn` proprietà del tipo di `AWS::Lambda::EventSourceMapping` risorsa. Ad esempio, puoi inserire il seguente frammento di codice nel modello YAML dell'origine eventi.

```
MyEventSourceMapping:
  Type: AWS::Lambda::EventSourceMapping
  Properties:
    ...
    FilterCriteria:
      Filters:
        - Pattern: '{"a": [1, 2]}'
    KMSKeyArn: "arn:aws:kms:us-east-1:123456789012:key/055efbb4-xmpl-4336-ba9c-538c7d31f599"
    ...
```

Per poter visualizzare i criteri di filtro crittografati in testo semplice in una chiamata [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)o in una chiamata [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API, devi disporre delle autorizzazioni. `kms:Decrypt`

A partire dal 6 agosto 2024, il `FilterCriteria` campo non viene più visualizzato nei AWS CloudTrail log di e nelle chiamate [DeleteEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteEventSourceMapping.html)API se la funzione non utilizza il filtro degli eventi. [CreateEventSourceMapping[UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html)](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) Se la tua funzione utilizza il filtro degli eventi, il campo `FilterCriteria` viene visualizzato come vuoto (`{}`). Puoi comunque visualizzare i criteri di filtro in testo semplice nella risposta alle chiamate [GetEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_GetEventSourceMapping.html)API se disponi delle `kms:Decrypt` autorizzazioni per la chiave KMS corretta.

### Esempio di voce di registro per CloudTrail le chiamate Create/Update/DeleteEventSourceMapping
<a name="filter-criteria-encryption-cloudtrail"></a>

Nel seguente AWS CloudTrail esempio di voce di registro per una CreateEventSourceMapping chiamata, `FilterCriteria` viene visualizzata come empty (`{}`) perché la funzione utilizza il filtro degli eventi. Questo è il caso anche se l'oggetto `FilterCriteria` contiene criteri di filtro validi che la funzione utilizza attivamente. Se la funzione non utilizza il filtro degli eventi, CloudTrail non visualizzerà affatto il `FilterCriteria` campo nelle voci di registro.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROA123456789EXAMPLE:userid1",
        "arn": "arn:aws:sts::123456789012:assumed-role/Example/example-role",
        "accountId": "123456789012",
        "accessKeyId": "ASIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROA987654321EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/User1",
                "accountId": "123456789012",
                "userName": "User1"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2024-05-09T20:35:01Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2024-05-09T21:05:41Z",
    "eventSource": "lambda.amazonaws.com",
    "eventName": "CreateEventSourceMapping20150331",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": {
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "functionName": "example-function",
        "enabled": true,
        "batchSize": 10,
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "scalingConfig": {},
        "maximumBatchingWindowInSeconds": 0,
        "sourceAccessConfigurations": []
    },
    "responseElements": {
        "uUID": "a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa",
        "batchSize": 10,
        "maximumBatchingWindowInSeconds": 0,
        "eventSourceArn": "arn:aws:sqs:us-east-2:123456789012:example-queue",
        "filterCriteria": {},
        "kMSKeyArn": "arn:aws:kms:us-east-2:123456789012:key/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "functionArn": "arn:aws:lambda:us-east-2:123456789012:function:example-function",
        "lastModified": "May 9, 2024, 9:05:41 PM",
        "state": "Creating",
        "stateTransitionReason": "USER_INITIATED",
        "functionResponseTypes": [],
        "eventSourceMappingArn": "arn:aws:lambda:us-east-2:123456789012:event-source-mapping:a1b2c3d4-5678-90ab-cdef-EXAMPLEbbbbb"
    },
    "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
    "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management",
    "sessionCredentialFromConsole": "true"
}
```

## Utilizzo di filtri con diversi Servizi AWS
<a name="filtering-by-service"></a>

Diversi tipi di origine degli eventi utilizzano valori di chiave differenti per i rispettivi campi di dati. Per filtrare le proprietà dei dati, assicurati di utilizzare la chiave corretta nel modello del filtraggio. La tabella seguente fornisce le chiavi di filtro per ogni supporto Servizio AWS.


| Servizio AWS | Chiave di filtraggio | 
| --- | --- | 
| DynamoDB | dynamodb | 
| Kinesis | data | 
| Amazon MQ | data | 
| MSK Amazon | value | 
| Apache Kafka gestito dal cliente | value | 
| Amazon SQS | body | 

Le sezioni seguenti forniscono esempi di modelli di filtraggio per diversi tipi di origini eventi. Forniscono inoltre definizioni dei formati di dati in entrata supportati e dei formati del corpo dei modelli di filtraggio per ciascun servizio supportato.
+ [Utilizzo del filtro eventi con un'origine eventi DynamoDB](with-ddb-filtering.md)
+ [Utilizzo del filtro eventi con un'origine eventi Kinesis](with-kinesis-filtering.md)
+ [Filtrare gli eventi da una origine eventi Amazon MQ](with-mq-filtering.md)
+ [Filtraggio eventi da origini eventi Amazon MSK e Apache Kafka autogestito](kafka-filtering.md)
+ [Utilizzo del filtro eventi con un'origine eventi Amazon SQS](with-sqs-filtering.md)

# Test delle funzioni Lambda nella console
<a name="testing-functions"></a>

È possibile testare la funzione Lambda nella console richiamando la funzione con un evento di test. Un *evento di test* è un input JSON per la funzione. Se la funzione non richiede input, l'evento può essere un documento `({})` vuoto.

Quando esegui un test nella console, Lambda invoca la funzione in modo sincrono con l'evento di test. Il runtime della funzione converte il JSON di evento in un oggetto e lo passa al metodo del gestore del codice per l'elaborazione.

**Creare un evento di test**  
Prima di poter eseguire il test nella console, devi creare un evento di test privato o condivisibile.

## Invocare funzioni con eventi di test
<a name="invoke-with-event"></a>

**Testare una funzione**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione che desideri testare.

1. Seleziona la scheda **Test**.

1. Sotto a **Evento di test**, scegli **Crea nuovo evento** o **Modifica Evento salvato**, quindi seleziona l'evento salvato da utilizzare.

1. Facoltativamente, scegli un **Modello** per l'evento JSON.

1. Scegli **Test (Esegui test)**.

1. Per esaminare i risultati del test, in **Execution result** (Risultato esecuzione), espandi **Details** (Dettagli).

Per invocare la funzione senza salvare l'evento di test scegli **Test** prima di salvare. Questo crea un evento di test non salvato che Lambda conserverà solo per l'intera durata della sessione.

Per i runtime Node.js, Python e Ruby, puoi anche accedere agli eventi di test salvati e non salvati esistenti nella scheda **Codice**. Utilizza la sezione **EVENTI DI TEST** per creare, modificare ed eseguire test.

## Creazione di eventi di test privati
<a name="creating-private-events"></a>

Gli eventi di test privati sono disponibili solo per il creatore dell'evento e non richiedono autorizzazioni aggiuntive per l'uso. Puoi creare fino a 10 eventi di test per ogni funzione.

**Creare un evento di test**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione che desideri testare.

1. Seleziona la scheda **Test**.

1. Sotto a **Test event** (evento di test), procedi come segue:

   1. Seleziona un **Template** (modello).

   1. Inserisci un **Nome** per l'evento di test.

   1. Nella casella di immissione testo, inserire l'evento di test JSON.

   1. Sotto **Event sharing settings** (impostazioni di condivisione degli eventi), scegli **Private** (privato).

1. Scegli **Save changes** (Salva modifiche).

Per i runtime Node.js, Python e Ruby, puoi anche creare eventi di test nella scheda **Codice**. Utilizza la sezione **EVENTI DI TEST** per creare, modificare ed eseguire test.

## Creazione di eventi di test condivisibili
<a name="creating-shareable-events"></a>

Gli eventi di test condivisibili sono eventi di test che puoi condividere con altri utenti nello stesso AWS account. Puoi modificare gli eventi di test condivisibili di altri utenti e richiamare la funzione con essi.

Lambda salva gli eventi di test condivisibili come schemi in un registro di schemi [Amazon EventBridge (CloudWatch Events) denominato](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema-registry.html). `lambda-testevent-schemas` Poiché Lambda utilizza questo registro di sistema per memorizzare e chiamare gli eventi di test condivisibili creati, è consigliabile non modificare tale registro o creare un registro utilizzando il nome `lambda-testevent-schemas`.

Per visualizzare, condividere e modificare gli eventi di test condivisibili, devi disporre delle autorizzazioni per tutte le seguenti operazioni dell'API del registro degli schemi [EventBridge (CloudWatch Events)](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/operations.html):
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#CreateRegistry](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#CreateRegistry)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#CreateSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#CreateSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DeleteSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DeleteSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-version-schemaversion.html#DeleteSchemaVersion](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-version-schemaversion.html#DeleteSchemaVersion)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#DescribeRegistry](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname.html#DescribeRegistry)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DescribeSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#DescribeSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discover.html#GetDiscoveredSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-discover.html#GetDiscoveredSchema)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-versions.html#ListSchemaVersions](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname-versions.html#ListSchemaVersions)
+ [https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#UpdateSchema](https://docs.aws.amazon.com/eventbridge/latest/schema-reference/v1-registries-name-registryname-schemas-name-schemaname.html#UpdateSchema)

Ricorda che il salvataggio delle modifiche apportate a un evento di test condivisibile sovrascrive tale evento.

Se non riesci a creare, modificare o visualizzare eventi di test condivisibili, verifica che il tuo account disponga delle autorizzazioni necessarie per queste operazioni. Se disponi delle autorizzazioni necessarie ma non riesci ancora ad accedere agli eventi di test condivisibili, verifica eventuali [politiche basate sulle risorse](access-control-resource-based.md) che potrebbero limitare l'accesso al registro (Events). EventBridge CloudWatch 

**Per creare un evento di test**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione che desideri testare.

1. Seleziona la scheda **Test**.

1. Sotto a **Test event** (evento di test), procedi come segue:

   1. Seleziona un **Template** (modello).

   1. Inserisci un **Nome** per l'evento di test.

   1. Nella casella di immissione testo, inserire l'evento di test JSON.

   1. Sotto **Event sharing settings** (impostazioni di condivisione degli eventi), scegli **Shareable** (condivisibile).

1. Scegli **Save changes** (Salva modifiche).

**Usa eventi di test condivisibili con. AWS Serverless Application Model**  
Puoi usare AWS SAM per richiamare eventi di test condivisibili. Consultare [https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html) nella [Guida per gli sviluppatori di AWS Serverless Application Model](https://docs.aws.amazon.com//serverless-application-model/latest/developerguide/using-sam-cli-remote-test-event.html)

## Eliminare schemi di eventi di test condivisibili
<a name="deleting-test-schemas"></a>

Quando si eliminano eventi di test condivisibili, Lambda li rimuove dal registro `lambda-testevent-schemas`. Se si rimuove l’ultimo evento di test condivisibile dal Registro di sistema, Lambda elimina il Registro di sistema.

Se si elimina la funzione, Lambda non elimina gli schemi di eventi di test condivisibili associati. È necessario pulire queste risorse manualmente dalla console [EventBridge (CloudWatch Events)](https://console.aws.amazon.com/events).

# Stati funzione Lambda
<a name="functions-states"></a>

Lambda include un campo [State](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) nella configurazione della funzione per tutte le funzioni per indicare quando la funzione è pronta per essere richiamata. `State`fornisce informazioni sullo stato corrente della funzione, incluso se è possibile richiamarla correttamente. Gli stati della funzione non modificano il comportamento delle chiamate della funzione o il modo in cui la funzione esegue il codice.

**Nota**  
Le definizioni dello stato delle funzioni differiscono leggermente per [SnapStart](snapstart.md)le funzioni. Per ulteriori informazioni, consulta [Lambda SnapStart e stati funzionali](snapstart-activate.md#snapstart-function-states).

In molti casi, una tabella DynamoDB è il modo ideale per mantenere lo stato tra le chiamate, poiché fornisce un accesso ai dati a bassa latenza e può essere scalata con il servizio Lambda. Puoi anche archiviare dati in [Amazon EFS for Lambda](https://aws.amazon.com/blogs/compute/using-amazon-efs-for-aws-lambda-in-your-serverless-applications/) se utilizzi questo servizio e questo fornisce un accesso a bassa latenza allo storage del file system.

Gli stati delle funzioni includono:
+ `Pending` – Dopo che Lambda ha creato la funzione, imposta lo stato su sospeso. Mentre lo stato è in sospeso, Lambda tenta di creare o configurare le risorse per la funzione, ad esempio le risorse VPC o EFS. Lambda non richiama una funzione durante lo stato in sospeso. Qualsiasi chiamata o altre operazioni API che operano sulla funzione avranno esito negativo.
+ `Active` – La funzione passa allo stato attivo dopo che Lambda ha completato la configurazione e il provisioning delle risorse. Le funzioni possono essere richiamate correttamente solo quando sono attive.
+ `Failed` – Indica che la configurazione o il provisioning delle risorse ha riscontrato un errore. Quando la creazione della funzione fallisce, Lambda imposta lo stato della funzione su Fallito ed è necessario eliminare e ricreare la funzione.
+ `Inactive` – Una funzione diventa inattiva quando è stata inattiva abbastanza a lungo perché Lambda recuperi le risorse esterne configurate per essa. Quando si tenta di richiamare una funzione che è inattiva, la chiamata non riesce e Lambda imposta la funzione sullo stato in sospeso fino a quando le risorse della funzione non vengono ricreate. Se Lambda non riesce a ricreare le risorse, la funzione viene reimpostata sullo stato inattivo. Potrebbe essere necessario risolvere eventuali errori e ridistribuire la funzione per ripristinarla allo stato attivo.

Se utilizzi flussi di lavoro di automazione basati su SDK o chiami APIs direttamente il servizio di Lambda, assicurati di controllare lo stato di una funzione prima della chiamata per verificare che sia attiva. Puoi farlo con l'azione [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html)API Lambda o configurando un cameriere utilizzando l'SDK for [AWS Java](https://github.com/aws/aws-sdk-java-v2) 2.0.

```
aws lambda get-function --function-name my-function --query 'Configuration.[State, LastUpdateStatus]'
```

Verrà visualizzato l’output seguente:

```
[
 "Active",
 "Successful" 
]
```

Le operazioni seguenti non riescono mentre la creazione della funzione è in attesa:
+ [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)

## Stati delle funzioni durante gli aggiornamenti
<a name="functions-states-updating"></a>

Lambda prevede due operazioni per l'aggiornamento delle funzioni:
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html): aggiorna il pacchetto di distribuzione della funzione
+ [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html): aggiorna la configurazione della funzione

Lambda utilizza l'[LastUpdateStatus](https://docs.aws.amazon.com/lambda/latest/api/API_FunctionConfiguration.html#lambda-Type-FunctionConfiguration-LastUpdateStatus)attributo per tenere traccia dell'avanzamento di queste operazioni di aggiornamento. Mentre è in corso un aggiornamento (quando`"LastUpdateStatus": "InProgress"`):
+ Lo [stato](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) della funzione rimane`Active`.
+ Le chiamate continuano a utilizzare il codice e la configurazione precedenti della funzione fino al completamento dell'aggiornamento.
+ Le seguenti operazioni hanno esito negativo:
  + [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
  + [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)
  + [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
  + [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)

Quando un aggiornamento fallisce (quando`"LastUpdateStatus": "Failed"`):
+ Lo [stato](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html#lambda-GetFunctionConfiguration-response-State) della funzione rimane`Active`.
+ Le chiamate continuano a utilizzare il codice e la configurazione precedenti della funzione.

**Example GetFunctionConfiguration risposta**  
L'esempio seguente è il risultato della [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)richiesta di una funzione in fase di aggiornamento.  

```
{
    "FunctionName": "my-function",
    "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
    "Runtime": "nodejs24.x",
    "VpcConfig": {
        "SubnetIds": [
            "subnet-071f712345678e7c8",
            "subnet-07fd123456788a036",
            "subnet-0804f77612345cacf"
        ],
        "SecurityGroupIds": [
            "sg-085912345678492fb"
        ],
        "VpcId": "vpc-08e1234569e011e83"
    },
    "State": "Active",
    "LastUpdateStatus": "InProgress",
    ...
}
```

# Informazioni sul comportamento relativo ai nuovi tentativi in Lambda
<a name="invocation-retries"></a>

Quando invochi una funzione esplicitamente, stabilisci la strategia per la gestione degli errori relativi al codice della funzione. Lambda non riprova automaticamente questi tipi di errori per conto dell'utente. Per riprovare, puoi re-invocare manualmente la funzione, inviare l'evento che presenta l'errore a una coda per il debug o ignorare l'errore. Il codice della funzione può essere eseguito completamente, parzialmente o per niente. Se si riprova, accertare che il codice della funzione sia in grado di gestire lo stesso evento più volte senza provocare transazioni duplicate o altri effetti collaterali indesiderati.

Quando si invoca una funzione in modo indiretto, è necessario conoscere il comportamento del nuovo tentativo dell'invoker e qualsiasi servizio che la richiesta incontra. Questo include i seguenti scenari.
+ **Invocazione asincrona** – Lambda tenta due volte gli errori di funzione. Se la funzione non dispone di capacità sufficiente per gestire tutte le richieste in entrata, gli eventi possono attendere in coda per ore o giorni per essere inviati alla funzione. È possibile configurare una coda DLQ sulla funzione per acquisire eventi che non sono stati elaborati. Per ulteriori informazioni, consulta [Aggiunta di una coda DLQ](invocation-async-retain-records.md#invocation-dlq).
+ **Mappature evento di origine** – Le mappature evento di origine che leggono dai flussi effettuano nuovi tentativi sull'intero batch di elementi. Errori ripetuti bloccano l'elaborazione degli shard interessati finché l'errore non viene risolto o gli elementi non scadono. Per rilevare shard in stallo, è possibile monitorare il parametro [Età iteratore](monitoring-metrics.md).

  Per le mappature origine evento che leggono da una coda, stabilire il tempo trascorso tra i nuovi tentativi e la destinazione degli eventi non riusciti configurando il timeout di visibilità e la policy di reindirizzamento sulla coda di origine. Per ulteriori informazioni, consulta [In che modo Lambda elabora i record provenienti da origini eventi basate su flussi e code](invocation-eventsourcemapping.md) e gli argomenti specifici del servizio in [Richiamare Lambda con eventi di altri servizi AWS](lambda-services.md).
+ **Servizi AWS** – I servizi AWS possono invocare la funzione in modo [sincrono](invocation-sync.md) o asincrono. Per l'invocazione sincrona, il servizio decide se effettuare un nuovo tentativo. Ad esempio, le operazioni batch Amazon S3 ritentano l'operazione se la funzione Lambda restituisce un codice di risposta `TemporaryFailure`. I servizi che il proxy richiede da un utente o un client upstream, possono disporre di una strategia per nuovi tentativi o possono inoltrare la risposta di errore di nuovo al richiedente. Ad esempio, API Gateway inoltra sempre di nuovo la risposta di errore al richiedente. 

  Per l'invocazione asincrona, la logica dei tentativi è la stessa indipendentemente dall'origine di invocazione. Per impostazione predefinita, Lambda ritenta una invocazione asincrona fallita un massimo di due volte. Per ulteriori informazioni, consulta [In che modo Lambda gestisce gli errori e i nuovi tentativi con una invocazione asincrona](invocation-async-error-handling.md).
+ **Altri account e client** – Quando si concede l'accesso ad altri account, è possibile usare [policy basate su risorse](access-control-resource-based.md) per limitare i servizi e le risorse che possono configurare per invocare la funzione. Per proteggere la funzione dal sovraccarico, considerare di inserire un livello API davanti alla funzione con [Amazon API Gateway](services-apigateway.md).

Per gestire gli errori nelle applicazioni Lambda, Lambda si integra con servizi quali Amazon CloudWatch e AWS X-Ray. È possibile utilizzare una combinazione di log, parametri, allarmi e traccia per rilevare e identificare rapidamente problemi di codice della funzione, API e altre risorse che supportano l'applicazione. Per ulteriori informazioni, consulta [Monitoraggio, debug e risoluzione dei problemi delle funzioni Lambda](lambda-monitoring.md).

# Usa il rilevamento di un ciclo ricorsivo Lambda per prevenire loop infiniti
<a name="invocation-recursion"></a>

Quando configuri una funzione Lambda di modo che invii l'output sullo stesso servizio o risorsa che richiama la funzione, è possibile che venga creato un ciclo ricorsivo infinito. Ad esempio, una funzione Lambda potrebbe scrivere un messaggio a una coda di Amazon Simple Queue Service (Amazon SQS), che quindi richiama la stessa funzione. Questa invocazione fa sì che la funzione scriva un altro messaggio nella coda, che a sua volta richiama nuovamente la funzione.

I loop ricorsivi involontari possono comportare addebiti imprevisti. Account AWS I cicli ricorsivi possono anche far sì che Lambda si [dimensioni](lambda-concurrency.md) e utilizzi tutta la simultaneità disponibile del tuo account. Per contribuire a ridurre l'impatto dei cicli involontari, Lambda è in grado di rilevare determinati tipi di cicli ricorsivi poco dopo che si sono verificati. Per impostazione predefinita, quando Lambda rileva un ciclo ricorsivo, interrompe l'invocazione della funzione e invia una notifica. Se il tuo progetto utilizza intenzionalmente modelli ricorsivi, puoi modificare la configurazione predefinita di una funzione per consentirne l'invocazione ricorsiva. Per ulteriori informazioni, consulta [Consentire l'esecuzione di una funzione Lambda in un ciclo ricorsivo](#invocation-recursion-disable).

**Topics**
+ [

## Comprendere il rilevamento dei cicli ricorsivi
](#invocation-recursion-concepts)
+ [

## Supportato e Servizi AWS SDKs
](#invocation-recursion-supported)
+ [

## Notifiche dei cicli ricorsivi
](#invocation-recursion-monitoring)
+ [

## Risposta alle notifiche di rilevamento dei cicli ricorsivi
](#invocation-recursion-responding)
+ [

## Consentire l'esecuzione di una funzione Lambda in un ciclo ricorsivo
](#invocation-recursion-disable)
+ [

## Regioni supportate per il rilevamento ricorsivo del loop Lambda
](#invocation-recursion-regions)

## Comprendere il rilevamento dei cicli ricorsivi
<a name="invocation-recursion-concepts"></a>

Il rilevamento dei cicli ricorsivi in Lambda si basa sul tracciamento gli eventi. Lambda è un servizio di elaborazione basato su eventi che esegue il codice della funzione quando si verificano determinati eventi. Ad esempio, quando un elemento viene aggiunto a una coda Amazon SQS o a un argomento di Amazon Simple Notification Service (Amazon SNS). Lambda trasmette gli eventi alla funzione come oggetti JSON, che contengono informazioni sulla modifica dello stato del sistema. Quando un evento causa l'esecuzione di una funzione, si parla di *invocazione*.

Per rilevare i cicli ricorsivi, Lambda utilizza le intestazioni di tracciamento [AWS X-Ray](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html). Quando dei [Servizi AWS che supportano il rilevamento dei cicli ricorsivi](#invocation-recursion-supportedservices) inviano eventi a Lambda, tali eventi vengono automaticamente annotati con metadati. Quando la funzione Lambda scrive uno di questi eventi su un altro supportato Servizio AWS utilizzando una [versione supportata di un AWS SDK](#invocation-recursion-supportedsdks), aggiorna questi metadati. I metadati aggiornati includono il numero di volte in cui l'evento ha richiamato la funzione.

**Nota**  
Non è necessario abilitare il tracciamento attivo X-Ray per far funzionare questa funzionalità. Il rilevamento dei cicli ricorsivi è attivato per impostazione predefinita per tutti i clienti AWS . L'utilizzo della funzionalità è gratuito.

Una *catena di richieste* è una sequenza di invocazioni Lambda causate dallo stesso evento di attivazione. Ad esempio, immagina che una coda Amazon SQS richiami la tua funzione Lambda. La funzione Lambda invia quindi l'evento elaborato alla stessa coda di Amazon SQS, che richiama nuovamente la funzione. In questo esempio, ogni invocazione della funzione rientra nella stessa catena di richieste.

Se la tua funzione viene richiamata più di 16 volte nella stessa catena di richieste, Lambda interrompe automaticamente la successiva invocazione della funzione in quella catena di richieste e invia una notifica all'utente. Ad esempio, se la funzione è configurata con più trigger, le invocazioni da altri trigger non sono interessate.

**Nota**  
Quando l'impostazione di `maxReceiveCount` sulla policy di reindirizzamento della coda di origine è superiore a 16, la protezione da ricorsione di Lambda non impedisce ad Amazon SQS di ritentare il messaggio dopo che un loop ricorsivo è stato rilevato e terminato. Quando Lambda rileva un ciclo ricorsivo e annulla le chiamate successive, restituisce `RecursiveInvocationException` allo strumento di mappatura dell'origine degli eventi. Questo incrementa il valore `receiveCount` sul messaggio. Lambda continua a riprovare il messaggio e continua a bloccare le chiamate di funzione, finché Amazon SQS non determina che il limite `maxReceiveCount` è stato superato e invia il messaggio alla coda DLQ configurata.

Se hai configurato una [destinazione in caso di errore](invocation-async-retain-records.md#invocation-async-destinations) o una [coda DLQ](invocation-async-retain-records.md#invocation-dlq) per la funzione, Lambda invia anche l'evento dall'invocazione interrotta alla destinazione o alla coda DLQ. Quando configuri una coda di destinazione o di lettere morte per la tua funzione, assicurati di non utilizzare un trigger di evento o una mappatura della fonte di eventi utilizzata anche dalla tua funzione. Se invii eventi alla stessa risorsa che richiama la tua funzione, puoi creare un altro ciclo ricorsivo e anche questo ciclo verrà interrotto. Se si disattiva il rilevamento del ciclo di ricorsione, questo ciclo non verrà interrotto.

## Supportato e Servizi AWS SDKs
<a name="invocation-recursion-supported"></a>

Lambda è in grado di rilevare solo i loop ricorsivi che includono determinati loop supportati. Servizi AWS Affinché i loop ricorsivi vengano rilevati, la funzione deve utilizzare anche uno dei circuiti supportati. AWS SDKs

### Supportato Servizi AWS
<a name="invocation-recursion-supportedservices"></a>

Lambda attualmente rileva i cicli ricorsivi tra le tue funzioni, Amazon SQS, Amazon S3 e Amazon SNS. Lambda rileva anche i cicli ricorsivi composti solo da funzioni Lambda, che possono richiamarsi reciprocamente in modo sincrono o asincrono. I diagrammi seguenti mostrano alcuni esempi di ciclo ricorsivo che Lambda è in grado di rilevare:

![\[Diagrammi di cicli ricorsivi tra una funzione Lambda, Amazon SNS, Amazon S3 e una coda Amazon SQS.\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/RunawayWorkloadDetected_v3.png)


Quando un altro Servizio AWS tipo Amazon DynamoDB fa parte del ciclo, Lambda al momento non è in grado di rilevarlo e fermarlo.

Poiché attualmente Lambda rileva solo loop ricorsivi che coinvolgono Amazon SQS, Amazon S3 e Amazon SNS, è ancora possibile che i loop che coinvolgono altri possano comportare un utilizzo non intenzionale delle funzioni Servizi AWS Lambda.

Per evitare che ti vengano addebitati addebiti imprevisti Account AWS, ti consigliamo di configurare gli [ CloudWatchallarmi Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) per avvisarti di modelli di utilizzo insoliti. Ad esempio, puoi CloudWatch configurare la notifica dei picchi nella concorrenza o nelle chiamate della funzione Lambda. Puoi anche configurare un [avviso di fatturazione](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html) che ti segnali quando la spesa nel tuo account supera una soglia da te specificata. In alternativa, puoi utilizzare [AWS Cost Anomaly Detection](https://docs.aws.amazon.com/cost-management/latest/userguide/manage-ad.html) per ricevere avvisi in merito a schemi di fatturazione insoliti.

### Supportato AWS SDKs
<a name="invocation-recursion-supportedsdks"></a>

Affinché Lambda possa rilevare i cicli ricorsivi, la funzione deve utilizzare un SDK delle versioni seguenti o successive:


| Runtime | Versione AWS SDK minima richiesta | 
| --- | --- | 
|  Node.js  |  2.1147.0 (SDK versione 2) 3.105.0 (SDK versione 3)  | 
|  Python  |  1.24.46 (boto3) 1.27.46 (botocore)  | 
|  Java 8 e Java 11  |  2.17.135  | 
|  Java 17  |  2,20,81  | 
|  Java 21  |  2,21,24  | 
|  .NET  |  3,7,293,0  | 
|  Ruby  |  3,134,0  | 
|  PHP  |  3,232,0  | 
|  Go  |  V2 SDK 1.57.0  | 

Alcuni runtime Lambda come Python e Node.js includono una versione dell'SDK. AWS Se la versione SDK inclusa nel runtime della funzione è inferiore al minimo richiesto, puoi aggiungere una versione supportata dell'SDK al pacchetto di implementazione della funzione. Puoi aggiungere una versione supportata dell'SDK alla funzione anche utilizzando un [livello Lambda](chapter-layers.md). Per un elenco dei componenti SDKs inclusi in ogni runtime Lambda, consulta. [Runtime Lambda](lambda-runtimes.md)

## Notifiche dei cicli ricorsivi
<a name="invocation-recursion-monitoring"></a>

Quando Lambda interrompe un ciclo ricorsivo, ricevi notifiche tramite [Health Dashboard](https://aws.amazon.com/premiumsupport/technology/aws-health-dashboard/) e tramite e-mail. Puoi anche utilizzare le CloudWatch metriche per monitorare il numero di chiamate ricorsive interrotte da Lambda.

### Health Dashboard notifiche
<a name="invocation-recursion-phd"></a>

[Quando Lambda interrompe una chiamata ricorsiva, Health Dashboard visualizza una notifica nella pagina Lo stato del **tuo account, in Problemi aperti** e recenti.](https://health.aws.amazon.com/health/home#/account/dashboard/open-issues) Tieni presente che possono essere necessarie fino a 3,5 ore dopo che Lambda interrompe una chiamata ricorsiva prima che questa notifica venga visualizzata. Per ulteriori informazioni sulla visualizzazione degli eventi dell'account in Health Dashboard, consulta [Getting started with your AWS Health Dashboard — Lo stato del tuo account](https://docs.aws.amazon.com/health/latest/ug/getting-started-health-dashboard.html) nella *AWS Health User Guide*.

### Avvisi via e-mail
<a name="invocation-recursion-email"></a>

Quando Lambda interrompe per la prima volta un'invocazione ricorsiva della funzione, ti invia un avviso e-mail. Lambda invia un massimo di un'e-mail ogni 24 ore per ogni funzione del tuo Account AWS. Dopo l'invio di una notifica e-mail da parte di Lambda, non riceverai altre e-mail per la stessa funzione per altre 24 ore, anche se Lambda interrompe ulteriori invocazioni ricorsive della funzione. Tieni presente che possono essere necessarie fino a 3,5 ore dopo che Lambda interrompe una chiamata ricorsiva prima di ricevere questo avviso e-mail.

Lambda invia avvisi e-mail a ciclo ricorsivo al contatto principale Account AWS dell'account e al contatto operativo alternativo del tuo account. Per informazioni sulla visualizzazione o l'aggiornamento degli indirizzi e-mail nel tuo account, consulta la pagina [Aggiornamento delle informazioni di contatto](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-update-contact.html) della *Guida generale di AWS *.

### CloudWatch Metriche Amazon
<a name="invocation-recursion-cloudwatch"></a>

La [CloudWatch metrica](monitoring-metrics-types.md) `RecursiveInvocationsDropped` registra il numero di chiamate di funzioni che Lambda ha interrotto perché la funzione è stata richiamata più di circa 16 volte in una singola catena di richieste. Lambda emette questo parametro non appena interrompe un'invocazione ricorsiva. Per visualizzare questa metrica, segui le istruzioni relative alla [visualizzazione delle metriche sulla console e scegli la metrica](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-metrics.html#monitoring-metrics-console). CloudWatch `RecursiveInvocationsDropped`

## Risposta alle notifiche di rilevamento dei cicli ricorsivi
<a name="invocation-recursion-responding"></a>

Quando la funzione viene richiamata più di 16 volte dallo stesso evento di attivazione, Lambda interrompe la successiva invocazione della funzione per quell'evento per interrompere il ciclo ricorsivo. Per evitare il ripetersi di un ciclo ricorsivo interrotto da Lambda, procedi come segue: 
+ Riduci la [simultaneità](lambda-concurrency.md) disponibile della funzione a zero, il che limita tutte le invocazioni future.
+ Rimuovi o disabilita il trigger o la mappatura dell'origine degli eventi che richiama la tua funzione.
+ Identifica e correggi i difetti del codice che riscrivono gli eventi nella AWS risorsa che richiama la tua funzione. Una fonte comune di difetti è l'utilizzo di variabili per definire l'origine e la destinazione degli eventi di una funzione. Verifica di non utilizzare lo stesso valore per entrambe le variabili.

Inoltre, se l'origine degli eventi della funzione Lambda è una coda Amazon SQS, valuta la possibilità di [configurare una coda DLQ](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-configure-dead-letter-queue.html) nella coda di origine.

**Nota**  
Assicurati di configurare la coda DLQ sulla coda di origine, non sulla funzione Lambda. La coda DLQ che si configura su una funzione viene utilizzata per la [coda di invocazione asincrona](invocation-async.md) della funzione, non per le code di origine eventi.

Se l'origine degli eventi è un argomento di Amazon SNS, valuta la possibilità di aggiungere una [destinazione in caso di errore](invocation-async-retain-records.md#invocation-async-destinations) per la funzione.

**Azzeramento della simultaneità disponibile per la funzione (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione .

1. Scegli **Limitatore**.

1. Nella finestra di dialogo **Limita la tua funzione**, scegli **Conferma**.

**Rimozione di un trigger o di una mappatura dell'origine degli eventi per la funzione (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione .

1. Scegli la scheda **Configurazione**, quindi scegli **Trigger**.

1. In **Trigger**, seleziona il trigger o la mappatura dell'origine degli eventi che desideri eliminare, quindi scegli **Elimina**.

1. Nella finestra di dialogo **Elimina trigger**, scegli **Elimina**.

**Disabilitazione di una mappatura dell'origine degli eventi per la funzione (AWS CLI)**

1. Per trovare l'UUID per la mappatura delle sorgenti degli eventi che desideri disabilitare, esegui il AWS Command Line Interface comando ().AWS CLI[list-event-source-mappings](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/list-event-source-mappings.html)

   ```
   aws lambda list-event-source-mappings
   ```

1. Per disabilitare la mappatura delle sorgenti degli eventi, esegui il comando seguente. AWS CLI [update-event-source-mapping](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/update-event-source-mapping.html)

   ```
   aws lambda update-event-source-mapping --function-name MyFunction \
   --uuid a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 --no-enabled
   ```

## Consentire l'esecuzione di una funzione Lambda in un ciclo ricorsivo
<a name="invocation-recursion-disable"></a>

Se il tuo progetto utilizza intenzionalmente un ciclo ricorsivo, puoi modificare la configurazione predefinita di una funzione Lambda per consentirne l'invocazione ricorsiva. È preferibile evitare l'uso di cicli ricorsivi nel codice. Gli errori di implementazione possono portare a invocazioni ricorsive che utilizzano tutta la concorrenza disponibile e all'addebito Account AWS di addebiti imprevisti sul tuo account.

**Importante**  
Se utilizzi cicli ricorsivi, trattali con attenzione. Implementa i guardrail basati sulle best practice per ridurre al minimo i rischi di errori di implementazione. Per ulteriori informazioni sulle best practice per l'utilizzo di modelli ricorsivi, consulta la pagina [Schemi ricorsivi che causano funzioni Lambda indeterminate](https://serverlessland.com/content/service/lambda/guides/aws-lambda-operator-guide/recursive-runaway) in Serverless Land.

Puoi configurare funzioni per consentire loop ricorsivi utilizzando la console Lambda, il AWS Command Line Interface (AWS CLI) e l'API. [PutFunctionRecursionConfig](https://docs.aws.amazon.com//lambda/latest/api/API_PutFunctionRecursionConfig.html) Puoi anche configurare l'impostazione di rilevamento ricorsivo del loop di una funzione in and. AWS SAM CloudFormation

Per impostazione predefinita, Lambda rileva e termina i cicli ricorsivi. A meno che il tuo progetto non utilizzi intenzionalmente un ciclo ricorsivo, ti consigliamo di non modificare la configurazione predefinita delle funzioni.

[Nota che quando configuri una funzione per consentire i loop ricorsivi, la metrica non viene CloudWatch emessa.](monitoring-metrics-types.md#invocation-metrics) `RecursiveInvocationsDropped`

------
#### [ Console ]

**Consentire l'esecuzione di una funzione Lambda in un ciclo ricorsivo (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione per aprire la pagina dei dettagli della funzione.

1. Scegli la scheda **Configurazione**, quindi scegli ** Rilevamento di simultaneità e ricorsione**.

1. Oltre al **rilevamento di cicli ricorsivi**, scegli **Modifica**.

1. Seleziona **Consenti cicli ricorsivi**.

1. Scegli **Save** (Salva).

------
#### [ AWS CLI ]

Puoi utilizzare l'[PutFunctionRecursionConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionRecursionConfig.html)API per consentire alla tua funzione di essere richiamata in un ciclo ricorsivo. Specifica `Allow` per il parametro del ciclo ricorsivo. Ad esempio, puoi chiamare questa API con il comando: `put-function-recursion-config` AWS CLI 

```
aws lambda put-function-recursion-config --function-name yourFunctionName --recursive-loop Allow
```

------

Puoi riportare la configurazione della funzione all'impostazione predefinita in modo che Lambda termini i cicli ricorsivi quando li rileva. Modifica la configurazione della tua funzione utilizzando la console Lambda o la AWS CLI.

------
#### [ Console ]

**Per configurare una funzione in modo che i cicli ricorsivi vengano terminati (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione per aprire la pagina dei dettagli della funzione.

1. Scegli la scheda **Configurazione**, quindi scegli ** Rilevamento di simultaneità e ricorsione**.

1. Oltre al **rilevamento di cicli ricorsivi**, scegli **Modifica**.

1. Seleziona **Termina i cicli ricorsivi**.

1. Scegli **Save** (Salva).

------
#### [ AWS CLI ]

Puoi utilizzare l'[PutFunctionRecursionConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionRecursionConfig.html)API per configurare la tua funzione in modo che Lambda termini i loop ricorsivi quando li rileva. Specifica `Terminate` per il parametro del ciclo ricorsivo. Ad esempio, puoi chiamare questa API con il comando: `put-function-recursion-config` AWS CLI 

```
aws lambda put-function-recursion-config --function-name yourFunctionName --recursive-loop Terminate
```

------

## Regioni supportate per il rilevamento ricorsivo del loop Lambda
<a name="invocation-recursion-regions"></a>

Il rilevamento ricorsivo del loop Lambda è supportato in tutte le [regioni commerciali ad eccezione](https://docs.aws.amazon.com/general/latest/gr/glos-chap.html#region) del Messico (Centrale) e dell'Asia Pacifico (Nuova Zelanda).

# Creazione e gestione della funzione Lambda URLs
<a name="urls-configuration"></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: funzione e Amazon API URLs Gateway. In caso di dubbi su quale sia il metodo migliore per il tuo caso d'uso, consulta [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**  
 URLs Le funzioni non sono supportate nei seguenti paesi Regioni 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`), Israele (Tel Aviv) `eu-central-2` (), e Medio Oriente (Emirati Arabi Uniti) (`il-central-1`). `me-central-1`

 URLs Le funzioni sono abilitate al dual stack, supportano IPv4 e IPv6. Dopo aver configurato un URL della funzione per la funzione utilizzata, è possibile richiamare la funzione attraverso il relativo endpoint HTTP(S) tramite un browser Web, curl, Postman o un client HTTP.

**Nota**  
Puoi accedere all'URL della funzione solo tramite Internet pubblico. Sebbene le funzioni Lambda supportino AWS PrivateLink, le funzioni no URLs .

La funzione Lambda URLs utilizza [politiche basate sulle risorse per la sicurezza e il controllo degli accessi](access-control-resource-based.md). La funzione supporta URLs anche le opzioni di configurazione CORS (Cross-Origin Resource Sharing).

È possibile applicare la funzione URLs a qualsiasi alias di funzione o alla versione della funzione `$LATEST` non pubblicata. Non è possibile aggiungere un URL della funzione a nessun'altra versione della funzione.

La sezione seguente mostra come creare e gestire l'URL di una funzione utilizzando la console Lambda e il AWS CLI modello CloudFormation 

**Topics**
+ [

## Creazione di un URL della funzione (console)
](#create-url-console)
+ [

## Creazione di un URL di funzione (AWS CLI)
](#create-url-cli)
+ [

## Aggiungere l'URL di una funzione a un CloudFormation modello
](#urls-cfn)
+ [

## Cross-Origin Resource Sharing (CORS)
](#urls-cors)
+ [

## Funzione di limitazione URLs
](#urls-throttling)
+ [

## Funzione di disattivazione URLs
](#urls-deactivating)
+ [

## Funzione di cancellazione URLs
](#w2aac39c81c53)
+ [

# Controlla l'accesso alla funzione Lambda URLs
](urls-auth.md)
+ [

# Richiamo di URL di funzioni Lambda
](urls-invocation.md)
+ [

# Monitoraggio degli URL della funzione Lambda
](urls-monitoring.md)
+ [

# Selezionare un metodo per richiamare la funzione Lambda tramite una richiesta HTTP
](furls-http-invoke-decision.md)
+ [

# Tutorial: creazione di un endpoint webhook utilizzando l'URL di una funzione Lambda
](urls-webhook-tutorial.md)

## Creazione di un URL della funzione (console)
<a name="create-url-console"></a>

Segui queste fasi per creare un URL della funzione usando la console.

### Per creare un URL di funzione per una funzione esistente
<a name="create-url-existing-function"></a>

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione per la quale desideri creare l'URL della funzione.

1. Scegli la scheda **Configurazione**, quindi scegli **URL della funzione**.

1. Scegli **Crea URL della funzione**.

1. Per il **tipo di autenticazione**, scegliete **AWS\$1IAM**o **NONE**. Per ulteriori informazioni sull'autenticazione dell'URL della funzione, consulta [Controllo accessi](urls-auth.md).

1. (Opzionale) Seleziona **Configura CORS** e quindi configura le impostazioni CORS per l'URL della funzione. Per ulteriori informazioni sulla funzionalità CORS, consulta [Cross-Origin Resource Sharing (CORS)](#urls-cors).

1. Scegli **Save** (Salva).

In questo modo viene creato un URL di funzione per la versione non pubblicata di `$LATEST` della funzione. L'URL della funzione viene visualizzato nella sezione **Panoramica della funzione** della console.

### Per creare l'URL di una funzione per un alias esistente
<a name="create-url-existing-alias"></a>

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione con l'alias per cui desideri creare l'URL della funzione.

1. Seleziona la scheda **Aliases** (Alias) e quindi scegli il nome dell'alias per cui desideri creare l'URL della funzione.

1. Scegli la scheda **Configuration** (Configurazione), quindi scegli **Function URL** (URL della funzione).

1. Scegli **Crea URL della funzione**.

1. **Per il **tipo di autenticazione**, scegli **AWS\$1IAM**o NONE.** Per ulteriori informazioni sull'autenticazione dell'URL della funzione, consulta [Controllo accessi](urls-auth.md).

1. (Opzionale) Seleziona **Configura CORS** e quindi configura le impostazioni CORS per l'URL della funzione. Per ulteriori informazioni sulla funzionalità CORS, consulta [Cross-Origin Resource Sharing (CORS)](#urls-cors).

1. Scegli **Save** (Salva).

In questo modo viene creato un URL della funzione per l'alias della funzione. L'URL della funzione viene visualizzato nella sezione **Panoramica della funzione** della console per l'alias.

### Per creare una nuova funzione con l'URL di una funzione
<a name="create-url-new-function"></a>

**Creazione di una nuova funzione con un URL della funzione (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli **Crea funzione**.

1. In **Basic information (Informazioni di base)** eseguire queste operazioni:

   1. In **Function name** (Nome funzione), inserisci un nome per la funzione, ad esempio **my-function**.

   1. Per **Runtime**, scegliete il linguaggio di runtime che preferite, ad esempio **Node.js 24**.

   1. Per **Architecture** (Architettura), scegli **x86\$164** o **arm64**.

   1. Espandi **Permissions** (Autorizzazioni), quindi scegli se creare un nuovo ruolo di esecuzione o usarne uno esistente.

1. Espandi **Advanced settings** (Impostazioni avanzate) e quindi seleziona **Function URL** (URL della funzione).

1. Per il **tipo di autenticazione**, scegliete **AWS\$1IAM**o **NONE**. Per ulteriori informazioni sull'autenticazione dell'URL della funzione, consulta [Controllo accessi](urls-auth.md).

1. (Opzionale) Seleziona **Configure cross-origin resource sharing (CORS)** (Configura CORS). Selezionando questa opzione durante la creazione della funzione, l'URL della funzione consente le richieste da tutte le origini per impostazione predefinita. È possibile modificare le impostazioni CORS per l'URL della funzione dopo aver creato la funzione. Per ulteriori informazioni sulla funzionalità CORS, consulta [Cross-Origin Resource Sharing (CORS)](#urls-cors).

1. Scegli **Crea funzione**.

In questo modo viene creata una nuova funzione con un URL della funzione per la versione non pubblicata di `$LATEST` della funzione. L'URL della funzione viene visualizzato nella sezione **Function overview** (Panoramica della funzione) della console.

## Creazione di un URL di funzione (AWS CLI)
<a name="create-url-cli"></a>

Per creare un URL di funzione per una funzione Lambda esistente utilizzando AWS Command Line Interface (AWS CLI), esegui il comando seguente:

```
aws lambda create-function-url-config \
    --function-name my-function \
    --qualifier prod \ // optional
    --auth-type AWS_IAM
    --cors-config {AllowOrigins="https://example.com"} // optional
```

Un URL di funzione viene aggiunto al qualificatore **prod** per la funzione **my-function**. Per ulteriori informazioni su questi parametri di configurazione, consulta [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html) nella documentazione di riferimento delle API.

**Nota**  
Per creare l'URL di una funzione tramite AWS CLI, la funzione deve già esistere.

## Aggiungere l'URL di una funzione a un CloudFormation modello
<a name="urls-cfn"></a>

Per aggiungere una `AWS::Lambda::Url` risorsa al CloudFormation modello, utilizzate la seguente sintassi:

### JSON
<a name="urls-cfn-json"></a>

```
{
  "Type" : "AWS::Lambda::Url",
  "Properties" : {
      "AuthType" : String,
      "Cors" : Cors,
      "Qualifier" : String,
      "TargetFunctionArn" : String
    }
}
```

### YAML
<a name="urls-cfn-yaml"></a>

```
Type: AWS::Lambda::Url
Properties: 
  AuthType: String
  Cors: 
    Cors
  Qualifier: String
  TargetFunctionArn: String
```

### Parameters
<a name="urls-cfn-params"></a>
+ (Obbligatorio)`AuthType`: definisce il tipo di autenticazione per l'URL della funzione. I valori possibili sono `AWS_IAM` o `NONE`. Per limitare l'accesso solo agli utenti autenticati, imposta su `AWS_IAM`. Per ignorare l'autenticazione IAM e consentire a qualsiasi utente di effettuare richieste alla propria funzione, imposta su `NONE`.
+ (Opzionale)`Cors`: definisce le [impostazioni CORS](#urls-cors) per l'URL della funzione. Per aggiungere `Cors` alla `AWS::Lambda::Url` risorsa in CloudFormation, utilizzate la seguente sintassi.

    
**Example AWS::Lambda::Url.Cors (JSON)**  

  ```
  {
    "AllowCredentials" : Boolean,
    "AllowHeaders" : [ String, ... ],
    "AllowMethods" : [ String, ... ],
    "AllowOrigins" : [ String, ... ],
    "ExposeHeaders" : [ String, ... ],
    "MaxAge" : Integer
  }
  ```  
**Example AWS::Lambda::Url.Cors (YAML)**  

  ```
    AllowCredentials: Boolean
    AllowHeaders: 
      - String
    AllowMethods: 
      - String
    AllowOrigins: 
      - String
    ExposeHeaders: 
      - String
    MaxAge: Integer
  ```
+ (Opzionale) `Qualifier`: il nome dell'alias.
+ (Obbligatorio)`TargetFunctionArn`: il nome o l'Amazon Resource Name (ARN) della funzione Lambda. I formati dei nomi validi includono quanto segue:
  + **Nome funzione** – `my-function`
  + **ARN funzione** – `arn:aws:lambda:us-west-2:123456789012:function:my-function`
  + **ARN parziale** – `123456789012:function:my-function`.

## Cross-Origin Resource Sharing (CORS)
<a name="urls-cors"></a>

Per definire in che modo le diverse origini possono accedere all'URL della funzione, utilizza [cross-origin resource sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS). Si consiglia di configurare CORS se si intende chiamare l'URL della funzione da un dominio diverso. Lambda supporta le seguenti intestazioni CORS per la funzione. URLs


| Intestazioni CORS | Proprietà di configurazione CORS | Valori di esempio | 
| --- | --- | --- | 
|  [ Access-Control-Allow-Origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin)  |  `AllowOrigins`  |  `*` (consente tutte le origini) `https://www.example.com` `http://localhost:60905`  | 
|  [ Access-Control-Allow-Methods](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods)  |  `AllowMethods`  |  `GET`, `POST`, `DELETE`, `*`  | 
|  [ Access-Control-Allow-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Headers)  |  `AllowHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Expose-Headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Expose-Headers)  |  `ExposeHeaders`  |  `Date`, `Keep-Alive`, `X-Custom-Header`  | 
|  [ Access-Control-Allow-Credentials](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials)  |  `AllowCredentials`  |  `TRUE`  | 
|  [ Access-Control-Max-Age](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Max-Age)  |  `MaxAge`  |  `5` (default), `300`  | 

Quando configuri CORS per l'URL di una funzione utilizzando la console Lambda o il AWS CLI, Lambda aggiunge automaticamente le intestazioni CORS a tutte le risposte tramite l'URL della funzione. In alternativa, è possibile aggiungere manualmente le intestazioni CORS alla risposta della funzione. Se ci sono intestazioni in conflitto, il comportamento previsto dipende dal tipo di richiesta:
+ Per le richieste di preflight come le richieste OPTIONS, le intestazioni CORS configurate nella funzione URL hanno la precedenza. Lambda restituisce solo queste intestazioni CORS nella risposta.
+ Per le richieste non preflight come le richieste GET o POST, Lambda restituisce sia le intestazioni CORS configurate nella funzione URL, sia le intestazioni CORS restituite dalla funzione. Ciò può comportare intestazioni CORS duplicate nella risposta. È possibile che venga visualizzato un errore simile al seguente: `The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed`.

In generale, consigliamo di configurare tutte le impostazioni CORS nella funzione URL anziché inviare manualmente le intestazioni CORS nella risposta della funzione.

## Funzione di limitazione URLs
<a name="urls-throttling"></a>

Il throttling limita la frequenza con cui la funzione elabora le richieste. Ciò è utile in molte situazioni, ad esempio per impedire alla funzione di sovraccaricare le risorse a valle o per gestire un improvviso aumento delle richieste.

È possibile limitare la frequenza delle richieste elaborate dalla funzione Lambda tramite un URL di funzione configurando la simultaneità riservata. La simultaneità riservata limita il numero massimo di richiami simultanei della funzione. La frequenza massima di richieste al secondo (RPS) della funzione equivale a 10 volte la simultaneità riservata configurata. Ad esempio, se si configura la funzione con una simultaneità riservata di 100, l'RPS massimo è 1.000.

Ogni volta che la simultaneità della funzione supera la simultaneità riservata, l'URL della funzione restituisce un codice di stato HTTP `429`. Se la funzione riceve una richiesta che supera 10 volte l'RPS massimo in base alla simultaneità riservata configurata, viene ricevuto anche un errore HTTP `429`. Per ulteriori informazioni sulla simultaneità riservata, consulta [Configurazione della simultaneità riservata per una funzione](configuration-concurrency.md).

## Funzione di disattivazione URLs
<a name="urls-deactivating"></a>

In caso di emergenza, potresti voler rifiutare tutto il traffico verso l'URL della funzione. Per disattivare l'URL della funzione, imposta la simultaneità riservata su zero. In questo modo vengono limitate tutte le richieste all'URL della funzione, con conseguenti risposte di stato HTTP `429`. Per riattivare l'URL della funzione, elimina la configurazione di simultaneità riservata o imposta la configurazione su una quantità maggiore di zero.

## Funzione di cancellazione URLs
<a name="w2aac39c81c53"></a>

Quando si elimina un URL di funzione, non è possibile ripristinarlo. La creazione di un nuovo URL di funzione determinerà un indirizzo URL diverso.

**Nota**  
Se elimini l'URL della funzione con il tipo di autenticazione `NONE`, Lambda non elimina automaticamente la policy basata sulle risorse associata. Se desideri eliminare questa policy, dovrai farlo manualmente.

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegliere il nome della funzione.

1. Scegli la scheda **Configurazione**, quindi scegli **URL della funzione**.

1. Scegli **Elimina**.

1. Inserisci la parola *delete* (elimina) nel campo per confermare l'eliminazione.

1. Scegli **Elimina**.

**Nota**  
Quando si elimina una funzione con una funzione URL, Lambda elimina in modo asincrono la funzione URL. Se crei immediatamente una nuova funzione con lo stesso nome nello stesso account, è possibile che la funzione URL originale venga mappata alla nuova funzione anziché eliminata.

# Controlla l'accesso alla funzione Lambda URLs
<a name="urls-auth"></a>

**Nota**  
A partire da ottobre 2025, la nuova funzione URLs richiederà entrambe le `lambda:InvokeFunctionUrl` autorizzazioni`lambda:InvokeFunction`.

Puoi controllare l'accesso alla tua funzione Lambda URLs utilizzando il [AuthType](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html#lambda-CreateFunctionUrlConfig-request-AuthType)parametro combinato con le [politiche basate sulle risorse](access-control-resource-based.md) allegate alla tua funzione specifica. La configurazione di questi due componenti determina chi può richiamare o eseguire altre azioni amministrative sull'URL della funzione.

Il parametro `AuthType` determina il modo in cui Lambda autentica o autorizza le richieste all'URL della funzione. Quando configuri l'URL della funzione, è necessario specificare una delle seguenti opzioni `AuthType`:
+ `AWS_IAM`— Lambda utilizza AWS Identity and Access Management (IAM) per autenticare e autorizzare le richieste in base alla policy di identità del principale IAM e alla policy basata sulle risorse della funzione. Scegli questa opzione se desideri che solo gli utenti e i ruoli autenticati invochino la tua funzione utilizzando l'URL della funzione.
+ `NONE`: Lambda non esegue alcuna autenticazione prima di richiamare la funzione. Tuttavia, la policy basata sulle risorse della funzione è sempre valida e deve concedere l'accesso pubblico prima che l'URL della funzione possa ricevere richieste. Scegli questa opzione per consentire l'accesso pubblico e non autenticato all'URL della funzione.

Per ulteriori approfondimenti sulla sicurezza, puoi utilizzare AWS Identity and Access Management Access Analyzer per ottenere un'analisi completa dell'accesso esterno all'URL della tua funzione. IAM Access Analyzer controlla inoltre le autorizzazioni nuove o aggiornate sulle funzioni Lambda per aiutarti a identificare le autorizzazioni che garantiscono l'accesso pubblico e tra account. Puoi utilizzare IAM Access Analyzer gratuitamente. Per le nozioni di base su IAM Access Analyzer, consulta [Utilizzo di AWS IAM Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html).

Questa pagina contiene esempi di politiche basate sulle risorse per entrambi i tipi di autenticazione e come creare queste politiche utilizzando il funzionamento dell'[AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html)API o la console Lambda. Per informazioni su come richiamare l'URL della funzione dopo aver impostato le autorizzazioni, consulta. [Richiamo di URL di funzioni Lambda](urls-invocation.md)

**Topics**
+ [

## Utilizzo del tipo di autenticazione `AWS_IAM`
](#urls-auth-iam)
+ [

## Utilizzo del tipo di autenticazione `NONE`
](#urls-auth-none)
+ [

## Governance e controllo degli accessi
](#urls-governance)

## Utilizzo del tipo di autenticazione `AWS_IAM`
<a name="urls-auth-iam"></a>

Se scegli il tipo di autenticazione `AWS_IAM`, gli utenti che hanno bisogno di richiamare l'URL della funzione Lambda devono avere le autorizzazioni `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`. A seconda di chi effettua la richiesta di invocazione, potrebbe essere necessario concedere questa autorizzazione utilizzando una [policy basata sulle risorse](access-control-resource-based.md).

**Se il principale che effettua la richiesta è lo Account AWS stesso dell'URL della funzione, allora il principale deve disporre delle `lambda:InvokeFunction` autorizzazioni nella propria politica [basata sull'identità **oppure** avere le autorizzazioni `lambda:InvokeFunctionUrl` concesse nella politica basata sulle](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html) risorse della funzione.** In altre parole, una policy basata sulle risorse è facoltativa se l'utente ha già autorizzazioni `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction` nella policy basata sull'identità. [La valutazione delle politiche segue le regole delineate nella logica di valutazione delle politiche.](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)

Se il principal che effettua la richiesta si trova in un account diverso, il principal deve avere **sia** una policy basata sull'identità che fornisce autorizzazioni `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`, **sia** autorizzazioni concesse in una policy basata sulle risorse nella funzione che si sta tentando di invocare. La valutazione delle politiche segue le regole descritte in [Determinare se è consentita una richiesta tra più account](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html#policy-eval-cross-account).

La seguente politica basata sulle risorse consente al `example` ruolo in di richiamare l'URL della funzione associata Account AWS `444455556666` alla funzione. `my-function` La chiave [lambda: InvokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) context limita l'azione alle chiamate URL di funzione. `lambda:InvokeFunction` Ciò significa che il principale deve utilizzare l'URL della funzione per richiamare la funzione. Se non lo includi`lambda:InvokedViaFunctionUrl`, il principale può richiamare la tua funzione tramite altri metodi di invocazione, oltre all'URL della funzione.

**Example — Politica basata sulle risorse per più account**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/example"
      },
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "AWS_IAM"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::444455556666:role/example"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
      "Condition": {
        "Bool": {
          "lambda:InvokedViaFunctionUrl": "true"
        }
      }
    }
  ]
}
```

È possibile creare questa politica basata sulle risorse tramite la console utilizzando i seguenti passaggi:

**Per concedere le autorizzazioni di richiamo URL a un altro account (console)**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Scegli il nome della funzione per la quale desideri concedere autorizzazioni di richiamo URL.

1. Quindi, seleziona la scheda **Configuration** (Configurazione) e poi **Permissions** (Autorizzazioni).

1. In **Resource-based policy** (Policy basata sulle risorse), scegli **Add permissions** (Aggiungi autorizzazioni).

1. Scegli **Function URL** (URL funzione).

1. Per il tipo di **autenticazione**, scegli. **AWS\$1IAM**

1. Inserisci un **ID della dichiarazione** per la tua dichiarazione politica.

1. Per **Principal**, inserisci l'ID dell'account o l'Amazon Resource Name (ARN) dell'utente o del ruolo a cui desideri concedere le autorizzazioni. Ad esempio: **444455556666**.

1. Scegli **Save** (Salva).

In alternativa, puoi creare questa policy utilizzando i seguenti comandi [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) AWS Command Line Interface ()AWS CLI. Quando si utilizza il AWS CLI, è necessario aggiungere le `lambda:InvokeFunction` istruzioni `lambda:InvokeFunctionUrl` and separatamente. Esempio:

```
aws lambda add-permission --function-name my-function \
  --statement-id UrlPolicyInvokeURL \
  --action lambda:InvokeFunctionUrl \
  --principal 444455556666 \
  --function-url-auth-type AWS_IAM
```

```
aws lambda add-permission --function-name my-function \
  --statement-id UrlPolicyInvokeFunction \
  --action lambda:InvokeFunction \
  --principal 444455556666 \
  --invoked-via-function-url
```

## Utilizzo del tipo di autenticazione `NONE`
<a name="urls-auth-none"></a>

**Importante**  
Quando il tipo di autenticazione dell'URL della funzione è `NONE` e hai una [policy basata sulle risorse](access-control-resource-based.md) che garantisce l'accesso pubblico, qualsiasi utente non autenticato con l'URL della funzione può invocare la funzione.

In alcuni casi, potreste volere che l'URL della funzione sia pubblico. Ad esempio, potrebbe essere preferibile inviare le richieste effettuate direttamente da un browser Web. Per consentire l'accesso pubblico all'URL della funzione, scegli il tipo di autenticazione `NONE`.

Se scegli il tipo di autenticazione `NONE`, Lambda non utilizza IAM per autenticare le richieste all'URL della funzione. Tuttavia, la funzione deve avere una politica basata sulle risorse che consenta e. `lambda:InvokeFunctionUrl` `lambda:InvokeFunction` Quando crei un URL di funzione con tipo di autenticazione `NONE` utilizzando la console o AWS Serverless Application Model (AWS SAM), Lambda crea automaticamente la politica basata sulle risorse per te. Se utilizzi direttamente l'API Lambda AWS CLI AWS CloudFormation, o l'API Lambda, devi [aggiungere tu stesso la policy](#policy-cli).

Ti consigliamo di includere la chiave [lambda: InvokedViaFunctionUrl](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html#lambda-AddPermission-request-InvokedViaFunctionUrl) context nelle politiche basate sulle risorse quando usi il tipo di autenticazione. `NONE` Questa chiave di contesto garantisce che la funzione possa essere richiamata solo tramite l'URL della funzione e non tramite altri metodi di invocazione.

Tieni presente quanto segue su questa politica:
+ Tutte le entità possono chiamare `lambda:InvokeFunctionUrl` e`lambda:InvokeFunction`. Ciò significa che chiunque disponga dell'URL della tua funzione può richiamarla.
+ Il valore della chiave della `lambda:FunctionUrlAuthType` condizione è`NONE`. Ciò significa che l'informativa consente l'accesso solo quando lo è anche `NONE` il tipo di autenticazione dell'URL della funzione.
+ La `lambda:InvokedViaFunctionUrl` condizione garantisce che la funzione possa essere richiamata solo tramite l'URL della funzione e non tramite altri metodi di invocazione.

**Example — Politica predefinita basata sulle risorse per il tipo di autenticazione NONE**    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "FunctionURLAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunctionUrl",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionUrlAuthType": "NONE"
        }
      }
    },
    {
      "Sid": "FunctionURLInvokeAllowPublicAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
      "Condition": {
        "Bool": {
          "lambda:InvokedViaFunctionUrl": "true"
        }
      }
    }
  ]
}
```

**Creare la politica basata sulle risorse utilizzando il AWS CLI**  
A meno che non utilizzi la console o AWS SAM crei un URL di funzione con tipo di autenticazione`NONE`, devi aggiungere tu stesso la politica basata sulle risorse. Usa i comandi seguenti per creare istruzioni con le autorizzazioni `lambda:InvokeFunctionUrl` e `lambda:InvokeFunction`. Ogni istruzione deve essere aggiunta in un comando separato.

```
aws lambda add-permission \
  --function-name UrlTestFunction \
  --statement-id UrlPolicyInvokeURL \
  --action lambda:InvokeFunctionUrl \
  --principal * \
  --function-url-auth-type NONE
```

```
aws lambda add-permission \
  --function-name UrlTestFunction \
  --statement-id UrlPolicyInvokeFunction \
  --action lambda:InvokeFunction \
  --principal * \
  --invoked-via-function-url
```

**Nota**  
Se elimini l'URL della funzione con il tipo di autenticazione `NONE`, Lambda non elimina automaticamente la policy basata sulle risorse associata. Se desideri eliminare questa policy, dovrai farlo manualmente.

Se la politica basata sulle risorse di una funzione non concede `lambda:invokeFunctionUrl` `lambda:InvokeFunction` autorizzazioni, gli utenti riceveranno un codice di errore 403 Forbidden quando cercheranno di richiamare l'URL della funzione. Ciò si verificherà anche se l'URL della funzione utilizza il tipo di autenticazione. `NONE`

## Governance e controllo degli accessi
<a name="urls-governance"></a>

Oltre ai permessi di invocazione dell'URL della funzione, puoi anche controllare l'accesso alle azioni utilizzate per configurare la funzione. URLs Lambda supporta le seguenti azioni politiche IAM per la funzione: URLs
+ `lambda:InvokeFunctionUrl`: richiamo di una funzione Lambda utilizzando l'URL della funzione.
+ `lambda:CreateFunctionUrlConfig`: creazione di un URL della funzione e impostazione del relativo `AuthType`.
+ `lambda:UpdateFunctionUrlConfig`: aggiornamento della configurazione dell'URL della funzione e del relativo `AuthType`.
+ `lambda:GetFunctionUrlConfig`: visualizzazione dei dettagli dell'URL della funzione.
+ `lambda:ListFunctionUrlConfigs`: elenco delle configurazioni dell'URL della funzione.
+ `lambda:DeleteFunctionUrlConfig`: eliminazione dell'URL della funzione.

Per consentire o negare l'accesso all'URL della funzione ad altre AWS entità, includi queste azioni nelle policy IAM. Ad esempio, la seguente politica concede il `example` ruolo nelle Account AWS `444455556666` autorizzazioni per aggiornare l'URL della funzione per la funzione nell'account. **my-function** `123456789012`

**Example Policy dell'URL della funzione tra account**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::444455556666:role/example"
            },
            "Action": "lambda:UpdateFunctionUrlConfig",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function"
        }
    ]
}
```

### Chiavi di condizione
<a name="urls-condition-keys"></a>

Per un controllo granulare degli accessi alla funzione URLs, utilizzate i tasti contestuali delle condizioni. Lambda supporta i seguenti tasti contestuali per la funzione: URLs
+ `lambda:FunctionUrlAuthType`: definisce un valore enum che descrive il tipo di autenticazione utilizzato dall'URL della funzione. Il valore può essere `AWS_IAM` o `NONE`.
+ `lambda:InvokedViaFunctionUrl`— Limita l'`lambda:InvokeFunction`azione alle chiamate effettuate tramite l'URL della funzione. Ciò garantisce che la funzione possa essere richiamata solo utilizzando l'URL della funzione e non tramite altri metodi di invocazione. Per esempi di politiche basate sulle risorse che utilizzano la chiave di `lambda:InvokedViaFunctionUrl` contesto, consulta gli esempi in and. [Utilizzo del tipo di autenticazione `AWS_IAM`](#urls-auth-iam) [Utilizzo del tipo di autenticazione `NONE`](#urls-auth-none)

È possibile utilizzare queste chiavi di contesto nelle politiche associate alla propria funzione. Ad esempio, potresti voler limitare chi può apportare modifiche alla configurazione della tua funzione URLs. Per negare tutte le richieste `UpdateFunctionUrlConfig` a qualsiasi funzione con tipo di autenticazione URL `NONE`, è possibile definire la seguente policy:

**Example Policy dell'URL della funzione con rifiuto esplicito**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action":[
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "NONE"
                }
            }
        }
    ]
}
```

Per concedere il `example` ruolo nelle Account AWS `444455556666` autorizzazioni `CreateFunctionUrlConfig` e nelle `UpdateFunctionUrlConfig` richieste sulle funzioni con tipo di autenticazione URL`AWS_IAM`, puoi definire la seguente politica:

**Example Policy dell'URL della funzione con permesso esplicito**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": { 
                "AWS": "arn:aws:iam::444455556666:role/example"
            },
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
            "Condition": {
                "StringEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```

È inoltre possibile utilizzare questa chiave di condizione in una [policy di controllo dei servizi](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) (SCP). Utilizzalo SCPs per gestire le autorizzazioni in un'intera organizzazione in. AWS Organizations Ad esempio, per impedire agli utenti di creare o aggiornare funzioni URLs che utilizzano qualcosa di diverso dal tipo di `AWS_IAM` autenticazione, utilizza la seguente politica di controllo del servizio:

**Example SCP dell'URL della funzione con rifiuto esplicito**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action":[
                "lambda:CreateFunctionUrlConfig",
                "lambda:UpdateFunctionUrlConfig"
            ],
            "Resource": "arn:aws:lambda:*:123456789012:function:*",
            "Condition": {
                "StringNotEquals": {
                    "lambda:FunctionUrlAuthType": "AWS_IAM"
                }
            }
        }
    ]
}
```

# 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>  | 

# Monitoraggio degli URL della funzione Lambda
<a name="urls-monitoring"></a>

Puoi utilizzare AWS CloudTrail e Amazon CloudWatch per monitorare gli URL della funzione.

**Topics**
+ [

## Monitoraggio degli URL della funzione con CloudTrail
](#urls-cloudtrail)
+ [

## Parametri CloudWatch per gli URL della funzione
](#urls-cloudwatch)

## Monitoraggio degli URL della funzione con CloudTrail
<a name="urls-cloudtrail"></a>

Per gli URL della funzione, Lambda supporta automaticamente la registrazione delle seguenti operazioni API come eventi nei file di log di CloudTrail:
+ [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html)
+ [UpdateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionUrlConfig.html)
+ [DeleteFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionUrlConfig.html)
+ [GetFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionUrlConfig.html)
+ [ListFunctionUrlConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctionUrlConfigs.html)

Ogni voce di registro contiene informazioni sull'identità del chiamante, sul momento in cui è stata effettuata la richiesta e altri dettagli. Puoi vedere tutti gli eventi degli ultimi 90 giorni visualizzando la **cronologia eventi** di CloudTrail. Per conservare i record degli ultimi 90 giorni, puoi creare un percorso.

Per impostazione predefinita, CloudTrail non registra le richieste `InvokeFunctionUrl`, che sono considerate eventi di dati. È comunque possibile attivare la registrazione degli eventi di dati in CloudTrail. Per ulteriori informazioni, consulta [Registrazione di eventi di dati per i percorsi](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html) nella *Guida per l'utente di AWS CloudTrail*.

## Parametri CloudWatch per gli URL della funzione
<a name="urls-cloudwatch"></a>

Lambda invia parametri aggregati relativi alle richieste degli URL della funzione a CloudWatch. Con questi parametri, puoi monitorare gli URL della funzione, creare dashboard e configurare allarmi nella console di CloudWatch.

Gli URL della funzione supportano i seguenti parametri di richiamo. È consigliabile visualizzare questi parametri con le statistiche di `Sum`.
+ `UrlRequestCount`: il numero di richieste inviate all'URL della funzione.
+ `Url4xxCount`: il numero di richieste che hanno restituito un codice di stato HTTP 4XX. I codici della serie 4XX indicano errori lato client, ad esempio richieste non valide.
+ `Url5xxCount`: il numero di richieste che hanno restituito un codice di stato HTTP 5XX. I codici della serie 5XX indicano errori lato server, ad esempio errori di funzione e timeout.

Gli URL della funzione supportano anche il seguente parametro di prestazioni. È consigliabile visualizzare questo parametro con le statistiche di `Average` o `Max`.
+ `UrlRequestLatency`: il periodo di tempo che intercorre tra il momento in cui l'URL della funzione riceve una richiesta e il momento in cui l'URL della funzione restituisce una risposta.

Ciascuno di questi parametri di richiamo e prestazioni supporta le seguenti dimensioni:
+ `FunctionName`: visualizza i parametri aggregati per gli URL della funzione assegnati a una versione `$LATEST` non pubblicata di una funzione o a uno degli alias della funzione. Ad esempio, `hello-world-function`.
+ `Resource`: visualizza i parametri relativi a un URL della funzione specifico. Questo URL è definito dal nome di una funzione, insieme alla versione `$LATEST` non pubblicata della funzione o a uno degli alias della funzione. Ad esempio, `hello-world-function:$LATEST`.
+ `ExecutedVersion`: visualizza i parametri per un URL di funzione specifico, in base alla versione eseguita. Puoi utilizzare questa dimensione principalmente per tenere traccia dell'URL della funzione assegnato alla versione `$LATEST` non pubblicata.

# Selezionare un metodo per richiamare la funzione Lambda tramite una richiesta HTTP
<a name="furls-http-invoke-decision"></a>

Numerosi casi d'uso comuni per Lambda implicano l'invocazione della funzione tramite una richiesta HTTP. Ad esempio, potrebbe essere preferibile che un'applicazione Web invochi la funzione tramite una richiesta del browser. Le funzioni Lambda possono essere utilizzate anche per creare REST completo APIs, gestire le interazioni degli utenti da app mobili, elaborare dati da servizi esterni tramite chiamate HTTP o creare webhook personalizzati.

Le sezioni seguenti spiegano quali sono le tue scelte per richiamare Lambda tramite HTTP e forniscono informazioni per aiutarti a prendere la decisione giusta per il tuo caso d'uso particolare.

## Quali sono le tue scelte quando selezioni un metodo di invocazione HTTP?
<a name="w2aac39c81c73b9"></a>

[[Lambda offre due metodi principali per richiamare una funzione utilizzando una richiesta HTTP: funzione e API URLs Gateway.](services-apigateway.md)](urls-configuration.md) Le differenze tra queste due opzioni sono le seguenti:
+ **La funzione Lambda URLs** fornisce un endpoint HTTP semplice e diretto per una funzione Lambda. Sono ottimizzati per semplicità ed economicità e forniscono il percorso più veloce per esporre una funzione Lambda tramite HTTP.
+ **API Gateway** è un servizio più avanzato per la creazione di funzionalità complete APIs. API Gateway è ottimizzato per la creazione e la gestione di produzioni APIs su larga scala e fornisce strumenti completi per la sicurezza, il monitoraggio e la gestione del traffico.

## Suggerimenti se conosci già le tue esigenze
<a name="w2aac39c81c73c11"></a>

Se hai già le idee chiare sulle tue esigenze, ecco i nostri suggerimenti di base:

Consigliamo **[la funzionalità URLs](urls-configuration.md)** per applicazioni semplici o per la prototipazione in cui sono necessari solo metodi di autenticazione e request/response gestione di base e dove si desidera ridurre al minimo costi e complessità.

**[API Gateway](services-apigateway.md)** è la scelta migliore per le applicazioni di produzione su larga scala o per i casi in cui sono necessarie funzionalità più avanzate come il supporto [OpenAPI Description](https://www.openapis.org/), una scelta di opzioni di autenticazione, nomi di dominio personalizzati o una request/response gestione avanzata che include throttling, caching e trasformazione. request/response 

## Cosa considerare quando si seleziona un metodo per richiamare la funzione Lambda
<a name="w2aac39c81c73c13"></a>

Nella scelta tra funzione URLs e API Gateway, è necessario considerare i seguenti fattori:
+ Le tue esigenze di autenticazione, ad esempio se richiedi OAuth o Amazon Cognito per autenticare gli utenti
+ I tuoi requisiti di scalabilità e la complessità dell'API che desideri implementare
+ Se hai bisogno di funzionalità avanzate come la convalida e la formattazione delle richieste request/response 
+ I tuoi requisiti di monitoraggio
+ I tuoi obiettivi di costo

Comprendendo questi fattori, è possibile selezionare l'opzione che meglio bilancia i requisiti di sicurezza, complessità e costi.

Le informazioni seguente riepilogano le differenze principali tra le due opzioni.

### Autenticazione
<a name="w2aac39c81c73c13c11b1"></a>
+ **La funzione URLs** fornisce opzioni di autenticazione di base tramite AWS Identity and Access Management (IAM). Puoi configurare gli endpoint in modo che siano pubblici (senza autenticazione) o che richiedano l'autenticazione IAM. Con l'autenticazione IAM, puoi utilizzare AWS credenziali standard o ruoli IAM per controllare l'accesso. Sebbene sia semplice da configurare, questo approccio offre opzioni limitate rispetto ad altri metodi di autenticazione.
+ **API Gateway** fornisce l'accesso a una gamma più completa di opzioni di autenticazione. Oltre all'autenticazione IAM, puoi utilizzare gli [autorizzatori Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) (logica di autenticazione personalizzata), i pool di utenti di [Amazon Cognito e i flussi](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) .0. OAuth2 Questa flessibilità consente di implementare schemi di autenticazione complessi, inclusi provider di autenticazione di terze parti, autenticazione basata su token e autenticazione a più fattori.

### Gestione di richieste/risposte
<a name="w2aac39c81c73c13c11b3"></a>
+ **La funzione URLs fornisce la** gestione di base delle richieste e delle risposte HTTP. Supportano i metodi HTTP standard e includono il supporto integrato per CORS (cross-origin resource sharing). Sebbene siano in grado di gestire i payload JSON e i parametri di query in modo naturale, non offrono funzionalità di trasformazione o convalida delle richieste. La gestione delle risposte è altrettanto semplice: il client riceve la risposta dalla funzione Lambda esattamente come la restituisce Lambda.
+ **API Gateway** offre sofisticate funzionalità di gestione delle richieste e delle risposte. È possibile definire validatori di richiesta, trasformare richieste e risposte utilizzando modelli di mappatura, impostare request/response intestazioni e implementare la memorizzazione nella cache delle risposte. API Gateway supporta anche payload binari e nomi di dominio personalizzati e può modificare le risposte prima che raggiungano il client. È possibile configurare modelli per la request/response convalida e la trasformazione utilizzando JSON Schema.

### Dimensionamento
<a name="w2aac39c81c73c13c11b5"></a>
+ Le **funzioni** si URLs adattano direttamente ai limiti di concorrenza della funzione Lambda e gestisci i picchi di traffico scalando la funzione fino al limite di concorrenza massimo configurato. Una volta raggiunto tale limite, Lambda risponde alle richieste aggiuntive con risposte HTTP 429. Non esiste un meccanismo di accodamento integrato, pertanto la gestione della scalabilità dipende interamente dalla configurazione della funzione Lambda. Per impostazione predefinita, le funzioni Lambda hanno un limite di 1.000 esecuzioni simultanee per. Regione AWS
+ **API Gateway** offre funzionalità di scalabilità aggiuntive oltre alla scalabilità propria di Lambda. Include controlli integrati per l'accodamento e la limitazione delle richieste che consentono di gestire i picchi di traffico con maggiore efficienza. Per impostazione predefinita, API Gateway è in grado di gestire fino a 10.000 richieste al secondo per regione, con una capacità di espansione di 5.000 richieste al secondo. Fornisce inoltre strumenti per limitare le richieste a diversi livelli (API, fase o metodo) per proteggere il backend.

### Monitoraggio
<a name="w2aac39c81c73c13c11b7"></a>
+ **La funzione URLs** offre un monitoraggio di base tramite i CloudWatch parametri di Amazon, tra cui il conteggio delle richieste, la latenza e i tassi di errore. Puoi accedere a parametri e log Lambda standard, che mostrano le richieste non elaborate che arrivano alla tua funzione. Sebbene ciò fornisca una visibilità operativa essenziale, i parametri si concentrano principalmente sull'esecuzione delle funzioni.
+ **API Gateway** offre funzionalità di monitoraggio complete, tra cui parametri dettagliati, opzioni di registrazione e tracciamento. Puoi monitorare le chiamate API, la latenza, i tassi di errore e i tassi di cache hit/miss tramite. CloudWatch API Gateway si integra anche con AWS X-Ray il tracciamento distribuito e fornisce formati di registrazione personalizzabili.

### Costo
<a name="w2aac39c81c73c13c11b9"></a>
+ Le **funzioni URLs** seguono il modello di prezzo standard Lambda: paghi solo per le chiamate di funzione e il tempo di calcolo. Non sono previsti costi aggiuntivi per l'endpoint URL stesso. Ciò lo rende una scelta conveniente per applicazioni semplici APIs o a basso traffico se non sono necessarie le funzionalità aggiuntive di API Gateway.
+ **API Gateway** offre un [piano gratuito](https://aws.amazon.com/api-gateway/pricing/#Free_Tier) che include un milione di chiamate API ricevute per REST APIs e un milione di chiamate API ricevute per HTTP APIs. Successivamente, API Gateway addebita i costi per le chiamate API, il trasferimento dei dati e la memorizzazione nella cache (se abilitata). Consulta la [pagina dei prezzi](https://aws.amazon.com/api-gateway/pricing/) di API Gateway per conoscere i costi relativi al tuo caso d'uso.

### Altre funzionalità
<a name="w2aac39c81c73c13c11c11"></a>
+  URLsLe **funzioni** sono progettate per la semplicità e l'integrazione diretta con Lambda. Supportano endpoint HTTP e HTTPS, offrono supporto CORS integrato e forniscono endpoint dual-stack (e). IPv4 IPv6 Sebbene non dispongano di funzionalità avanzate, eccellono negli scenari in cui è necessario un modo rapido e diretto per esporre le funzioni Lambda tramite HTTP.
+ **API Gateway** include numerose funzionalità aggiuntive come il controllo delle versioni delle API, la gestione delle fasi, le chiavi API per i piani di utilizzo, la documentazione delle API tramite Swagger/OpenAPI, l'accesso WebSocket APIs privato all'interno di APIs un VPC e l'integrazione WAF per una maggiore sicurezza. Supporta anche implementazioni Canary, integrazioni fittizie per i test e l'integrazione con altri sistemi oltre a Lambda. Servizi AWS 

## Selezionare un metodo per richiamare la funzione Lambda
<a name="w2aac39c81c73c15"></a>

Ora che hai letto i criteri per la selezione tra la funzione Lambda URLs e l'API Gateway e le principali differenze tra di essi, puoi selezionare l'opzione più adatta alle tue esigenze e utilizzare le seguenti risorse per iniziare a utilizzarla.

------
#### [ Function URLs ]

**Inizia a usare la funzione URLs con le seguenti risorse**
+ Segui il tutorial [Creazione di una funzione Lambda con la funzione URL](urls-webhook-tutorial.md)
+ Scopri di più sulla funzione URLs nel [Creazione e gestione della funzione Lambda URLs](urls-configuration.md) capitolo di questa guida
+ Prova il tutorial guidato dalla console **Creare una semplice app Web** effettuando le seguenti operazioni:

1. Apri la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Apri il pannello di aiuto scegliendo l'icona nell'angolo in alto a destra della schermata.  
![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/console_help_screenshot.png)

1. Seleziona **Tutorial**.

1. In **Crea una semplice app Web**, scegli **Avvia tutorial**.

------
#### [ API Gateway ]

**Iniziare a usare Lambda e API Gateway con le seguenti risorse**
+ Segui il tutorial [Utilizzo di Lambda con API Gateway](services-apigateway-tutorial.md) per creare una REST API integrata con una funzione Lambda di backend.
+ Scopri di più sui diversi tipi di API offerti da API Gateway nelle seguenti sezioni della *Guida per gli sviluppatori di Gateway Amazon API*:
  + [API Gateway REST APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-rest-api.html)
  + [Gateway API HTTP APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html)
  + [API Gateway WebSocket APIs](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api.html)
+ Prova uno o più esempi nella sezione [Tutorial e workshop](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-tutorials.html) della *Guida per gli sviluppatori di Gateway Amazon API*.

------

# Tutorial: creazione di un endpoint webhook utilizzando l'URL di una funzione Lambda
<a name="urls-webhook-tutorial"></a>

In questo tutorial, crei l'URL di una funzione Lambda per implementare un endpoint webhook. Un webhook è una comunicazione leggera basata sugli eventi che invia automaticamente i dati tra le applicazioni tramite HTTP. È possibile utilizzare un webhook per ricevere aggiornamenti immediati sugli eventi che si verificano in un altro sistema, ad esempio quando un nuovo cliente si registra su un sito Web, viene elaborato un pagamento o viene caricato un file.

Con Lambda, i webhook possono essere implementati utilizzando la funzione Lambda o l'API Gateway. URLs URLs Le funzioni sono un'ottima scelta per webhook semplici che non richiedono funzionalità come l'autorizzazione avanzata o la convalida delle richieste.

**Suggerimento**  
Se non sei sicuro di quale sia la soluzione migliore per il tuo caso d'uso particolare, consulta. [Selezionare un metodo per richiamare la funzione Lambda tramite una richiesta HTTP](furls-http-invoke-decision.md)

## Prerequisiti
<a name="urls-webhook-tutorial-prereqs"></a>

Per completare questo tutorial, devi avere Python (versione 3.8 o successiva) o Node.js (versione 18 o successiva) installato sul tuo computer locale.

Per testare l'endpoint utilizzando una richiesta HTTP, il tutorial utilizza [curl](https://curl.se/), uno strumento a riga di comando che è possibile utilizzare per trasferire dati utilizzando vari protocolli di rete. Fai riferimento alla [documentazione di curl](https://curl.se/docs/install.html) per scoprire come installare lo strumento se non lo possiedi già.

## Creazione della funzione Lambda
<a name="urls-webhook-tutorial-function"></a>

Per prima cosa crea la funzione Lambda che viene eseguita quando una richiesta HTTP viene inviata al tuo endpoint webhook. In questo esempio, l'applicazione di invio invia un aggiornamento ogni volta che viene inviato un pagamento e indica nel corpo della richiesta HTTP se il pagamento è andato a buon fine. La funzione Lambda analizza la richiesta e interviene in base allo stato del pagamento. In questo esempio, il codice stampa solo l'ID dell'ordine per il pagamento, ma in un'applicazione reale è possibile aggiungere l'ordine a un database o inviare una notifica.

La funzione implementa anche il metodo di autenticazione più comune utilizzato per i webhook, l'autenticazione dei messaggi basata su hash (HMAC). Con questo metodo, sia l'applicazione di invio che quella di ricezione condividono una chiave segreta. L'applicazione di invio utilizza un algoritmo di hashing per generare una firma univoca utilizzando questa chiave insieme al contenuto del messaggio e include la firma nella richiesta del webhook come intestazione HTTP. L'applicazione ricevente ripete quindi questo passaggio, generando la firma utilizzando la chiave segreta e confronta il valore risultante con la firma inviata nell'intestazione della richiesta. Se il risultato corrisponde, la richiesta viene considerata legittima. 

Crea la funzione utilizzando la console Lambda con il runtime Python o Node.js.

------
#### [ Python ]

**Creazione della funzione Lambda**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Crea una funzione di base «Hello world» effettuando le seguenti operazioni:

   1. Scegli **Crea funzione**.

   1. Scegli **Crea da zero**.

   1. Nel campo **Function name (Nome funzione)**, immettere **myLambdaWebhook**.

   1. **Per **Runtime**, seleziona python3.14.**

   1. Scegli **Crea funzione**.

1. Nel riquadro **Codice sorgente**, sostituisci il codice esistente copiando e incollando quanto segue:

   ```
   import json
   import hmac
   import hashlib
   import os
   
   def lambda_handler(event, context):
       
       # Get the webhook secret from environment variables
       webhook_secret = os.environ['WEBHOOK_SECRET']
       
       # Verify the webhook signature
       if not verify_signature(event, webhook_secret):
           return {
               'statusCode': 401,
               'body': json.dumps({'error': 'Invalid signature'})
           }
       
       try:
           # Parse the webhook payload
           payload = json.loads(event['body'])
           
           # Handle different event types
           event_type = payload.get('type')
           
           if event_type == 'payment.success':
               # Handle successful payment
               order_id = payload.get('orderId')
               print(f"Processing successful payment for order {order_id}")
               
               # Add your business logic here
               # For example, update database, send notifications, etc.
               
           elif event_type == 'payment.failed':
               # Handle failed payment
               order_id = payload.get('orderId')
               print(f"Processing failed payment for order {order_id}")
               
               # Add your business logic here
               
           else:
               print(f"Received unhandled event type: {event_type}")
           
           # Return success response
           return {
               'statusCode': 200,
               'body': json.dumps({'received': True})
           }
           
       except json.JSONDecodeError:
           return {
               'statusCode': 400,
               'body': json.dumps({'error': 'Invalid JSON payload'})
           }
       except Exception as e:
           print(f"Error processing webhook: {e}")
           return {
               'statusCode': 500,
               'body': json.dumps({'error': 'Internal server error'})
           }
   
   def verify_signature(event, webhook_secret):
       """
       Verify the webhook signature using HMAC
       """
       try:
           # Get the signature from headers
           signature = event['headers'].get('x-webhook-signature')
   
           if not signature:
               print("Error: Missing webhook signature in headers")
               return False
           
           # Get the raw body (return an empty string if the body key doesn't exist)
           body = event.get('body', '')
           
           # Create HMAC using the secret key
           expected_signature = hmac.new(
               webhook_secret.encode('utf-8'),
               body.encode('utf-8'),
               hashlib.sha256
           ).hexdigest()
           
           # Compare the expected signature with the received signature to authenticate the message
           is_valid = hmac.compare_digest(signature, expected_signature)
           if not is_valid:
               print(f"Error: Invalid signature. Received: {signature}, Expected: {expected_signature}")
               return False
               
           return True
       except Exception as e:
           print(f"Error verifying signature: {e}")
           return False
   ```

1. Nella sezione **DEPLOY**, scegli **Implementa** per aggiornare il codice della tua funzione.

------
#### [ Node.js ]

**Creazione della funzione Lambda**

1. Aprire la pagina [Funzioni](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Crea una funzione di base «Hello world» effettuando le seguenti operazioni:

   1. Scegli **Crea funzione**.

   1. Scegli **Crea da zero**.

   1. Nel campo **Function name (Nome funzione)**, immettere **myLambdaWebhook**.

   1. **Per **Runtime**, seleziona nodejs24.x.**

   1. Scegli **Crea funzione**.

1. Nel riquadro **Codice sorgente**, sostituisci il codice esistente copiando e incollando quanto segue:

   ```
   import crypto from 'crypto';
   
   export const handler = async (event, context) => {
       // Get the webhook secret from environment variables
       const webhookSecret = process.env.WEBHOOK_SECRET;
   
       // Verify the webhook signature
       if (!verifySignature(event, webhookSecret)) {
           return {
               statusCode: 401,
               body: JSON.stringify({ error: 'Invalid signature' })
           };
       }
   
       try {
           // Parse the webhook payload
           const payload = JSON.parse(event.body);
   
           // Handle different event types
           const eventType = payload.type;
   
           switch (eventType) {
               case 'payment.success': {
                   // Handle successful payment
                   const orderId = payload.orderId;
                   console.log(`Processing successful payment for order ${orderId}`);
   
                   // Add your business logic here
                   // For example, update database, send notifications, etc.
                   break;
               }
   
               case 'payment.failed': {
                   // Handle failed payment
                   const orderId = payload.orderId;
                   console.log(`Processing failed payment for order ${orderId}`);
   
                   // Add your business logic here
                   break;
               }
   
               default:
                   console.log(`Received unhandled event type: ${eventType}`);
           }
   
           // Return success response
           return {
               statusCode: 200,
               body: JSON.stringify({ received: true })
           };
   
       } catch (error) {
           if (error instanceof SyntaxError) {
               // Handle JSON parsing errors
               return {
                   statusCode: 400,
                   body: JSON.stringify({ error: 'Invalid JSON payload' })
               };
           }
   
           // Handle all other errors
           console.error('Error processing webhook:', error);
           return {
               statusCode: 500,
               body: JSON.stringify({ error: 'Internal server error' })
           };
       }
   };
   
   // Verify the webhook signature using HMAC
   
   const verifySignature = (event, webhookSecret) => {
       try {
           // Get the signature from headers
           const signature = event.headers['x-webhook-signature'];
     
           if (!signature) {
               console.log('No signature found in headers:', event.headers);
               return false;
           }
     
           // Get the raw body (return an empty string if the body key doesn't exist)
           const body = event.body || '';
     
           // Create HMAC using the secret key
           const hmac = crypto.createHmac('sha256', webhookSecret);
           const expectedSignature = hmac.update(body).digest('hex');
     
           // Compare expected and received signatures
           const isValid = signature === expectedSignature;
           if (!isValid) {
               console.log(`Invalid signature. Received: ${signature}, Expected: ${expectedSignature}`);
               return false;
           }
           
           return true;
       } catch (error) {
           console.error('Error during signature verification:', error);
           return false;
       }
     };
   ```

1. Nella sezione **DEPLOY**, scegli **Implementa** per aggiornare il codice della tua funzione.

------

## Crea la chiave segreta
<a name="urls-webhook-tutorial-key"></a>

Per autenticare la richiesta webhook, la funzione Lambda utilizza una chiave segreta che condivide con l'applicazione chiamante. In questo esempio, la chiave viene memorizzata in una variabile di ambiente. In un'applicazione di produzione, non includere informazioni sensibili come le password nel codice funzione. Invece, [crea un Gestione dei segreti AWS segreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html) e poi [usa l'estensione Lambda AWS Parameters and Secrets](with-secrets-manager.md) per recuperare le credenziali nella funzione Lambda.

**Crea e archivia la chiave segreta del webhook**

1. Genera una stringa lunga e casuale utilizzando un generatore di numeri casuali crittograficamente sicuro. Puoi usare i seguenti frammenti di codice in Python o Node.js per generare e stampare un segreto di 32 caratteri o usare il tuo metodo preferito.

------
#### [ Python ]

**Example codice per generare un segreto**  

   ```
   import secrets
   webhook_secret = secrets.token_urlsafe(32)
   print(webhook_secret)
   ```

------
#### [ Node.js ]

**Example codice per generare un segreto (formato del modulo ES)**  

   ```
   import crypto from 'crypto';
   let webhookSecret = crypto.randomBytes(32).toString('base64');
   console.log(webhookSecret)
   ```

------

1. Memorizza la stringa generata come variabile di ambiente per la tua funzione effettuando le seguenti operazioni:

   1. Nella scheda **Configurazione** della funzione, seleziona **Variabili di ambiente**.

   1. Scegli **Modifica**.

   1. Scegli **Add environment variable (Aggiungi variabile d'ambiente)**.

   1. Per **Chiave****WEBHOOK\$1SECRET**, inserisci, quindi per **Valore**, inserisci il segreto generato nel passaggio precedente.

   1. Scegli **Save** (Salva).

Dovrai utilizzare nuovamente questo segreto più avanti nel tutorial per testare la tua funzione, quindi prendine nota ora.

## Crea l'endpoint URL della funzione
<a name="urls-webhook-tutorial-furl"></a>

Crea un endpoint per il tuo webhook utilizzando l'URL di una funzione Lambda. Poiché utilizzi il tipo di autenticazione di `NONE` per creare un endpoint con accesso pubblico, chiunque disponga dell'URL può richiamare la tua funzione. Per ulteriori informazioni sul controllo dell'accesso alla funzione, consulta. URLs [Controlla l'accesso alla funzione Lambda URLs](urls-auth.md) Se hai bisogno di opzioni di autenticazione più avanzate per il tuo webhook, prendi in considerazione l'utilizzo di API Gateway.

**Crea l'endpoint URL della funzione**

1. Nella scheda **Configurazione** della funzione, selezionate **Function URL**.

1. Scegli **Crea URL della funzione**.

1. Per il **tipo di autenticazione**, seleziona **NESSUNA**.

1. Scegli **Save** (Salva).

L'endpoint per l'URL della funzione appena creato viene visualizzato nel riquadro **URL della funzione**. Copia l'endpoint per utilizzarlo più avanti nel tutorial.

## Prova la funzione nella console
<a name="urls-webhook-tutorial-test-console"></a>

Prima di utilizzare una richiesta HTTP per richiamare la funzione utilizzando l'endpoint URL, testala nella console per confermare che il codice funzioni come previsto.

Per verificare la funzione nella console, devi prima calcolare una firma webhook utilizzando il segreto generato in precedenza nel tutorial con il seguente payload JSON di test:

```
{
    "type": "payment.success", 
    "orderId": "1234",
    "amount": "99.99"
}
```

Usa uno dei seguenti esempi di codice Python o Node.js per calcolare la firma del webhook usando il tuo segreto.

------
#### [ Python ]

**Calcola la firma del webhook**

1. Salva il codice seguente come file denominato`calculate_signature.py`. Sostituisci il webhook secret nel codice con il tuo valore.

   ```
   import secrets
   import hmac
   import json
   import hashlib
   
   webhook_secret = "arlbSDCP86n_1H90s0fL_Qb2NAHBIBQOyGI0X4Zay4M"
   
   body = json.dumps({"type": "payment.success", "orderId": "1234", "amount": "99.99"})
   
   signature = hmac.new(
               webhook_secret.encode('utf-8'),
               body.encode('utf-8'),
               hashlib.sha256
           ).hexdigest()
   
   print(signature)
   ```

1. Calcola la firma eseguendo il comando seguente dalla stessa directory in cui hai salvato il codice. Copia la firma generata dal codice.

   ```
   python calculate_signature.py
   ```

------
#### [ Node.js ]

**Calcola la firma del webhook**

1. Salva il codice seguente come file denominato`calculate_signature.mjs`. Sostituisci il webhook secret nel codice con il tuo valore.

   ```
   import crypto from 'crypto';
   
   const webhookSecret = "arlbSDCP86n_1H90s0fL_Qb2NAHBIBQOyGI0X4Zay4M"
   const body = "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}";
   
   let hmac = crypto.createHmac('sha256', webhookSecret);
   let signature = hmac.update(body).digest('hex');
   
   console.log(signature);
   ```

1. Calcola la firma eseguendo il comando seguente dalla stessa directory in cui hai salvato il codice. Copia la firma generata dal codice.

   ```
   node calculate_signature.mjs
   ```

------

Ora puoi testare il codice della funzione utilizzando una richiesta HTTP di prova nella console.

**Prova la funzione nella console**

1. Seleziona la scheda **Codice** relativa alla tua funzione.

1. Nella sezione **EVENTI DI TEST**, scegli **Crea nuovo evento di test**

1. Per **Event name** (Nome evento), immettere **myEvent**.

1. Sostituisci il JSON esistente copiando e incollando quanto segue nel riquadro **Event** JSON. Sostituisci la firma del webhook con il valore calcolato nel passaggio precedente.

   ```
   {
     "headers": {
       "Content-Type": "application/json",
       "x-webhook-signature": "2d672e7a0423fab740fbc040e801d1241f2df32d2ffd8989617a599486553e2a"
     },
     "body": "{\"type\": \"payment.success\", \"orderId\": \"1234\", \"amount\": \"99.99\"}"
   }
   ```

1. Scegli **Save** (Salva).

1. Scegli **Richiama **.

   Verrà visualizzato un output simile al seguente:

------
#### [ Python ]

   ```
   Status: Succeeded
   Test Event Name: myEvent
   
   Response:
   {
     "statusCode": 200,
     "body": "{\"received\": true}"
   }
   
   Function Logs:
   START RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6 Version: $LATEST
   Processing successful payment for order 1234
   END RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6
   REPORT RequestId: 50cc0788-d70e-453a-9a22-ceaa210e8ac6	Duration: 1.55 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 36 MB	Init Duration: 136.32 ms
   ```

------
#### [ Node.js ]

   ```
   Status: Succeeded
   Test Event Name: myEvent
   
   Response:
   {
     "statusCode": 200,
     "body": "{\"received\":true}"
   }
   
   Function Logs:
   START RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4 Version: $LATEST
   2025-01-10T18:05:42.062Z	e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4	INFO	Processing successful payment for order 1234
   END RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4
   REPORT RequestId: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4	Duration: 60.10 ms	Billed Duration: 61 ms	Memory Size: 128 MB	Max Memory Used: 72 MB	Init Duration: 174.46 ms
   
   Request ID: e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4
   ```

------

## Prova la funzione utilizzando una richiesta HTTP
<a name="urls-webhook-tutorial-test-curl"></a>

Usa lo strumento da riga di comando curl per testare il tuo endpoint webhook.

**Prova la funzione usando le richieste HTTP**

1. In un terminale o in un programma shell, esegui il seguente comando curl. Sostituisci l'URL con il valore dell'endpoint URL della tua funzione e sostituisci la firma del webhook con la firma calcolata utilizzando la tua chiave segreta.

   ```
   curl -X POST https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/ \
   -H "Content-Type: application/json" \
   -H "x-webhook-signature: d5f52b76ffba65ff60ea73da67bdf1fc5825d4db56b5d3ffa0b64b7cb85ef48b" \
   -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'
   ```

   Verrà visualizzato l’output seguente:

   ```
   {"received": true}
   ```

1. Esamina CloudWatch i log della tua funzione per confermare che abbia analizzato correttamente il payload effettuando le seguenti operazioni:

   1. Apri la pagina del [gruppo Logs](https://console.aws.amazon.com/cloudwatch/home#logsV2:log-groups) nella CloudWatch console Amazon.

   1. Seleziona il gruppo di log della tua funzione (`/aws/lambda/myLambdaWebhook`).

   1. Seleziona il flusso di log più recente.

      Dovresti vedere un output simile al seguente nei log della tua funzione:

------
#### [ Python ]

      ```
      Processing successful payment for order 1234
      ```

------
#### [ Node.js ]

      ```
      2025-01-10T18:05:42.062Z e54fe6c7-1df9-4f05-a4c4-0f71cacd64f4 INFO Processing successful payment for order 1234
      ```

------

1. Verifica che il codice rilevi una firma non valida eseguendo il seguente comando curl. Sostituisci l'URL con il tuo endpoint URL della funzione.

   ```
   curl -X POST https://ryqgmbx5xjzxahif6frvzikpre0bpvpf.lambda-url.us-west-2.on.aws/ \
   -H "Content-Type: application/json" \
   -H "x-webhook-signature: abcdefg" \
   -d '{"type": "payment.success", "orderId": "1234", "amount": "99.99"}'
   ```

   Verrà visualizzato l’output seguente:

   ```
   {"error": "Invalid signature"}
   ```

## Pulizia delle risorse
<a name="urls-webhook-tutorial-cleanup"></a>

Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando AWS le risorse che non utilizzi più, eviti addebiti inutili a tuo carico. Account AWS

**Per eliminare la funzione Lambda**

1. Aprire la pagina [Functions (Funzioni)](https://console.aws.amazon.com/lambda/home#/functions) della console Lambda.

1. Selezionare la funzione creata.

1. Scegliere **Operazioni**, **Elimina**.

1. Inserisci **confirm** nel campo di immissione del testo, quindi scegli **Elimina**.

Quando hai creato la funzione Lambda nella console, Lambda ha anche creato un [ruolo di esecuzione](lambda-intro-execution-role.md) per la tua funzione.

**Come eliminare il ruolo di esecuzione**

1. Aprire la pagina [Ruoli](https://console.aws.amazon.com/iam/home#/roles) della console IAM.

1. Seleziona il ruolo di esecuzione creato da Lambda. Il ruolo ha il formato `myLambdaWebhook-role-<random string>` del nome.

1. Scegliere **Elimina**.

1. Inserisci il nome del ruolo nel campo di immissione testo e seleziona **Elimina**.