Conector de IoT Analytics - 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.

Conector de IoT Analytics

aviso

Este conector ha pasado a la fase de vida útil prolongada y AWS IoT Greengrass no lanzará actualizaciones que proporcionen funciones, mejoras de las funciones existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte AWS IoT Greengrass Version 1política de mantenimiento.

El conector IoT Analytics envía datos del dispositivo local a AWS IoT Analytics. Puede utilizar este conector como una ubicación central para recopilar datos de sensores en el dispositivo del núcleo de Greengrass y desde dispositivos cliente conectados. El conector envía los datos a los canales de AWS IoT Analytics en la Cuenta de AWS y región actual. Puede enviar datos a un canal de destino predeterminado y a canales especificados dinámicamente.

nota

AWS IoT Analytics es un servicio completamente administrado que le permite recopilar, almacenar, procesar y consultar datos de IoT. En AWS IoT Analytics, los datos se pueden seguir analizando y procesando. Por ejemplo, se puede utilizar para entrenar modelos de ML para monitorizar el estado de la máquina o para probar nuevas estrategias de modelado. Para obtener más información, consulte ¿Qué es AWS IoT Analytics? en la Guía del usuario de AWS IoT Analytics.

El conector acepta datos formateados y sin formatear en temas de MQTT de entrada. Admite dos temas predefinidos donde el canal de destino se especifica en línea. También puede recibir mensajes en temas definidos por el cliente que se configuran en suscripciones. Esto se puede utilizar para dirigir mensajes desde dispositivos cliente que se publican a temas fijos o para gestionar datos sin estructurar o dependientes de la pila desde dispositivos con recursos limitados.

Este conector utiliza la API BatchPutMessage para enviar datos (como una cadena JSON o con codificación base64) al canal de destino. El conector puede procesar datos sin procesar en un formato que se adapte a los requisitos de la API. El conector almacena en búfer mensajes de entrada en las colas por canal y procesa los lotes de forma asíncrona. Proporciona parámetros que le permiten controlar el comportamiento de creación de colas y procesamiento por lotes y restringir el consumo de memoria. Por ejemplo, puede configurar el tamaño de cola máximo, el intervalo por lotes, el tamaño de memoria y el número de canales activos.

Este conector tiene las siguientes versiones.

Versión

ARN

4

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/4

3

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/3

2.

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/2

1

arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/1

Para obtener información sobre los cambios de versión, consulte el Registro de cambios.

Requisitos

Este conector exige los siguientes requisitos:

Version 3 - 4
  • Software AWS IoT Greengrass Core versión 1.9.3 o posterior.

  • Python versión 3.7 o 3.8 instalado en el dispositivo principal y añadido a la variable de entorno PATH.

    nota

    Para usar Python 3.8, ejecute el siguiente comando para crear un enlace simbólico desde la carpeta de instalación predeterminada de Python 3.7 a los binarios de Python 3.8 instalados.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    Esto configura su dispositivo para que cumpla con el requisito de Python para AWS IoT Greengrass.

  • Este conector solo puede utilizarse en las regiones de Amazon Web Services en las que se admiten tanto AWS IoT Greengrass como AWS IoT Analytics.

  • Se crean y configuran todas las entidades y flujos de trabajo de AWS IoT Analytics relacionados. Las entidades incluyen canales, canalizaciones, almacenes de datos y conjuntos de datos. Para obtener más información, consulte los procedimientos de la AWS CLI o de la consola en la Guía de usuario de AWS IoT Analytics.

    nota

    Los canales de AWS IoT Analytics de destino deben usar la misma cuenta y deben estar en la misma Región de AWS que este conector.

  • El rol del grupo de Greengrass configurado para permitir la acción iotanalytics:BatchPutMessage en los canales de destino, tal y como se muestra en la siguiente política de IAM de ejemplo. Los canales deben estar en la Cuenta de AWS y región actual.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1528133056761", "Action": [ "iotanalytics:BatchPutMessage" ], "Effect": "Allow", "Resource": [ "arn:aws:iotanalytics:region:account-id:channel/channel_1_name", "arn:aws:iotanalytics:region:account-id:channel/channel_2_name" ] } ] }

    Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte Administración del rol de grupo de Greengrass (consola) o Administración del rol de grupo de Greengrass (CLI).

Versions 1 - 2
  • Software AWS IoT Greengrass Core versión 1.7 o posterior.

  • Versión 2.7 de Python instalada en el dispositivo principal y añadida a la variable de entorno PATH.

  • Este conector solo puede utilizarse en las regiones de Amazon Web Services en las que se admiten tanto AWS IoT Greengrass como AWS IoT Analytics.

  • Se crean y configuran todas las entidades y flujos de trabajo de AWS IoT Analytics relacionados. Las entidades incluyen canales, canalizaciones, almacenes de datos y conjuntos de datos. Para obtener más información, consulte los procedimientos de la AWS CLI o de la consola en la Guía de usuario de AWS IoT Analytics.

    nota

    Los canales de AWS IoT Analytics de destino deben usar la misma cuenta y deben estar en la misma Región de AWS que este conector.

  • El rol del grupo de Greengrass configurado para permitir la acción iotanalytics:BatchPutMessage en los canales de destino, tal y como se muestra en la siguiente política de IAM de ejemplo. Los canales deben estar en la Cuenta de AWS y región actual.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1528133056761", "Action": [ "iotanalytics:BatchPutMessage" ], "Effect": "Allow", "Resource": [ "arn:aws:iotanalytics:region:account-id:channel/channel_1_name", "arn:aws:iotanalytics:region:account-id:channel/channel_2_name" ] } ] }

    Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte Administración del rol de grupo de Greengrass (consola) o Administración del rol de grupo de Greengrass (CLI).

Parámetros

MemorySize

La cantidad de memoria (en KB) para asignar a este conector.

Nombre que mostrar en la consola AWS IoT: Tamaño de memoria

Obligatorio: true

Escriba: string

Patrón válido: ^[0-9]+$

PublishRegion

La Región de AWS en la que se crean sus canales de AWS IoT Analytics. Use la misma región que el conector.

nota

También debe coincidir con la región para los canales que se especifican en el rol de grupo.

Nombre para mostrar en la consola AWS IoT: Publicar región

Obligatorio: false

Escriba: string

Patrón válido: ^$|([a-z]{2}-[a-z]+-\\d{1})

PublishInterval

El intervalo (en segundos) para publicar un lote de datos recibidos en AWS IoT Analytics.

Nombre para mostrar en la consola AWS IoT: Publicar intervalo

Obligatorio: false

Escriba: string

Valor predeterminado: 1

Patrón válido: $|^[0-9]+$

IotAnalyticsMaxActiveChannels

El número máximo de canales de AWS IoT Analytics que el conector vigila de forma activa. Debe ser mayor que cero e igual o inferior al número de canales en los que espera que el conector publique en un momento determinado.

Puede utilizar este parámetro para restringir el consumo de memoria limitando el número total de colas que el conector puede administrar en un momento dado. Una cola se elimina cuando se han enviado todos los mensajes de colas.

Nombre para mostrar en la consola AWS IoT: Número máximo de canales activos

Obligatorio: false

Escriba: string

Valor predeterminado: 50

Patrón válido: ^$|^[1-9][0-9]*$

IotAnalyticsQueueDropBehavior

El comportamiento para eliminar mensajes de una cola de canales cuando la cola está llena.

Nombre para mostrar en la consola AWS IoT: Comportamiento de eliminación de cola

Obligatorio: false

Escriba: string

Valores válidos: DROP_NEWEST o DROP_OLDEST

Valor predeterminado: DROP_NEWEST

Patrón válido: ^DROP_NEWEST$|^DROP_OLDEST$

IotAnalyticsQueueSizePerChannel

Número máximo de mensajes que conservar en memoria (por canal) antes de que los mensajes se envíen o se eliminen. Debe ser mayor que 0.

Nombre para mostrar en la consola AWS IoT: Tamaño máximo de cola por canal

Obligatorio: false

Escriba: string

Valor predeterminado: 2048

Patrón válido: ^$|^[1-9][0-9]*$

IotAnalyticsBatchSizePerChannel

El número máximo de mensajes que enviar a un canal de AWS IoT Analytics en una solicitud por lotes. Debe ser mayor que 0.

Nombre para mostrar en la consola AWS IoT: Número máximo de mensajes por lote por canal

Obligatorio: false

Escriba: string

Valor predeterminado: 5

Patrón válido: ^$|^[1-9][0-9]*$

IotAnalyticsDefaultChannelName

El nombre del canal de AWS IoT Analytics que este conector utiliza para mensajes que se envían a un tema de entrada definido por el cliente.

Nombre para mostrar en la consola AWS IoT: Nombre de canal predeterminado

Obligatorio: false

Escriba: string

Patrón válido: ^[a-zA-Z0-9_]$

IsolationMode

El modo de creación de contenedores para este conector. El valor predeterminado es GreengrassContainer, lo que significa que el conector se ejecuta en un entorno de tiempo de ejecución aislado dentro del contenedor de AWS IoT Greengrass.

nota

La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.

Nombre para mostrar en la consola AWS IoT: Modo de aislamiento de contenedores

Obligatorio: false

Escriba: string

Valores válidos: GreengrassContainer o NoContainer

Patrón válido: ^NoContainer$|^GreengrassContainer$

Ejemplo de creación de conector (AWS CLI)

El siguiente comando de la CLI crea una ConnectorDefinition con una versión inicial que contiene el conector de IoT Analytics.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyIoTAnalyticsApplication", "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTAnalytics/versions/3", "Parameters": { "MemorySize": "65535", "PublishRegion": "us-west-1", "PublishInterval": "2", "IotAnalyticsMaxActiveChannels": "25", "IotAnalyticsQueueDropBehavior": "DROP_OLDEST", "IotAnalyticsQueueSizePerChannel": "1028", "IotAnalyticsBatchSizePerChannel": "5", "IotAnalyticsDefaultChannelName": "my_channel" } } ] }'
nota

La función de Lambda de este conector tiene un ciclo de vida prolongado.

En la consola AWS IoT Greengrass, puede añadir un conector desde la página de Conectores del grupo. Para obtener más información, consulte Introducción a los conectores de Greengrass (consola).

Datos de entrada

Este conector acepta datos sobre temas de MQTT predefinidos y definidos por el cliente. Los publicadores pueden ser dispositivos cliente, funciones de Lambda u otros conectores.

Temas predefinidos

El conector admite los siguientes dos temas de MQTT estructurados que permiten a los publicadores especificar el nombre de canal insertado.

  • Un mensaje con formato en el tema iotanalytics/channels/+/messages/put. Los datos de IoT en estos mensajes de entrada se deben formatear como cadena JSON o con codificación base64.

  • Un mensaje sin formato en el tema iotanalytics/channels/+/messages/binary/put. Los mensajes de entrada recibidos en este tema se tratan como datos binarios y pueden contener cualquier tipo de datos.

    Para publicar en temas predefinidos, reemplace el comodín + por el nombre del canal. Por ejemplo:

    iotanalytics/channels/my_channel/messages/put
Temas definidos por el cliente

El conector admite la sintaxis de temas #, que le permite aceptar mensajes de entrada en cualquier tema de MQTT que configure en una suscripción. Le recomendamos que especifique una ruta de tema en lugar de utilizar únicamente el comodín # en sus suscripciones. Estos mensajes se envían al canal predeterminado que especifique para el conector.

Los mensajes de entrada en temas definidos por el cliente se tratan como datos binarios. Pueden utilizar cualquier formato de mensaje y pueden contener cualquier tipo de datos. Puede utilizar temas definidos por el cliente para dirigir mensajes desde dispositivos que publican en temas fijos. También puede utilizarlas para aceptar datos de entrada desde dispositivos de cliente que no pueden procesar los datos en un mensaje con formato para enviar al conector.

Para obtener más información acerca de las suscripciones y temas de MQTT, consulte Entradas y salidas.

El rol de grupo debe permitir la acción iotanalytics:BatchPutMessage en todos los canales de destino. Para obtener más información, consulte Requisitos.

Filtro de temas: iotanalytics/channels/+/messages/put

Utilice este tema para enviar mensajes con formato al conector y para especificar de forma dinámica un canal de destino. Este tema también le permite especificar un ID que se devuelve en la salida de respuesta. El conector verifica que los ID sean únicos para cada mensaje en la solicitud BatchPutMessage saliente que envía a AWS IoT Analytics. Se elimina un mensaje que tiene un ID duplicado.

Los datos de entrada enviados a este tema deben utilizar el siguiente formato de mensaje.

Propiedades de mensajes
request

Los datos que enviar al canal especificado.

Obligatorio: true

Escriba: object que incluye las siguientes propiedades:

message

Los datos de dispositivo o sensor como cadena JSON o con codificación en base64.

Obligatorio: true

Escriba: string

id

Un ID arbitrario para la solicitud. Esta propiedad se usa para asignar una solicitud de entrada a una respuesta de salida. Si se especifica, la propiedad id en el objeto de respuesta se establece en este valor. Si omite esta propiedad, el conector genera un ID.

Obligatorio: false

Escriba: string

Patrón válido: .*

Ejemplo de entrada
{ "request": { "message" : "{\"temp\":23.33}" }, "id" : "req123" }
Filtro de temas: iotanalytics/channels/+/messages/binary/put

Utilice este tema para enviar mensajes sin formato al conector y para especificar de forma dinámica un canal de destino.

Los datos del conector no analizan los mensajes de entrada recibidos en este tema. Los trata como datos binarios. Antes de enviar los mensajes a AWS IoT Analytics, el conector los codifica y formatea de acuerdo con los requisitos de la API BatchPutMessage:

  • El conector codifica en base64 los datos sin formato e incluye la carga cifrada en una solicitud BatchPutMessage saliente.

  • El conector genera y asigna un ID a cada mensaje de entrada.

    nota

    La salida de respuesta del conector no incluye una correlación de ID para estos mensajes de entrada.

Propiedades de mensajes

Ninguno.

Filtro de temas: #

Utilice este tema para enviar cualquier formato de mensaje al canal predeterminado. Esto resulta especialmente útil cuando los dispositivos cliente publican en temas fijos o cuando desea enviar datos al canal predeterminado desde dispositivos de clientes que no pueden procesar los datos en el formato de mensaje admitido del conector.

Defina la sintaxis del tema en la suscripción que crea para conectar este conector al origen de datos. Le recomendamos que especifique una ruta de tema en lugar de utilizar únicamente el comodín # en sus suscripciones.

Los datos del conector no analizan los mensajes que se publican en este tema de entrada. Todos los mensajes de entrada se tratan como datos binarios. Antes de enviar los mensajes a AWS IoT Analytics, el conector los codifica y formatea de acuerdo con los requisitos de la API BatchPutMessage:

  • El conector codifica en base64 los datos sin formato e incluye la carga cifrada en una solicitud BatchPutMessage saliente.

  • El conector genera y asigna un ID a cada mensaje de entrada.

    nota

    La salida de respuesta del conector no incluye una correlación de ID para estos mensajes de entrada.

Propiedades de mensajes

Ninguno.

Datos de salida

Este conector publica información de estado como datos de salida en un tema MQTT. Esta información contiene la respuesta devuelta por AWS IoT Analytics para cada mensaje de entrada que recibe y envía a AWS IoT Analytics.

Filtro de temas en la suscripción

iotanalytics/messages/put/status

Ejemplo de salida: Correcto
{ "response" : { "status" : "success" }, "id" : "req123" }
Ejemplo de salida: Error
{ "response" : { "status" : "fail", "error" : "ResourceNotFoundException", "error_message" : "A resource with the specified name could not be found." }, "id" : "req123" }
nota

Si el conector detecta un error que se puede volver a intentar (por ejemplo, errores de conexión), volverá a intentar la publicación en el siguiente lote. El retroceso exponencial lo gestiona el SDK de AWS. Las solicitudes que fallan con errores que se pueden reintentar se añaden de nuevo a la cola del canal para seguir publicándolos de acuerdo con el parámetro IotAnalyticsQueueDropBehavior.

Ejemplo de uso

Utilice los siguientes pasos de alto nivel para configurar una función de Lambda de Python 3.7 de ejemplo que puede utilizar para probar el conector.

nota
  1. Asegúrese de cumplir los requisitos para el conector.

    Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte Administración del rol de grupo de Greengrass (consola) o Administración del rol de grupo de Greengrass (CLI).

  2. Cree y publique una función de Lambda que envíe datos de entrada al conector.

    Guarde el código de ejemplo como un archivo PY. Descargue y descomprima el SDK de AWS IoT Greengrass Core para Python. A continuación, cree un paquete zip que contenga el archivo PY y la carpeta greengrasssdk en el nivel raíz. Este paquete zip es el paquete de implementación que se carga en AWS Lambda.

    Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

  3. Configuración del grupo de Greengrass.

    1. Agregue la función de Lambda por su alias (recomendado). Configure el ciclo de vida de Lambda como de larga duración (o "Pinned": true en la CLI).

    2. Agregue el conector y configure sus parámetros.

    3. Agregue suscripciones que permitan al conector recibir datos de entrada y enviar datos de salida en filtros de tema compatibles.

      • Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.

      • Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utilice esta suscripción para ver los mensajes de estado en la consola de AWS IoT.

  4. Implemente el grupo.

  5. En la consola de AWS IoT, en la página Prueba, suscríbase al tema de datos de salida para ver los mensajes de estado del conector. La función de Lambda de ejemplo es de larga duración y comienza a enviar mensajes inmediatamente después de implementar el grupo.

    Cuando haya terminado de probar, puede establecer el ciclo de vida de Lambda en Bajo demanda (o "Pinned": false en la CLI) e implementar el grupo. Esto impide que la función envíe mensajes.

Ejemplo

El siguiente ejemplo de función de Lambda envía un mensaje de entrada al conector.

import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'iotanalytics/channels/my_channel/messages/put' def create_request_with_all_fields(): return { "request": { "message" : "{\"temp\":23.33}" }, "id" : "req_123" } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print("Message To Publish: ", messageToPublish) iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def lambda_handler(event, context): return

Límites

Este conector está sujeto a los siguientes límites.

  • Todos los límites impuestos por AWS SDK for Python (Boto3) para la acción AWS IoT Analytics batch_put_message.

  • Todas las cuotas impuestas por la API BatchputMessage AWS IoT Analytics. Para obtener más información, consulte Service Quotas de AWS IoT Analytics en la Referencia general de AWS.

    • 100 000 mensajes por segundo por canal.

    • 100 mensajes por lote.

    • 128 KB por mensaje.

    Esta API utiliza nombres de canal (no ARN de canal), por tanto no se admite el envío de datos a canales entre regiones o entre cuentas.

  • Todas las cuotas impuestas por AWS IoT Greengrass Core. Para obtener más información, consulte Service Quotas para el core de AWS IoT Greengrass en la Referencia general de AWS.

    Las siguientes cuotas se podrían aplicar:

    • El tamaño máximo de los mensajes enviados por un dispositivo es 128 KB.

    • El tamaño máximo de cola de mensajes del router principal de Greengrass es 2,5 MB.

    • La longitud máxima de una cadena de tema es 256 bytes de caracteres codificados en UTF-8.

Licencias

El conector de Internet incluye las siguientes licencias y software de terceros:

Este conector se publica bajo el contrato de licencia de software de Greengrass Core.

Registro de cambios

La siguiente tabla describe los cambios en cada versión del conector.

Versión

Cambios

4

Añade el parámetro IsolationMode para configurar el modo de creación de contenedores del conector.

3

Se actualizó el tiempo de ejecución de Lambda a Python 3.7, lo que cambia el requisito de tiempo de ejecución.

2

Se ha introducido una corrección para reducir el registro excesivo.

1

Versión inicial.

Un grupo de Greengrass solo puede contener una versión del conector a la vez. Para obtener información sobre cómo actualizar una versión de conector, consulte Actualización de versiones de los conectores.

Véase también