

# Aggiunta di una destinazione per il dispositivo finale Sidewalk
<a name="iot-sidewalk-qsg-destination"></a>

Utilizza regole AWS IoT per elaborare i dati e i messaggi dei dispositivi e instradarli ad altri servizi. Puoi anche definire regole per elaborare i messaggi binari ricevuti da un dispositivo e convertire i messaggi in altri formati per essere utilizzati da altri servizi. Destinazioni associano il dispositivo finale Sidewalk alla regola che elabora i dati del dispositivo da inviare ad altri Servizio AWS.

## Come creare e utilizzare una destinazione
<a name="iot-sidewalk-destination-how"></a>

1. Crea una regola AWS IoT e un ruolo IAM per la destinazione. La regola AWS IoT specifica le regole che elaborano i dati del dispositivo e li instrada per essere utilizzati da altri Servizio AWS e dalle applicazioni. Il ruolo IAM concede l'autorizzazione per accedere alla regola.

1. Crea una destinazione per i dispositivi Sidewalk utilizzando l'operazione API `CreateDestination`. Specifica il nome della destinazione, il nome della regola, il nome del ruolo ed eventuali parametri facoltativi. L'API restituirà un identificatore univoco per la destinazione, che puoi specificare durante l'aggiunta del dispositivo finale ad AWS IoT Core per Amazon Sidewalk.

Di seguito viene illustrato come creare una destinazione, una regola AWS IoT e un ruolo IAM per la destinazione.

**Topics**
+ [Come creare e utilizzare una destinazione](#iot-sidewalk-destination-how)
+ [Creazione di una destinazione per il dispositivo Sidewalk](iot-sidewalk-destination-create.md)
+ [Creazione di un ruolo IAM e della regola IoT per la destinazione](sidewalk-destination-rule-role.md)

# Creazione di una destinazione per il dispositivo Sidewalk
<a name="iot-sidewalk-destination-create"></a>

Puoi aggiungere una destinazione all'account per AWS IoT Core per Amazon Sidewalk mediante l'[hub Destinazioni](https://console.aws.amazon.com/iot/home#/wireless/destinations) o `CreateDestination`. Durante la creazione della destinazione, specifica:
+ Un nome univoco per la destinazione da utilizzare per il dispositivo finale Sidewalk.
**Nota**  
Se aggiungi già il dispositivo utilizzando un nome della destinazione, devi usare tale nome quando crei la destinazione. Per ulteriori informazioni, consultare [Fase 2: Aggiunta del dispositivo Sidewalk](iot-sidewalk-add-device.md#iot-sidewalk-device-create). 
+ Il nome della regola AWS IoT che elabora i dati del dispositivo e l'argomento in cui vengono pubblicati i messaggi.
+ Il ruolo IAM che concede l'autorizzazione ai dati del dispositivo per accedere alla regola.

Nelle sezioni seguenti viene descritto come creare la regola AWS IoT e il ruolo IAM per la destinazione.

## Creazione di una destinazione (console)
<a name="iot-sidewalk-destination-create-console"></a>

Per creare una destinazione utilizzando la console AWS IoT, passa all'[hub Destinazioni](https://console.aws.amazon.com/iot/home#/wireless/destinations) e scegli **Aggiungi destinazione**.

![\[alt text not found\]](http://docs.aws.amazon.com/it_it/iot-wireless/latest/developerguide/images/iot-sidewalk-add-destination.PNG)


Per elaborare i dati di un dispositivo, specifica i seguenti campi durante la creazione di una destinazione, quindi scegli **Aggiungi destinazione**.
+ 

**Dettagli della destinazione**  
Inserisci un **Nome della destinazione** e una descrizione facoltativa per la destinazione.
+ 

**Nome regola**  
La regola AWS IoT configurata per valutare i messaggi inviati dal tuo dispositivo ed elaborare i dati del dispositivo. Il nome della regola verrà mappato alla tua destinazione. La destinazione richiede la regola per elaborare i messaggi ricevuti. È possibile scegliere se elaborare i messaggi richiamando una regola AWS IoT o pubblicando sul broker di messaggi AWS IoT.
  + Se scegli **Ente a rule name (Inserisci il nome di una regola)**, inserisci un nome, e quindi scegli **Copy (Copia)** per copiare il nome di una regola che inserirai quando crei la regola AWS IoT. Puoi scegliere **Create a rule (Crea una regola)** per creare la regola ora o passare all'hub [ Rules (Regole)](https://console.aws.amazon.com/iot/home#/create/rule) della console AWS IoT e creare una regola con quel nome.

    Puoi anche inserire una regola e utilizzare impostazione **Advanced (Avanzata)** per specificare un nome dell'argomento. Il nome dell'argomento viene fornito durante l'invocazione della regola e si accede utilizzando l'espressione `topic` all'interno della regola. Per ulteriori informazioni sulle regole AWS IoT, consultare [Regole AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html).
  + Se scegli **Publish to AWS IoT message broker** (Pubblica sul broker di messaggi IoT), inserisci un nome di argomento. È quindi possibile copiare il nome dell'argomento MQTT e più sottoscriventi possono iscriversi a questo argomento per ricevere messaggi pubblicati su tale argomento. Per ulteriori informazioni, consultare [Argomenti MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html).

  Per ulteriori informazioni sulle regole AWS IoT per le destinazioni, consultare [Creare regole per elaborare i messaggi del dispositivo LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).
+ 

**Nome ruolo**  
Il ruolo IAM che fornisce al dispositivo l'autorizzazione ai dati per accedere alla regola denominata in **Rule name (Nome regola)**. Nella console puoi creare un nuovo ruolo di servizio o selezionare un ruolo di servizio già esistente. Se stai creando un nuovo ruolo di servizio, puoi inserire un nome di ruolo (ad esempio, **SidewalkDestinationRole**), o lasciare vuoto per consentire a AWS IoT Core per LoRaWAN di generare un nuovo nome ruolo. AWS IoT Core per LoRaWAN creerà automaticamente il ruolo IAM con le autorizzazioni appropriate per tuo conto.

## Creazione di una destinazione (interfaccia a riga di comando)
<a name="iot-sidewalk-destination-create-cli"></a>

Per creare una destinazione, utilizza l'operazione API [https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateDestination.html](https://docs.aws.amazon.com/iot-wireless/2020-11-22/apireference/API_CreateDestination.html) o il comando dell'interfaccia a riga di comando [https://docs.aws.amazon.com/cli/latest/reference/create-destination.html](https://docs.aws.amazon.com/cli/latest/reference/create-destination.html). Ad esempio, il comando seguente crea una destinazione per il dispositivo finale Sidewalk:

```
aws iotwireless create-destination --name SidewalkDestination \
    --expression-type RuleName --expression SidewalkRule \
    --role-arn arn:aws:iam::123456789012:role/SidewalkRole
```

L'esecuzione di questo comando restituisce i dettagli della destinazione, che includono il nome della risorsa Amazon (ARN) e il nome della destinazione.

```
{
    "Arn": "arn:aws:iotwireless:us-east-1:123456789012:Destination/SidewalkDestination",
    "Name": "SidewalkDestination"
}
```

Per ulteriori informazioni sulla creazione di una destinazione, consultare [Creare regole per elaborare i messaggi del dispositivo LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).

# Creazione di un ruolo IAM e della regola IoT per la destinazione
<a name="sidewalk-destination-rule-role"></a>

Le regole AWS IoT inviano messaggi del dispositivo ad altri servizi. Le regole AWS IoT possono anche elaborare i messaggi binari ricevuti da un dispositivo finale Sidewalk per l'utilizzo in altri servizi. Le destinazioni AWS IoT Core per Amazon Sidewalk associano un dispositivo wireless alla regola che elabora i dati dei messaggi del dispositivo da inviare ad altri servizi. La regola agisce sui dati del dispositivo non appena vengono ricevuti da AWS IoT Core per Amazon Sidewalk. Per tutti i dispositivi che inviano i propri dati allo stesso servizio, è possibile creare una destinazione che può essere condivisa da tutti i dispositivi. È inoltre necessario creare un ruolo IAM che conceda l'autorizzazione per inviare dati alla regola.

## Creazione di un ruolo IAM per la destinazione
<a name="iot-sidewalk-destination-role"></a>

Crea un ruolo IAM che concede l'autorizzazione AWS IoT Core per Amazon Sidewalk per inviare dati alla regola AWS IoT. Per creare il ruolo, utilizza l'operazione API [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) o il comando dell'interfaccia a riga di comando [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role). Puoi denominare il ruolo come *`SidewalkRole`*.

```
aws iam create-role --role-name SidewalkRole \ 
    --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
```

È inoltre possibile definire la policy di affidabilità per il ruolo utilizzando un file JSON.

```
aws iam create-role --role-name SidewalkRole \ 
    --assume-role-policy-document file://trust-policy.json
```

Nell'esempio seguente viene mostrato il contenuto del file JSON.

**Contenuto di trust-policy.json**

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

## Creazione di una regola per la destinazione
<a name="iot-sidewalk-destination-rule"></a>

Utilizza l'operazione API AWS IoT Core, [https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateTopicRule.html) o il comando AWS CLI, [https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html](https://docs.aws.amazon.com/cli/latest/reference/iot/create-topic-rule.html), per creare una regola. La regola dell'argomento verrà utilizzata dalla destinazione per instradare i dati ricevuti dal dispositivo finale Sidewalk ad altri Servizi AWS. Ad esempio, è possibile creare un'operazione della regola che invia un messaggio a una funzione Lambda. È possibile definire la funzione Lambda in modo che riceva i dati dell'applicazione dal dispositivo e utilizzi base64 per decodificare i dati del payload in modo da poter essere utilizzati da altre applicazioni.

Nelle fasi seguenti viene illustrato come creare la funzione Lambda e quindi una regola dell'argomento che invia un messaggio a questa funzione.

1. 

**Creazione del ruolo di esecuzione e della policy**

   Crea il ruolo IAM che concede alla funzione l'autorizzazione per accedere alle risorse AWS. È inoltre possibile definire la policy di affidabilità per il ruolo utilizzando un file JSON.

   ```
   aws iam create-role --role-name lambda-ex \ 
       --assume-role-policy-document file://lambda-trust-policy.json
   ```

   Nell'esempio seguente viene mostrato il contenuto del file JSON.

   **Contenuto di lambda-trust-policy.json**

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lambda.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. 

**Creazione e verifica della funzione Lambda**

   Esegui la procedura seguente per creare una funzione AWS Lambda che esegue la decodifica base64 dei dati del payload.

   1. Scrivi il codice per decodificare i dati del payload. Ad esempio, puoi utilizzare il seguente codice Python di esempio. Specifica un nome per lo script, ad esempio *`base64_decode.py`*.

      **Contenuto di base64\$1decode.py**

      ```
      // -----------------------------------------------------------
      // ----- Python script to decode incoming binary payload -----
      // -----------------------------------------------------------
      import json
      import base64
      
      def lambda_handler(event, context):
      
          message = json.dumps(event)
          print (message)
      
          payload_data = base64.b64decode(event["PayloadData"])
          print(payload_data)
          print(int(payload_data,16))
      ```

   1. Crea un pacchetto di implementazione come un file zip contenente il file Python e assegna un nome come `base64_decode.zip`. Utilizza l'API `CreateFunction` o il comando dell'interfaccia a riga di comando `create-function` per creare una funzione Lambda per il codice di esempio, *`base64_decode.py`*.

   1. 

      ```
      aws lambda create-function --function-name my-function \
      --zip-file fileb://base64_decode.zip --handler index.handler \ 
      --runtime python3.9 --role arn:aws:iam::123456789012:role/lambda-ex
      ```

      Vedrai il seguente output. Durante la creazione della regola dell'argomento, utilizzerai il valore nome della risorsa Amazon (ARN) dell'output, `FunctionArn`.

      ```
      {
          "FunctionName": "my-function",
          "FunctionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function",
          "Runtime": "python3.9",
          "Role": "arn:aws:iam::123456789012:role/lambda-ex",
          "Handler": "index.handler",
          "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=",
          "Version": "$LATEST",
          "TracingConfig": {
              "Mode": "PassThrough"
          },
          "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff",
          ...
      }
      ```

   1. Per ottenere i log per una chiamata dalla riga di comando, utilizza l'opzione `--log-type` con il comando `invoke`. La risposta include un campo LogResult contenente fino a 4 KB di log con codifica base64 dalla chiamata. 

      ```
      aws lambda invoke --function-name my-function out --log-type Tail
      ```

      La risposta ricevuta deve contenere un `StatusCode` di 200. Per ulteriori informazioni sulla creazione e l'utilizzo di funzioni Lambda da AWS CLI, consultare [Utilizzo di Lambda con AWS CLI](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

1. Creazione di una regola dell'argomento

   Utilizza l'API `CreateTopicRule` o il comando dell'interfaccia a riga di comando `create-topic-rule` per creare una regola dell'argomento che invia un messaggio a questa funzione Lambda. Puoi anche aggiungere una seconda operazione della regola che ripubblica su un argomento AWS IoT. Assegna a questa regola dell'argomento un nome come `Sidewalkrule`.

   ```
   aws iot create-topic-rule --rule-name Sidewalkrule \ 
       --topic-rule-payload file://myrule.json
   ```

   Puoi utilizzare il file `myrule.json` per specificare ulteriori dettagli relativi alla regola. Ad esempio, il seguente file JSON mostra come ripubblicare su un argomento AWS IoT e inviare un messaggio a una funzione Lambda.

   ```
   {
       "sql": "SELECT * ",
       "actions": [
          {
               // You obtained this functionArn when creating the Lambda function using the 
               // create-function command.
               "lambda": {
                   "functionArn": "arn:aws:lambda:us-east-1:123456789012:function:my-function"
                }
           },
           {
               // This topic can be used to observe messages exchanged between the device and 
               // AWS IoT Core for Amazon Sidewalk after the device is connected.
                "republish": {
                    "roleArn": "arn:aws:iam::123456789012:role/service-role/SidewalkRepublishRole",
                    "topic": "project/sensor/observed"
                }
           }
       ],
   }
   ```