Exportar flujos de datos a la Nube de AWS (consola) - AWS IoT Greengrass

AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.

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.

Exportar flujos de datos a la Nube de AWS (consola)

En este tutorial se muestra cómo utilizar la consola de AWS IoT para configurar e implementar un grupo de AWS IoT Greengrass con el gestor de secuencias habilitado. El grupo contiene una función de Lambda definida por el usuario que escribe en una secuencia en el administrador de secuencias, que luego se exporta automáticamente a la Nube de AWS.

El administrador de secuencias hace que la asimilación, el procesamiento y la exportación de flujos de datos de gran volumen sea más eficiente y fiable. En este tutorial, va a crear una función de Lambda de TransferStream que consume datos de IoT. La función de Lambda utiliza el SDK de AWS IoT Greengrass Core para crear una secuencia en el administrador de secuencias y luego leer y escribir en ella. El administrador de secuencias exporta la secuencia al Flujo de datos Kinesis. En el siguiente diagrama se muestra este flujo de trabajo.

Diagrama del flujo de trabajo de administración de secuencias.

El objetivo de este tutorial es mostrar cómo utilizan las funciones de Lambda definidas por el usuario el objeto de StreamManagerClient en el SDK de AWS IoT Greengrass Core para interactuar con el administrador de flujos. Para simplificar, la función de Lambda que va a crear en este tutorial genera datos de dispositivos simulados.

Requisitos previos

Para completar este tutorial, se necesita lo siguiente:

  • Un grupo de Greengrass y un núcleo de Greengrass (versión 1.10 o posterior). Para obtener información acerca de cómo crear un núcleo y un grupo de Greengrass, consulte Empezar con AWS IoT Greengrass. El tutorial de introducción también incluye pasos para instalar el software AWS IoT Greengrass Core.

    nota

    El administrador de secuencias no es compatible con las distribuciones OpenWrt.

  • Java 8 Runtime (JDK 8) instalado en el dispositivo principal.

  • SDK de AWS IoT Greengrass Core para Python versión 1.5.0 o posteriores Para usar StreamManagerClient en el SDK de AWS IoT Greengrass Core para Python, debe:

    • Instalar Python 3.7 o versiones posteriores en el dispositivo principal.

    • Incluya el SDK y sus dependencias en su paquete de implementación de la función de Lambda. Se incluyen las instrucciones en este tutorial.

    sugerencia

    Puede usar StreamManagerClient con Java o NodeJS. Para ver código de ejemplo, consulte el SDK de AWS IoT Greengrass Core para Java y el SDK de AWS IoT Greengrass Core para Node.js en GitHub.

  • Una secuencia de destino denominada MyKinesisStream creada en Amazon Kinesis Data Streams en la misma Región de AWS que su grupo de Greengrass. Para obtener más información, consulte Crear un flujo en la Guía para desarrolladores de Amazon Kinesis.

    nota

    En este tutorial, el administrador de secuencias exporta datos Kinesis Data Streams, lo que deriva en cargos a su Cuenta de AWS. Para obtener información acerca de los precios, consulte Precios de Kinesis Data Streams.

    Para no incurrir en gastos, puede ejecutar este tutorial sin crear una secuencia de datos Kinesis. En este caso, compruebe los registros para ver si el administrador de flujos intentó exportar la secuencia al flujo de datos Kinesis.

  • Una política de IAM agregada al Rol de grupo de Greengrass que permita la acción de kinesis:PutRecords en el flujo de datos de destino, tal y como se muestra en el siguiente ejemplo:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:region:account-id:stream/MyKinesisStream" ] } ] }

El tutorial contiene los siguientes pasos generales:

Completar el tutorial debería tomarle aproximadamente 20 minutos.

Paso 1: Crear un paquete de implementación de la función de Lambda

En este paso, va a crear un paquete de implementación de funciones de Lambda que contiene código de función y dependencias de Python. Cargará este paquete más adelante cuando cree la función de Lambda en AWS Lambda. La función de Lambda utiliza el SDK de AWS IoT Greengrass Core para crear secuencias locales e interactuar con ellas.

nota

Sus funciones de Lambda definidas por el usuario deben utilizar el SDK de AWS IoT Greengrass Core para interactuar con el administrador de flujo. Para obtener más información sobre los requisitos del administrador de secuencias de Greengrass, consulte Requisitos del administrador de secuencias de Greengrass.

  1. Descargue el SDK de AWS IoT Greengrass Core para Python versión 1.5.0 o posteriores.

  2. Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta greengrasssdk.

  3. Instale dependencias de paquetes para incluirlas con el SDK en su paquete de implementación de funciones de Lambda.

    1. Vaya al directorio de SDK que contiene el archivo de requirements.txt. Este archivo registra las dependencias.

    2. Instale las dependencias del SDK. Por ejemplo, ejecute el siguiente comando de pip para instalarlas en el directorio actual:

      pip install --target . -r requirements.txt
  4. Guarde la siguiente función de código de Python en un archivo local llamado "transfer_stream.py".

    sugerencia

    Para ver un ejemplo de código que utiliza Java y NodeJS, consulte el SDK de AWS IoT Greengrass Core para Java y SDK de AWS IoT Greengrass Core para Node.js en GitHub.

    import asyncio import logging import random import time from greengrasssdk.stream_manager import ( ExportDefinition, KinesisConfig, MessageStreamDefinition, ReadMessagesOptions, ResourceNotFoundException, StrategyOnFull, StreamManagerClient, ) # This example creates a local stream named "SomeStream". # It starts writing data into that stream and then stream manager automatically exports # the data to a customer-created Kinesis data stream named "MyKinesisStream". # This example runs forever until the program is stopped. # The size of the local stream on disk will not exceed the default (which is 256 MB). # Any data appended after the stream reaches the size limit continues to be appended, and # stream manager deletes the oldest data until the total stream size is back under 256 MB. # The Kinesis data stream in the cloud has no such bound, so all the data from this script is # uploaded to Kinesis and you will be charged for that usage. def main(logger): try: stream_name = "SomeStream" kinesis_stream_name = "MyKinesisStream" # Create a client for the StreamManager client = StreamManagerClient() # Try deleting the stream (if it exists) so that we have a fresh start try: client.delete_message_stream(stream_name=stream_name) except ResourceNotFoundException: pass exports = ExportDefinition( kinesis=[KinesisConfig(identifier="KinesisExport" + stream_name, kinesis_stream_name=kinesis_stream_name)] ) client.create_message_stream( MessageStreamDefinition( name=stream_name, strategy_on_full=StrategyOnFull.OverwriteOldestData, export_definition=exports ) ) # Append two messages and print their sequence numbers logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "ABCDEFGHIJKLMNO".encode("utf-8")), ) logger.info( "Successfully appended message to stream with sequence number %d", client.append_message(stream_name, "PQRSTUVWXYZ".encode("utf-8")), ) # Try reading the two messages we just appended and print them out logger.info( "Successfully read 2 messages: %s", client.read_messages(stream_name, ReadMessagesOptions(min_message_count=2, read_timeout_millis=1000)), ) logger.info("Now going to start writing random integers between 0 and 1000 to the stream") # Now start putting in random data between 0 and 1000 to emulate device sensor input while True: logger.debug("Appending new random integer to stream") client.append_message(stream_name, random.randint(0, 1000).to_bytes(length=4, signed=True, byteorder="big")) time.sleep(1) except asyncio.TimeoutError: logger.exception("Timed out while executing") except Exception: logger.exception("Exception while running") def function_handler(event, context): return logging.basicConfig(level=logging.INFO) # Start up this sample code main(logger=logging.getLogger())
  5. Comprima en un archivo ZIP los siguientes elementos en un archivo denominado "transfer_stream_python.zip". Este es el paquete de implementación de la función de Lambda.

    • transfer_stream.py. Lógica de la aplicación.

    • greengrasssdk. Biblioteca necesaria para las funciones de Lambda de Python Greengrass que publican mensajes MQTT.

      Las Operaciones del administrador de secuencias están disponibles en la versión 1.5.0 o en las versiones posteriores del SDK de AWS IoT Greengrass Core para Python.

    • Las dependencias que instaló para el SDK de AWS IoT Greengrass Core para Python (por ejemplo, los directorios de cbor2).

    Al crear el archivo de zip, incluya solo estos elementos, no la carpeta que los contiene.

Paso 2: crear una función Lambda

En este paso, va a utilizar la consola de AWS Lambda para crear una función de Lambda y va a configurarla para utilizar su paquete de implementación. A continuación, publicará una versión de la función y creará un alias.

  1. Primero, cree una función de Lambda.

    1. En la AWS Management Console, elija Services (Servicios) y abra la consola de AWS Lambda.

    2. Elija Crear función, y, a continuación, Autor desde cero.

    3. En la sección Basic information (Información básica), utilice los siguientes valores:

      • En Function name (Nombre de la función), introduzca TransferStream.

      • En Runtime (Tiempo de ejecución), elija Python 3.7.

      • En Permisos, mantenga la configuración predeterminada. Esto crea un rol de ejecución que otorga permisos Lambda básicos. AWS IoT Greengrass no utiliza este rol.

    4. En la parte inferior de la página, elija Create function.

  2. A continuación, registre el controlador y cargue el paquete de implementación de la función de Lambda.

    1. En la pestaña Código, en Código fuente, seleccione Cargar desde. En el menú desplegable, seleccione un archivo .zip.

      La carga del menú desplegable con el archivo .zip resaltado.
    2. Seleccione Cargar y, a continuación, elija su paquete de implementación transfer_stream_python.zip. A continuación, elija Save (Guardar).

    3. En la pestaña Código de la función, en Configuración de tiempo de ejecución, elija Editar y, a continuación, introduzca los siguientes valores.

      • En Runtime (Tiempo de ejecución), elija Python 3.7.

      • En Handler (Controlador), escriba transfer_stream.function_handler.

    4. Seleccione Save.

      nota

      El botón de prueba de la consola de AWS Lambda no funciona con esta función. El SDK AWS IoT Greengrass Core no contiene los módulos necesarios para ejecutar las funciones de Lambda de Greengrass de forma independiente en la consola AWS Lambda. Estos módulos (por ejemplo, greengrass_common) se suministran a las funciones una vez desplegados en el núcleo de Greengrass.

  3. Ahora, publique la primera versión de su función de Lambda y cree un alias para la versión.

    nota

    Los grupos de Greengrass pueden hacer referencia a una función de Lambda por versión o alias (recomendado). El uso de un alias facilita la gestión de las actualizaciones del código porque no tiene que cambiar la tabla de suscripción o la definición del grupo cuando se actualiza el código de la función. En su lugar, basta con apuntar el alias a la nueva versión de la función.

    1. En el menú Actions, elija Publish new version.

    2. En Version description (Descripción de versión), escriba First version y, a continuación, elija Publish (Publicar).

    3. En la página de configuración de TransferStream: 1, en el menú Actions (Acciones), elija Create alias (Crear alias).

    4. En la página Create a new alias, utilice los valores siguientes:

      • En Name (Nombre), ingrese GG_TransferStream.

      • En Version (Versión), elija 1.

      nota

      AWS IoT Greengrass no admite alias de Lambda; para versiones de $LATEST.

    5. Seleccione Create (Crear).

Ahora está preparado para añadir la función de Lambda al grupo de Greengrass.

Paso 3: Agregar una función de Lambda al grupo de Greengrass

En este paso, va a añadir la función de Lambda al grupo y a configurar el ciclo de vida y las variables de entorno. Para obtener más información, consulte Control de la ejecución de funciones de Greengrass Lambda utilizando la configuración específica del grupo.

  1. En el panel de navegación de la consola AWS IoT, en Administrar, expanda los dispositivos Greengrass y, a continuación, elija Grupos (V1).

  2. Seleccione el grupo de destino.

  3. En la página de configuración del grupo, elija la pestaña Funciones de lambda.

  4. En la sección Mis funciones de Lambda, seleccione Añadir.

  5. En la página Agregar función de Lambda, seleccione función de Lambda para su función de lambda.

  6. Para la versión de Lambda, seleccione Alias:GG_TransferStream.

    Ahora, configure las propiedades que determinan el comportamiento de la función de Lambda en el grupo Greengrass.

  7. En la sección de configuración de la función de Lambda, realice los siguientes cambios:

    • Establezca el Memory limit (Límite de memoria) en 32 MB.

    • En Ancladas, elija Verdadero

    nota

    Una función de Lambda de larga duración (o anclada) se inicia automáticamente después de arrancar AWS IoT Greengrass y sigue ejecutándose en su propio contenedor. Esto contrasta con una función de Lambda bajo demanda, que se inicia cuando se la invoca y se detiene cuando no quedan tareas que ejecutar. Para obtener más información, consulte Configuración del ciclo de vida de las funciones de Lambda de Greengrass.

  8. Elija Añadir función de Lambda.

Paso 4: Habilitar el administrador de secuencias

En este paso, asegúrese de que el administrador de secuencias está habilitado.

  1. En la página de configuración del grupo, elija la pestaña Funciones de lambda.

  2. En Funciones de Lambda del sistema, seleccione el administrador de secuencias y luego verifique el estado. Si está deshabilitado, elija Edit (Editar). A continuación, elija Enable (Activar) y Save (Guardar). Puede utilizar la configuración de parámetros predeterminada para este tutorial. Para obtener más información, consulte Configurar el administrador de secuencias de AWS IoT Greengrass.

nota

Cuando utiliza la consola para habilitar el administrador de secuencias y desplegar el grupo, el tamaño de la memoria para el administrador de transmisiones se establece por defecto en 4194304 KB (4 GB). Se recomienda establecer el tamaño de la memoria en al menos 128000 KB.

Paso 5: Configurar el registro local

En este paso, debe configurar los componentes del sistema de AWS IoT Greengrass, las funciones de Lambda definidas por el usuario y los conectores en el grupo para que escriban los registros en el sistema de archivos del dispositivo del núcleo. Puede usar registros para solucionar cualquier problema que pueda surgir. Para obtener más información, consulte Monitorización con registros de AWS IoT Greengrass.

  1. En Local logs configuration (Configuración de registros locales), compruebe si el registro local está configurado.

  2. Si los registros no están configurados para componentes del sistema Greengrass o para funciones de Lambda definidas por el usuario, seleccione Editar.

  3. Elija el nivel de registro de funciones de Lambda del usuario y el nivel de registro del sistema Greengrass.

  4. Conserve los valores predeterminados para el nivel de registro y el límite de espacio en disco y, a continuación, elija Guardar.

Paso 6: Implementar el grupo de Greengrass

Implemente el grupo en el dispositivo del núcleo.

  1. Asegúrese de que el núcleo de AWS IoT Greengrass se está ejecutando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

    1. Para comprobar si el demonio está en ejecución:

      ps aux | grep -E 'greengrass.*daemon'

      Si la salida contiene una entrada root para /greengrass/ggc/packages/ggc-version/bin/daemon, el demonio está en ejecución.

      nota

      La versión que figura en la ruta depende de la versión del software AWS IoT Greengrass Core que esté instalada en el dispositivo del núcleo.

    2. Iniciar el daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. En la página de configuración de grupo, elija Implementar.

    1. En la pestaña Funciones de Lambda, en la sección Funciones de Lambda del sistema, seleccione Detector IP y elija Editar.

    2. En el cuadro de diálogo Editar configuración del detector IP, seleccione Detectar y anular automáticamente los puntos de conexión del agente MQTT.

    3. Seleccione Save.

      Esto permite a los dispositivos adquirir automáticamente la información de conexión del dispositivo principal, como la dirección IP, el DNS y el número de puerto. Se recomienda la detección automática, pero AWS IoT Greengrass también es compatible con puntos de enlace especificados manualmente. Solo se le solicitará el método de detección la primera vez que se implemente el grupo.

      nota

      Si se le solicita, conceda permiso para crear el rol de servicio de Greengrass y asócielo a su Cuenta de AWS en el Región de AWS actual. Este rol permite a AWS IoT Greengrass acceder a los servicios de AWS.

      En la página Deployments (Implementaciones), se muestra la marca temporal, el ID de versión y el estado de la implementación. Una vez terminada, la implementación debería mostrar el estado Completado.

      Para obtener ayuda sobre la resolución de problemas, consulte Solución de problemas de AWS IoT Greengrass.

Paso 7: Probar la aplicación

La función de Lambda TransferStream genera datos simulados del dispositivo. Escribe datos en una secuencia que el administrador de secuencias exporta a la secuencia de datos de Kinesis de destino.

  1. En la consola de Amazon Kinesis , bajo las Secuencias de datos de Kinesis, seleccione MyKinesisStream.

    nota

    Si ejecutó el tutorial sin una secuencia de datos de Kinesis de destino, compruebe el archivo de registro del administrador de secuencias (GGStreamManager). Si contiene export stream MyKinesisStream doesn't exist en un mensaje de error, la prueba se ha realizado correctamente. Este error significa que el servicio intentó exportar a la secuencia, pero que la secuencia no existe.

  2. En la página MyKinesisStream, seleccione Monitoring (Supervisión). Si la prueba se realiza correctamente, debería ver los datos en los gráficos Put Records. En función de la conexión, es posible que tarde un minuto en mostrar los datos.

    importante

    Cuando haya terminado la prueba, elimine la secuencia de datos de Kinesis para evitar incurrir en más gastos.

    O ejecute el siguiente comando para detener el daemon de Greengrass. Así evitará que el núcleo envíe mensajes hasta que esté listo para continuar las pruebas.

    cd /greengrass/ggc/core/ sudo ./greengrassd stop
  3. Elimine la función de Lambda TransferStream del núcleo.

    1. En el panel de navegación de la consola AWS IoT, en Administrar, expanda los dispositivos Greengrass y, a continuación, elija Grupos (V1).

    2. En Grupos de Greengrass, elija su grupo.

    3. En la página Lambdas seleccione los puntos suspensivos (...) para la función de TransferStream y, a continuación, seleccione Remove function (Eliminar función).

    4. En Actions (Acciones), seleccione Deploy (Implementar).

Para ver la información de registro o solucionar problemas con las secuencias, compruebe los registros para las funciones TransferStream y GGStreamManager. Debe tener permisos de root para leer registros AWS IoT Greengrass en el sistema de archivos.

  • TransferStream escribe entradas de registro en greengrass-root/ggc/var/log/user/region/account-id/TransferStream.log.

  • GGStreamManager escribe entradas de registro en greengrass-root/ggc/var/log/system/GGStreamManager.log.

Si necesita más información sobre la solución de problemas, puede establecer el nivel de registro para Registros de usuario de Lambda en Registros de depuración y, a continuación, implementar el grupo de nuevo.

Véase también