Creación de un rol de IAM y una regla de IoT para el destino - AWS IoT Wireless

Creación de un rol de IAM y una regla de IoT para el destino

Las reglas de AWS IoT envían mensajes del dispositivo a otros servicios. Las reglas de AWS IoT también pueden procesar los mensajes binarios recibidos de un dispositivo final Sidewalk para que los utilicen otros servicios. Los destinos de AWS IoT Core para Amazon Sidewalk asocian un dispositivo inalámbrico a la regla que procesa los datos de los mensajes del dispositivo para enviarlos a otros servicios. La regla actúa sobre los datos del dispositivo en cuanto AWS IoT Core para Amazon Sidewalk los recibe. Para todos los dispositivos que envían sus datos al mismo servicio, puede crear un destino que puedan compartir todos los dispositivos. También debe crear un rol de IAM que conceda permiso para enviar datos a la regla.

Creación de un rol de IAM para los destinos

Cree un rol de IAM que le conceda a AWS IoT Core para Amazon Sidewalk el permiso necesario para enviar datos a la regla de AWS IoT. Para crear el rol, utilice la operación CreateRole de la API o el comando create-role de la CLI. Puede nombrar el rol 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"}]}'

También puede definir la política de confianza para el rol con un archivo JSON.

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

A continuación se muestra el contenido del archivo JSON.

Contenido de trust-policy.json

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

Creación de una regla para el destino

Para crear una regla, utilice la operación CreateTopicRule de la API de AWS IoT Core o el comando create-topic-rule de la AWS CLI. El destino utilizará la regla del tema para enrutar los datos recibidos del dispositivo final de Sidewalk a otros Servicios de AWS. Por ejemplo, puede crear una acción de regla que envíe un mensaje a una función de Lambda. Puede definir la función de Lambda de manera que reciba los datos de la aplicación del dispositivo y utilice base64 para decodificar los datos de la carga para que puedan utilizarlos otras aplicaciones.

En los pasos siguientes se muestra cómo se crea la función de Lambda y, a continuación, una regla del tema que envía un mensaje a esta función.

  1. Creación de un rol y una política de ejecución

    Cree el rol de IAM que concederá a su función permiso para obtener acceso a los recursos de AWS. También puede definir la política de confianza para el rol con un archivo JSON.

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

    A continuación se muestra el contenido del archivo JSON.

    Contenido de lambda-trust-policy.json

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Creación y prueba de la función de Lambda

    Realice los siguientes pasos para crear una función de AWS Lambda que en base64 decodifique los datos de la carga.

    1. Escriba el código para decodificar los datos de la carga. Por ejemplo, puede usar el siguiente código Python de muestra. Especifique un nombre para el script, como base64_decode.py.

      Contenido del archivo 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. Cree un paquete de implementación como un archivo zip que contenga el archivo Python y asígnele el nombre base64_decode.zip. Utilice la CreateFunction de la API o el comando create-function de la CLI para crear una función de Lambda para el código de ejemplo, 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

      Debería ver la siguiente salida. Utilizará el valor del nombre de recurso de Amazon (ARN) de la salida, FunctionArn, al crear la regla del tema.

      { "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 obtener registros para una invocación desde la línea de comandos, utilice la opción --log-type con el comando invoke. La respuesta incluye un campo LogResult que contiene hasta 4 KB de registros con codificación base64 a partir de la invocación.

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

      Debe recibir una respuesta con un StatusCode de 200. Para obtener más información acerca de la creación y el uso de las funciones de Lambda de la AWS CLI, consulte Uso de Lambda con la AWS CLI.

  3. Creación de una regla del tema

    Utilice la CreateTopicRule de la API o el comando create-topic-rule de la CLI para crear una regla del tema que envíe un mensaje a esta función de Lambda. También puede añadir una segunda acción de regla que vuelva a publicar en un tema de AWS IoT. Asigne a esta regla del tema el nombre Sidewalkrule.

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

    Puede usar el archivo myrule.json para especificar más detalles sobre la regla. Por ejemplo, el siguiente archivo JSON muestra cómo volver a publicar un tema de AWS IoT y enviar un mensaje a una función de 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" } } ], }