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-documentfile://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.
-
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-documentfile://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" } ] }
-
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.
-
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))
-
Criar um pacote de implantação como um arquivo zip que contenha o arquivo Python e nomeá-lo como
. Use a APIbase64_decode.zip
CreateFunction
ou o comando da CLIcreate-function
para criar uma função do Lambda para o código de amostra,
.base64_decode.py
-
aws lambda create-function --function-name
my-function
\ --zip-filefileb://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", ... } -
Para obter logs para uma invocação a partir da linha de comando, use a opção
--log-type
com o comandoinvoke
. 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 TailVocê 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.
-
-
Criar uma regra de tópico
Use a API
CreateTopicRule
ou o comando da CLIcreate-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-payloadfile://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"
} } ], }