Criar um perfil do IAM e regra de IoT para o destino - AWS IoT Wireless

Criar um perfil do IAM e regra de IoT para o destino

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

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 CreateRole ou o comando de CLI 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

Use a operação da API AWS IoT Core, CreateTopicRule, ou o comando da AWS CLI, create-topic-rule, 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" } ] }
  2. 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_decode.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))
    2. 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.

    3. 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", ... }
    4. 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.

  3. 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" } } ], }