

# Adicionar um destino para o dispositivo final do Sidewalk
<a name="iot-sidewalk-qsg-destination"></a>

Use as regras de AWS IoT para processar os dados e as mensagens do dispositivo e encaminhá-los para outros serviços. Você também pode definir regras para processar as mensagens binárias recebidas de um dispositivo e convertê-las em outros formatos que facilitem o uso de outros serviços. Os destinos associam seu dispositivo final do Sidewalk à regra que processa os dados do dispositivo para enviá-los para outros AWS service (Serviço da AWS).

## Como criar e usar um destino
<a name="iot-sidewalk-destination-how"></a>

1. Crie uma regra AWS IoT e um perfil do IAM para o destino. A regra de AWS IoT especifica as regras que processarão os dados do dispositivo e os encaminha para uso por outros AWS service (Serviço da AWS) e seus aplicativos. O perfil do IAM concede permissões para o acesso à regra.

1. Crie um destino para seus dispositivos do Sidewalk usando a operação da API `CreateDestination`. Especifique o nome do destino, da regra, da função e quaisquer parâmetros opcionais. A API retornará um identificador exclusivo para o destino, que você pode especificar ao adicionar o dispositivo final ao AWS IoT Core para Amazon Sidewalk.

Veja a seguir como criar um destino, uma regra de AWS IoT e um perfil do IAM para o destino.

**Topics**
+ [

## Como criar e usar um destino
](#iot-sidewalk-destination-how)
+ [

# Criar um destino para seu dispositivo do Sidewalk
](iot-sidewalk-destination-create.md)
+ [

# Criar um perfil do IAM e regra de IoT para o destino
](sidewalk-destination-rule-role.md)

# Criar um destino para seu dispositivo do Sidewalk
<a name="iot-sidewalk-destination-create"></a>

É possível adicionar um destino à sua conta para o AWS IoT Core para Amazon Sidewalk utilizando o [Hub de destinos](https://console.aws.amazon.com/iot/home#/wireless/destinations) ou `CreateDestination`. Ao criar seu destino, especifique:
+ Um nome exclusivo para o destino a ser usado no dispositivo final do Sidewalk.
**nota**  
Se você já adicionou o dispositivo usando um nome de destino, será preciso usar esse nome ao criar seu destino. Para ter mais informações, consulte [Etapa 2: Adicionar o dispositivo do Sidewalk](iot-sidewalk-add-device.md#iot-sidewalk-device-create). 
+ O nome da regra de AWS IoT que processará os dados do dispositivo e o tópico no qual as mensagens serão publicadas.
+ Um perfil do IAM que conceda permissões de dados do dispositivo para o acesso à regra.

As seções a seguir descrevem como criar a regra de AWS IoT e um perfil do IAM para o destino.

## Criar um destino (console)
<a name="iot-sidewalk-destination-create-console"></a>

Para criar um destino usando o console de AWS IoT, acesse o [Hub de destinos](https://console.aws.amazon.com/iot/home#/wireless/destinations) e escolha **Adicionar destino**.

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


Para processar os dados de um dispositivo, especifique os seguintes campos ao criar um destino e escolha **Adicionar destino**.
+ 

**Detalhes do destino**  
Insira um **Nome de destino** e uma descrição opcional para o destino.
+ 

**Nome da regra**  
A regra de AWS IoT configurada para avaliar as mensagens enviadas pelo seu dispositivo e processar os dados do dispositivo. O nome da regra será mapeado para o seu destino. O destino exige que a regra processe as mensagens recebidas. Você pode escolher que as mensagens sejam processadas invocando uma regra de AWS IoT ou publicando no agente de mensagens de AWS IoT.
  + Se você escolher **Inserir um nome de regra**, digite um nome e escolha **Copiar** para copiar o nome da regra que você inserirá ao criar a regra de AWS IoT. Você pode escolher **Criar regra** para criar a regra agora ou navegar até o Hub de [regras](https://console.aws.amazon.com/iot/home#/create/rule) do console de AWS IoT e criar uma regra com esse nome.

    Você também pode inserir uma regra e usar a configuração **Avançada** para especificar um nome de tópico. O nome do tópico é fornecido durante a invocação da regra e é acessado usando a expressão `topic` dentro da regra. Para obter mais informações sobre as regras de AWS IoT, consulte [regras de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-rules.html).
  + Se você escolher **Publicar no agente de mensagens de AWS IoT**, insira um nome de tópico. Em seguida, você pode copiar o nome do tópico de MQTT e vários assinantes podem se inscrever nesse tópico para receber mensagens publicadas nesse tópico. Para ver mais informações, consulte [tópicos de MQTT](https://docs.aws.amazon.com/iot/latest/developerguide/topics.html).

  Para obter mais informações sobre as regras de AWS IoT para destinos, consulte [Criar regras para processar mensagens do dispositivo LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).
+ 

**Nome do perfil**  
O perfil do IAM que concede permissões de dados do dispositivo para o acesso à regra, nomeada em **Nome da regra**. No console, é possível criar um novo perfil de serviço ou selecionar um já existente. Se você estiver criando um novo perfil de serviço, poderá inserir um nome de perfil (por exemplo, **SidewalkDestinationRole**) ou deixá-lo em branco para AWS IoT Core for LoRaWAN para gerar um novo nome de perfil. O AWS IoT Core for LoRaWAN, então, criará automaticamente o perfil do IAM com as devidas permissões em seu nome.

## Criar um destino (CLI)
<a name="iot-sidewalk-destination-create-cli"></a>

Para criar um destino, use a operação da 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) ou o comando da CLI [https://docs.aws.amazon.com/cli/latest/reference/create-destination.html](https://docs.aws.amazon.com/cli/latest/reference/create-destination.html). Por exemplo, o comando a seguir cria um destino para o dispositivo final do Sidewalk:

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

A execução desse comando retorna os detalhes do destino, que incluem o nome do recurso da Amazon (ARN) e o nome do destino.

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

Para obter mais informações sobre a criação de um destino, consulte [Criar regras para processar mensagens do dispositivo LoRaWAN](https://docs.aws.amazon.com/iot/latest/developerguide/connect-iot-lorawan-destination-rules.html).

# Criar um perfil do IAM e regra de IoT para o destino
<a name="sidewalk-destination-rule-role"></a>

As regras do AWS IoT enviam mensagens de dispositivos a outros serviços. As regras do AWS IoT também podem processar as mensagens binárias recebidas de um dispositivo final do Sidewalk para utilização de outros serviços. Os destinos do AWS IoT Core para Amazon Sidewalk associam um dispositivo sem fio à regra que processa os dados da mensagem do dispositivo para envio a outros serviços. A regra atua nos dados do dispositivo assim que o AWS IoT Core para Amazon Sidewalk os recebe. Para todos os dispositivos que enviam seus dados para o mesmo serviço, você pode criar um destino que possa ser compartilhado por todos eles. É preciso criar um perfil do IAM que conceda permissão para enviar dados para a regra.

## Criar um perfil do IAM para o destino
<a name="iot-sidewalk-destination-role"></a>

Crie um perfil do IAM que conceda permissão ao AWS IoT Core para Amazon Sidewalk para enviar dados à regra do AWS IoT. Para criar o perfil, use a operação de API [https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html) ou o comando de CLI [https://docs.aws.amazon.com/cli/latest/reference/iam/create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role). Você pode nomear a função como *`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"}]}'
```

Também é possível definir a política de confiança para a função usando um arquivo JSON.

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

O exemplo a seguir mostra o conteúdo do arquivo JSON.

**Conteúdo do trust-policy.json**

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

## Criar uma regra para o destino
<a name="iot-sidewalk-destination-rule"></a>

Use a operação da 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), ou o comando da 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), para criar uma regra. A regra do tópico será usada pelo destino para direcionar os dados recebidos do seu dispositivo final do Sidewalk para outros Serviços da AWS. Por exemplo, você pode criar uma ação de regra que envia uma mensagem para uma função do Lambda. Você pode definir a função do Lambda de maneira que ela receba os dados do aplicativo do seu dispositivo e use base64 para decodificar os dados da carga útil para que possam ser usados por outros aplicativos.

As etapas a seguir mostram como criar a função do Lambda e, em seguida, uma regra de tópico que envie uma mensagem para essa função.

1. 

**Criar uma função e uma política de execução**

   Crie um perfil do IAM que dá à sua função permissão para acessar recursos da AWS. Também é possível definir a política de confiança para a função usando um arquivo JSON.

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

   O exemplo a seguir mostra o conteúdo do arquivo JSON.

   **Conteúdo do lambda-trust-policy.json**

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

1. 

**Criar e testar a função do Lambda**

   Execute as etapas a seguir para criar uma função do AWS Lambda que permita que base64 decodifique os dados da carga útil.

   1. Escreva o código para decodificar os dados da carga útil. Você pode usar o exemplo de código Python a seguir. Especifique um nome para o script, como *`base64_decode.py`*.

      **Conteúdo do 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. Criar um pacote de implantação como um arquivo zip que contenha o arquivo Python e nomeá-lo como `base64_decode.zip`. Use a API `CreateFunction` ou o comando da CLI `create-function` para criar uma função do Lambda para o código de amostra, *`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
      ```

      Você verá a saída a seguir. Você usará o valor do nome do recurso da Amazon (ARN) da saída,`FunctionArn`, ao criar a regra de tópico.

      ```
      {
          "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. Para obter logs para uma invocação a partir da linha de comando, use a opção `--log-type` com o comando `invoke`. A resposta inclui um campo LogResult que contém até 4 KB de logs codificados em base64 da invocação. 

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

      Você receberá uma resposta com um `StatusCode` de 200. Para obter mais informações sobre como criar e usar as funções do Lambda com a AWS CLI, consulte [Como usar o Lambda com a AWS CLI](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).

1. Criar uma regra de tópico

   Use a API `CreateTopicRule` ou o comando da CLI `create-topic-rule` para criar uma regra de tópico que envia uma mensagem para essa função do Lambda. Você também pode adicionar uma segunda ação de regra que republica em um tópico de AWS IoT. Nomeie essa regra de tópico como `Sidewalkrule`.

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

   Você pode usar o arquivo `myrule.json` para especificar mais detalhes sobre a regra. Por exemplo, o arquivo JSON a seguir mostra como republicar em um tópico de AWS IoT e enviar uma mensagem para uma função do 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"
                }
           }
       ],
   }
   ```