Tutorial: Úselo AWS Lambda con MQTT - Amazon Location Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Tutorial: Úselo AWS Lambda con MQTT

Si bien su uso ya no AWS Lambda es obligatorio para enviar datos de ubicación del dispositivo a Amazon Location para su seguimiento, es posible que desee utilizar Lambda en algunos casos. Por ejemplo, si desea procesar usted mismo los datos de ubicación de su dispositivo antes de enviarlos a Amazon Location. En los temas siguientes se describe cómo utilizar Lambda para procesar los mensajes antes de enviarlos al rastreador. Para obtener más información sobre este patrón, consulte la arquitectura de referencia.

Requisitos previos

Antes de empezar a realizar el rastreo, debe crear un recurso de rastreo. Para crear un recurso de seguimiento, puedes usar la consola de Amazon Location AWS CLI, la o Amazon LocationAPIs.

En el siguiente ejemplo, se utiliza la consola de Amazon Location Service para crear el recurso de rastreo:

  1. Abre la consola de Amazon Location Service en https://console.aws.amazon.com/location/.

  2. En el panel de navegación izquierdo, elija Rastreadores.

  3. Seleccione Crear rastreador.

  4. Complete las casillas siguientes:

    • Nombre: introduzca un nombre único que tenga un máximo de 100 caracteres. Entre las entradas válidas se incluyen caracteres alfanuméricos, guiones y guiones bajos. Por ejemplo: MyTracker.

    • Descripción: escriba una descripción opcional. Por ejemplo: Tracker for storing AWS IoT Core device positions.

    • Filtrado de posición: seleccione el filtro que desee usar para las actualizaciones de posición. Por ejemplo, filtrado basado en la precisión.

  5. Seleccione Crear rastreador.

Crear una función de Lambda

Para crear una conexión entre Amazon Location Service AWS IoT Core y Amazon, necesitas una AWS Lambda función que procese los mensajes reenviados AWS IoT Core. Esta función extraerá cualquier dato posicional, lo formateará para Amazon Location Service y lo enviará a través del Amazon Location TrackerAPI. Puede crear esta función a través de la AWS Lambda consola, o puede usar AWS Command Line Interface (AWS CLI) o. AWS Lambda APIs

Para crear una función de Lambda que publique actualizaciones de posición en Amazon Location mediante la consola:

  1. Abra la AWS Lambda consola en https://console.aws.amazon.com/lambda/.

  2. En el panel de navegación izquierdo, elija Funciones.

  3. Elija Crear función y asegúrese de que esté seleccionada la opción Autor desde cero.

  4. Complete las casillas siguientes:

    • Nombre de función: introduzca un nombre único para su función. Las entradas válidas incluyen caracteres alfanuméricos, guiones y guiones bajos sin espacios. Por ejemplo: MyLambda.

    • Tiempo de ejecución: elija Python 3.8.

  5. Seleccione Crear función.

  6. Elija la pestaña Código para abrir el editor.

  7. Sobrescriba el código del marcador de posición lambda_function.py con lo siguiente y sustituya el valor asignado a TRACKER_NAME por el nombre del rastreador que creó como requisito previo.

    from datetime import datetime import json import os import boto3 # Update this to match the name of your Tracker resource TRACKER_NAME = "MyTracker" """ This Lambda function receives a payload from AWS IoT Core and publishes device updates to Amazon Location Service via the BatchUpdateDevicePosition API. Parameter 'event' is the payload delivered from AWS IoT Core. In this sample, we assume that the payload has a single top-level key 'payload' and a nested key 'location' with keys 'lat' and 'long'. We also assume that the name of the device is nested in the payload as 'deviceid'. Finally, the timestamp of the payload is present as 'timestamp'. For example: >>> event { 'payload': { 'deviceid': 'thing123', 'timestamp': 1604940328, 'location': { 'lat': 49.2819, 'long': -123.1187 }, 'accuracy': {'Horizontal': 20.5 }, 'positionProperties': {'field1':'value1','field2':'value2'} } } If your data doesn't match this schema, you can either use the AWS IoT Core rules engine to format the data before delivering it to this Lambda function, or you can modify the code below to match it. """ def lambda_handler(event, context): update = { "DeviceId": event["payload"]["deviceid"], "SampleTime": datetime.fromtimestamp(event["payload"]["timestamp"]).strftime("%Y-%m-%dT%H:%M:%SZ"), "Position": [ event["payload"]["location"]["long"], event["payload"]["location"]["lat"] ] } if "accuracy" in event["payload"]: update["Accuracy"] = event["payload"]['accuracy'] if "positionProperties" in event["payload"]: update["PositionProperties"] = event["payload"]['positionProperties'] client = boto3.client("location") response = client.batch_update_device_position(TrackerName=TRACKER_NAME, Updates=[update]) return { "statusCode": 200, "body": json.dumps(response) }
  8. Seleccione Implementar para almacenar la función actualizada.

  9. Elija la pestaña Configuración.

  10. En la sección Permisos, elija el nombre del rol con el hipervínculo para conceder permisos de Amazon Location Service a su función de Lambda.

  11. En la página Resumen de su rol, seleccione Agregar permisos y, a continuación, en la lista desplegable, seleccione Crear política integrada.

  12. Elija la JSONpestaña y sobrescriba la política con el siguiente documento. Esto permite que la función de Lambda actualice las posiciones de los dispositivos gestionadas por todos los recursos de rastreo en todas las regiones.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "WriteDevicePosition", "Effect": "Allow", "Action": "geo:BatchUpdateDevicePosition", "Resource": "arn:aws:geo:*:*:tracker/*" } ] }
  13. Elija Revisar política.

  14. Escriba un nombre para la política. Por ejemplo: AmazonLocationTrackerWriteOnly.

  15. Elija Crear política.

Puede modificar el código de esta función, según sea necesario, para adaptarlo al esquema de mensajes de su propio dispositivo.

Cree una regla AWS IoT Core

A continuación, cree una AWS IoT Core regla para reenviar la telemetría posicional de sus dispositivos a la AWS Lambda función para su transformación y publicación en Amazon Location Service. La regla de ejemplo proporcionada asume que cualquier transformación necesaria de las cargas útiles del dispositivo es gestionada por la función de Lambda. Puede crear esta regla a través de la AWS IoT Core consola, el AWS Command Line Interface ()AWS CLI o el. AWS IoT Core APIs

nota

Si bien la AWS IoT consola gestiona los permisos necesarios para AWS IoT Core poder invocar la función Lambda, si va a crear la regla desde SDK o, debe configurar una política a AWS CLI la que conceder el permiso. AWS IoT

Para crear y AWS IoT Core usar la consola

  1. Inicie sesión en la AWS IoT Core consola en https://console.aws.amazon.com/iot/.

  2. En el panel de navegación izquierdo, expanda Actuar y, a continuación, elija Reglas.

  3. Elija Crear una regla para iniciar el asistente de nueva regla.

  4. Escriba un nombre y la descripción de la regla.

  5. Para la declaración de consulta de la regla, actualice el atributo FROM para que haga referencia a un tema en el que al menos un dispositivo publique telemetría que incluya la ubicación. Si está probando la solución, no es necesario modificarla.

    SELECT * FROM 'iot/topic'
  6. En Definir una o varias acciones, elija Agregar acción.

  7. Seleccione Enviar un mensaje a una función de Lambda.

  8. Elija Configurar acción.

  9. Busque y seleccione su función de Lambda de la lista.

  10. Seleccione Agregar acción.

  11. Elija Crear regla.

Pon a prueba tu AWS IoT Core regla en la consola

Si actualmente ningún dispositivo publica telemetría que incluya la ubicación, puede probar la regla y esta solución mediante la AWS IoT Core consola. La consola tiene un cliente de prueba en el que puede publicar un mensaje de muestra para comprobar los resultados de la solución.

  1. Inicie sesión en la AWS IoT Core consola en. https://console.aws.amazon.com/iot/

  2. En el panel de navegación de la izquierda, expande Prueba y elige cliente MQTT de prueba.

  3. En Publicar en un tema, establece el nombre del tema en iot/topic (o el nombre del tema que configuraste en la AWS IoT Core regla, si es diferente) y proporciona lo siguiente para la carga del mensaje. Sustituya la marca de tiempo 1604940328 con una marca de tiempo válida de los últimos 30 días (se ignoran las marcas de tiempo de más de 30 días).

    { "payload": { "deviceid": "thing123", "timestamp": 1604940328, "location": { "lat": 49.2819, "long": -123.1187 }, "accuracy": { "Horizontal": 20.5 }, "positionProperties": { "field1": "value1", "field2": "value2" } } }
  4. Seleccione Publicar en un tema para enviar el mensaje de prueba.

  5. Para validar que Amazon Location Service recibió el mensaje, use el siguiente comando AWS CLI . Si los modificó durante la configuración, sustituya el nombre del rastreador y el identificador del dispositivo por los que utilizó.

    aws location batch-get-device-position --tracker-name MyTracker --device-ids thing123