

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

# Utilizzo di Lambda con Amazon MQ
<a name="with-mq"></a>

**Nota**  
[Se desideri inviare dati a una destinazione diversa da una funzione Lambda o arricchire i dati prima di inviarli, consulta Amazon Pipes. EventBridge ](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html)

Amazon MQ è un servizio gestito di broker dei messaggi per [Apache ActiveMQ](https://activemq.apache.org/) e [RabbitMQ](https://www.rabbitmq.com). Un *broker di messaggi* consente alle applicazioni e ai componenti software di comunicare utilizzando vari linguaggi di programmazione, sistemi operativi e protocolli di messaggistica formali tramite destinazioni eventi di tipo argomento o coda.

Amazon MQ può anche gestire automaticamente istanze di Amazon Elastic Compute Cloud (Amazon EC2) con l'installazione di ActiveMQ o RabbitMQ e la fornitura di diverse topologie di rete e altri requisiti infrastrutturali.

Puoi utilizzare una funzione Lambda per elaborare i record da un broker di messaggi di Amazon MQ. Lambda richiama la funzione tramite uno [strumento di mappatura dell'origine degli eventi](invocation-eventsourcemapping.md), una risorsa Lambda che legge i messaggi dal broker e richiama la funzione [in maniera sincrona](invocation-sync.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 

Lo strumento di mappatura dell'origine degli eventi di Amazon MQ presenta le seguenti restrizioni di configurazione:
+ Simultaneità: le funzioni Lambda che utilizzano uno strumento di mappatura dell'origine degli eventi Amazon MQ hanno un'impostazione di [simultaneità](lambda-concurrency.md) massima predefinita. Per ActiveMQ, il servizio Lambda limita il numero di ambienti di esecuzione simultanei a cinque per lo strumento di mappatura dell'origine degli eventi di Amazon MQ. Per RabbitMQ, il numero di ambienti di esecuzione simultanei è limitato a 1 per lo strumento di mappatura dell'origine degli eventi di Amazon MQ. Anche se modifichi le impostazioni di simultaneità sottoposta a provisioning o riservata, il servizio Lambda non renderà disponibili altri ambienti di esecuzione. Per richiedere un aumento della concorrenza massima predefinita per una singola mappatura della sorgente di eventi Amazon MQ, contatta Supporto l'UUID di mappatura della sorgente dell'evento e la regione. Poiché gli aumenti vengono applicati al livello dello strumento di mappatura dell'origine degli eventi specifico, non a livello di account o regione, è necessario richiedere manualmente un aumento di scalabilità per ogni strumento di mappatura dell'origine degli eventi.
+ Più account: Lambda non supporta l'elaborazione tra più account. Non puoi utilizzare Lambda per elaborare i record da un broker di messaggi di Amazon MQ incluso in un Account AWS diverso.
+ Autenticazione: per ActiveMQ, è supportato solo [SimpleAuthenticationPlugin](https://activemq.apache.org/security#simple-authentication-plugin)ActiveMQ. Per RabbitMQ è supportato solo il meccanismo di autenticazione [PLAIN](https://www.rabbitmq.com/access-control.html#mechanisms). Gli utenti devono utilizzare per gestire le proprie Gestione dei segreti AWS credenziali. Per ulteriori informazioni sull'autenticazione di ActiveMQ, consulta [Integrazione di broker ActiveMQ con LDAP](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/security-authentication-authorization.html) nella *Guida per gli sviluppatori di Amazon MQ*.
+ Quota di connessione: i broker hanno un numero massimo di connessioni consentite per protocollo a livello di collegamento. Questa quota si basa sul tipo di istanza del broker. Per ulteriori informazioni, consulta la sezione [Broker](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-limits.html#broker-limits) di **Quote in Amazon MQ** nella *Guida per gli sviluppatori di Amazon MQ*.
+ Connettività: puoi creare broker in un VPC (Virtual Private Cloud) pubblico o privato. Per uso privato VPCs, la funzione Lambda deve accedere al VPC per ricevere messaggi. Per ulteriori informazioni, consulta [Configurare la sicurezza della rete](process-mq-messages-with-lambda.md#process-mq-messages-with-lambda-networkconfiguration) di seguito in questa sezione.
+ Destinazioni eventi: sono supportate solo le destinazioni coda. Tuttavia, puoi utilizzare un argomento virtuale che si comporta internamente come un argomento mentre interagisce con Lambda come una coda. Per ulteriori informazioni, consulta [Destinazioni virtuali](https://activemq.apache.org/virtual-destinations) sul sito web di Apache ActiveMQ e [Host virtuali](https://www.rabbitmq.com/vhosts.html) sul sito Web di RabbitMQ.
+ Topologia di rete: per ActiveMQ è supportato un solo broker a istanza singola o in standby per ogni strumento di mappatura dell'origine degli eventi. Per RabbitMQ è supportata una sola implementazione di broker o cluster a istanza singola per ogni strumento di mappatura dell'origine degli eventi. I broker a istanza singola richiedono un endpoint di failover. Per ulteriori informazioni su queste modalità di implementazione del broker, consulta [Architettura del broker MQ attiva](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-broker-architecture.html) e [Architettura del broker MQ di Rabbit](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/rabbitmq-broker-architecture.html) nella *Guida per gli sviluppatori di Amazon MQ*.
+ Protocolli: i protocolli supportati dipendono dal tipo di integrazione di Amazon MQ.
  + Per le integrazioni ActiveMQ, Lambda utilizza i messaggi utilizzando OpenWire/Java il protocollo Message Service (JMS). Non sono supportati altri protocolli per l'utilizzo dei messaggi. All'interno del protocollo JMS, sono supportati solo [https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.6.0/html/classactivemq_1_1commands_1_1_active_m_q_text_message.html](https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.6.0/html/classactivemq_1_1commands_1_1_active_m_q_text_message.html) e [https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.9.0/html/classactivemq_1_1commands_1_1_active_m_q_bytes_message.html](https://activemq.apache.org/components/cms/api_docs/activemqcpp-3.9.0/html/classactivemq_1_1commands_1_1_active_m_q_bytes_message.html). Lambda supporta anche le proprietà JMS personalizzate. Per ulteriori informazioni sul OpenWire protocollo, vedere [OpenWire](https://activemq.apache.org/openwire.html)il sito Web di Apache ActiveMQ.
  + Per le integrazioni RabbitMQ, Lambda utilizza i messaggi tramite il protocollo AMQP 0-9-1. Non sono supportati altri protocolli per l'utilizzo dei messaggi. Per ulteriori informazioni sull'implementazione del protocollo AMQP 0-9-1 in RabbitMQ, consulta la [Guida di riferimento completa di AMQP 0-9-1](https://www.rabbitmq.com/amqp-0-9-1-reference.html) sul sito web di RabbitMQ.

Lambda supporta automaticamente le versioni più recenti di ActiveMQ e RabbitMQ supportate da Amazon MQ. Per le ultime versioni supportate, consulta le [Note di rilascio di Amazon MQ](https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/amazon-mq-release-notes.html) nella *Guida per gli sviluppatori di Amazon MQ*.

**Nota**  
Per impostazione predefinita, Amazon MQ prevede un periodo di manutenzione settimanale per i broker. Durante quella finestra temporale, i broker non sono disponibili. Per i broker senza standby, Lambda non può elaborare alcun messaggio durante tale finestra.

**Topics**
+ [Informazioni sul gruppo di consumatori Lambda per Amazon MQ](#services-mq-configure)
+ [Configurazione dell'origine eventi Amazon MQ per Lambda](process-mq-messages-with-lambda.md)
+ [Parametri dello strumento di mappatura dell'origine degli eventi](services-mq-params.md)
+ [Filtrare gli eventi da una origine eventi Amazon MQ](with-mq-filtering.md)
+ [Risolvere i problemi relativi gli errori di mappatura dell'origine eventi di Amazon MQ](services-mq-errors.md)

## Informazioni sul gruppo di consumatori Lambda per Amazon MQ
<a name="services-mq-configure"></a>

Per interagire con Amazon MQ, Lambda crea un gruppo di utenti che può leggere dai broker di Amazon MQ. Il gruppo di utenti viene creato con lo stesso ID dell'UUID dello strumento di mappatura dell'origine degli eventi.

Per le origini eventi di Amazon MQ, Lambda crea un batch dei record e li invia alla tua funzione in un singolo payload. Per controllare il comportamento, puoi configurare la finestra batch e le dimensioni del batch. Lambda estrae i messaggi finché elabora la dimensione del payload massima di 6 MB, la finestra di batch scade o il numero di record raggiunge la dimensione completa del batch. Per ulteriori informazioni, consulta [Comportamento di batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching).

Il gruppo di utenti recupera i messaggi come BLOB di byte, li codifica in base64 in un singolo payload JSON e richiama la tua funzione. Se la funzione restituisce un errore per uno qualunque dei messaggi in un batch, Lambda ritenta l'intero batch di messaggi fino a quando l'elaborazione riesce o i messaggi scadono.

**Nota**  
Anche se le funzioni Lambda generalmente prevedono un timeout massimo di 15 minuti, gli strumenti di mappatura dell'origine degli eventi per Amazon MSK, Apache Kafka autogestito, Amazon DocumentDB e Amazon MQ per ActiveMQ e RabbitMQ supportano solo funzioni con timeout massimi di 14 minuti. Questa limitazione garantisce che lo strumento di mappatura dell'origine degli eventi possa gestire correttamente errori di funzioni e nuovi tentativi.

Puoi monitorare l'utilizzo simultaneo di una determinata funzione utilizzando la `ConcurrentExecutions` metrica in Amazon. CloudWatch Per ulteriori informazioni sulla simultaneità, consulta [Configurazione della simultaneità riservata per una funzione](configuration-concurrency.md).

**Example Eventi record di Amazon MQ**  

```
{
   "eventSource": "aws:mq",
   "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:test:b-9bcfa592-423a-4942-879d-eb284b418fc8",
   "messages": [
      { 
        "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", 
        "messageType": "jms/text-message",
        "deliveryMode": 1,
        "replyTo": null,
        "type": null,
        "expiration": "60000",
        "priority": 1,
        "correlationId": "myJMSCoID",
        "redelivered": false,
        "destination": { 
          "physicalName": "testQueue" 
        },
        "data":"QUJDOkFBQUE=",
        "timestamp": 1598827811958,
        "brokerInTime": 1598827811958, 
        "brokerOutTime": 1598827811959, 
        "properties": {
          "index": "1",
          "doAlarm": "false",
          "myCustomProperty": "value"
        }
      },
      { 
        "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1",
        "messageType": "jms/bytes-message",
        "deliveryMode": 1,
        "replyTo": null,
        "type": null,
        "expiration": "60000",
        "priority": 2,
        "correlationId": "myJMSCoID1",
        "redelivered": false,
        "destination": { 
          "physicalName": "testQueue" 
        },
        "data":"LQaGQ82S48k=",
        "timestamp": 1598827811958,
        "brokerInTime": 1598827811958, 
        "brokerOutTime": 1598827811959, 
        "properties": {
          "index": "1",
          "doAlarm": "false",
          "myCustomProperty": "value"
        }
      }
   ]
}
```

```
{
  "eventSource": "aws:rmq",
  "eventSourceArn": "arn:aws:mq:us-east-2:111122223333:broker:pizzaBroker:b-9bcfa592-423a-4942-879d-eb284b418fc8",
  "rmqMessagesByQueue": {
    "pizzaQueue::/": [
      {
        "basicProperties": {
          "contentType": "text/plain",
          "contentEncoding": null,
          "headers": {
            "header1": {
              "bytes": [
                118,
                97,
                108,
                117,
                101,
                49
              ]
            },
            "header2": {
              "bytes": [
                118,
                97,
                108,
                117,
                101,
                50
              ]
            },
            "numberInHeader": 10
          },
          "deliveryMode": 1,
          "priority": 34,
          "correlationId": null,
          "replyTo": null,
          "expiration": "60000",
          "messageId": null,
          "timestamp": "Jan 1, 1970, 12:33:41 AM",
          "type": null,
          "userId": "AIDACKCEVSQ6C2EXAMPLE",
          "appId": null,
          "clusterId": null,
          "bodySize": 80
        },
        "redelivered": false,
        "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
      }
    ]
  }
}
```
Nell'esempio di RabbitMQ, `pizzaQueue` è il nome della coda RabbitMQ e `/` è il nome dell'host virtuale. Quando si ricevono messaggi, l'origine eventi elenca i messaggi in `pizzaQueue::/`.

# Configurazione dell'origine eventi Amazon MQ per Lambda
<a name="process-mq-messages-with-lambda"></a>

**Topics**
+ [Configurare la sicurezza della rete](#process-mq-messages-with-lambda-networkconfiguration)
+ [Creare lo strumento di mappatura dell'origine degli eventi](#services-mq-eventsourcemapping)

## Configurare la sicurezza della rete
<a name="process-mq-messages-with-lambda-networkconfiguration"></a>

Per concedere a Lambda l'accesso completo ad Amazon MQ tramite lo strumento di mappatura dell'origine degli eventi, il broker deve utilizzare un endpoint pubblico (indirizzo IP pubblico) oppure deve fornire l'accesso all'Amazon VPC in cui hai creato il broker.

Quando usi Amazon MQ con Lambda, crea [endpoint VPC AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) che forniscono alla funzione l'accesso alle risorse del tuo Amazon VPC.

**Nota**  
AWS PrivateLink Gli endpoint VPC sono necessari per le funzioni con mappature delle sorgenti degli eventi che utilizzano la modalità predefinita (su richiesta) per i poller degli eventi. Se la mappatura delle sorgenti degli eventi utilizza la [modalità provisioning](invocation-eventsourcemapping.md#invocation-eventsourcemapping-provisioned-mode), non è necessario configurare gli endpoint VPC AWS PrivateLink .

Crea un endpoint per fornire l'accesso alle seguenti risorse:
+  Lambda: crea un endpoint per il principale del servizio Lambda. 
+  AWS STS — Crea un endpoint per consentire AWS STS a un responsabile del servizio di assumere un ruolo per tuo conto. 
+  Secrets Manager: se il tuo broker utilizza Secrets Manager per archiviare le credenziali, crea un endpoint per Secrets Manager. 

In alternativa, configura un gateway NAT su ogni sottorete pubblica in Amazon VPC. Per ulteriori informazioni, consulta [Abilitare l'accesso a Internet per funzioni Lambda connesse a un VPC](configuration-vpc-internet.md).

Quando crei una mappatura dell'origine degli eventi per Amazon MQ, Lambda verifica se Elastic Network Interfaces ENIs () sono già presenti per le sottoreti e i gruppi di sicurezza configurati per il tuo Amazon VPC. Se Lambda rileva che esistono ENIs, tenta di riutilizzarli. Altrimenti, Lambda ne crea di nuovi ENIs per connettersi all'origine dell'evento e richiamare la funzione.

**Nota**  
Le funzioni Lambda vengono sempre eseguite all'interno del servizio Lambda di VPCs proprietà. La configurazione VPC della funzione non influisce sullo strumento di mappatura dell'origine degli eventi. Solo la configurazione di rete dell'origine dell'evento determina il modo in cui Lambda si connette all'origine dell'evento.

Configura i gruppi di sicurezza per l'Amazon VPC contenente il tuo broker. Per impostazione predefinita, Amazon MQ utilizza le seguenti porte: `61617` (Amazon MQ per ActiveMQ) e `5671` (Amazon MQ per RabbitMQ).
+ Regole in ingresso: consenti tutto il traffico sulla porta del broker predefinita per il gruppo di sicurezza associato all'origine eventi. In alternativa, puoi utilizzare una regola del gruppo di sicurezza autoreferenziante per consentire l'accesso da istanze all'interno dello stesso gruppo di sicurezza.
+ Regole in uscita: consentono tutto il traffico sulla porta `443` per destinazioni esterne se la funzione deve comunicare con i servizi. AWS In alternativa, puoi anche utilizzare una regola del gruppo di sicurezza autoreferenziale per limitare l'accesso al broker se non hai bisogno di comunicare con altri servizi. AWS 
+ Regole di ingresso degli endpoint Amazon VPC: se utilizzi un endpoint Amazon VPC, il gruppo di sicurezza associato all'endpoint Amazon VPC deve consentire il traffico in entrata sulla porta `443` dal gruppo di sicurezza del broker.

Se il broker utilizza l'autenticazione, puoi anche limitare la policy degli endpoint per l'endpoint Secrets Manager. Per chiamare l'API Secrets Manager, Lambda utilizza il ruolo della funzione, non il principale del servizio Lambda.

**Example Policy dell'endpoint VPC: endpoint Secrets Manager**  

```
{
      "Statement": [
          {
              "Action": "secretsmanager:GetSecretValue",
              "Effect": "Allow",
              "Principal": {
                  "AWS": [
                      "arn:aws::iam::123456789012:role/my-role"
                  ]
              },
              "Resource": "arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret"
          }
      ]
  }
```

Quando utilizzi gli endpoint Amazon VPC, AWS indirizza le chiamate API per richiamare la tua funzione utilizzando l'Elastic Network Interface (ENI) dell'endpoint. Il responsabile del servizio Lambda deve `lambda:InvokeFunction` richiamare tutti i ruoli e le funzioni che li utilizzano. ENIs

Per impostazione predefinita, gli endpoint Amazon VPC dispongono di policy IAM aperte che consentono un ampio accesso alle risorse. La best practice consiste nel limitare queste policy per eseguire le azioni necessarie utilizzando quell'endpoint. Per garantire che lo strumento di mappatura dell'origine degli eventi sia in grado di invocare la funzione Lambda, la policy degli endpoint VPC deve consentire al principale del servizio Lambda di chiamare `sts:AssumeRole` e `lambda:InvokeFunction`. Limitare le policy degli endpoint VPC per consentire solo le chiamate API provenienti dall'organizzazione impedisce il corretto funzionamento dello strumento di mappatura dell'origine degli eventi, pertanto `"Resource": "*"` è richiesto in queste policy.

Il seguente esempio di policy degli endpoint VPC mostra come concedere l'accesso richiesto al principale del servizio Lambda per gli endpoint AWS STS e Lambda.

**Example Policy VPC Endpoint — endpoint AWS STS**  

```
{
      "Statement": [
          {
              "Action": "sts:AssumeRole",
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "lambda.amazonaws.com"
                  ]
              },
              "Resource": "*"
          }
      ]
    }
```

**Example Policy dell'endpoint VPC: endpoint Lambda**  

```
{
      "Statement": [
          {
              "Action": "lambda:InvokeFunction",
              "Effect": "Allow",
              "Principal": {
                  "Service": [
                      "lambda.amazonaws.com"
                  ]
              },
              "Resource": "*"
          }
      ]
  }
```

## Creare lo strumento di mappatura dell'origine degli eventi
<a name="services-mq-eventsourcemapping"></a>

Creare una [mappatura dell'origine eventi](invocation-eventsourcemapping.md) per indicare a Lambda di inviare i record da un broker Amazon MQ a una funzione Lambda. È possibile creare più mappature delle origini di eventi per elaborare gli stessi dati con più funzioni o per elaborare elementi da più fonti con una singola funzione.

Per configurare la funzione per la lettura da Amazon MQ, aggiungi le autorizzazioni richieste e crea un trigger **MQ** nella console Lambda.

Per leggere i record da un broker Amazon MQ, la funzione Lambda richiede le seguenti autorizzazioni. Concedi a Lambda l'autorizzazione a interagire con il tuo broker Amazon MQ e le relative risorse sottostanti aggiungendo istruzioni di autorizzazione al tuo [ruolo di esecuzione](lambda-intro-execution-role.md) della funzione:
+ [mq: DescribeBroker](https://docs.aws.amazon.com/amazon-mq/latest/api-reference/brokers-broker-id.html#brokers-broker-id-http-methods)
+ [gestore dei segreti: GetSecretValue](https://docs.aws.amazon.com/secretsmanager/latest/apireference/API_GetSecretValue.html)
+ [ec2: CreateNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
+ [ec2: DeleteNetworkInterface](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
+ [ec2: DescribeNetworkInterfaces](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
+ [ec2: DescribeSecurityGroups](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)
+ [ec2: DescribeSubnets](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
+ [ec2: DescribeVpcs](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
+ [registri: CreateLogGroup](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
+ [registri: CreateLogStream](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
+ [registri: PutLogEvents](https://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)

**Nota**  
Quando utilizzi una chiave gestita dal cliente crittografata, aggiungi anche l'autorizzazione `[kms:Decrypt](https://docs.aws.amazon.com/msk/1.0/apireference/clusters-clusterarn-bootstrap-brokers.html#clusters-clusterarn-bootstrap-brokersget)`.

**Per aggiungere le autorizzazioni e creare un trigger**

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

1. Scegliere il nome della funzione.

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

1. In **Nome del ruolo**, scegli il link al tuo ruolo di esecuzione. Questo ruolo si apre nella console IAM.  
![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/execution-role.png)

1. Scegli **Aggiungi autorizzazioni**, quindi seleziona **Crea policy in linea**.  
![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/inline-policy.png)

1. Nella sezione **Editor di policy**, scegli **JSON**. Immetti la seguente policy. La tua funzione necessita di queste autorizzazioni per leggere da un broker Amazon MQ.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
         {
           "Effect": "Allow",
           "Action": [
             "mq:DescribeBroker",
             "secretsmanager:GetSecretValue",
             "ec2:CreateNetworkInterface",
             "ec2:DeleteNetworkInterface",
             "ec2:DescribeNetworkInterfaces", 
             "ec2:DescribeSecurityGroups",
             "ec2:DescribeSubnets",
             "ec2:DescribeVpcs",
             "logs:CreateLogGroup",
             "logs:CreateLogStream", 
             "logs:PutLogEvents"		
           ],
           "Resource": "*"
         }
       ]
     }
   ```

------
**Nota**  
Quando utilizzi una chiave gestita dal cliente crittografata, è necessario aggiungere anche l'autorizzazione `kms:Decrypt`.

1. Scegli **Next (Successivo)**. Inserire un nome per la policy, quindi seleziona **Crea policy**.

1. Torna alla funzione nella console Lambda. In **Panoramica delle funzioni**, scegliere **Aggiungi trigger**.  
![\[\]](http://docs.aws.amazon.com/it_it/lambda/latest/dg/images/add-trigger.png)

1. Seleziona il tipo di trigger **MQ**.

1. Configurare le opzioni richieste, quindi scegliere **Add (Aggiungi)**.

Lambda supporta le seguenti opzioni per le origini eventi Amazon MQ:
+ **Broker MQ** – Selezionare un broker Amazon MQ.
+ **Batch size (Dimensioni batch**) – Impostare il numero massimo di messaggi da recuperare in un singolo batch.
+ **Queue name (Nome della coda)** - Immettere la coda Amazon MQ da utilizzare.
+ **Source access configuration (Configurazione dell'accesso di origine)** – Immettere le informazioni sull'host virtuale e il segreto di Secrets Manager in cui sono memorizzate le credenziali del broker.
+ **Abilita trigger** – Disabilitare il trigger per interrompere l'elaborazione dei record.

Per attivare o disattivare il trigger (o eliminarlo), scegliere il trigger **MQ** nella finestra di progettazione. Per riconfigurare il trigger, utilizzare le operazioni API della mappatura dell'origine eventi.

# Parametri dello strumento di mappatura dell'origine degli eventi
<a name="services-mq-params"></a>

Tutti i tipi di origine eventi Lambda condividono le stesse operazioni API [CreateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_CreateEventSourceMapping.html) e [UpdateEventSourceMapping](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateEventSourceMapping.html). Tuttavia, solo alcuni dei parametri si applicano ad Amazon MQ e RabbitMQ.


| Parametro | Obbligatorio | Predefinito | Note | 
| --- | --- | --- | --- | 
|  BatchSize  |  N  |  100  |  Massimo: 10.000  | 
|  Abilitato  |  N  |  true  | nessuno | 
|  FunctionName  |  Y  | N/D  | nessuno | 
|  FilterCriteria  |  N  |  N/D   |  [Controllare gli eventi che Lambda invia alla funzione](invocation-eventfiltering.md)  | 
|  MaximumBatchingWindowInSeconds  |  N  |  500 ms  |  [Comportamento di batching](invocation-eventsourcemapping.md#invocation-eventsourcemapping-batching)  | 
|  Queues  |  N  | N/D |  Il nome della coda di destinazione del broker Amazon MQ da utilizzare.  | 
|  SourceAccessConfigurations  |  N  | N/D  |  Per ActiveMQ, le credenziali BASIC\$1AUTH. Per RabbitMQ, può contenere sia le credenziali BASIC\$1AUTH che le informazioni VIRTUAL\$1HOST.  | 

# Filtrare gli eventi da una origine eventi Amazon MQ
<a name="with-mq-filtering"></a>

Puoi utilizzare il filtraggio degli eventi per controllare quali record di un flusso o di una coda Lambda invia alla funzione. Per informazioni generali sul funzionamento del filtraggio eventi, consulta [Controllare gli eventi che Lambda invia alla funzione](invocation-eventfiltering.md).

In questa sezione viene descritto il filtraggio degli eventi per le origini di eventi Amazon MQ.

**Nota**  
Le mappature delle sorgenti degli eventi di Amazon MQ supportano solo il filtraggio sulla chiave. `data`

**Topics**
+ [Nozioni di base sul filtraggio degli eventi Amazon MQ](#filtering-AMQ)

## Nozioni di base sul filtraggio degli eventi Amazon MQ
<a name="filtering-AMQ"></a>

Supponiamo che la coda di messaggi di Amazon MQ contenga messaggi in formato JSON valido o come stringhe semplici. Un record di esempio sarebbe simile al seguente, con i dati convertiti in una stringa codificata Base64 nel campo `data`.

------
#### [ ActiveMQ ]

```
{ 
    "messageID": "ID:b-9bcfa592-423a-4942-879d-eb284b418fc8-1---mq---us-east-2.amazonaws.com.rproxy.goskope.com-37557-1234520418293-4:1:1:1:1", 
    "messageType": "jms/text-message",
    "deliveryMode": 1,
    "replyTo": null,
    "type": null,
    "expiration": "60000",
    "priority": 1,
    "correlationId": "myJMSCoID",
    "redelivered": false,
    "destination": { 
      "physicalName": "testQueue" 
    },
    "data":"QUJDOkFBQUE=",
    "timestamp": 1598827811958,
    "brokerInTime": 1598827811958, 
    "brokerOutTime": 1598827811959, 
    "properties": {
      "index": "1",
      "doAlarm": "false",
      "myCustomProperty": "value"
    }
}
```

------
#### [ RabbitMQ ]

```
{
    "basicProperties": {
        "contentType": "text/plain",
        "contentEncoding": null,
        "headers": {
            "header1": {
                "bytes": [
                  118,
                  97,
                  108,
                  117,
                  101,
                  49
                ]
            },
            "header2": {
                "bytes": [
                  118,
                  97,
                  108,
                  117,
                  101,
                  50
                ]
            },
            "numberInHeader": 10
        },
        "deliveryMode": 1,
        "priority": 34,
        "correlationId": null,
        "replyTo": null,
        "expiration": "60000",
        "messageId": null,
        "timestamp": "Jan 1, 1970, 12:33:41 AM",
        "type": null,
        "userId": "AIDACKCEVSQ6C2EXAMPLE",
        "appId": null,
        "clusterId": null,
        "bodySize": 80
        },
    "redelivered": false,
    "data": "eyJ0aW1lb3V0IjowLCJkYXRhIjoiQ1pybWYwR3c4T3Y0YnFMUXhENEUifQ=="
}
```

------

Per i broker sia Active MQ sia Rabbit MQ, puoi utilizzare il filtraggio degli eventi per filtrare i record utilizzando la chiave `data`. Supponiamo che la coda Amazon MQ contenga messaggi nel formato JSON seguente.

```
{
    "timeout": 0,
    "IPAddress": "203.0.113.254"
}
```

Per filtrare solo i record in cui il campo `timeout` è maggiore di 0, l'oggetto `FilterCriteria` sarebbe il seguente.

```
{
    "Filters": [
        {
            "Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0] } } ] } }"
        }
    ]
}
```

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

```
{
    "data": {
        "timeout": [ { "numeric": [ ">", 0 ] } ]
        }
}
```

Puoi aggiungere il filtro utilizzando la console, la AWS CLI o un modello AWS SAM.

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

Per aggiungere questo filtro utilizzando la console, segui le istruzioni riportate in [Collegamento dei criteri di filtro a una mappatura dell'origine evento (console)](invocation-eventfiltering.md#filtering-console) e inserisci la seguente stringa per i **criteri di filtraggio**.

```
{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }
```

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

Per creare una nuova mappatura dell'origine degli eventi con questi criteri di filtraggio utilizzando l'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:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

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": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

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": "{ \"data\" : { \"timeout\" : [ { \"numeric\": [ \">\", 0 ] } ] } }"}]}'
```

------
#### [ AWS SAM ]

Per aggiungere questo filtro utilizzando AWS SAM, aggiungi il seguente frammento al modello YAML dell'origine degli eventi.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "data" : { "timeout" : [ { "numeric": [ ">", 0 ] } ] } }'
```

------

Con Amazon MQ, puoi anche filtrare i record in cui il messaggio è una stringa semplice. Supponiamo di voler elaborare solo i record in cui il messaggio inizia con "Risultato: ". L'oggetto `FilterCriteria` dovrebbe avere la struttura seguente.

```
{
    "Filters": [
        {
            "Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"
        }
    ]
}
```

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

```
{
    "data": [
        {
        "prefix": "Result: "
        }
    ]
}
```

Puoi aggiungere il filtro utilizzando la console, la AWS CLI o un modello AWS SAM.

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

Per aggiungere questo filtro utilizzando la console, segui le istruzioni riportate in [Collegamento dei criteri di filtro a una mappatura dell'origine evento (console)](invocation-eventfiltering.md#filtering-console) e inserisci la seguente stringa per i **criteri di filtraggio**.

```
{ "data" : [ { "prefix": "Result: " } ] }
```

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

Per creare una nuova mappatura dell'origine degli eventi con questi criteri di filtraggio utilizzando l'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:mq:us-east-2:123456789012:broker:my-broker:b-8ac7cc01-5898-482d-be2f-a6b596050ea8 \
    --filter-criteria '{"Filters": [{"Pattern": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
```

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": "{ \"data\" : [ { \"prefix\": \"Result: \" } ] }"}]}'
```

------
#### [ AWS SAM ]

Per aggiungere questo filtro utilizzando AWS SAM, aggiungi il seguente frammento al modello YAML dell'origine degli eventi.

```
FilterCriteria:
  Filters:
    - Pattern: '{ "data" : [ { "prefix": "Result " } ] }'
```

------

I messaggi Amazon MQ devono essere stringhe codificate in UTF-8, semplici o in formato JSON. Questo perché Lambda decodifica gli array di byte Amazon MQ in UTF-8 prima di applicare i criteri di filtraggio. Se i messaggi utilizzano un'altra codifica, ad esempio UTF-16 o ASCII o se il formato del messaggio non corrisponde al formato `FilterCriteria`, Lambda elabora solo i filtri di metadati. La tabella seguente riepiloga il comportamento specifico:


| Formato messaggio in arrivo | Formato del modello di filtro per le proprietà di messaggi | Operazione risultante | 
| --- | --- | --- | 
|  Stringa normale  |  Stringa normale  |  Filtri Lambda in base ai criteri di filtro.  | 
|  Stringa normale  |  Nessun modello di filtro per le proprietà dei dati  |  Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.  | 
|  Stringa normale  |  JSON valido  |  Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.  | 
|  JSON valido  |  Stringa normale  |  Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.  | 
|  JSON valido  |  Nessun modello di filtro per le proprietà dei dati  |  Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.  | 
|  JSON valido  |  JSON valido  |  Filtri Lambda in base ai criteri di filtro.  | 
|  Stringa codificata non UTF-8  |  JSON, stringa semplice o nessun modello  |  Filtri Lambda (solo sulle altre proprietà dei metadati) in base ai criteri di filtro.  | 

# Risolvere i problemi relativi gli errori di mappatura dell'origine eventi di Amazon MQ
<a name="services-mq-errors"></a>

Quando una funzione Lambda rileva un errore irreversibile, il consumatore Amazon MQ arresta l'elaborazione dei record. Tutti gli altri consumatori possono continuare a elaborare, a condizione che non riscontrino lo stesso errore. Per determinare la causa potenziale di un consumatore fermato, controllare il campo `StateTransitionReason` nei dettagli di reso del `EventSourceMapping` per uno dei seguenti codici:

**`ESM_CONFIG_NOT_VALID`**  
La configurazione della mappa dell'origine eventi non è valida.

**`EVENT_SOURCE_AUTHN_ERROR`**  
Lambda non è riuscito ad autenticare l'origine eventi.

**`EVENT_SOURCE_AUTHZ_ERROR`**  
Lambda non dispone delle autorizzazioni necessarie per accedere all'origine eventi.

**`FUNCTION_CONFIG_NOT_VALID`**  
La configurazione della funzione non è valida.

I record non verranno elaborati anche se Lambda li scarta a causa delle loro dimensioni. Il limite di dimensioni per i record Lambda è di 6 MB. Per riconsegnare i messaggi in caso di errore di funzione, è possibile utilizzare una coda di messaggi non instradabili (coda DLQ). Per ulteriori informazioni, consultare [Message Redelivery and DLQ Handling](https://activemq.apache.org/message-redelivery-and-dlq-handling) sul sito Web Apache ActiveMQ e [Guida all'affidabilità](https://www.rabbitmq.com/reliability.html) sul sito Web RabbitMQ.

**Nota**  
Lambda non supporta policy di riconsegna personalizzate. Lambda utilizza invece una policy con i valori predefiniti dalla pagina [Policy di riconsegna](https://activemq.apache.org/redelivery-policy) sul sito Web Apache ActiveMQ, con `maximumRedeliveries` impostato su 6.