

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

# Tutorial: crea un'app di WebSocket chat con WebSocket API, Lambda e DynamoDB
<a name="websocket-api-chat-app"></a>

In questo tutorial, creerai un'applicazione di chat senza server con un' WebSocket API. Con un' WebSocket API, puoi supportare la comunicazione bidirezionale tra i client. I client possono ricevere messaggi senza dover eseguire il polling per gli aggiornamenti.

Il completamento di questa esercitazione richiede circa 30 minuti. Innanzitutto, utilizzerai un CloudFormation modello per creare funzioni Lambda che gestiranno le richieste API, oltre a una tabella DynamoDB che memorizza il tuo client. IDs Quindi, utilizzerai la console API Gateway per creare un' WebSocket API che si integri con le tue funzioni Lambda. Infine, eseguirai il test dell'API per verificare che i messaggi siano inviati e ricevuti.

![\[Panoramica dell'architettura dell'API creata in questo tutorial.\]](http://docs.aws.amazon.com/it_it/apigateway/latest/developerguide/images/ws-chat-app.png)


Per completare questo tutorial, sono necessari un AWS account e un AWS Identity and Access Management utente con accesso alla console. Per ulteriori informazioni, consulta [Configurazione per l'utilizzo di Gateway API](setting-up.md).

Per la connessione all'API è inoltre necessario `wscat`. Per ulteriori informazioni, consulta [Utilizzalo `wscat` per connetterti a un' WebSocket API e inviarle messaggi](apigateway-how-to-call-websocket-api-wscat.md).

**Topics**
+ [Fase 1: creazione di funzioni Lambda e di una tabella DynamoDB](#websocket-api-chat-app-create-dependencies)
+ [Fase 2: Creare un'API WebSocket](#websocket-api-chat-app-create-api)
+ [Fase 3: test dell'API](#websocket-api-chat-app-invoke-api)
+ [Fase 4: pulizia](#websocket-api-chat-app-cleanup)
+ [Passaggi successivi: automatizza con CloudFormation](#websocket-api-chat-app-next-steps)

## Fase 1: creazione di funzioni Lambda e di una tabella DynamoDB
<a name="websocket-api-chat-app-create-dependencies"></a>

Scarica e decomprimi [il modello di creazione dell'app per CloudFormation](samples/ws-chat-app-starter.zip). Utilizzerai questo modello per creare una tabella Amazon DynamoDB per archiviare il client della tua app. IDs Ogni client connesso ha un ID univoco che utilizzeremo come chiave di partizione della tabella. Questo modello crea anche funzioni Lambda che aggiornano le connessioni client in DynamoDB e gestiscono l'invio di messaggi ai client connessi.

**Per creare uno stack CloudFormation**

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Scegliere **Create stack (Crea stack)**, quindi **With new resources (standard) (Con nuove risorse (standard))**.

1. In **Specificare modello**, scegliere **Carica un file modello**.

1. Selezionare il modello scaricato.

1. Scegli **Next (Successivo)**. 

1. Per **Stack name (Nome stack)**, inserire **websocket-api-chat-app-tutorial**, quindi scegliere **Next (Avanti)**.

1. Per **Configure stack options (Configura opzioni di stack)**, scegliere **Next (Successivo)**.

1. Per quanto riguarda **le funzionalità**, riconosci che CloudFormation puoi creare risorse IAM nel tuo account.

1. Scegli **Avanti**, quindi scegli **Invia**.

CloudFormation fornisce le risorse specificate nel modello. Per completare il provisioning delle risorse, potrebbero essere necessari alcuni minuti. Quando lo stato del tuo CloudFormation stack è **CREATE\$1COMPLETE**, sei pronto per passare alla fase successiva.

## Fase 2: Creare un'API WebSocket
<a name="websocket-api-chat-app-create-api"></a>

Creerai un' WebSocket API per gestire le connessioni dei client e indirizzare le richieste alle funzioni Lambda che hai creato nel passaggio 1.



**Per creare un'API WebSocket**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Seleziona **Create API** (Crea API). **Quindi, per **WebSocket API**, scegli Build.**

1. Per **API name (Nome API)**, immettere **websocket-chat-app-tutorial**.

1. Per il **tipo di indirizzo IP**, seleziona **IPv4**.

1. Per **Route selection expression** (Espressione di selezione routing), inserire **request.body.action**. L'espressione di selezione del routing determina quale routing viene richiamato da API Gateway quando un client invia un messaggio.

1. Scegli **Next (Successivo)**.

1. Per **Predefined routes** (Routing predefiniti), scegliere **Add \$1connect** (Aggiungi \$1connect), **Add \$1disconnect** (Aggiungi \$1disconnect) e **Add \$1default** (Aggiungi \$1default). I routing **\$1connect** e **\$1disconnect** sono routing speciali che API Gateway richiama automaticamente quando un client si connette o si disconnette da un'API. API Gateway richiama il routing `$default` quando nessun altro routing corrisponde a una richiesta.

1. Per **Custom routes** (Routing personalizzati), scegli **Add custom route** (Aggiungi routing personalizzato). Per **Route key** (Chiave routing), inserire **sendmessage**. Questo routing personalizzato gestisce i messaggi inviati ai client connessi.

1. Scegli **Next (Successivo)**.

1. In **Attach integrations** (Collega integrazioni), per ogni routing e**Integration type** (Tipo di integrazione), scegliere Lambda.

   Per **Lambda**, scegli la funzione Lambda corrispondente che hai creato nel passaggio 1. CloudFormation Il nome di ciascuna funzione corrisponde a un routing. Ad esempio, per il routing **\$1connect**, scegliere la funzione denominata **websocket-chat-app-tutorial-ConnectHandler**.

1. Esamina la fase creata da API Gateway. Di default, API Gateway crea un nome di fase `production` e implementa automaticamente l'API in quella fase. Scegli **Next (Successivo)**.

1. Scegliere **Create and deploy** (Crea e implementa).

## Fase 3: test dell'API
<a name="websocket-api-chat-app-invoke-api"></a>

Successivamente, eseguirai il test dell'API per assicurarti che funzioni correttamente. Per connetterti all'API, utilizza il comando `wscat`.

**Per ottenere l'URL di richiamo dell'API**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Scegliere l'API.

1. Scegli **Stages** (Fasi), quindi scegli **production** (produzione).

1. **Annota l'URL della tua API. WebSocket ** L'URL dovrebbe essere del tipo `wss://abcdef123.execute-api.us-east-2.amazonaws.com/production`.

**Per connetterti all'API**

1. Per connetterti all'API, utilizza il seguente comando. Quando ti connetti all'API, API Gateway richiama il routing `$connect`. Quando si richiama il routing, esso richiama una funzione Lambda che archivia l'ID di connessione in DynamoDB.

   ```
   wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
   ```

   ```
   Connected (press CTRL+C to quit)
   ```

1. Apri un nuovo terminale ed esegui nuovamente il comando **wscat** con i parametri seguenti.

   ```
   wscat -c wss://abcdef123.execute-api.us-west-2.amazonaws.com/production
   ```

   ```
   Connected (press CTRL+C to quit)
   ```

   Ciò fornisce due client connessi in grado di scambiare messaggi.

**Come inviare un messaggio**
+  API Gateway determina quale routing richiamare in base all'espressione di selezione del routing dell'API. L'espressione di selezione del routing dell'API è `$request.body.action`. Di conseguenza, API Gateway richiama il routing `sendmessage` quando si invia il seguente messaggio:

  ```
  {"action": "sendmessage", "message": "hello, everyone!"}
  ```

  La funzione Lambda associata alla route richiamata raccoglie il client da DynamoDB. IDs Quindi, la funzione chiama l'API Gateway Management API e invia il messaggio a tali client. Tutti i client connessi ricevono il seguente messaggio:

  ```
  < hello, everyone!
  ```

**Per richiamare il routing \$1default dell'API**
+ API Gateway richiama il routing di default dell'API quando un client invia un messaggio che non corrisponde ai routing definiti. La funzione Lambda associata al routing `$default` utilizza l'API di API Gateway Management per inviare al client informazioni relative alla connessione.

  ```
  test
  ```

  ```
  Use the sendmessage route to send a message. Your info: {"ConnectedAt":"2022-01-25T18:50:04.673Z","Identity":{"SourceIp":"192.0.2.1","UserAgent":null},"LastActiveAt":"2022-01-25T18:50:07.642Z","connectionID":"Mg_ugfpqPHcCIVA="}
  ```

**Per disconnetterti dall'API**
+ Per disconnetterti dall'API, premi **CTRL\$1C**. Quando un client si disconnette dall'API, API Gateway richiama il routing `$disconnect` dell'API. L'integrazione Lambda per il routing `$disconnect` dell'API rimuove l'ID di connessione da DynamoDB.

## Fase 4: pulizia
<a name="websocket-api-chat-app-cleanup"></a>

Per evitare costi non necessari, eliminare le risorse create nell'ambito di questo tutorial. I passaggi seguenti eliminano lo stack e l'API. CloudFormation WebSocket 

**Per eliminare un'API WebSocket**

1. Accedi alla console API Gateway all'indirizzo [https://console.aws.amazon.com/apigateway.](https://console.aws.amazon.com/apigateway)

1. Nella **APIs**pagina, seleziona la tua API. `websocket-chat-app-tutorial` Scegliere **Azioni**, scegliere **Elimina**, quindi confermare la scelta.

**Per eliminare uno CloudFormation stack**

1. Apri la CloudFormation console in [https://console.aws.amazon.com/cloudformation.](https://console.aws.amazon.com/cloudformation/)

1. Seleziona il tuo stack. CloudFormation 

1. Scegli **Elimina** e conferma la tua scelta.

## Passaggi successivi: automatizza con CloudFormation
<a name="websocket-api-chat-app-next-steps"></a>

Puoi automatizzare la creazione e la pulizia di tutte le AWS risorse coinvolte in questo tutorial. [Per un CloudFormation modello che crea questa API e tutte le risorse correlate, consulta ws-chat-app .yaml.](samples/ws-chat-app.zip)