

Aviso de fin de soporte: el 7 de octubre de 2026, AWS suspenderemos el soporte para AWS IoT Greengrass Version 1. Después del 7 de octubre de 2026, ya no podrá acceder a los AWS IoT Greengrass V1 recursos. Para obtener más información, visita [Migrar desde AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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.

# Integración con servicios y protocolos mediante conectores de Greengrass
<a name="connectors"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.7 y versiones posteriores.

Los conectores AWS IoT Greengrass son módulos prediseñados que hacen que sea más eficiente interactuar con la infraestructura local AWS, los protocolos de los dispositivos y otros servicios en la nube. Al usar conectores, puede dedicar menos tiempo a aprender nuevos protocolos APIs y más tiempo a centrarse en la lógica que es importante para su empresa.

El siguiente diagrama muestra dónde encajan los conectores en el entorno de AWS IoT Greengrass .

![\[Los conectores se conectan a dispositivos, servicios y recursos locales.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/connectors/connectors-arch.png)


Muchos conectores utilizan mensajes MQTT para comunicarse con los dispositivos cliente y las funciones Lambda de Greengrass del grupo, AWS IoT o con el servicio oculto local. En el siguiente ejemplo, el conector de notificaciones de Twilio recibe mensajes MQTT de una función Lambda definida por el usuario, utiliza una referencia local de un secreto AWS Secrets Manager de origen y llama a la API de Twilio.

![\[Un conector recibe un mensaje MQTT de una función de Lambda y llama a un servicio.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/connectors/twilio-solution.png)


Para ver tutoriales que crean esta solución, consulte [Introducción a los conectores de Greengrass (consola)](connectors-console.md) y [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md).

Los conectores de Greengrass pueden ayudarle a ampliar las posibilidades del dispositivo o crear dispositivos de una sola finalidad. Mediante el uso de conectores, puede:
+ Implementar una lógica de negocio reutilizable.
+ Interactúe con los servicios locales y en la nube, incluidos los servicios de terceros. AWS 
+ Adquirir y procesar los datos del dispositivo.
+ Habilite device-to-device las llamadas mediante suscripciones a temas de MQTT y funciones Lambda definidas por el usuario.

AWS proporciona un conjunto de conectores Greengrass que simplifican las interacciones con fuentes de datos y servicios comunes. Estos módulos preconfigurados, permiten escenarios para el registro y diagnóstico, reabastecimiento, procesamiento de datos industriales, alarma y mensajería. Para obtener más información, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md).

## Requisitos
<a name="connectors-reqs"></a>

Para usar conectores, tenga en cuenta lo siguiente:
+ Cada conector que utilice tiene unos requisitos que debe cumplir. Estos requisitos pueden incluir la versión mínima del software AWS IoT Greengrass principal, los requisitos previos del dispositivo, los permisos requeridos y los límites. Para obtener más información, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md).
+ Un grupo Greengrass solo puede contener una instancia configurada de un conector determinado. Sin embargo, puede utilizar la instancia en varias suscripciones. Para obtener más información, consulte [Parámetros de configuración](#connectors-parameters).
+ Cuando la creación de contenedores predeterminada para el grupo de Greengrass se establece en [Sin contenedor](lambda-group-config.md#lambda-containerization-groupsettings), los **conectores** del grupo deben ejecutarse sin creación de contenedores. Para buscar conectores compatibles con el modo **Sin contenedor**, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md).

## Uso de conectores de Greengrass
<a name="use-applications"></a>

Un conector es un tipo de componente del grupo. Al igual que otros componentes del grupo, como los dispositivos cliente y las funciones Lambda definidas por el usuario, se añaden conectores a los grupos, se configuran sus parámetros y se despliegan en el núcleo. AWS IoT Greengrass Los conectores se ejecutan en el entorno de núcleo.

Algunos conectores pueden implementarse como aplicaciones independientes simples. Por ejemplo, el conector Device Defender lee las métricas del sistema del dispositivo central y las envía a AWS IoT Device Defender para su análisis.

Puede añadir otros conectores como bloques de construcción en soluciones más amplias. La siguiente solución de ejemplo utiliza el conector Adaptador de protocolo Modbus-RTU para procesar los mensajes de los sensores y el conector Notificaciones Twilio para iniciar los mensajes Twilio.

![\[Flujo de datos desde la función de Lambda al conector del adaptador de protocolo Modbus-RTU a la función de Lambda al conector de notificaciones de Twilio a Twilio.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/connectors/modbus-twilio-solution.png)


Las soluciones suelen incluir funciones de Lambda definidas por el usuario que se colocan junto a los conectores y procesan los datos que el conector envía o recibe. En este ejemplo, la TempMonitor función recibe datos del adaptador de protocolo Modbus-RTU, ejecuta cierta lógica empresarial y, a continuación, envía los datos a Twilio Notifications.

Para crear e implementar una solución, debe seguir este proceso general:

1. Planificar el flujo de datos de alto nivel. Identificar los orígenes de datos, los canales de datos, los servicios, los protocolos y los recursos con los que necesita trabajar. En la solución de ejemplo, esto incluye los datos a través del protocolo Modbus RTU, el puerto de serie Modbus físico y Twilio.

1. Identificar los conectores que se incluirán en la solución y añadirlos a su grupo. La solución de ejemplo utiliza el adaptador de protocolo Modbus-RTU y las notificaciones de Twilio. Para ayudarle a detectar los conectores aplicables a su situación y para ver más información acerca de sus requisitos individuales, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md).

1. Identificar si las funciones de Lambda definidas por el usuario, dispositivos cliente o recursos son necesarios y, a continuación, crearlas y añadirlas al grupo. Esto podría incluir funciones que contienen lógica de negocio o procesar datos en un formato requerido por otra entidad en la solución. La solución de ejemplo utiliza funciones para enviar las solicitudes Modbus RTU e iniciar notificaciones Twilio. También incluye un recurso de dispositivo local para el puerto de serie Modbus RTU y un recurso de secreto para el token de autenticación de Twilio.
**nota**  
Los recursos de secreto hacen referencia a contraseñas, tokens y otros secretos de AWS Secrets Manager. Los conectores y las funciones de Lambda pueden usar secretos para autenticar con servicios y aplicaciones. *De forma predeterminada, AWS IoT Greengrass puede acceder a los secretos con nombres que comiencen por "greengrass-».* Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

1. Crear las suscripciones que permiten que las entidades de la solución intercambien mensajes MQTT. Si un conector se utiliza en una suscripción, el conector y el origen o destino del mensaje deben utilizar la sintaxis de tema predefinida compatible con el conector. Para obtener más información, consulte [Entradas y salidas](#connectors-inputs-outputs).

1. Implementar el grupo en el núcleo de Greengrass.

Para obtener información acerca de cómo crear e implementar un conector, consulte los siguientes tutoriales:
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

## Parámetros de configuración
<a name="connectors-parameters"></a>

Muchos conectores proporcionan parámetros que permiten personalizar su comportamiento o su salida. Estos parámetros se utilizan durante la inicialización, el tiempo de ejecución o en otros momentos en el ciclo de vida del conector.

Los tipos de parámetros y su uso varían según el conector. Por ejemplo, el conector SNS tiene un parámetro que configura el tema SNS por defecto, y Device Defender tiene un parámetro que configura la frecuencia de muestreo de datos.

Una versión de grupo puede contener varios conectores, pero solo una instancia de un determinado conector a la vez. Esto significa que cada conector del grupo solamente puede tener una configuración activa. Sin embargo, la instancia del conector puede utilizarse en diferentes suscripciones del grupo. Por ejemplo, puede crear suscripciones que permitan a muchos dispositivos enviar datos al conector Kinesis Firehose.

### Parámetros utilizados para acceder a recursos de grupo
<a name="connectors-parameters-resources"></a>

Los conectores de Greengrass utilizan recursos de grupo para obtener acceso al sistema de archivos, puertos, periféricos y otros recursos locales en el dispositivo principal. Si un conector requiere acceso a un recurso de grupo, proporciona parámetros de configuración relacionados.

Los recursos de grupo incluyen:
+ [Recursos locales](access-local-resources.md). Los directorios, archivos, puertos, pines y periféricos que están presentes en el dispositivo del núcleo de Greengrass.
+ [Recursos de machine learning](ml-inference.md). Los modelos de machine learning que se utilizan en la nube y se implementan en el núcleo para la inferencia local.
+ [Recurso de secreto](secrets.md). Copias locales y cifradas de contraseñas, claves, símbolos o texto arbitrario procedentes de AWS Secrets Manager. Los conectores pueden acceder de manera segura a estos secretos locales y utilizarlos para autenticarse en los servicios o en la infraestructura local.

Por ejemplo, los parámetros para Device Defender permiten acceder a las métricas del sistema en el directorio `/proc` del host, y los parámetros para Twilio Notifications permiten acceder a un token de autenticación Twilio almacenado localmente.

### Actualización de parámetros de conectores
<a name="update-application-parameters-"></a>

Los parámetros se configuran cuando el conector se añade a un grupo de Greengrass. Puede cambiar los valores de los parámetros después de añadir un conector.
+ En la consola: en la página de configuración de grupo, abra **Connectors (Conectores)** y desde el menú contextual del conector, seleccione **Edit (Editar)**.
**nota**  
Si el conector utiliza un recurso de secreto que más adelante cambia para hacer referencia a otro secreto, debe editar los parámetros del conector y confirmar el cambio.
+ En la API: cree otra versión del conector que defina la nueva configuración.

  La AWS IoT Greengrass API usa versiones para administrar los grupos. Las versiones son inmutables, por lo que para añadir o cambiar los componentes del grupo (por ejemplo, los dispositivos cliente, las funciones y los recursos del grupo), debe crear versiones de los componentes nuevos o actualizados. A continuación, cree e implemente una versión de grupo que contenga la versión de destino de cada componente.

Después de realizar cambios en la configuración del conector, debe implementar el grupo para propagar los cambios en el núcleo.

## Entradas y salidas
<a name="connectors-inputs-outputs"></a>

Muchos conectores de Greengrass pueden comunicarse con otras entidades enviando y recibiendo mensajes MQTT. La comunicación de MQTT se controla mediante suscripciones que permiten a un conector intercambiar datos con funciones de Lambda, dispositivos cliente y otros conectores del grupo Greengrass o AWS IoT con el servicio paralelo local. Para permitir esta comunicación, debe crear suscripciones en el grupo al que pertenece el conector. Para obtener más información, consulte [Suscripciones administradas en el flujo de trabajo de mensajería de MQTT](gg-sec.md#gg-msg-workflow).

Los conectores pueden ser suscriptores de mensajes, publicadores de mensajes o ambos. Cada conector define los temas de MQTT a los que se suscribe o en los que publica. Estos temas predefinidos deben utilizarse en las suscripciones en las que el conector sea un origen de mensaje o destino de mensaje. Para ver tutoriales con pasos para configurar suscripciones para un conector, consulte [Introducción a los conectores de Greengrass (consola)](connectors-console.md) y [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md).

**nota**  
Muchos conectores también disponen de modos integrados de comunicación para interactuar con servicios locales o en la nube. Estos varían según el conector y podrían requerir configurar parámetros o agregar permisos al [rol de grupo](group-role.md). Para obtener información sobre los requisitos de los conectores, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md).

### Temas de entrada
<a name="connectors-multiple-topics"></a>

La mayoría de los conectores reciben datos de entrada sobre temas de MQTT. Algunos conectores se suscriben a varios temas para los datos de entrada. Por ejemplo, el conector Serial Stream admite dos temas:
+ `serial/+/read/#`
+ `serial/+/write/#`

Para este conector, las solicitudes de lectura y escritura se envían al tema correspondiente. Al crear las suscripciones, asegúrese de que se va a utilizar el tema que se adapte a su implementación.

Los caracteres `+` y `#` en los ejemplos anteriores son comodines. Estos comodines permiten que los suscriptores reciban mensajes sobre varios temas y que los editores personalicen los temas que publican.
+ El comodín `+` puede aparecer en cualquier lugar de la jerarquía de temas. Se puede sustituir por un elemento de la jerarquía.

  Por ejemplo, en el caso del tema `sensor/+/input`, los mensajes se pueden publicar en los temas `sensor/id-123/input`, pero no en `sensor/group-a/id-123/input`.
+ El comodín `#` puede aparecer solo al final de la jerarquía de temas. Se puede sustituir por cualquier número de elementos de la jerarquía, incluso ninguno.

  Por ejemplo, en el caso del tema `sensor/#`, los mensajes se pueden publicar en `sensor/`, `sensor/id-123` y `sensor/group-a/id-123`, pero no en `sensor`.

Los caracteres comodín solo son válidos al suscribirse a temas. Los mensajes no se pueden publicar en temas que contengan comodines. Consulte la documentación del conector para obtener más información sobre los requisitos de su tema de entrada o salida. Para obtener más información, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md).

## Soporte de creación de contenedores
<a name="connector-containerization"></a>

De forma predeterminada, la mayoría de los conectores se ejecutan en el núcleo de Greengrass en un entorno de tiempo de ejecución aislado administrado por AWS IoT Greengrass. Estos entornos de tiempo de ejecución, denominados *contenedores*, proporcionan aislamiento entre los conectores y el sistema del host, lo que ofrece más seguridad para el host y el conector.

Sin embargo, esta contenerización de Greengrass no se admite en algunos entornos, como cuando se ejecuta AWS IoT Greengrass en un contenedor de Docker o en núcleos Linux antiguos sin cgroups. En estos entornos, los conectores deben ejecutarse en modo **Sin contenedor** . Para buscar conectores compatibles con el modo **Sin contenedor**, consulte [conectores de Greengrass proporcionados por AWS](connectors-list.md). Algunos conectores se ejecutan en este modo de forma nativa, y algunos conectores le permiten establecer el modo de aislamiento.

También puede establecer el modo de aislamiento en **Sin contenedor** en entornos que admiten la creación de contenedores de Greengrass, pero se recomienda utilizar el modo **contenedor Greengrass** cuando sea posible.

**nota**  
La configuración de creación de contenedores predeterminada para el grupo Greengrass no se aplica a los [conectores](lambda-group-config.md#lambda-containerization-groupsettings).

## Actualización de versiones de los conectores
<a name="upgrade-connector-versions"></a>

Los proveedores de conectores pueden lanzar nuevas versiones de un conector que agregan características, solucionan problemas o mejoran el rendimiento. Para obtener información sobre las versiones disponibles y los cambios relacionados, consulte la [documentación de cada conector](connectors-list.md).

En la AWS IoT consola, puede comprobar si hay nuevas versiones para los conectores de su grupo Greengrass.

1. <a name="console-gg-groups"></a>En el panel de navegación de la AWS IoT consola, en **Administrar**, expanda **los dispositivos Greengrass** y, a continuación, elija **Grupos (V1)**.

1. En **Grupos de Greengrass**, elija su grupo.

1. Elija **Connectors (Conectores)** para mostrar los conectores del grupo.

   Si el conector tiene una nueva versión, aparecerá un botón **Available (Disponible)** en la columna **Upgrade (Actualizar)**.

1. Para actualizar la versión del conector:

   1. En la página **Connectors (Conectores)** en la columna **Upgrade (Actualizar)** seleccione **Available (Disponible)**. Se abre la página **Upgrade connector (Actualizar conector)** y muestra los parámetros actuales, cuando corresponda.

      Elija la nueva versión del conector, defina los parámetros según sea necesario y, a continuación, elija **Upgrade (Actualizar)**.

   1. En la página **Subscriptions (Suscripciones)** agregue nuevas suscripciones al grupo para reemplazar las que utilicen el conector como origen o destino. A continuación, elimine las suscripciones antiguas.

      Las suscripciones hacen referencia a conectores por versión, por lo que no son válidos si cambia la versión del conector en el grupo.

   1. En el menú **Actions (Acciones)** elija **Deploy (Implementar)** para implementar los cambios en el núcleo.

Para actualizar un conector desde la AWS IoT Greengrass API, cree e implemente una versión de grupo que incluya el conector actualizado y las suscripciones. Utilice el mismo proceso que al agregar un conector a un grupo. Para ver los pasos detallados que muestran cómo usarlo para configurar e implementar un ejemplo de conector de notificaciones de Twilio, consulte[Introducción a los conectores de Greengrass (CLI)](connectors-cli.md). AWS CLI 

## Registro de conectores
<a name="connectors-logging"></a>

Los conectores de Greengrass contienen funciones de Lambda que escriben eventos y errores en los registros de Greengrass. Según la configuración del grupo, los registros se escriben en CloudWatch Logs, en el sistema de archivos local o en ambos. Los registros de los conectores incluyen el ARN de la característica correspondiente. El siguiente ejemplo de ARN procede del conector Kinesis Firehose:

```
arn:aws:lambda:aws-region:account-id:function:KinesisFirehoseClient:1
```

La configuración de registro predeterminada escribe los registros de nivel de información en el sistema de archivos mediante la siguiente estructura de directorios:

```
greengrass-root/ggc/var/log/user/region/aws/function-name.log
```

Para obtener más información sobre los registros de Greengrass, consulte [Supervisión con AWS IoT Greengrass registros](greengrass-logs-overview.md).

# conectores de Greengrass proporcionados por AWS
<a name="connectors-list"></a>

AWS proporciona los siguientes conectores que admiten AWS IoT Greengrass situaciones comunes. Para obtener más información acerca de cómo funcionan los conectores, consulte la siguiente documentación:
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores (consola)](connectors-console.md) o [Introducción a los conectores (CLI)](connectors-cli.md)


| Connector | Descripción | Tiempos de ejecución compatibles de Lambda | Admite el modo **Sin contenedor** | 
| --- | --- | --- | --- | 
| [CloudWatch Métricas](cloudwatch-metrics-connector.md) | Publica métricas personalizadas en Amazon CloudWatch. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [Device Defender](device-defender-connector.md) | Envía las métricas del sistema a AWS IoT Device Defender. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [Implementación de aplicación Docker](docker-app-connector.md) | Ejecuta un archivo de Docker Compose para iniciar una aplicación Docker en el dispositivo central. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [IoT Analytics](iot-analytics-connector.md) | Envía datos desde dispositivos y sensores a AWS IoT Analytics. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [Adaptador de protocolo IP Ethernet IoT](ethernet-ip-connector.md) | Recopila datos de dispositivos EtherNet/IP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [IoT SiteWise](iot-sitewise-connector.md) | Envía datos desde dispositivos y sensores a propiedades de recurso en AWS IoT SiteWise. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [Kinesis Firehose](kinesis-firehose-connector.md) | Envía datos a flujos de entrega de Amazon Data Firehose. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [ML Feedback](ml-feedback-connector.md) | Publica la entrada del modelo de machine learning en la nube y la salida en un tema de MQTT. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [Clasificación de imágenes de ML ](image-classification-connector.md) | Ejecuta un servicio de inferencia de clasificación de una imagen local. Este conector proporciona versiones para varias plataformas. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [Detección de objetos de ML](obj-detection-connector.md) | Ejecuta un servicio de inferencia de detección de objetos local. Este conector proporciona versiones para varias plataformas. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [Adaptador de protocolo Modbus-RTU](modbus-protocol-adapter-connector.md) | Envía solicitudes a dispositivos Modbus RTU. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [Adaptador de protocolo Modbus-TCP](modbus-tcp-connector.md) | Recopila datos de los dispositivos ModbusTCP. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [Raspberry Pi GPIO](raspberrypi-gpio-connector.md) | Controla los pines de GPIO en un dispositivo de núcleo Raspberry Pi. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [Serial Stream](serial-stream-connector.md) | Las operaciones de lectura y escritura en un puerto de serie del dispositivo de núcleo. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | No | 
| [ServiceNow MetricBase Integration](servicenow-connector.md) | Publica métricas de series temporales para ServiceNow MetricBase. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [SNS](sns-connector.md) | Envía mensajes a un tema de Amazon SNS. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [Integración de Splunk](splunk-connector.md) | Publica datos en Splunk HEC. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 
| [Notificaciones de Twilio](twilio-notifications-connector.md) | Inicia un mensaje de texto o voz de Twilio. | <a name="python-connectors-runtime"></a>[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-list.html) | Sí | 

\$1 Para utilizar los tiempos de ejecución de Python 3.8, debe crear un enlace simbólico desde la carpeta de instalación por defecto de Python 3.7 a los binarios instalados de Python 3.8. Para obtener más información, consulte los requisitos específicos del conector.

**nota**  
Recomendamos que [actualice las versiones de conector](connectors.md#upgrade-connector-versions) de Python 2.7 a Python 3.7. El soporte continuo para los conectores de Python 2.7 depende de la compatibilidad con el AWS Lambda tiempo de ejecución. Para obtener más información, consulte la [Política de soporte en tiempo de ejecución](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) en la *Guía de desarrolladores de AWS Lambda *.

# CloudWatch Conector de métricas
<a name="cloudwatch-metrics-connector"></a>

El [conector CloudWatch ](connectors.md) Metrics publica métricas personalizadas de los dispositivos Greengrass en Amazon. CloudWatch El conector proporciona una infraestructura centralizada para publicar CloudWatch métricas, que puede utilizar para supervisar y analizar el entorno principal de Greengrass y actuar en función de los eventos locales. Para obtener más información, consulta [Uso de CloudWatch las métricas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) en la *Guía del CloudWatch usuario de Amazon*.

Este conector recibe datos de métricas como mensajes de MQTT. El conector agrupa las métricas que están en el mismo espacio de nombres y las publica a CloudWatch intervalos regulares.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#cloudwatch-metrics-connector-changelog).

## Requisitos
<a name="cloudwatch-metrics-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 - 5 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software básico, versión 1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-cloudwatch-metrics-req-iam-policy"></a>El [rol de grupo Greengrass](group-role.md) configurado para permitir la acción `cloudwatch:PutMetricData`, tal como se muestra en la política de (IAM) AWS Identity and Access Management en el ejemplo siguiente.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "cloudwatch:PutMetricData"
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

  Para obtener más información sobre CloudWatch los permisos, consulta la [referencia de CloudWatch permisos de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/permissions-reference-cw.html) en la *Guía del usuario de IAM*.

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-cloudwatch-metrics-req-iam-policy"></a>El [rol de grupo Greengrass](group-role.md) configurado para permitir la acción `cloudwatch:PutMetricData`, tal como se muestra en la política de (IAM) AWS Identity and Access Management en el ejemplo siguiente.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "cloudwatch:PutMetricData"
              ],
              "Effect": "Allow",
              "Resource": "*"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

  Para obtener más información sobre CloudWatch los permisos, consulta la [referencia de CloudWatch permisos de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/permissions-reference-cw.html) en la *Guía del usuario de IAM*.

------

## Parámetros de conector
<a name="cloudwatch-metrics-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Versions 4 - 5 ]

`PublishInterval`  <a name="cw-metrics-PublishInterval"></a>
El número máximo de segundos que se debe esperar antes de publicar las métricas por lote para un determinado espacio de nombres. El valor máximo es 900. Para configurar el conector con el fin de publicar las métricas a medida que se reciben (sin hacerlo por lotes), especifique 0.  
El conector publica para CloudWatch después de recibir 20 métricas en el mismo espacio de nombres o después del intervalo especificado.  
El conector no garantiza el orden de publicación de los eventos.
**Nombre para mostrar en la AWS IoT consola: intervalo de publicación**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `0 - 900`  
Patrón válido: `[0-9]|[1-9]\d|[1-9]\d\d|900`

`PublishRegion`  <a name="cw-metrics-PublishRegion"></a>
El lugar Región de AWS en el que publicar CloudWatch las métricas. Este valor anula la región de métricas de Greengrass predeterminada. Solo se requiere cuando se publican métricas entre regiones.  
Nombre para mostrar en la AWS IoT consola: **región de publicación**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|([a-z]{2}-[a-z]+-\d{1})`

`MemorySize`  <a name="cw-metrics-MemorySize"></a>
La memoria (en KB) que se asignará al conector.  
Nombre para mostrar en la AWS IoT consola: **tamaño de la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`MaxMetricsToRetain`  <a name="cw-metrics-MaxMetricsToRetain"></a>
El número máximo de métricas de todos los espacios de nombres que se guardarán en la memoria antes de que se reemplacen por nuevas métricas. El valor mínimo es 2000.  
Este límite se aplica cuando no hay conexión a Internet y el conector comienza a almacenar en búfer las métricas que se van a publicar más adelante. Cuando el búfer está lleno, la métricas más antiguas se sustituyen por nuevas. Las métricas de un determinado espacio de nombres se reemplazan únicamente por métricas del mismo espacio de nombres.  
Las métricas no se guardan si el proceso de host para el conector se interrumpe. Por ejemplo, esta interrupción puede ocurrir durante la implementación de grupos o cuando el dispositivo se reinicia.
Nombre para mostrar en la AWS IoT consola: número **máximo de métricas que se deben conservar**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^([2-9]\d{3}|[1-9]\d{4,})$`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

------
#### [ Versions 1 - 3 ]

`PublishInterval`  <a name="cw-metrics-PublishInterval"></a>
El número máximo de segundos que se debe esperar antes de publicar las métricas por lote para un determinado espacio de nombres. El valor máximo es 900. Para configurar el conector con el fin de publicar las métricas a medida que se reciben (sin hacerlo por lotes), especifique 0.  
El conector publica para CloudWatch después de recibir 20 métricas en el mismo espacio de nombres o después del intervalo especificado.  
El conector no garantiza el orden de publicación de los eventos.
**Nombre para mostrar en la AWS IoT consola: intervalo de publicación**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `0 - 900`  
Patrón válido: `[0-9]|[1-9]\d|[1-9]\d\d|900`

`PublishRegion`  <a name="cw-metrics-PublishRegion"></a>
El lugar Región de AWS en el que publicar CloudWatch las métricas. Este valor anula la región de métricas de Greengrass predeterminada. Solo se requiere cuando se publican métricas entre regiones.  
Nombre para mostrar en la AWS IoT consola: **región de publicación**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|([a-z]{2}-[a-z]+-\d{1})`

`MemorySize`  <a name="cw-metrics-MemorySize"></a>
La memoria (en KB) que se asignará al conector.  
Nombre para mostrar en la AWS IoT consola: **tamaño de la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`MaxMetricsToRetain`  <a name="cw-metrics-MaxMetricsToRetain"></a>
El número máximo de métricas de todos los espacios de nombres que se guardarán en la memoria antes de que se reemplacen por nuevas métricas. El valor mínimo es 2000.  
Este límite se aplica cuando no hay conexión a Internet y el conector comienza a almacenar en búfer las métricas que se van a publicar más adelante. Cuando el búfer está lleno, la métricas más antiguas se sustituyen por nuevas. Las métricas de un determinado espacio de nombres se reemplazan únicamente por métricas del mismo espacio de nombres.  
Las métricas no se guardan si el proceso de host para el conector se interrumpe. Por ejemplo, esta interrupción puede ocurrir durante la implementación de grupos o cuando el dispositivo se reinicia.
Nombre para mostrar en la AWS IoT consola: número **máximo de métricas que se deben conservar**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^([2-9]\d{3}|[1-9]\d{4,})$`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="cloudwatch-metrics-connector-create"></a>

El siguiente comando CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector de CloudWatch métricas.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyCloudWatchMetricsConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/4",
            "Parameters": {
                "PublishInterval" : "600",
                "PublishRegion" : "us-west-2",
                "MemorySize" : "16",
                "MaxMetricsToRetain" : "2500",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="cloudwatch-metrics-connector-data-input"></a>

Este conector acepta métricas sobre un tema de MQTT y las publica en. CloudWatch Los mensajes de entrada deben tener un formato JSON válido.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`cloudwatch/metric/put`

**Propiedades de mensajes**    
`request`  
Información acerca de la métrica en este mensaje.  
El objeto de la solicitud contiene los datos de métricas que se publicarán en CloudWatch. Los valores de métricas deben cumplir las especificaciones de la API de [https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html). Solo se necesitan las propiedades `namespace`, `metricData.metricName` y `metricData.value`.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`namespace`  
El espacio de nombres definido por el usuario para los datos de las métricas de esta solicitud. CloudWatch utiliza los espacios de nombres como contenedores para los puntos de datos métricos.  
No se puede especificar un espacio de nombres que comience la cadena reservada por `AWS/`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[^:].*`  
`metricData`  
Los datos de la métrica.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`metricName`  
El nombre de la métrica.  
Obligatorio: `true`  
Tipo: `string`  
`dimensions`  
Las dimensiones que están asociados con la métrica. Las dimensiones proporcionan información adicional acerca de la métrica y sus datos. Una métrica puede definir hasta 10 dimensiones.  
Este conector incluye automáticamente una dimensión denominada `coreName`, cuyo valor es el nombre del núcleo.  
Obligatorio: `false`  
Tipo: `array` de objetos de dimensión que incluyen las siguientes propiedades:    
`name`  
El nombre de la dimensión.  
Obligatorio: `false`  
Tipo: `string`  
`value`  
El valor de la dimensión.  
Obligatorio: `false`  
Tipo: `string`  
`timestamp`  
La hora a la que se han recibido los datos de las métricas, expresada como segundos desde `Jan 1, 1970 00:00:00 UTC`. Si no se especifica este valor, el conector utiliza la hora en que se recibió el mensaje.  
Obligatorio: `false`  
Tipo: `timestamp`  
Si utiliza las versiones 1 y 4 de este conector, le recomendamos que recupere la marca de tiempo por separado para cada métrica cuando envíe varias métricas desde una sola fuente. No utilice una variable para almacenar la marca de tiempo.  
`value`  
El valor de la métrica.  
CloudWatch rechaza los valores demasiado pequeños o demasiado grandes. Los valores deben estar en el rango de `8.515920e-109` a `1.174271e+108` (Base 10) o `2e-360` a `2e360` (Base 2). Los valores especiales (por ejemplo, `NaN`, `+Infinity`, `-Infinity`) no son compatibles.
Obligatorio: `true`  
Tipo: `double`  
`unit`  
La unidad de la métrica.  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None`

Límites  
Todos los límites impuestos por la CloudWatch [https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html)API se aplican a las métricas cuando se utiliza este conector. Los siguientes límites son especialmente importantes:  
+ Límite de 40 KB en la carga de API
+ 20 métricas por solicitud de API
+ 150 transacciones por segundo (TPS) para la API de `PutMetricData`
Para obtener más información, consulta [CloudWatch los límites](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html) en la *Guía del CloudWatch usuario de Amazon*.

**Ejemplo de entrada**  

```
{
   "request": {
       "namespace": "Greengrass",
       "metricData":
           {
               "metricName": "latency",
               "dimensions": [
                   {
                       "name": "hostname",
                       "value": "test_hostname"
                   }
               ],
               "timestamp": 1539027324,
               "value": 123.0,
               "unit": "Seconds"
            }
    }
}
```

## Datos de salida
<a name="cloudwatch-metrics-connector-data-output"></a>

Este conector publica información de estado como datos de salida en un tema MQTT.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`cloudwatch/metric/put/status`

**Ejemplo de salida: Correcto**  
La respuesta incluye el espacio de nombres de los datos de la métrica y el `RequestId` campo de la CloudWatch respuesta.  

```
{
   "response": {
        "cloudwatch_rid":"70573243-d723-11e8-b095-75ff2EXAMPLE",
        "namespace": "Greengrass",
        "status":"success"
    }
}
```

**Ejemplo de salida: Error**  

```
{
   "response" : {
        "namespace": "Greengrass",
        "error": "InvalidInputException",
        "error_message":"cw metric is invalid",
        "status":"fail"
   }
}
```
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.

## Ejemplo de uso
<a name="cloudwatch-metrics-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#cloudwatch-metrics-connector-req) para el conector.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#cloudwatch-metrics-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Agregue el conector y configure sus [parámetros](#cloudwatch-metrics-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#cloudwatch-metrics-connector-data-input) y enviar [datos de salida](#cloudwatch-metrics-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utiliza esta suscripción para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="cloudwatch-metrics-connector-usage-example"></a>

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 = 'cloudwatch/metric/put'

def create_request_with_all_fields():
    return  {
        "request": {
            "namespace": "Greengrass_CW_Connector",
            "metricData": {
                "metricName": "Count1",
                "dimensions": [
                    {
                        "name": "test",
                        "value": "test"
                    }
                ],
                "value": 1,
                "unit": "Seconds",
                "timestamp": time.time()
            }
        }
    }

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
```

## Licencias
<a name="cloudwatch-metrics-connector-license"></a>

El conector CloudWatch Metrics incluye el siguiente software o licencia de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="cloudwatch-metrics-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 5 | Se corrigió para añadir la admisión de marcas de tiempo duplicadas en los datos de entrada. | 
| 4 | <a name="isolation-mode-changelog"></a>Se ha agregado el parámetro `IsolationMode` para configurar el modo de creación de contenedores del conector. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="cloudwatch-metrics-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Uso de CloudWatch las métricas de Amazon](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html) en la *Guía del CloudWatch usuario de Amazon*
+ [ PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html)en la *referencia de la CloudWatch API de Amazon*

# Conector de Device Defender
<a name="device-defender-connector"></a>

El [conector](connectors.md) Device Defender notifica a los administradores de los cambios en el estado de un dispositivo del núcleo de Greengrass. Esto puede ayudar a identificar comportamiento inusual que podrían indicar un dispositivo en riesgo.

Este conector lee las métricas del sistema del `/proc` directorio del dispositivo principal y, a continuación, las publica en AWS IoT Device Defender. Para obtener detalles sobre los informes de métricas, consulte [Especificación de documentos de métricas de dispositivos](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html#DetectMetricsMessagesSpec) en la *Guía del desarrollador de AWS IoT *.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/DeviceDefender/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/DeviceDefender/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/DeviceDefender/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#device-defender-connector-changelog).

## Requisitos
<a name="device-defender-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software principal, versión 1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-device-defender-req-itdd-config"></a>AWS IoT Device Defender configurado para usar la función de detección para realizar un seguimiento de las infracciones. Para obtener más información, consulte [Detectar](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html) en la *Guía para desarrolladores de AWS IoT *.
+ <a name="conn-device-defender-req-proc-dir-resource"></a>Un [recurso de volumen local](access-local-resources.md) en el grupo de Greengrass que apunta al directorio `/proc`. El recurso debe usar las siguientes propiedades:
  + Ruta de origen: `/proc`
  + Ruta de destino: `/host_proc` (o un valor que coincide con el [patrón válido](#param-ProcDestinationPath))
  + AutoAddGroupOwner: `true`
+ <a name="conn-device-defender-req-psutil-v3"></a>La biblioteca [psutil](https://pypi.org/project/psutil/) instalada en el núcleo de Greengrass. La versión 5.7.0 es la última versión que se verifica para que funcione con el conector.
+ <a name="conn-device-defender-req-cbor-v3"></a>La biblioteca [cbor](https://pypi.org/project/cbor/) instalada en el núcleo de Greengrass. La versión 1.0.0 es la última versión que se verifica para que funcione con el conector.

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-device-defender-req-itdd-config"></a>AWS IoT Device Defender configurado para usar la función de detección para realizar un seguimiento de las infracciones. Para obtener más información, consulte [Detectar](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html) en la *Guía para desarrolladores de AWS IoT *.
+ <a name="conn-device-defender-req-proc-dir-resource"></a>Un [recurso de volumen local](access-local-resources.md) en el grupo de Greengrass que apunta al directorio `/proc`. El recurso debe usar las siguientes propiedades:
  + Ruta de origen: `/proc`
  + Ruta de destino: `/host_proc` (o un valor que coincide con el [patrón válido](#param-ProcDestinationPath))
  + AutoAddGroupOwner: `true`
+ <a name="conn-device-defender-req-psutil"></a>La biblioteca [psutil](https://pypi.org/project/psutil/) instalada en el núcleo de Greengrass.
+ <a name="conn-device-defender-req-cbor"></a>La biblioteca [cbor](https://pypi.org/project/cbor/) instalada en el núcleo de Greengrass.

------

## Parámetros de conector
<a name="device-defender-connector-param"></a>

Este conector proporciona los siguientes parámetros:

`SampleIntervalSeconds`  
El número de segundos entre cada ciclo de recopilación y generación de informes de métricas. El valor mínimo es de 300 segundos (5 minutos).  
Nombre para mostrar en la AWS IoT consola: **intervalo de informes de métricas**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]*(?:3[0-9][0-9]|[4-9][0-9]{2}|[1-9][0-9]{3,})$`

`ProcDestinationPath-ResourceId`  
El ID del recurso del volumen `/proc`.  
A este conector se le concede acceso de solo lectura al recurso.
Nombre para mostrar en la AWS IoT consola: **recurso para el directorio /proc**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9_-]+`

`ProcDestinationPath`  <a name="param-ProcDestinationPath"></a>
La ruta de destino del recurso del volumen `/proc`.  
Nombre para mostrar en la AWS IoT consola: **ruta de destino del** recurso /proc  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `\/[a-zA-Z0-9_-]+`

### Ejemplo de creación de conector (AWS CLI)
<a name="device-defender-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector de Device Defender.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyDeviceDefenderConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/DeviceDefender/versions/3",
            "Parameters": {
                "SampleIntervalSeconds": "600",
                "ProcDestinationPath": "/host_proc",
                "ProcDestinationPath-ResourceId": "my-proc-resource"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="device-defender-connector-data-input"></a>

Este conector no acepta mensajes MQTT como datos de entrada.

## Datos de salida
<a name="device-defender-connector-data-output"></a>

Este conector publica las métricas de seguridad AWS IoT Device Defender como datos de salida.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`$aws/things/+/defender/metrics/json`  
Esta es la sintaxis del tema que se AWS IoT Device Defender espera. El conector sustituye el comodín `+` con el nombre de dispositivo (por ejemplo `$aws/things/thing-name/defender/metrics/json`).

**Ejemplo de salida**  
Para obtener detalles sobre los informes de métricas, consulte [Especificación de documentos de métricas de dispositivos](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender-detect.html#DetectMetricsMessagesSpec) en la *Guía del desarrollador de AWS IoT *.  

```
{
    "header": {
        "report_id": 1529963534,
        "version": "1.0"
    },
    "metrics": {
        "listening_tcp_ports": {
            "ports": [
                {
                    "interface": "eth0",
                    "port": 24800
                },
                {
                    "interface": "eth0",
                    "port": 22
                },
                {
                    "interface": "eth0",
                    "port": 53
                }
            ],
            "total": 3
        },
        "listening_udp_ports": {
            "ports": [
                {
                    "interface": "eth0",
                    "port": 5353
                },
                {
                    "interface": "eth0",
                    "port": 67
                }
            ],
            "total": 2
        },
        "network_stats": {
            "bytes_in": 1157864729406,
            "bytes_out": 1170821865,
            "packets_in": 693092175031,
            "packets_out": 738917180
        },
        "tcp_connections": {
            "established_connections":{
                "connections": [
                    {
                    "local_interface": "eth0",
                    "local_port": 80,
                    "remote_addr": "192.168.0.1:8000"
                    },
                    {
                    "local_interface": "eth0",
                    "local_port": 80,
                    "remote_addr": "192.168.0.1:8000"
                    }
                ],
                "total": 2
            }
        }
    }
}
```

## Licencias
<a name="device-defender-connector-license"></a>

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="device-defender-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="device-defender-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Device Defender](https://docs.aws.amazon.com/iot/latest/developerguide/device-defender.html) en la *Guía para desarrolladores de AWS IoT *

# Conector de implementación de aplicaciones Docker
<a name="docker-app-connector"></a>

El conector de despliegue de aplicaciones Docker de Greengrass facilita la ejecución de las imágenes de Docker en un núcleo. AWS IoT Greengrass El conector utiliza Docker Compose para iniciar una aplicación Docker multicontenedor desde un archivo de `docker-compose.yml`. Concretamente, el conector ejecuta comandos de `docker-compose` para administrar los contenedores Docker en un único dispositivo central. Para obtener más información, consulte [Overview of Greengrass group role permissions (Descripción general de Docker Compose](https://docs.docker.com/compose/) en la documentación de Docker. El conector puede acceder a imágenes de Docker almacenadas en registros de un contenedor de Docker, como Amazon Elastic Container Registry (Amazon ECR), Docker Hub y registros privados de confianza de Docker.

Después de implementar el grupo de Greengrass, el conector lanza las últimas imágenes e inicia los contenedores de Docker. Ejecuta el `docker-compose pull` comando y `docker-compose up`. El conector publica el estado del comando en un [tema MQTT de salida](#docker-app-connector-data-output). También registra información del estado sobre contenedores Docker en funcionamiento. Esto te permite supervisar los registros de tus aplicaciones en Amazon CloudWatch. Para obtener más información, consulte [Supervisión con AWS IoT Greengrass registros](greengrass-logs-overview.md). El conector también inicia contenedores Docker cada vez que se reinicia el daemon de Greengrass. La cantidad de contenedores Docker que se puede ejecutar en el núcleo depende del hardware que tenga.

Los contenedores Docker se ejecutan fuera del dominio de Greengrass en el dispositivo central, de modo que no pueden acceder a la comunicación entre procesos (IPC) del núcleo. Sin embargo, puede configurar algunos canales de comunicación con componentes de Greengrass, como las funciones locales de Lambda. Para obtener más información, consulte [Comunicación con contenedores Docker](#docker-app-connector-communicating).

Puede usar el conector para alojar un servidor web o un servidor MySQL en su dispositivo central. Los servicios locales de sus aplicaciones Docker pueden comunicarse entre sí, con otros procesos del entorno local y con servicios en la nube. Por ejemplo, puede ejecutar un servidor web del núcleo que envíe solicitudes desde las funciones de Lambda a un servicio web en la nube.

Este conector se ejecuta en modo de aislamiento [Sin contenedor](lambda-group-config.md#no-container-mode), por lo que puede implementarlo en un grupo de Greengrass que se ejecute sin creación de contenedores de Greengrass.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 7 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/7` | 
| 6 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/6` | 
| 5 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#docker-app-connector-changelog).

## Requisitos
<a name="docker-app-connector-req"></a>

Este conector exige los siguientes requisitos:
+ AWS IoT Greengrass Software básico, versión 1.10 o posterior.
**nota**  
Este conector no es compatible con las distribuciones. OpenWrt 
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ Un mínimo de 36 MB de RAM en el núcleo de Greengrass para que el conector supervise los contenedores Docker en funcionamiento. El requisito total de memoria depende del número de contenedores Docker que se ejecuten en el núcleo.
+ [Docker Engine](https://docs.docker.com/install/) versión 1.9.1 o posterior instalado en el núcleo de Greengrass. La versión 19.0.3 es la última versión cuyo funcionamiento con el conector se ha verificado.

  El ejecutable `docker` debe estar en el directorio `/usr/bin` o `/usr/local/bin`.
**importante**  
Le recomendamos que instale un almacén de credenciales para proteger las copias locales de sus credenciales de Docker. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).

  Para obtener información sobre la instalación de Docker en distribuciones de Amazon Linux, consulte [Conceptos básicos de Docker para Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html) en la *Guía para desarrolladores de Amazon Elastic Container Service*.
+ [Docker Compose](https://docs.docker.com/compose/install/) instalado en el núcleo de Greengrass. El ejecutable `docker-compose` debe estar en el directorio `/usr/bin` o `/usr/local/bin`.

  Las siguientes versiones de Docker Compose se verifican para que funcionen con el conector.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/docker-app-connector.html)
+ Un único archivo de Docker Compose (por ejemplo, `docker-compose.yml`), almacenado en Amazon Simple Storage Service (Amazon S3). El formato debe ser compatible con la versión de Docker Compose instalada en el núcleo. Debe probar el archivo antes de usarlo en su núcleo. Si edita el archivo después de implementar el grupo de Greengrass, debe volver a implementar el grupo para actualizar la copia local del núcleo.
+ Un usuario de Linux con permiso para llamar al daemon local de Docker y escribir en el directorio que almacena la copia local del archivo de Compose. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo](#docker-app-connector-linux-user).
+ El [rol de grupo Greengrass](group-role.md) configurado para permitir la acción `s3:GetObject` en el bucket S3 que contiene el archivo de Compose. Este permiso se muestra en el siguiente ejemplo de política de IAM.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowAccessToComposeFileS3Bucket",
              "Action": [
                  "s3:GetObject",
                  "s3:GetObjectVersion"
              ],
              "Effect": "Allow",
              "Resource": "arn:aws:s3:::bucket-name/*" 
          }
      ]
  }
  ```

------
**nota**  
Si su bucket de S3 está habilitado para el control de versiones, entonces el rol debe estar configurado para permitir también la acción `s3:GetObjectVersion`. Para obtener más información, consulte [Uso del control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la *Guía del usuario de Amazon Simple Storage Service*.

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).
+ <a name="docker-app-connector-ecr-perms"></a>Si el archivo Docker Compose hace referencia a una imagen de Docker almacenada en Amazon ECR, el [rol de grupo Greengrass](group-role.md) configurado para permitir lo siguiente:
  + Las acciones de `ecr:GetDownloadUrlForLayer` y `ecr:BatchGetImage` en los repositorios de Amazon ECR que contienen las imágenes de Docker.
  + La acción de `ecr:GetAuthorizationToken` en sus recursos.

  Los repositorios deben estar en el mismo conector Cuenta de AWS y al igual Región de AWS que él.
**importante**  
Todos los conectores y las funciones de Lambda del grupo de Greengrass pueden asumir permisos en el rol de grupo. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).

  Estos permisos se muestran en la siguiente política de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllowGetEcrRepositories",
              "Effect": "Allow",
              "Action": [
                  "ecr:GetDownloadUrlForLayer",
                  "ecr:BatchGetImage"
              ],
              "Resource": [
                  "arn:aws:ecr:us-east-1:123456789012:repository/repository-name"
              ]	
          },
          {
              "Sid": "AllowGetEcrAuthToken",
              "Effect": "Allow",
              "Action": "ecr:GetAuthorizationToken",
              "Resource": "*"
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Ejemplos de políticas de repositorio de Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/RepositoryPolicyExamples.html) en la *Guía del usuario de Amazon ECR*.

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).
+ Si el archivo de Docker Compose hace referencia a una imagen de Docker de [AWS Marketplace](https://aws.amazon.com/marketplace), el conector también tiene los siguientes requisitos:
  + Debe estar suscrito a los productos en AWS Marketplace contenedores. Para obtener más información, consulte [Búsqueda y suscripción a productos de contenedor](https://docs.aws.amazon.com/marketplace/latest/buyerguide/buyer-finding-and-subscribing-to-container-products.html) en la *Guía del suscriptor de AWS Marketplace *.
  + AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos](secrets.md#secrets-reqs) de confidencialidad. El conector utiliza esta función únicamente para recuperar sus secretos AWS Secrets Manager, no para almacenarlos.
  + Debes crear un secreto en Secrets Manager para cada AWS Marketplace registro que almacene una imagen de Docker a la que se haga referencia en tu archivo de Compose. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).
+ Si el archivo de Docker Compose hace referencia a una imagen de Docker de repositorios privados en registros distintos de Amazon ECR, como Docker Hub, el conector también tendrá los siguientes requisitos:
  + AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos](secrets.md#secrets-reqs) de confidencialidad. El conector utiliza esta función únicamente para recuperar sus secretos AWS Secrets Manager, no para almacenarlos.
  + Debe crear un secreto en Secrets Manager para cada repositorio privado que almacene una imagen de Docker a la que se hace referencia en su archivo de Compose. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).
+ El daemon de Docker debe ejecutarse cuando implemente un grupo de Greengrass que contenga este conector.

### Acceso a imágenes de Docker desde repositorios privados
<a name="access-private-repositories"></a>

Si utiliza credenciales para acceder a sus imágenes de Docker, debe permitir que el conector tenga acceso a ellas. La forma en que lo haga depende de dónde se encuentre la imagen de Docker.

En el caso de las imágenes de Docker almacenadas en Amazon ECR, concede permiso para obtener su token de autorización en el rol del grupo de Greengrass. Para obtener más información, consulte [Requisitos](#docker-app-connector-req).

En el caso de las imágenes de Docker almacenadas en otros repositorios o registros privados, debe crear un registro secreto AWS Secrets Manager para almacenar su información de inicio de sesión. Esto incluye las imágenes de Docker a las que te has suscrito. AWS Marketplace Cree un secreto para cada repositorio. Si actualiza sus secretos en Secrets Manager, los cambios se propagarán al núcleo la próxima vez que implemente el grupo.

**nota**  
Secrets Manager es un servicio que puede utilizar para almacenar y administrar de forma segura sus credenciales, claves y otros secretos en la Nube de AWS. Para obtener más información, consulta [¿Qué es? AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) en la *Guía AWS Secrets Manager del usuario*.

Cada secreto debe contener las siguientes claves:


| Clave | Valor | 
| --- | --- | 
| `username` | El nombre de usuario utilizado para acceder al repositorio o al registro. | 
| `password` | La contraseña utilizada para acceder al repositorio o al registro. | 
| `registryUrl` | El punto de enlace del registro. Este debe coincidir con la URL de registro correspondiente del archivo de Compose. | 

**nota**  
Para permitir AWS IoT Greengrass el acceso a un secreto de forma predeterminada, el nombre del secreto debe empezar por *greengrass-*. De lo contrario, debe conceder el acceso su rol de servicio de Greengrass. Para obtener más información, consulte [Permite obtener valores secretos AWS IoT Greengrass](secrets.md#secrets-config-service-role).

**Para obtener información de inicio de sesión para las imágenes de Docker desde AWS Marketplace**  

1. Obtenga la contraseña para las imágenes de Docker AWS Marketplace mediante el `aws ecr get-login-password` comando. Para obtener más información, consulte [get-login-password](https://docs.aws.amazon.com/cli/latest/reference/ecr/get-login.html) en la *Referencia de comandos de la AWS CLI *.

   ```
   aws ecr get-login-password
   ```

1. Recupere la URL de registro de la imagen de Docker. Abra el sitio web AWS Marketplace y abra la página de lanzamiento del producto contenedor. En **Imágenes del contenedor**, seleccione **Ver detalles de la imagen del contenedor** para buscar el nombre de usuario y la URL del registro.
Usa el nombre de usuario, la contraseña y la URL del registro recuperados para crear un secreto para cada AWS Marketplace registro que almacene las imágenes de Docker a las que se hace referencia en tu archivo de Compose. 

**Para crear secretos (consola)**  
En la AWS Secrets Manager consola, selecciona **Otro tipo de secretos**. En **Specify the key-value pairs to be stored for this secret (Especificar los pares clave-valor que se van a almacenar para este secreto)**, añada filas para `username`, `password` y `registryUrl`. Para obtener más información, consulte [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.  

![\[Crear un secreto con claves de nombre de usuario, contraseña y registryUrl.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/connectors/secret-docker-trusted-registry.png)


**Para crear secretos (CLI)**  
En AWS CLI, utilice el `create-secret` comando Secrets Manager, como se muestra en el siguiente ejemplo. Para obtener más información, consulte [create-cluster](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager/create-secret.html) en la *Referencia de comandos de la AWS CLI *.  

```
aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
```

**importante**  
Es su responsabilidad proteger el directorio `DockerComposeFileDestinationPath` en el que se guarda el archivo de Docker Compose y las credenciales de las imágenes de Docker de los repositorios privados. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).

## Parameters
<a name="docker-app-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Version 7 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
El nombre del bucket S3 que contiene el archivo de Docker Compose. Cuando cree el bucket, asegúrese de seguir las [reglas para nombres de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) descritas en la *guía del desarrollador de Amazon Simple Storage Service*.  
Nombre para mostrar en la AWS IoT consola: **archivo de Docker Compose en S3**  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clave de objeto de su archivo de Docker Compose en Amazon S3. Para obtener más información, incluyendo las directrices de nomenclatura, consulte [Claves y metadatos de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del desarrollador de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileS3Version`  
La versión de objeto del archivo de Docker Compose en Amazon S3. Para obtener más información, incluidas las pautas de denominación de las claves de objeto, consulte [Uso del control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la *Guía del usuario de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `false`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileDestinationPath`  
La ruta absoluta del directorio local utilizado para almacenar una copia del archivo de Docker Compose. Debe ser un directorio existente. El usuario especificado para `DockerUserId` debe tener permiso para crear un archivo en este directorio. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo AWS IoT Greengrass](#docker-app-connector-linux-user).  
Este directorio almacena las credenciales y el archivo de Docker Compose de sus imágenes de Docker de repositorios privados. Es su responsabilidad proteger este directorio. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).
Nombre para mostrar en la AWS IoT consola: **ruta del directorio del archivo Compose local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `\/.*\/?`  
Ejemplo: `/home/username/myCompose`

`DockerUserId`  
El ID del usuario de Linux con el que se ejecuta el conector. Este usuario debe pertenecer al grupo de Linux de `docker` en el dispositivo central y tener permisos de escritura en el directorio de `DockerComposeFileDestinationPath`. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass . Para obtener más información, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
Nombre para mostrar en la AWS IoT consola: ID de **usuario de Docker**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Los nombres de los recursos de Amazon (ARNs) de los secretos AWS Secrets Manager que contienen la información de inicio de sesión utilizada para acceder a las imágenes de Docker en repositorios privados. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).  
Nombre para mostrar en la AWS IoT consola: **Credenciales para repositorios privados**  
Obligatorio: `false`. Este parámetro es necesario para acceder a las imágenes de Docker almacenadas en repositorios privados.  
Tipo: `array` de `string`  
Patrón válido: `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
La frecuencia (en segundos) a la que el conector registra información de estado sobre los contenedores Docker que se ejecutan en el núcleo. El valor predeterminado es 300 segundos (5 minutos).  
Nombre para mostrar en la AWS IoT consola: frecuencia de **registro**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indica si se aplicará forzosamente la implementación de Docker en caso de que se produzca un error por una limpieza incorrecta de la última implementación. El valor predeterminado es `False`.  
Nombre para mostrar en la AWS IoT consola: **despliegue forzado**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

`DockerPullBeforeUp`  
Indica si el implementador debe ejecutarse `docker-compose pull` antes de ejecutarse `docker-compose up` para detectar un pull-down-up comportamiento. El valor predeterminado es `True`.  
Nombre para mostrar en la AWS IoT consola: **Docker Pull Before Up**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

`StopContainersOnNewDeployment`  
Indica si el conector debe detener los contenedores docker gestionados por Docker Deployer cuando se detiene el GGC (el GGC se detiene cuando se despliega un grupo nuevo o se cierra el núcleo). El valor predeterminado es `True`.  
Nombre para mostrar en la AWS IoT consola: **Docker se detiene en** una nueva implementación  
Recomendamos mantener este parámetro establecido en su valor `True` predeterminado. El parámetro `False` hace que el contenedor de Docker siga ejecutándose incluso después de terminar el AWS IoT Greengrass núcleo o iniciar una nueva implementación. Si establece este parámetro en `False`, debe asegurarse de que sus contenedores de Docker se mantengan según sea necesario en caso de que se añada o cambie el nombre del servicio `docker-compose`.   
Para obtener más información, consulte la documentación del archivo de composición de `docker-compose`. 
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

`DockerOfflineMode`  
Indica si se debe utilizar el archivo Docker Compose existente al iniciar AWS IoT Greengrass sin conexión. El valor predeterminado es `False`.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

------
#### [ Version 6 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
El nombre del bucket S3 que contiene el archivo de Docker Compose. Cuando cree el bucket, asegúrese de seguir las [reglas para nombres de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) descritas en la *guía del desarrollador de Amazon Simple Storage Service*.  
Nombre para mostrar en la AWS IoT consola: archivo de **Docker Compose** en S3  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clave de objeto de su archivo de Docker Compose en Amazon S3. Para obtener más información, incluyendo las directrices de nomenclatura, consulte [Claves y metadatos de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del desarrollador de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileS3Version`  
La versión de objeto del archivo de Docker Compose en Amazon S3. Para obtener más información, incluidas las pautas de denominación de las claves de objeto, consulte [Uso del control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la *Guía del usuario de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `false`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileDestinationPath`  
La ruta absoluta del directorio local utilizado para almacenar una copia del archivo de Docker Compose. Debe ser un directorio existente. El usuario especificado para `DockerUserId` debe tener permiso para crear un archivo en este directorio. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo AWS IoT Greengrass](#docker-app-connector-linux-user).  
Este directorio almacena las credenciales y el archivo de Docker Compose de sus imágenes de Docker de repositorios privados. Es su responsabilidad proteger este directorio. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).
Nombre para mostrar en la AWS IoT consola: **ruta del directorio del archivo Compose local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `\/.*\/?`  
Ejemplo: `/home/username/myCompose`

`DockerUserId`  
El ID del usuario de Linux con el que se ejecuta el conector. Este usuario debe pertenecer al grupo de Linux de `docker` en el dispositivo central y tener permisos de escritura en el directorio de `DockerComposeFileDestinationPath`. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass . Para obtener más información, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
Nombre para mostrar en la AWS IoT consola: ID de **usuario de Docker**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Los nombres de los recursos de Amazon (ARNs) de los secretos AWS Secrets Manager que contienen la información de inicio de sesión utilizada para acceder a las imágenes de Docker en repositorios privados. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).  
Nombre para mostrar en la AWS IoT consola: **Credenciales para repositorios privados**  
Obligatorio: `false`. Este parámetro es necesario para acceder a las imágenes de Docker almacenadas en repositorios privados.  
Tipo: `array` de `string`  
Patrón válido: `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
La frecuencia (en segundos) a la que el conector registra información de estado sobre los contenedores Docker que se ejecutan en el núcleo. El valor predeterminado es 300 segundos (5 minutos).  
Nombre para mostrar en la AWS IoT consola: frecuencia de **registro**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indica si se aplicará forzosamente la implementación de Docker en caso de que se produzca un error por una limpieza incorrecta de la última implementación. El valor predeterminado es `False`.  
Nombre para mostrar en la AWS IoT consola: **despliegue forzado**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

`DockerPullBeforeUp`  
Indica si el implementador debe ejecutarse `docker-compose pull` antes de ejecutarse `docker-compose up` para detectar un pull-down-up comportamiento. El valor predeterminado es `True`.  
Nombre para mostrar en la AWS IoT consola: **Docker Pull Before Up**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

`StopContainersOnNewDeployment`  
Indica si el conector debe detener los contenedores docker gestionados por Docker Deployer cuando se detiene el GGC (cuando se realiza una implementación de un nuevo grupo o se apaga el núcleo). El valor predeterminado es `True`.  
Nombre para mostrar en la AWS IoT consola: **Docker se detiene en** una nueva implementación  
Recomendamos mantener este parámetro establecido en su valor `True` predeterminado. El parámetro `False` hace que el contenedor de Docker siga ejecutándose incluso después de terminar el AWS IoT Greengrass núcleo o iniciar una nueva implementación. Si establece este parámetro en `False`, debe asegurarse de que sus contenedores de Docker se mantengan según sea necesario en caso de que se añada o cambie el nombre del servicio `docker-compose`.   
 Para obtener más información, consulte la documentación del archivo de composición de `docker-compose`. 
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

------
#### [ Version 5 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
El nombre del bucket S3 que contiene el archivo de Docker Compose. Cuando cree el bucket, asegúrese de seguir las [reglas para nombres de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) descritas en la *guía del desarrollador de Amazon Simple Storage Service*.  
Nombre para mostrar en la AWS IoT consola: archivo de **Docker Compose** en S3  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clave de objeto de su archivo de Docker Compose en Amazon S3. Para obtener más información, incluyendo las directrices de nomenclatura, consulte [Claves y metadatos de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del desarrollador de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileS3Version`  
La versión de objeto del archivo de Docker Compose en Amazon S3. Para obtener más información, incluidas las pautas de denominación de las claves de objeto, consulte [Uso del control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la *Guía del usuario de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `false`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileDestinationPath`  
La ruta absoluta del directorio local utilizado para almacenar una copia del archivo de Docker Compose. Debe ser un directorio existente. El usuario especificado para `DockerUserId` debe tener permiso para crear un archivo en este directorio. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo AWS IoT Greengrass](#docker-app-connector-linux-user).  
Este directorio almacena las credenciales y el archivo de Docker Compose de sus imágenes de Docker de repositorios privados. Es su responsabilidad proteger este directorio. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).
Nombre para mostrar en la AWS IoT consola: **ruta del directorio del archivo Compose local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `\/.*\/?`  
Ejemplo: `/home/username/myCompose`

`DockerUserId`  
El ID del usuario de Linux con el que se ejecuta el conector. Este usuario debe pertenecer al grupo de Linux de `docker` en el dispositivo central y tener permisos de escritura en el directorio de `DockerComposeFileDestinationPath`. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass . Para obtener más información, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
Nombre para mostrar en la AWS IoT consola: ID de **usuario de Docker**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Los nombres de los recursos de Amazon (ARNs) de los secretos AWS Secrets Manager que contienen la información de inicio de sesión utilizada para acceder a las imágenes de Docker en repositorios privados. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).  
Nombre para mostrar en la AWS IoT consola: **Credenciales para repositorios privados**  
Obligatorio: `false`. Este parámetro es necesario para acceder a las imágenes de Docker almacenadas en repositorios privados.  
Tipo: `array` de `string`  
Patrón válido: `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
La frecuencia (en segundos) a la que el conector registra información de estado sobre los contenedores Docker que se ejecutan en el núcleo. El valor predeterminado es 300 segundos (5 minutos).  
Nombre para mostrar en la AWS IoT consola: frecuencia de **registro**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indica si se aplicará forzosamente la implementación de Docker en caso de que se produzca un error por una limpieza incorrecta de la última implementación. El valor predeterminado es `False`.  
Nombre para mostrar en la AWS IoT consola: **despliegue forzado**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

`DockerPullBeforeUp`  
Indica si el implementador debe ejecutarse `docker-compose pull` antes de ejecutarse `docker-compose up` para detectar un pull-down-up comportamiento. El valor predeterminado es `True`.  
Nombre para mostrar en la AWS IoT consola: **Docker Pull Before Up**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

------
#### [ Versions 2 - 4 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
El nombre del bucket S3 que contiene el archivo de Docker Compose. Cuando cree el bucket, asegúrese de seguir las [reglas para nombres de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) descritas en la *guía del desarrollador de Amazon Simple Storage Service*.  
Nombre para mostrar en la AWS IoT consola: **archivo de Docker Compose** en S3  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clave de objeto de su archivo de Docker Compose en Amazon S3. Para obtener más información, incluyendo las directrices de nomenclatura, consulte [Claves y metadatos de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del desarrollador de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileS3Version`  
La versión de objeto del archivo de Docker Compose en Amazon S3. Para obtener más información, incluidas las pautas de denominación de las claves de objeto, consulte [Uso del control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la *Guía del usuario de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `false`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileDestinationPath`  
La ruta absoluta del directorio local utilizado para almacenar una copia del archivo de Docker Compose. Debe ser un directorio existente. El usuario especificado para `DockerUserId` debe tener permiso para crear un archivo en este directorio. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo AWS IoT Greengrass](#docker-app-connector-linux-user).  
Este directorio almacena las credenciales y el archivo de Docker Compose de sus imágenes de Docker de repositorios privados. Es su responsabilidad proteger este directorio. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).
Nombre para mostrar en la AWS IoT consola: **ruta del directorio del archivo Compose local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `\/.*\/?`  
Ejemplo: `/home/username/myCompose`

`DockerUserId`  
El ID del usuario de Linux con el que se ejecuta el conector. Este usuario debe pertenecer al grupo de Linux de `docker` en el dispositivo central y tener permisos de escritura en el directorio de `DockerComposeFileDestinationPath`. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass . Para obtener más información, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
Nombre para mostrar en la AWS IoT consola: ID de **usuario de Docker**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Los nombres de los recursos de Amazon (ARNs) de los secretos AWS Secrets Manager que contienen la información de inicio de sesión utilizada para acceder a las imágenes de Docker en repositorios privados. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).  
Nombre para mostrar en la AWS IoT consola: **Credenciales para repositorios privados**  
Obligatorio: `false`. Este parámetro es necesario para acceder a las imágenes de Docker almacenadas en repositorios privados.  
Tipo: `array` de `string`  
Patrón válido: `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
La frecuencia (en segundos) a la que el conector registra información de estado sobre los contenedores Docker que se ejecutan en el núcleo. El valor predeterminado es 300 segundos (5 minutos).  
Nombre para mostrar en la AWS IoT consola: frecuencia de **registro**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[1-9]{1}[0-9]{0,3}$`

`ForceDeploy`  
Indica si se aplicará forzosamente la implementación de Docker en caso de que se produzca un error por una limpieza incorrecta de la última implementación. El valor predeterminado es `False`.  
Nombre para mostrar en la AWS IoT consola: **despliegue forzado**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^(true|false)$`

------
#### [ Version 1 ]<a name="docker-app-connector-parameters-v1"></a>

`DockerComposeFileS3Bucket`  
El nombre del bucket S3 que contiene el archivo de Docker Compose. Cuando cree el bucket, asegúrese de seguir las [reglas para nombres de bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html) descritas en la *guía del desarrollador de Amazon Simple Storage Service*.  
Nombre para mostrar en la AWS IoT consola: **archivo de Docker Compose en S3**  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `[a-zA-Z0-9\\-\\.]{3,63}`

`DockerComposeFileS3Key`  
La clave de objeto de su archivo de Docker Compose en Amazon S3. Para obtener más información, incluyendo las directrices de nomenclatura, consulte [Claves y metadatos de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del desarrollador de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileS3Version`  
La versión de objeto del archivo de Docker Compose en Amazon S3. Para obtener más información, incluidas las pautas de denominación de las claves de objeto, consulte [Uso del control de versiones](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Versioning.html) en la *Guía del usuario de Amazon Simple Storage Service*.  
En la consola, el **archivo de Docker Compose en la propiedad S3** combina los parámetros de `DockerComposeFileS3Bucket`, `DockerComposeFileS3Key`, y `DockerComposeFileS3Version`.
Obligatorio: `false`  
Tipo: `string`  
Patrón válido `.+`

`DockerComposeFileDestinationPath`  
La ruta absoluta del directorio local utilizado para almacenar una copia del archivo de Docker Compose. Debe ser un directorio existente. El usuario especificado para `DockerUserId` debe tener permiso para crear un archivo en este directorio. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo AWS IoT Greengrass](#docker-app-connector-linux-user).  
Este directorio almacena las credenciales y el archivo de Docker Compose de sus imágenes de Docker de repositorios privados. Es su responsabilidad proteger este directorio. Para obtener más información, consulte [Notas de seguridad](#docker-app-connector-security).
Nombre para mostrar en la AWS IoT consola: **ruta del directorio del archivo Compose local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido `\/.*\/?`  
Ejemplo: `/home/username/myCompose`

`DockerUserId`  
El ID del usuario de Linux con el que se ejecuta el conector. Este usuario debe pertenecer al grupo de Linux de `docker` en el dispositivo central y tener permisos de escritura en el directorio de `DockerComposeFileDestinationPath`. Para obtener más información, consulte [Configuración del usuario de Docker en el núcleo](#docker-app-connector-linux-user).  
<a name="avoid-running-as-root"></a>Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass . Para obtener más información, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).
Nombre para mostrar en la AWS IoT consola: ID de **usuario de Docker**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[0-9]{1,5}$`

`AWSSecretsArnList`  
Los nombres de los recursos de Amazon (ARNs) de los secretos AWS Secrets Manager que contienen la información de inicio de sesión utilizada para acceder a las imágenes de Docker en repositorios privados. Para obtener más información, consulte [Acceso a imágenes de Docker desde repositorios privados](#access-private-repositories).  
Nombre para mostrar en la AWS IoT consola: **Credenciales para repositorios privados**  
Obligatorio: `false`. Este parámetro es necesario para acceder a las imágenes de Docker almacenadas en repositorios privados.  
Tipo: `array` de `string`  
Patrón válido: `[( ?,? ?"(arn:(aws(-[a-z]+)):secretsmanager:[a-z0-9-]+:[0-9]{12}:secret:([a-zA-Z0-9\]+/)[a-zA-Z0-9/_+=,.@-]+-[a-zA-Z0-9]+)")]`

`DockerContainerStatusLogFrequency`  
La frecuencia (en segundos) a la que el conector registra información de estado sobre los contenedores Docker que se ejecutan en el núcleo. El valor predeterminado es 300 segundos (5 minutos).  
Nombre para mostrar en la AWS IoT consola: frecuencia de **registro**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[1-9]{1}[0-9]{0,3}$`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="docker-app-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector de implementación de la aplicación de Greengrass Docker.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyDockerAppplicationDeploymentConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/DockerApplicationDeployment/versions/5",
            "Parameters": {
                "DockerComposeFileS3Bucket": "amzn-s3-demo-bucket",
                "DockerComposeFileS3Key": "production-docker-compose.yml",
                "DockerComposeFileS3Version": "123",
                "DockerComposeFileDestinationPath": "/home/username/myCompose",
                "DockerUserId": "1000",
                "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret1-hash\",\"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret2-hash\"]",
                "DockerContainerStatusLogFrequency": "30",
                "ForceDeploy": "True",
                "DockerPullBeforeUp": "True"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

## Datos de entrada
<a name="docker-app-connector-data-input"></a>

Este conector no requiere ni acepta datos de entrada.

## Datos de salida
<a name="docker-app-connector-data-output"></a>

Este conector publica el estado del comando de `docker-compose up` como datos de salida.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`dockerapplicationdeploymentconnector/message/status`

**Ejemplo de salida: Correcto**  

```
{
  "status":"success",
  "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", 
  "S3Bucket":"amzn-s3-demo-bucket",
  "ComposeFileName":"production-docker-compose.yml",
  "ComposeFileVersion":"123"
}
```

**Ejemplo de salida: Error**  

```
{
  "status":"fail",
  "error_message":"description of error",
  "error":"InvalidParameter"
}
```
El tipo de error puede ser `InvalidParameter` o `InternalError`.

## Configuración del usuario de Docker en el núcleo AWS IoT Greengrass
<a name="docker-app-connector-linux-user"></a>

El conector de implementación de aplicaciones Docker de Greengrass se ejecuta como el usuario que especifique para el parámetro `DockerUserId`. Si no especifica un valor, el conector se ejecutará como `ggc_user`, que es la identidad de acceso de Greengrass predeterminada.

Para permitir que el conector interactúe con el daemon de Docker, el usuario de Docker debe pertenecer al grupo de Linux de `docker` del núcleo. El usuario de Docker también debe tener permisos de escritura en el directorio de `DockerComposeFileDestinationPath`. Aquí es donde el conector almacena el archivo local de `docker-compose.yml` y las credenciales de Docker.

**nota**  
Le recomendamos que cree un usuario de Linux en lugar de utilizar el `ggc_user` predeterminado. De lo contrario, cualquier función de Lambda del grupo de Greengrass podrá acceder al archivo de Compose y a las credenciales de Docker.
<a name="avoid-running-as-root"></a>Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass . Para obtener más información, consulte [Ejecución de una función de Lambda como raíz](lambda-group-config.md#lambda-running-as-root).

1. Cree el usuario. Puede ejecutar el comando de `useradd` e incluir la opción de `-u` opcional para asignar un ID de usuario. Por ejemplo:

   ```
   sudo useradd -u 1234 user-name
   ```

1. Añada el usuario al grupo de `docker` en el núcleo. Por ejemplo:

   ```
   sudo usermod -aG docker user-name
   ```

   Para obtener más información, como por ejemplo la forma de crear el grupo de `docker`, consulte [Manage Docker as a non-root user (Administrar Docker como usuario no raíz)](https://docs.docker.com/install/linux/linux-postinstall/#manage-docker-as-a-non-root-user) en la documentación de Docker.

1. Otorgue permisos al usuario para que pueda escribir en el directorio especificado para el parámetro de `DockerComposeFileDestinationPath`. Por ejemplo:

   1. Para fijar al usuario como propietario del directorio. En este ejemplo se utiliza el ID de usuario del paso 1.

      ```
      chown 1234 docker-compose-file-destination-path
      ```

   1. Otorgue permisos de lectura y escritura al propietario.

      ```
      chmod 700 docker-compose-file-destination-path
      ```

      Para obtener más información, consulte [How To Manage File And Folder Permissions In Linux (Cómo administrar los permisos de archivos y carpetas en Linux)](https://www.linux.com/tutorials/how-manage-file-and-folder-permissions-linux/) en la documentación de Linux Foundation.

   1. Si no asignó un ID de usuario al crear el usuario, o si utilizó un usuario existente, ejecute el comando de `id` para buscar el ID de usuario.

      ```
      id -u user-name
      ```

      Utilice el ID de usuario para configurar el parámetro de `DockerUserId` para el conector.

## Información de uso
<a name="docker-app-connector-usage-info"></a>

Cuando utilice el conector de implementación de la aplicación de Greengrass Docker, debe tener en cuenta la siguiente información de uso específica de la implementación.
+ **Prefijo fijo para nombres de proyectos.** El conector antepone el prefijo de `greengrassdockerapplicationdeployment` a los nombres de los contenedores Docker que inicia. El conector utiliza este prefijo como nombre del proyecto en los comandos de `docker-compose` que ejecuta.
+ **Comportamiento de registro.** El conector escribe información de estado e información de resolución de problemas en un archivo de registro. Puede configurarlo AWS IoT Greengrass para enviar CloudWatch registros a Logs y escribirlos localmente. Para obtener más información, consulte [Registro de conectores](connectors.md#connectors-logging). Esta es la ruta al registro local para el conector:

  ```
  /greengrass-root/ggc/var/log/user/region/aws/DockerApplicationDeployment.log
  ```

  Debe tener permisos de root para acceder a los registros locales.
+ **Actualización de imágenes de Docker.** Docker almacena imágenes en la caché en el dispositivo central. Si actualiza una imagen de Docker y desea propagar el cambio al dispositivo central, asegúrese de cambiar la etiqueta de la imagen en el archivo de Compose. Los cambios surten efecto después de que se implemente el grupo de Greengrass.
+ **Tiempo de espera de 10 minutos para operaciones de limpieza.** Cuando el daemon de Greengrass se detiene durante un reinicio, el comando de `docker-compose down` se activa. Todos los contenedores de Docker tienen un máximo de 10 minutos después de que se active `docker-compose down` para realizar cualquier operación de limpieza. Si la limpieza no se completa en 10 minutos, deberá limpiar manualmente los contenedores restantes. Para obtener más información, consulte [docker rm](https://docs.docker.com/engine/reference/commandline/rm/) en la documentación de la CLI de Docker.
+ **Ejecución de comandos de Docker.** Para solucionar problemas, puede ejecutar comandos de Docker en una ventana de terminal del dispositivo central. Por ejemplo, ejecute el siguiente comando para ver los contenedores Docker iniciados por el conector:

  ```
  docker ps --filter name="greengrassdockerapplicationdeployment"
  ```
+ **ID de recurso reservado.** El conector utiliza el ID de `DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_index` para los recursos de Greengrass que crea en el grupo de Greengrass. El recurso IDs debe ser único en el grupo, así que no asigne un ID de recurso que pueda entrar en conflicto con este ID de recurso reservado.
+ **Modo sin conexión.** *Si establece el parámetro de configuración `DockerOfflineMode` en `True`, el conector Docker puede funcionar en modo fuera de línea*. Esto puede ocurrir cuando la implementación de un grupo de Greengrass se reinicia mientras el dispositivo principal está fuera de línea y el conector no puede establecer una conexión con Amazon S3 o Amazon ECR para recuperar el archivo de Docker Compose.

  Con el modo sin conexión activado, el conector intenta descargar el archivo de Compose y ejecutar los comandos `docker login` como lo haría en un reinicio normal. Si estos intentos fallan, el conector busca un archivo de Compose almacenado localmente en la carpeta que se especificó mediante el parámetro `DockerComposeFileDestinationPath`. Si existe un archivo Compose local, el conector sigue la secuencia normal de los comandos `docker-compose` y extrae imágenes locales. Si el archivo de Compose o las imágenes locales no están presentes, se produce un error en el conector. El comportamiento de los parámetros `ForceDeploy` y `StopContainersOnNewDeployment` sigue siendo el mismo en el modo sin conexión. 

## Comunicación con contenedores Docker
<a name="docker-app-connector-communicating"></a>

AWS IoT Greengrass admite los siguientes canales de comunicación entre los componentes de Greengrass y los contenedores de Docker:
+ Las funciones Lambda de Greengrass pueden usar REST APIs para comunicarse con los procesos de los contenedores de Docker. Puede configurar un servidor en un contenedor de Docker que abre un puerto. Las funciones de Lambda se pueden comunicar con el contenedor de este puerto.
+ Los procesos de los contenedores Docker pueden intercambiar mensajes MQTT a través del bróker de mensajería local de Greengrass. Puede configurar el contenedor Docker como un dispositivo cliente en el grupo Greengrass y, a continuación, crear suscripciones para permitir que el contenedor se comunique con las funciones de Greengrass Lambda, los dispositivos cliente y otros conectores del grupo, AWS IoT o con el servicio paralelo local. Para obtener más información, consulte [Configurar la comunicación MQTT con contenedores Docker](#docker-app-connector-mqtt-communication).
+ Las funciones de Lambda de Greengrass pueden actualizar un archivo compartido para pasar información a contenedores de Docker. Puede utilizar el archivo de Compose para montar un subconjunto de la ruta del archivo compartido en un contenedor Docker.

### Configurar la comunicación MQTT con contenedores Docker
<a name="docker-app-connector-mqtt-communication"></a>

Puede configurar un contenedor de Docker como un dispositivo de cliente y añadirlo a un grupo de Greengrass. A continuación, puede crear suscripciones que permitan la comunicación MQTT entre el contenedor Docker y los componentes Greengrass o AWS IoT. En el siguiente procedimiento, va a crear una suscripción que permite que el dispositivo del contenedor Docker reciba mensajes de actualización de sombra desde el servicio de sombra local. Puede seguir este patrón para crear otras suscripciones.

**nota**  
Suponemos que ya ha creado un grupo de Greengrass y un núcleo de Greengrass (versión 1.10 o posterior) en este procedimiento. Para obtener más información acerca de la creación de núcleos y grupos de Greengrass, consulte [Empezar con AWS IoT Greengrass](gg-gs.md).

**Para configurar un contenedor de Docker como un dispositivo de cliente y añadirlo a un grupo de Greengrass**

1. Cree una carpeta en el dispositivo central para almacenar los certificados y claves utilizados para autenticar el dispositivo Greengrass.

   La ruta del archivo debe montarse en el contenedor Docker que desee iniciar. El siguiente fragmento muestra cómo montar una ruta de archivo en el archivo de Compose. En este ejemplo, *path-to-device-certs* representa la carpeta que creó en este paso.

   ```
   version: '3.3'
   services:
     myService:
       image: user-name/repo:image-tag
       volumes:
         -  /path-to-device-certs/:/path-accessible-in-container
   ```

1. <a name="console-gg-groups"></a>En el panel de navegación de la AWS IoT consola, en **Administrar**, expanda **los dispositivos Greengrass** y, a continuación, elija **Grupos (V1)**.

1. <a name="group-choose-target-group"></a>Seleccione el grupo de destino.

1. <a name="gg-group-add-device"></a>En la página de configuración del grupo, seleccione **Dispositivos de cliente** y, a continuación, seleccione **Asociar**.

1. <a name="gg-group-create-device"></a>En el modal **Asociar un dispositivo cliente a este grupo**, elija **Crear AWS IoT algo nuevo**.

   La página **Crear objetos** se abre en una pestaña nueva.

1. <a name="gg-group-create-single-thing"></a>En la página **Crear objetos**, elija **Crear un solo objeto**, y luego seleccione **Siguiente**.

1. En la página **Especificar las propiedades del objeto**, introduce un nombre para el dispositivo y, a continuación, seleccione **Siguiente**.

1. <a name="gg-group-create-device-configure-certificate"></a>En la página **Configurar el certificado del dispositivo**, seleccione **Siguiente**.

1. <a name="gg-group-create-device-attach-policy"></a>En la página **Adjuntar políticas al certificado**, realice uno de los siguientes procedimientos:
   + Seleccione una política existente que conceda los permisos que requieren los dispositivos clientes y, a continuación, seleccione **Crear objeto**.

     Se abre un modal en el que puede descargar los certificados y las claves que el dispositivo utiliza para conectarse al núcleo Nube de AWS y al núcleo.
   + Cree y adjunte una nueva política que conceda permisos al dispositivo cliente. Haga lo siguiente:

     1. Elija **Crear política**.

        La página **Create policy (Crear política)** se abre en una pestaña nueva.

     1. En la página **Create policy (Crear política)**, haga lo siguiente:

        1. En **Nombre de la política**, introduzca un nombre que describa la política, como **GreengrassV1ClientDevicePolicy**.

        1. En la pestaña **Declaraciones de política**, en **Documento de política**, seleccione **JSON**.

        1. Ingrese el siguiente documento de política. Esta política permite que el dispositivo cliente descubra los núcleos de Greengrass y comunique todos los temas MQTT. Para obtener información acerca de cómo restringir el acceso a esta política, consulte [Autenticación y autorización de dispositivos para AWS IoT Greengrass](device-auth.md).

------
#### [ JSON ]

****  

           ```
           {
             "Version":"2012-10-17",		 	 	 
             "Statement": [
               {
                 "Effect": "Allow",
                 "Action": [
                   "iot:Publish",
                   "iot:Subscribe",
                   "iot:Connect",
                   "iot:Receive"
                 ],
                 "Resource": [
                   "*"
                 ]
               },
               {
                 "Effect": "Allow",
                 "Action": [
                   "greengrass:*"
                 ],
                 "Resource": [
                   "*"
                 ]
               }
             ]
           }
           ```

------

        1. Elija **Create** (Crear) para crear la política.

     1. Vuelva a la pestaña del navegador con la página **Adjuntar políticas al certificado** abierta. Haga lo siguiente:

        1. En la lista **Políticas**, seleccione la política que ha creado, como **GreengrassV1ClientDevicePolicy**.

           Si no se puede ver la política, seleccione el botón de actualizar.

        1. Elija **Crear objeto**.

           Se abre un modal en el que puede descargar los certificados y las claves que el dispositivo utiliza para conectarse al núcleo Nube de AWS y al núcleo.

1. <a name="gg-group-create-device-download-certs"></a>En el modal **Descargar certificados y claves**, descargue los certificados del dispositivo.
**importante**  
Descargue los recursos de seguridad antes de elegir **Listo**.

   Haga lo siguiente:

   1. Para el **Certificado del dispositivo**, seleccione **Descargar** para descargar el certificado del dispositivo.

   1. En **Archivo de clave pública**, seleccione **Descargar** para descargar la clave pública del certificado.

   1. En **Archivo de clave privada**, seleccione **Descargar** para descargar el archivo de clave privada del certificado.

   1. Revise la [Autenticación de servidor](https://docs.aws.amazon.com/iot/latest/developerguide/server-authentication.html) en la *Guía del desarrollador de AWS IoT * y seleccione el certificado de CA raíz adecuado. Le recomendamos que utilice los puntos de conexión de Amazon Trust Services (ATS) y los certificados de CA raíz de ATS. En **Certificados de CA raíz**, seleccione **Descargar** para obtener un certificado de CA raíz.

   1. Seleccione **Listo**.

   Tome nota del identificador del certificado que comparten los nombres de archivo del certificado y las claves del dispositivo. Lo necesitará más adelante.

1. Copie los certificados y las claves en la carpeta que ha creado en el paso 1.

A continuación, cree una suscripción en el grupo. En este ejemplo, crear una suscripción permite que el dispositivo del contenedor Docker reciba mensajes MQTT del servicio de sombra local.

**nota**  
El tamaño máximo de un documento sombra es de 8 kB. Para obtener más información, consulte [Cuotas de AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/limits-iot.html) en la *Guía para desarrolladores de AWS IoT *.

**Para crear una suscripción que permita al dispositivo del contenedor Docker recibir mensajes MQTT del servicio de sombra local**

1. <a name="shared-subscriptions-addsubscription"></a>En la página de configuración del grupo, elija la pestaña **Suscripciones** y, a continuación, elija **Añadir suscripción**.

1. En la página **Select your source and target**, configure el origen y el destino, de la siguiente manera:

   1. Para **Select a source (Seleccionar un origen)**: elija **Services (Servicios)** y, a continuación, **Local Shadow Service (Servicio de sombra local)**.

   1. En **Select a target (Seleccionar un destino)**, seleccione **Devices (Dispositivos)**, y, a continuación, elija su dispositivo.

   1. Elija **Siguiente**.

   1. En la página **Filtrar los datos por tema**, en el campo **Filtro por tema**, escriba **\$1aws/things/*MyDockerDevice*/shadow/update/accepted** y, a continuación, seleccione **Siguiente**. *MyDockerDevice*Sustitúyalo por el nombre del dispositivo que creaste anteriormente.

   1. Seleccione **Finalizar**.

Incluya el siguiente fragmento de código en la imagen de Docker a la que haga referencia en su archivo de Compose. Este es el código del dispositivo Greengrass. Además, añada el código en el contenedor Docker que inicia el dispositivo Greengrass dentro del contenedor. Se puede ejecutar como un proceso independiente en la imagen o en una cadena independiente.

```
import os
import sys
import time
import uuid

from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider
from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient

# Replace thingName with the name you registered for the Docker device.
thingName = "MyDockerDevice"
clientId = thingName

# Replace host with the IoT endpoint for your &AWS-account;.
host = "myPrefix.iot.region.amazonaws.com"

# Replace topic with the topic where the Docker container subscribes.
topic = "$aws/things/MyDockerDevice/shadow/update/accepted"

# Replace these paths based on the download location of the certificates for the Docker container.
rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem"
certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt"
privateKeyPath = "/path-accessible-in-container/certId-private.pem.key"


# Discover Greengrass cores.
discoveryInfoProvider = DiscoveryInfoProvider()
discoveryInfoProvider.configureEndpoint(host)
discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath)
discoveryInfoProvider.configureTimeout(10)  # 10 seconds.

GROUP_CA_PATH = "./groupCA/"
MQTT_QOS = 1

discovered = False
groupCA = None
coreInfo = None

try:
    # Get discovery info from AWS IoT.
    discoveryInfo = discoveryInfoProvider.discover(thingName)
    caList = discoveryInfo.getAllCas()
    coreList = discoveryInfo.getAllCores()

    # Use first discovery result.
    groupId, ca = caList[0]
    coreInfo = coreList[0]

    # Save the group CA to a local file.
    groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt"
    if not os.path.exists(GROUP_CA_PATH):
        os.makedirs(GROUP_CA_PATH)
    groupCAFile = open(groupCA, "w")
    groupCAFile.write(ca)
    groupCAFile.close()
    discovered = True
except DiscoveryInvalidRequestException as e:
    print("Invalid discovery request detected!")
    print("Type: %s" % str(type(e)))
    print("Error message: %s" % str(e))
    print("Stopping...")
except BaseException as e:
    print("Error in discovery!")
    print("Type: %s" % str(type(e)))
    print("Error message: %s" % str(e))
    print("Stopping...")

myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId)
myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath)


# Try to connect to the Greengrass core.
connected = False
for connectivityInfo in coreInfo.connectivityInfoList:
    currentHost = connectivityInfo.host
    currentPort = connectivityInfo.port
    myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort)
    try:
        myAWSIoTMQTTClient.connect()
        connected = True
    except BaseException as e:
        print("Error in connect!")
        print("Type: %s" % str(type(e)))
        print("Error message: %s" % str(e))
    if connected:
        break

if not connected:
    print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn)
    sys.exit(-2)

# Handle the MQTT message received from GGShadowService.
def customCallback(client, userdata, message):
    print("Received an MQTT message")
    print(message)

# Subscribe to the MQTT topic.
myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback)

# Keep the process alive to listen for messages.
while True:
    time.sleep(1)
```

## Notas de seguridad
<a name="docker-app-connector-security"></a>

Cuando utilice el conector de implementación de la aplicación de Greengrass Docker, tenga en cuenta las siguientes consideraciones de seguridad.

  
**Almacenamiento local del archivo de Docker Compose**  
El conector guarda una copia del archivo de Compose en el directorio especificado con el parámetro de `DockerComposeFileDestinationPath`.  
Es su responsabilidad proteger este directorio. Debe utilizar los permisos del sistema de archivos para restringir el acceso al directorio.

  
**Almacenamiento local de las credenciales de Docker**  
Si las imágenes de Docker se guardan en repositorios privados, el conector almacenará las credenciales de Docker en el directorio especificado con el parámetro `DockerComposeFileDestinationPath`.  
Es su responsabilidad proteger estas credenciales. Por ejemplo, debe usar [credencial-helper](https://docs.docker.com/engine/reference/commandline/login/#credentials-store) en el dispositivo central cuando instale Docker Engine.

  
**Instalar Docker Engine desde una fuente de confianza**  
Es su responsabilidad instalar Docker Engine desde una fuente de confianza. Este conector utiliza el daemon de Docker del dispositivo central para acceder a sus recursos de Docker y administrar los contenedores de Docker.

  
**Alcance de los permisos de rol del grupo de Greengrass**  
Todos los conectores y funciones de Lambda del grupo de Greengrass pueden asumir los permisos que añada en el rol del grupo de Greengrass. Este conector requiere acceso al archivo de Docker Compose almacenado en un bucket S3. También requiere acceso a su token de autorización de Amazon ECR si sus imágenes de Docker se almacenan en un repositorio privado en Amazon ECR.

## Licencias
<a name="docker-app-connector-license"></a>

El conector de implementación de Greengrass Docker incluye las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="docker-app-connector-changelog"></a>

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


|  Versión  |  Cambios  | 
| --- | --- | 
|  7  |  Se agregó `DockerOfflineMode` para usar un archivo de Docker Compose existente cuando se AWS IoT Greengrass inicia sin conexión. Se implementaron reintentos para el comando `docker login`. Support para 32 bits UIDs.   | 
|  6  |  Se agregó `StopContainersOnNewDeployment` para anular la limpieza del contenedor cuando se realiza una nueva implementación o se detiene el GGC. Mecanismos de apagado y puesta en marcha más seguros. Corrección de un error de validación de YAML.  | 
|  5  |  Las imágenes se extraen antes de ejecutar `docker-compose down`.  | 
|  4  |  Se agregó pull-before-up un comportamiento para actualizar las imágenes de Docker.  | 
|  3  |  Se ha corregido un problema con la búsqueda de variables de entorno.  | 
|  2  |  Se ha agregado el parámetro `ForceDeploy`.  | 
|  1  |  Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="docker-app-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# Conector de IoT Analytics
<a name="iot-analytics-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El conector de 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 de cliente conectados](what-is-gg.md#greengrass-devices). El conector envía los datos a los AWS IoT Analytics canales de la región Cuenta de AWS y de la corriente. Puede enviar datos a un canal de destino predeterminado y a canales especificados dinámicamente.

**nota**  
AWS IoT Analytics es un servicio totalmente gestionado que le permite recopilar, almacenar, procesar y consultar datos de IoT. En AWS IoT Analytics, los datos se pueden analizar y procesar más a fondo. 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?](https://docs.aws.amazon.com/iotanalytics/latest/userguide/welcome.html) en la *Guía AWS IoT Analytics del usuario*.

El conector acepta datos formateados y sin formatear en [temas de MQTT de entrada](#iot-analytics-connector-data-input). 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](connectors.md#connectors-inputs-outputs). Esto se puede utilizar para dirigir mensajes desde dispositivos de 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 de [https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-batchputmessage](https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-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](#iot-analytics-connector-changelog).

## Requisitos
<a name="iot-analytics-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-iot-analytics-req-regions"></a>Este conector solo puede utilizarse en las regiones de Amazon Web Services en las que se admiten tanto [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html) como [AWS IoT Analytics](https://docs.aws.amazon.com/general/latest/gr/iot-analytics.html).
+ <a name="conn-iot-analytics-req-ita-config"></a>Se crean y configuran todas AWS IoT Analytics las entidades y flujos de trabajo 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](https://docs.aws.amazon.com/iotanalytics/latest/userguide/getting-started.html) o de la [consola](https://docs.aws.amazon.com/iotanalytics/latest/userguide/quickstart.html) en la *Guía de usuario de AWS IoT Analytics *.
**nota**  
 AWS IoT Analytics Los canales de destino deben usar la misma cuenta y estar en la Región de AWS misma ubicación que este conector.
+ <a name="conn-iot-analytics-req-iam-policy"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción de `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.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "iotanalytics:BatchPutMessage"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_1_name",
      "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_2_name"
              ]
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-iot-analytics-req-regions"></a>Este conector solo puede utilizarse en las regiones de Amazon Web Services en las que se admiten tanto [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html) como [AWS IoT Analytics](https://docs.aws.amazon.com/general/latest/gr/iot-analytics.html).
+ <a name="conn-iot-analytics-req-ita-config"></a>Se crean y configuran todas AWS IoT Analytics las entidades y flujos de trabajo 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](https://docs.aws.amazon.com/iotanalytics/latest/userguide/getting-started.html) o de la [consola](https://docs.aws.amazon.com/iotanalytics/latest/userguide/quickstart.html) en la *Guía de usuario de AWS IoT Analytics *.
**nota**  
 AWS IoT Analytics Los canales de destino deben usar la misma cuenta y estar en la Región de AWS misma ubicación que este conector.
+ <a name="conn-iot-analytics-req-iam-policy"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción de `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.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "iotanalytics:BatchPutMessage"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_1_name",
      "arn:aws:iotanalytics:us-east-1:123456789012:channel/channel_2_name"
              ]
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------

## Parameters
<a name="iot-analytics-connector-param"></a>

`MemorySize`  
La cantidad de memoria (en KB) para asignar a este conector.  
Nombre para mostrar en la AWS IoT consola: **tamaño de la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`PublishRegion`  
El Región de AWS lugar en el que se crean tus AWS IoT Analytics canales. Use la misma región que el conector.  
También debe coincidir con la región para los canales que se especifican en el [rol de grupo](#iot-analytics-connector-req).
Mostrar el nombre en la AWS IoT consola: **región de publicación**  
Obligatorio: `false`  
Tipo: `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 AWS IoT consola: **intervalo de publicación**  
Obligatorio: `false`  
Tipo: `string`  
Valor predeterminado: `1`  
Patrón válido: `$|^[0-9]+$`

`IotAnalyticsMaxActiveChannels`  
El número máximo de AWS IoT Analytics canales que el conector observa activamente. 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 AWS IoT consola: **número máximo de canales activos**  
Obligatorio: `false`  
Tipo: `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 AWS IoT consola: comportamiento de **caída de colas**  
Obligatorio: `false`  
Tipo: `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 AWS IoT consola: **tamaño máximo de cola** por canal  
Obligatorio: `false`  
Tipo: `string`  
Valor predeterminado: `2048`  
Patrón válido: `^$|^[1-9][0-9]*$`

`IotAnalyticsBatchSizePerChannel`  
El número máximo de mensajes que se pueden enviar a un AWS IoT Analytics canal en una solicitud por lotes. Debe ser mayor que 0.  
Mostrar nombre en la AWS IoT consola: **número máximo de mensajes por lote por canal**  
Obligatorio: `false`  
Tipo: `string`  
Valor predeterminado: `5`  
Patrón válido: `^$|^[1-9][0-9]*$`

`IotAnalyticsDefaultChannelName`  
El nombre del AWS IoT Analytics canal que utiliza este conector para los mensajes que se envían a un tema de entrada definido por el cliente.  
Nombre para mostrar en la AWS IoT consola: nombre del canal **predeterminado**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^[a-zA-Z0-9_]$`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

### Ejemplo de creación de conector (AWS CLI)
<a name="iot-analytics-connector-create"></a>

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](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="iot-analytics-connector-data-input"></a>

Este conector acepta datos sobre temas de MQTT predefinidos y definidos por el cliente. Los publicadores pueden ser dispositivos de 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](#iot-analytics-connector-data-input-json) 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](connectors.md#connectors-inputs-outputs).

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](#iot-analytics-connector-req).

**Filtro de temas:** `iotanalytics/channels/+/messages/put`  <a name="iot-analytics-connector-data-input-json"></a>
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 comprueba que IDs son únicos para cada mensaje de la `BatchPutMessage` solicitud saliente a la que se enví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`  
Tipo: `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`  
Tipo: `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 `BatchPutMessage` los requisitos de la API:  
+ 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**  
Ninguna.

**Filtro de temas:** `#`  
Utilice este tema para enviar cualquier formato de mensaje al canal predeterminado. Esto resulta especialmente útil cuando los dispositivos de 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](#iot-analytics-connector-data-input-json) 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 para cumplir con los requisitos de la `BatchPutMessage` API:  
+ 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**  
Ninguna.

## Datos de salida
<a name="iot-analytics-connector-data-output"></a>

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

<a name="topic-filter"></a>**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"
}
```
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 SDK gestiona el retroceso exponencial. 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
<a name="iot-analytics-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#iot-analytics-connector-req) para el conector.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#iot-analytics-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Agregue el conector y configure sus [parámetros](#iot-analytics-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#iot-analytics-connector-data-input) y enviar [datos de salida](#iot-analytics-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utiliza esta suscripción para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="iot-analytics-connector-usage-example"></a>

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 de las s
<a name="iot-analytics-connector-limits"></a>

Este conector está sujeto a los siguientes límites.
+ Todos los límites impuestos AWS SDK para Python (Boto3) por la AWS IoT Analytics [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotanalytics.html#IoTAnalytics.Client.batch_put_message](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotanalytics.html#IoTAnalytics.Client.batch_put_message)acción.
+ Todas las cuotas impuestas por la AWS IoT Analytics [ BatchPutMessage](https://docs.aws.amazon.com/iotanalytics/latest/userguide/api.html#cli-iotanalytics-batchputmessage)API. Para obtener más información, consulte [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/iot-analytics.html#limits_iot_analytics) AWS IoT Analytics en *Referencia general de AWS*.
  + 100 000 mensajes por segundo por canal.
  + 100 mensajes por lote.
  + 128 KB por mensaje.

  Esta API usa nombres de canales (no de canales ARNs), por lo que no se admite el envío de datos a canales entre regiones o cuentas múltiples.
+ Todas las cuotas impuestas por el Núcleo. AWS IoT Greengrass Para obtener más información, consulte [Service Quotas](https://docs.aws.amazon.com/general/latest/gr/greengrass.html#limits_greengrass) para ver el AWS IoT Greengrass núcleo de *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
<a name="iot-analytics-connector-license"></a>

El conector de IoT Analytics incluye las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="iot-analytics-connector-changelog"></a>

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 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="iot-analytics-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+  [¿Qué es AWS IoT Analytics?](https://docs.aws.amazon.com/iotanalytics/latest/userguide/welcome.html) en la *Guía AWS IoT Analytics del usuario*

# Conector del adaptador de protocolo IP Ethernet IoT
<a name="ethernet-ip-connector"></a>

El [conector](connectors.md) del adaptador de protocolo IP Ethernet IoT recopila datos de dispositivos locales mediante el protocolo EtherNet/IP. Puede utilizar este conector para recopilar datos de varios servidores y publicarlos en un flujo de mensajes de `StreamManager`. 

También puede usar este conector con el conector de IoT SiteWise y su SiteWise puerta de enlace de IoT. Su puerta de enlace debe proporcionar la configuración del conector. Para obtener más información, consulte [Configurar una fuente EtherNet/IP (EIP) en la guía del usuario](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-eip-source.html) de IoT. SiteWise 

**nota**  
Este conector se ejecuta en modo [sin aislamiento de contenedores](lambda-group-config.md#no-container-mode), por lo que puede implementarlo en un AWS IoT Greengrass grupo que se ejecute en un contenedor de Docker. 

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 2 (recomendado) | `arn:aws:greengrass:region::/connectors/IoTEIPProtocolAdaptor/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/IoTEIPProtocolAdaptor/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#ethernet-ip-connector-changelog).

## Requisitos
<a name="ethernet-ip-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 1 and 2 ]
+ AWS IoT Greengrass Software básico, versión 1.10.2 o posterior.
+ El administrador de transmisiones está activado en el AWS IoT Greengrass grupo.
+ Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno `PATH`.
+ Un mínimo de 256 MB de RAM adicionales. Este requisito se suma a los requisitos de memoria AWS IoT Greengrass básica.

**nota**  
 Este conector solo está disponible en las siguientes regiones:   
cn-north-1
ap-southeast-1
ap-southeast-2
eu-central-1
eu-west-1
us-east-1
us-west-2

------

## Parámetros de conector
<a name="ethernet-ip-connector-param"></a>

Este conector admite los siguientes parámetros:

`LocalStoragePath`  
El directorio del AWS IoT Greengrass host en el que el SiteWise conector de IoT puede escribir datos persistentes. El directorio predeterminado es `/var/sitewise`.  
Nombre para mostrar en la AWS IoT consola: **ruta de almacenamiento local**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|\/.`

`ProtocolAdapterConfiguration`  
El conjunto de configuraciones de recopiladores EtherNet/IP desde las que el conector recopila datos o a las que se conecta. Puede ser una lista vacía.  
Nombre para mostrar en la AWS IoT consola: **Configuración del adaptador de protocolo**  
Obligatorio: `true`  
Tipo: una cadena JSON bien formada que define el conjunto de configuraciones de comentarios admitidas.

 A continuación, se muestra un ejemplo de una `ProtocolAdapterConfiguration`. 

```
{
    "sources": [
        {
            "type": "EIPSource",
            "name": "TestSource",
            "endpoint": {
                "ipAddress": "52.89.2.42",
                "port": 44818
            },
            "destination": {
                "type": "StreamManager",
                "streamName": "MyOutput_Stream",
                "streamBufferSize": 10
            },
            "destinationPathPrefix": "EIPSource_Prefix",
            "propertyGroups": [
                {
                    "name": "DriveTemperatures",
                    "scanMode": {
                        "type": "POLL",
                        "rate": 10000
                    },
                    "tagPathDefinitions": [
                        {
                            "type": "EIPTagPath",
                            "path": "arrayREAL[0]",
                            "dstDataType": "double"
                        }
                    ]
                }
            ]
        }
    ]
}
```

### Ejemplo de creación de conector (AWS CLI)
<a name="eip-connector-create"></a>

El siguiente comando CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector Adaptador de protocolo IP Ethernet IoT.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version 
'{
    "Connectors": [
        {
            "Id": "MyIoTEIPProtocolConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTEIPProtocolAdaptor/versions/2",
            "Parameters": {
                "ProtocolAdaptorConfiguration": "{ \"sources\": [{ \"type\": \"EIPSource\", \"name\": \"Source1\", \"endpoint\": { \"ipAddress\": \"54.245.77.218\", \"port\": 44818 }, \"destinationPathPrefix\": \"EIPConnector_Prefix\", \"propertyGroups\": [{ \"name\": \"Values\", \"scanMode\": { \"type\": \"POLL\", \"rate\": 2000 }, \"tagPathDefinitions\": [{ \"type\": \"EIPTagPath\", \"path\": \"arrayREAL[0]\", \"dstDataType\": \"double\" }]}]}]}",
                "LocalStoragePath": "/var/MyIoTEIPProtocolConnectorState"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

## Datos de entrada
<a name="ethernet-ip-connector-data-input"></a>

Este conector no acepta mensajes MQTT como datos de entrada.

## Datos de salida
<a name="ethernet-ip-connector-data-output"></a>

Este conector publica datos en `StreamManager`. Debe configurar el flujo de mensajes de destino. Los mensajes de salida tienen la siguiente estructura:

```
{
    "alias": "string",
    "messages": [
        {
            "name": "string",
            "value": boolean|double|integer|string,
            "timestamp": number,
            "quality": "string"
        }
    ]
}
```

## Licencias
<a name="ethernet-ip-connector-license"></a>

El conector Adaptador de protocolo IP Ethernet IoT incluye el siguiente software y licencias de terceros:
+ [Cliente EtherNet/IP](https://github.com/digitalpetri/ethernet-ip/blob/master/LICENSE)
+ [MapDB](https://github.com/jankotek/mapdb/blob/master/LICENSE.txt)
+ [Elsa](https://github.com/jankotek/elsa/blob/master/LICENSE.txt)

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="ethernet-ip-connector-changelog"></a>

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


| Versión | Cambios | Date | 
| --- | --- | --- | 
| 2 | Esta versión contiene correcciones de errores. | 23 de diciembre de 2021 | 
| 1 | Versión inicial. | 15 de diciembre de 2020 | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="ethernet-ip-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# SiteWise Conector IoT
<a name="iot-sitewise-connector"></a>

El SiteWise conector IoT envía datos de dispositivos y equipos locales a las propiedades de los activos AWS IoT SiteWise. Puede utilizar este conector para recopilar datos de varios servidores OPC-UA y publicarlos en el IoT. SiteWise El conector envía los datos a las propiedades de los activos en la región Cuenta de AWS y en la actual.

**nota**  
 SiteWise El IoT es un servicio totalmente gestionado que recopila, procesa y visualiza datos de dispositivos y equipos industriales. Puede configurar las propiedades de recurso que procesan los datos sin procesar enviados desde este conector a las propiedades de medición de sus recursos. Por ejemplo, puede definir una propiedad de transformación que convierta los puntos de datos en temperatura Celsius de un dispositivo a Fahrenheit, o puede definir una propiedad métrica que calcule la temperatura media por hora. Para obtener más información, consulte [¿Qué es AWS IoT SiteWise?](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/) en la *Guía del usuario de AWS IoT SiteWise *.

El conector envía datos al IoT SiteWise con las rutas de flujo de datos OPC-UA enviadas desde los servidores OPC-UA. Por ejemplo, la ruta del flujo de datos `/company/windfarm/3/turbine/7/temperature` podría representar el sensor de temperatura de la turbina n.º 7 en el parque eólico n.º 3. Si el AWS IoT Greengrass núcleo pierde la conexión a Internet, el conector almacena los datos en caché hasta que pueda conectarse correctamente a Internet. Nube de AWS Puede configurar el tamaño máximo del búfer de disco utilizado para el almacenamiento de datos en la caché. Si el tamaño de la caché excede el tamaño máximo del búfer de disco, el conector descartará los datos más antiguos de la cola.

Después de configurar e implementar el SiteWise conector de IoT, puede agregar una puerta de enlace y fuentes OPC-UA en la consola de [IoT SiteWise ](https://console.aws.amazon.com/iotsitewise/). Al configurar una fuente en la consola, puede filtrar o prefijar las rutas de flujo de datos OPC-UA enviadas por el conector IoT. SiteWise Para obtener instrucciones sobre cómo terminar de configurar la gateway y los orígenes, consulte [Añadir la gateway](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-gateway.html#add-gateway) en la *Guía del usuario de AWS IoT SiteWise *.

 SiteWise El IoT recibe datos únicamente de los flujos de datos que usted ha asignado a las propiedades de medición de los SiteWise activos de IoT. Para asignar secuencias de datos a propiedades de recurso, puede establecer el alias de una propiedad para que sea equivalente a una ruta de flujo de datos OPC-UA. Para obtener más información sobre cómo definir modelos de recursos y crear recursos, consulte [Crear modelos de recursos industriales](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-asset-models) en la * Guía del usuario de AWS IoT SiteWise *.

**Notas**  
Puedes usar el administrador de transmisiones para cargar datos al IoT SiteWise desde fuentes distintas a los servidores OPC-UA. El administrador de flujos también ofrece soporte personalizable para la gestión de la persistencia y el ancho de banda. Para obtener más información, consulte [Gestione los flujos de datos en el AWS IoT Greengrass núcleo](stream-manager.md).  
Este conector se ejecuta en modo [sin aislamiento de contenedores](lambda-group-config.md#no-container-mode), por lo que puede implementarlo en un grupo Greengrass que se ejecute en un contenedor de Docker.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 12 (recomendado) | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/12` | 
| 11 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/11` | 
| 10 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/10` | 
| 9 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/9` | 
| 8 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/8` | 
| 7 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/7` | 
| 6 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/6` | 
| 5 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#iot-sitewise-connector-changelog).

## Requisitos
<a name="iot-sitewise-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 9, 10, 11, and 12 ]

**importante**  
[Esta versión presenta nuevos requisitos: el software AWS IoT Greengrass básico v1.10.2 y el administrador de transmisiones.](stream-manager.md)
+ AWS IoT Greengrass Software básico v1.10.2.
+ <a name="conn-sitewise-req-stream-manager"></a>[Administrador de secuencias](stream-manager.md) habilitado en el grupo de Greengrass.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno PATH.
+ <a name="conn-sitewise-req-regions"></a>Este conector solo se puede utilizar en las regiones de Amazon Web Services en las que se admiten [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)tanto el [IoT como el Internet de SiteWise las Cosas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html).
+ <a name="conn-sitewise-req-policy-v3"></a>Una política de IAM añadida al rol de grupo de Greengrass. Esta función permite al AWS IoT Greengrass grupo acceder a la `iotsitewise:BatchPutAssetPropertyValue` acción en el activo raíz de destino y sus elementos secundarios, como se muestra en el siguiente ejemplo. Puede eliminarlo `Condition` de la política para permitir que el conector acceda a todos sus SiteWise activos de IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

------
#### [ Versions 6, 7, and 8 ]

**importante**  
[Esta versión presenta nuevos requisitos: el software AWS IoT Greengrass básico v1.10.0 y el administrador de transmisiones.](stream-manager.md)
+ <a name="conn-sitewise-req-ggc-1010"></a>AWS IoT Greengrass Software básico v1.10.0.
+ <a name="conn-sitewise-req-stream-manager"></a>[Administrador de secuencias](stream-manager.md) habilitado en el grupo de Greengrass.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno PATH.
+ <a name="conn-sitewise-req-regions"></a>Este conector solo se puede utilizar en las regiones de Amazon Web Services en las que se admiten [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)tanto el [IoT como el Internet de SiteWise las Cosas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html).
+ <a name="conn-sitewise-req-policy-v3"></a>Una política de IAM añadida al rol de grupo de Greengrass. Esta función permite al AWS IoT Greengrass grupo acceder a la `iotsitewise:BatchPutAssetPropertyValue` acción en el activo raíz de destino y sus elementos secundarios, como se muestra en el siguiente ejemplo. Puede eliminarlo `Condition` de la política para permitir que el conector acceda a todos sus SiteWise activos de IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

------
#### [ Version 5 ]
+ <a name="conn-sitewise-req-ggc-194"></a>AWS IoT Greengrass Software básico, versión 1.9.4.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno PATH.
+ <a name="conn-sitewise-req-regions"></a>Este conector solo se puede utilizar en las regiones de Amazon Web Services en las que se admiten [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)tanto el [IoT como el Internet de SiteWise las Cosas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html).
+ <a name="conn-sitewise-req-policy-v3"></a>Una política de IAM añadida al rol de grupo de Greengrass. Esta función permite al AWS IoT Greengrass grupo acceder a la `iotsitewise:BatchPutAssetPropertyValue` acción en el activo raíz de destino y sus elementos secundarios, como se muestra en el siguiente ejemplo. Puede eliminarlo `Condition` de la política para permitir que el conector acceda a todos sus SiteWise activos de IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

------
#### [ Version 4 ]
+ <a name="conn-sitewise-req-ggc-1010"></a>AWS IoT Greengrass Software básico, versión 1.10.0.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno PATH.
+ <a name="conn-sitewise-req-regions"></a>Este conector solo se puede utilizar en las regiones de Amazon Web Services en las que se admiten [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)tanto el [IoT como el Internet de SiteWise las Cosas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html).
+ <a name="conn-sitewise-req-policy-v3"></a>Una política de IAM añadida al rol de grupo de Greengrass. Esta función permite al AWS IoT Greengrass grupo acceder a la `iotsitewise:BatchPutAssetPropertyValue` acción en el activo raíz de destino y sus elementos secundarios, como se muestra en el siguiente ejemplo. Puede eliminarlo `Condition` de la política para permitir que el conector acceda a todos sus SiteWise activos de IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

------
#### [ Version 3 ]
+ <a name="conn-sitewise-req-ggc-194"></a>AWS IoT Greengrass Software básico, versión 1.9.4.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno PATH.
+ <a name="conn-sitewise-req-regions"></a>Este conector solo se puede utilizar en las regiones de Amazon Web Services en las que se admiten [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)tanto el [IoT como el Internet de SiteWise las Cosas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html).
+ <a name="conn-sitewise-req-policy-v3"></a>Una política de IAM añadida al rol de grupo de Greengrass. Esta función permite al AWS IoT Greengrass grupo acceder a la `iotsitewise:BatchPutAssetPropertyValue` acción en el activo raíz de destino y sus elementos secundarios, como se muestra en el siguiente ejemplo. Puede eliminarlo `Condition` de la política para permitir que el conector acceda a todos sus SiteWise activos de IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          }
      ]
  }
  ```

------

  Para obtener más información, consulte [Adición y eliminación de políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

------
#### [ Versions 1 and 2 ]
+ <a name="conn-sitewise-req-ggc-194"></a>AWS IoT Greengrass Software básico, versión 1.9.4.
+ <a name="conn-sitewise-req-java-8"></a>Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno PATH.
+ <a name="conn-sitewise-req-regions"></a>Este conector solo se puede utilizar en las regiones de Amazon Web Services en las que se admiten [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)tanto el [IoT como el Internet de SiteWise las Cosas](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html).
+ <a name="conn-sitewise-req-policy-v1"></a>Se agregó una política de IAM al rol del grupo Greengrass que permite el acceso AWS IoT Core y `iotsitewise:BatchPutAssetPropertyValue` la acción en el activo raíz de destino y sus elementos secundarios, como se muestra en el siguiente ejemplo. Puede eliminarlo `Condition` de la política para permitir que el conector acceda a todos sus SiteWise activos de IoT.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
               "Effect": "Allow",
               "Action": "iotsitewise:BatchPutAssetPropertyValue",
               "Resource": "*",
               "Condition": {
                   "StringLike": {
                       "iotsitewise:assetHierarchyPath": [
                           "/root node asset ID",
                           "/root node asset ID/*"
                       ]
                   }
               }
          },
          {
              "Effect": "Allow",
              "Action": [
                   "iot:Connect",
                   "iot:DescribeEndpoint",
                   "iot:Publish",
                   "iot:Receive",
                   "iot:Subscribe"
              ],
              "Resource": "*"
          }
      ]
  }
  ```

------

  Para obtener más información, consulta [Adición y eliminación de permisos de identidad de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) en la *Guía del usuario de IAM*.

------

## Parameters
<a name="iot-sitewise-connector-param"></a>

------
#### [ Versions 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, and 12 ]<a name="conn-sitewise-params-v2"></a>

`SiteWiseLocalStoragePath`  
El directorio del AWS IoT Greengrass host en el que el SiteWise conector de IoT puede escribir datos persistentes. El valor predeterminado es `/var/sitewise`.  
Nombre para mostrar en la AWS IoT consola: **ruta de almacenamiento local**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|\/.`

`AWSSecretsArnList`  
Una lista de secretos, cada uno de AWS Secrets Manager los cuales contiene un par clave-valor de nombre de usuario y contraseña del OPC-UA. Cada secreto debe ser un secreto de tipo par clave-valor.  
Nombre para mostrar en la AWS IoT consola: **lista** de cuatro secretos del OPC-UA ARNs username/password   
Obligatorio: `false`  
Tipo: `JsonArrayOfStrings`  
Patrón válido: `\[( ?,? ?\"(arn:(aws(-[a-z]+)*):secretsmanager:[a-z0-9\\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\\\]+\/)*[a-zA-Z0-9\/_+=,.@\\-]+-[a-zA-Z0-9]+)*\")*\]`

`MaximumBufferSize`  
El tamaño máximo en GB para el uso SiteWise del disco de IoT. El valor predeterminado es 10 GB.  
Nombre para mostrar en la AWS IoT consola: **tamaño máximo del búfer de disco**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|[0-9]+`

------
#### [ Version 1 ]<a name="conn-sitewise-params-v1"></a>

`SiteWiseLocalStoragePath`  
El directorio del AWS IoT Greengrass host en el que el SiteWise conector de IoT puede escribir datos persistentes. El valor predeterminado es `/var/sitewise`.  
Nombre para mostrar en la AWS IoT consola: **ruta de almacenamiento local**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|\/.`

`SiteWiseOpcuaUserIdentityTokenSecretArn`  
El secreto contiene el AWS Secrets Manager par clave-valor del nombre de usuario y la contraseña del OPC-UA. Este secreto debe ser un secreto de tipo par clave-valor.  
Mostrar el nombre en la AWS IoT consola: **ARN del** secreto OPC-UA username/password   
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|arn:(aws(-[a-z]+)*):secretsmanager:[a-z0-9\\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\\\]+/)*[a-zA-Z0-9/_+=,.@\\-]+-[a-zA-Z0-9]+`

`SiteWiseOpcuaUserIdentityTokenSecretArn-ResourceId`  
El recurso secreto del AWS IoT Greengrass grupo que hace referencia a un nombre de usuario y contraseña secretos del OPC-UA.  
Nombre para mostrar en la AWS IoT consola: recurso secreto **OPC-UA username/password **  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|.+`

`MaximumBufferSize`  
El tamaño máximo en GB para el uso SiteWise del disco de IoT. El valor predeterminado es 10 GB.  
Nombre para mostrar en la AWS IoT consola: **tamaño máximo del búfer de disco**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|[0-9]+`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="iot-sitewise-connector-create"></a>

El siguiente AWS CLI comando crea una `ConnectorDefinition` con una versión inicial que contiene el SiteWise conector IoT.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyIoTSiteWiseConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/IoTSiteWise/versions/11"
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="iot-sitewise-connector-data-input"></a>

Este conector no acepta mensajes MQTT como datos de entrada.

## Datos de salida
<a name="iot-sitewise-connector-data-output"></a>

Este conector no publica los mensajes MQTT como datos de salida.

## Límites de las s
<a name="iot-sitewise-connector-limits"></a>

Este conector está sujeto a los siguientes límites impuestos por el IoT SiteWise, incluidos los siguientes. Para obtener más información, consulte [puntos de conexión y cuotas de AWS IoT SiteWise](https://docs.aws.amazon.com/general/latest/gr/iot-sitewise.html) en la *Referencia general de AWS*. 
+ Cantidad máxima de puertas de enlace por Cuenta de AWS.
+ Cantidad máxima de orígenes OPC-UA por gateway.
+ Velocidad máxima de puntos de datos timestamp-quality-value (TQV) almacenados por. Cuenta de AWS
+ Tasa máxima de puntos de datos de TQV almacenados por propiedad de recurso.

## Licencias
<a name="iot-sitewise-connector-license"></a>

------
#### [ Version 9, 10, 11, and 12 ]

El SiteWise conector IoT incluye el siguiente software o licencia de terceros:
+  [MapDB](https://github.com/jankotek/mapdb/blob/master/LICENSE.txt) 
+  [Elsa](https://github.com/jankotek/elsa/blob/master/LICENSE.txt) 
+ [Eclipse Milo](https://github.com/eclipse/milo/blob/maintenance/0.2/LICENSE)

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

------
#### [ Versions 6, 7, and 8 ]

El SiteWise conector IoT incluye el siguiente software o licencia de terceros:
+ [Milo](https://github.com/eclipse/milo/) / EDL 1.0

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

------
#### [ Versions 1, 2, 3, 4, and 5 ]

El SiteWise conector IoT incluye el siguiente software o licencia de terceros:
+ [Milo](https://github.com/eclipse/milo/) / EDL 1.0
+ [Chronicle-Queue](https://github.com/OpenHFT/Chronicle-Queue) / Apache License 2.0

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

------

## Registros de cambios
<a name="iot-sitewise-connector-changelog"></a>

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


| Versión | Cambios | Date | 
| --- | --- | --- | 
|  12  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/iot-sitewise-connector.html)  |  22 de diciembre de 2021  | 
|  11  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/iot-sitewise-connector.html)  |  24 de marzo de 2021  | 
|  10  |  `StreamManager` configurado para mejorar el manejo cuando la conexión de origen se pierde y se restablece. Esta versión también acepta valores OPC-UA con un signo `ServerTimestamp` cuando no hay un `SourceTimestamp` disponible.  |  22 de enero de 2021  | 
|  9  |  Se ha lanzado la compatibilidad con los destinos personalizados de la transmisión `StreamManager` de Greengrass, la banda muerta OPC-UA, el modo de escaneado personalizado y la velocidad de escaneado personalizada. También incluye un rendimiento mejorado durante las actualizaciones de configuración realizadas desde la SiteWise puerta de enlace de IoT.  |  15 de diciembre de 2020  | 
|  8  |  Estabilidad mejorada cuando el conector experimenta una conectividad de red intermitente.  |  19 de noviembre de 2020  | 
|  7  |  Se ha corregido un problema con las métricas de la puerta de enlace.  |  14 de agosto de 2020  | 
|  6  |  Se agregó soporte para CloudWatch métricas y detección automática de nuevas etiquetas OPC-UA. Esta versión requiere el [administrador de transmisiones](stream-manager.md) y el software AWS IoT Greengrass Core v1.10.0 o superior.  |  29 de abril de 2020  | 
|  5  |  Se ha corregido un problema de compatibilidad con la versión 1.9.4 del software AWS IoT Greengrass Core.  |  12 de febrero de 2020  | 
|  4  |  Se ha corregido un problema con la reconexión del servidor OPC-UA.  |  7 de febrero de 2020  | 
|  3  |  Requisito de permisos `iot:*` eliminado.  |  17 de diciembre de 2019  | 
|  2  |  Se ha añadido compatibilidad con varios recursos de secretos de OPC-UA.  |  10 de diciembre de 2019  | 
|  1  |  Versión inicial.  |  2 de diciembre de 2019  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="iot-sitewise-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ Consulte los siguientes temas en la *Guía del usuario de AWS IoT SiteWise *:
  + [¿Qué es? AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/)
  + [Uso de una puerta de enlace](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/gateway-connector.html)
  + [ CloudWatch Métricas de Gateway](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/monitor-cloudwatch-metrics.html#gateway-metrics)
  + [Solución de problemas de una SiteWise puerta de enlace de IoT](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/troubleshooting.html#troubleshooting-gateway)

# Kinesis Firehose
<a name="kinesis-firehose-connector"></a>

El [conector](connectors.md) Kinesis Firehose publica los datos a través de una transmisión de entrega de Amazon Data Firehose a destinos como Amazon S3, Amazon Redshift o Amazon Service. OpenSearch 

Este conector es un productor de datos de un flujo de entrega de Kinesis. Recibe los datos de entrada en un tema de MQTT y envía los datos a una transmisión de entrega especificada. La transmisión de entrega, a continuación, envía el registro de datos al destino configurado (por ejemplo, un bucket de S3).

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#kinesis-firehose-connector-changelog).

## Requisitos
<a name="kinesis-firehose-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 4 - 5 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software principal, versión 1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="req-kinesis-firehose-stream"></a>Una secuencia de entrega de Kinesis configurada. Para obtener más información, consulte la sección sobre [Creación de una secuencia de entrega de Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) en la *Guía para desarrolladores de Amazon Kinesis Firehose*.
+ <a name="req-kinesis-firehose-iam-policy-v2"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir las acciones `firehose:PutRecord` y `firehose:PutRecordBatch` en la transmisión de entrega de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
          {
              "Sid":"Stmt1528133056761",
              "Action":[
                  "firehose:PutRecord",
                  "firehose:PutRecordBatch"
              ],
              "Effect":"Allow",
              "Resource":[
              "arn:aws:firehose:us-east-1:123456789012:deliverystream/stream-name"
              ]
          }
      ]
   }
  ```

------

  Este conector le permite anular dinámicamente la transmisión de entrega predeterminada en la carga de mensajes de entrada. Si su implementación utiliza esta característica, la política de IAM debe incluir todas las transmisiones de destino como recursos. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1)

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------
#### [ Versions 2 - 3 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="req-kinesis-firehose-stream"></a>Una secuencia de entrega de Kinesis configurada. Para obtener más información, consulte la sección sobre [Creación de una secuencia de entrega de Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) en la *Guía para desarrolladores de Amazon Kinesis Firehose*.
+ <a name="req-kinesis-firehose-iam-policy-v2"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir las acciones `firehose:PutRecord` y `firehose:PutRecordBatch` en la transmisión de entrega de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
          {
              "Sid":"Stmt1528133056761",
              "Action":[
                  "firehose:PutRecord",
                  "firehose:PutRecordBatch"
              ],
              "Effect":"Allow",
              "Resource":[
              "arn:aws:firehose:us-east-1:123456789012:deliverystream/stream-name"
              ]
          }
      ]
   }
  ```

------

  Este conector le permite anular dinámicamente la transmisión de entrega predeterminada en la carga de mensajes de entrada. Si su implementación utiliza esta característica, la política de IAM debe incluir todas las transmisiones de destino como recursos. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1)

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------
#### [ Version 1 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="req-kinesis-firehose-stream"></a>Una secuencia de entrega de Kinesis configurada. Para obtener más información, consulte la sección sobre [Creación de una secuencia de entrega de Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) en la *Guía para desarrolladores de Amazon Kinesis Firehose*.
+ El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción `firehose:PutRecord` en la transmisión de entrega de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
          {
              "Sid":"Stmt1528133056761",
              "Action":[
                  "firehose:PutRecord"
              ],
              "Effect":"Allow",
              "Resource":[
              "arn:aws:firehose:us-east-1:123456789012:deliverystream/stream-name"
              ]
          }
      ]
   }
  ```

------

  <a name="role-resources"></a>Este conector le permite anular dinámicamente la transmisión de entrega predeterminada en la carga de mensajes de entrada. Si su implementación utiliza esta característica, la política de IAM debe incluir todas las transmisiones de destino como recursos. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1)

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------

## Parámetros de conector
<a name="kinesis-firehose-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Versions 5 ]

`DefaultDeliveryStreamArn`  <a name="kinesis-firehose-DefaultDeliveryStreamArn"></a>
El ARN de la transmisión de entrega predeterminada al que enviar los datos. La transmisión de destino se puede anular mediante la propiedad `delivery_stream_arn` en la carga de mensajes de entrada.  
El rol de grupo debe permitir las acciones adecuadas en todas las transmisiones de entrega de destino. Para obtener más información, consulte [Requisitos](#kinesis-firehose-connector-req).
Nombre para mostrar en la AWS IoT consola: ARN del **flujo de entrega predeterminado**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`

`DeliveryStreamQueueSize`  <a name="kinesis-firehose-DeliveryStreamQueueSize"></a>
El número máximo de registros que mantener en memoria antes de rechazar los nuevos registros de la misma secuencia de entrega. El valor mínimo es 2000.  
Nombre para mostrar en la AWS IoT consola: **número máximo de registros para almacenar en búfer (por transmisión**)  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^([2-9]\\d{3}|[1-9]\\d{4,})$`

`MemorySize`  <a name="kinesis-firehose-MemorySize"></a>
La cantidad de memoria (en KB) para asignar a este conector.  
Nombre para mostrar en la AWS IoT consola: **tamaño de memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`PublishInterval`  <a name="kinesis-firehose-PublishInterval"></a>
El intervalo (en segundos) para publicar registros en Firehose. Para desactivar el procesamiento por lotes, establezca este valor en 0.  
Nombre para mostrar en la AWS IoT consola: **intervalo de publicación**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `0 - 900`  
Patrón válido: `[0-9]|[1-9]\\d|[1-9]\\d\\d|900`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

------
#### [ Versions 2 - 4 ]

`DefaultDeliveryStreamArn`  <a name="kinesis-firehose-DefaultDeliveryStreamArn"></a>
El ARN de la transmisión de entrega predeterminada al que enviar los datos. La transmisión de destino se puede anular mediante la propiedad `delivery_stream_arn` en la carga de mensajes de entrada.  
El rol de grupo debe permitir las acciones adecuadas en todas las transmisiones de entrega de destino. Para obtener más información, consulte [Requisitos](#kinesis-firehose-connector-req).
Nombre para mostrar en la AWS IoT consola: ARN del **flujo de entrega predeterminado**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`

`DeliveryStreamQueueSize`  <a name="kinesis-firehose-DeliveryStreamQueueSize"></a>
El número máximo de registros que mantener en memoria antes de rechazar los nuevos registros de la misma secuencia de entrega. El valor mínimo es 2000.  
Nombre para mostrar en la AWS IoT consola: **número máximo de registros para almacenar en búfer (por transmisión**)  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^([2-9]\\d{3}|[1-9]\\d{4,})$`

`MemorySize`  <a name="kinesis-firehose-MemorySize"></a>
La cantidad de memoria (en KB) para asignar a este conector.  
Nombre para mostrar en la AWS IoT consola: **tamaño de memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`PublishInterval`  <a name="kinesis-firehose-PublishInterval"></a>
El intervalo (en segundos) para publicar registros en Firehose. Para desactivar el procesamiento por lotes, establezca este valor en 0.  
Nombre para mostrar en la AWS IoT consola: **intervalo de publicación**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `0 - 900`  
Patrón válido: `[0-9]|[1-9]\\d|[1-9]\\d\\d|900`

------
#### [ Version 1 ]

`DefaultDeliveryStreamArn`  <a name="kinesis-firehose-DefaultDeliveryStreamArn"></a>
El ARN de la transmisión de entrega predeterminada al que enviar los datos. La transmisión de destino se puede anular mediante la propiedad `delivery_stream_arn` en la carga de mensajes de entrada.  
El rol de grupo debe permitir las acciones adecuadas en todas las transmisiones de entrega de destino. Para obtener más información, consulte [Requisitos](#kinesis-firehose-connector-req).
Nombre para mostrar en la AWS IoT consola: ARN del **flujo de entrega predeterminado**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`

------

**Example**  <a name="kinesis-firehose-connector-create"></a>
**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.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyKinesisFirehoseConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/5",
            "Parameters": {
                "DefaultDeliveryStreamArn": "arn:aws:firehose:region:account-id:deliverystream/stream-name",
                "DeliveryStreamQueueSize": "5000",
                "MemorySize": "65535",
                "PublishInterval": "10", 
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="kinesis-firehose-connector-data-input"></a>

Este conector acepta el contenido de transmisión en los temas de MQTT y, a continuación, envía el contenido a la transmisión de entrega de destino. Acepta dos tipos de datos de entrada:
+ Datos JSON en el tema `kinesisfirehose/message`.
+ Datos binarios en el tema `kinesisfirehose/message/binary/#`.

------
#### [ Versions 2 - 5 ]<a name="kinesis-firehose-input-data"></a>

**Filtro de temas:** `kinesisfirehose/message`  
Consulte este tema para enviar un mensaje que contenga datos JSON.    
**Propiedades de mensajes**    
`request`  
Los datos para enviar a la transmisión de entrega y a la transmisión de entrega de destino, si no es la transmisión predeterminada.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`data`  
Los datos que enviar a la transmisión de entrega.  
Obligatorio: `true`  
Tipo: `string`  
`delivery_stream_arn`  
El ARN de la transmisión de entrega de Kinesis de destino. Incluya esta propiedad para anular la transmisión de entrega predeterminada.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`  
`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 no utiliza esta característica, puede omitir esta propiedad o especificar una cadena vacía.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `.*`  
**Ejemplo de entrada**  

```
{
     "request": {
        "delivery_stream_arn": "arn:aws:firehose:region:account-id:deliverystream/stream2-name",
        "data": "Data to send to the delivery stream."
     },
     "id": "request123"
}
```
 

**Filtro de temas:** `kinesisfirehose/message/binary/#`  
Consulte este tema para enviar un mensaje que contenga datos binarios. El conector no analiza los datos binarios. Los datos se transmiten tal cual.  
Para asignar la solicitud de entrada a una respuesta de salida, sustituya el comodín `#` en el tema del mensaje con un ID de solicitud arbitrario. Por ejemplo, si publica un mensaje en `kinesisfirehose/message/binary/request123`, la propiedad `id` en el objeto de respuesta se establece en `request123`.  
Si no desea asignar una solicitud a una respuesta, puede publicar sus mensajes en `kinesisfirehose/message/binary/`. Asegúrese de incluir la barra diagonal.

------
#### [ Version 1 ]<a name="kinesis-firehose-input-data"></a>

**Filtro de temas:** `kinesisfirehose/message`  
Consulte este tema para enviar un mensaje que contenga datos JSON.    
**Propiedades de mensajes**    
`request`  
Los datos para enviar a la transmisión de entrega y a la transmisión de entrega de destino, si no es la transmisión predeterminada.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`data`  
Los datos que enviar a la transmisión de entrega.  
Obligatorio: `true`  
Tipo: `string`  
`delivery_stream_arn`  
El ARN de la transmisión de entrega de Kinesis de destino. Incluya esta propiedad para anular la transmisión de entrega predeterminada.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$`  
`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 no utiliza esta característica, puede omitir esta propiedad o especificar una cadena vacía.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `.*`  
**Ejemplo de entrada**  

```
{
     "request": {
        "delivery_stream_arn": "arn:aws:firehose:region:account-id:deliverystream/stream2-name",
        "data": "Data to send to the delivery stream."
     },
     "id": "request123"
}
```
 

**Filtro de temas:** `kinesisfirehose/message/binary/#`  
Consulte este tema para enviar un mensaje que contenga datos binarios. El conector no analiza los datos binarios. Los datos se transmiten tal cual.  
Para asignar la solicitud de entrada a una respuesta de salida, sustituya el comodín `#` en el tema del mensaje con un ID de solicitud arbitrario. Por ejemplo, si publica un mensaje en `kinesisfirehose/message/binary/request123`, la propiedad `id` en el objeto de respuesta se establece en `request123`.  
Si no desea asignar una solicitud a una respuesta, puede publicar sus mensajes en `kinesisfirehose/message/binary/`. Asegúrese de incluir la barra diagonal.

------

## Datos de salida
<a name="kinesis-firehose-connector-data-output"></a>

Este conector publica información de estado como datos de salida en un tema MQTT.

------
#### [ Versions 2 - 5 ]

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  <a name="kinesis-firehose-output-topic-status"></a>
`kinesisfirehose/message/status`

**Ejemplo de salida**  
La respuesta contiene el estado de cada registro de datos enviado en el lote.  

```
{
    "response": [
        {
            "ErrorCode": "error",
            "ErrorMessage": "test error",
            "id": "request123",
            "status": "fail"
        },
        {
            "firehose_record_id": "xyz2",
            "id": "request456",
            "status": "success"
        },
        {
            "firehose_record_id": "xyz3",
            "id": "request890",
            "status": "success"
        }
    ]
}
```
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 SDK gestiona el retroceso exponencial. AWS Las solicitudes que fallan con errores que se pueden reintentar se añaden de nuevo al final de la cola para seguir publicándolos.

------
#### [ Version 1 ]

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  <a name="kinesis-firehose-output-topic-status"></a>
`kinesisfirehose/message/status`

**Ejemplo de salida: Correcto**  

```
{
   "response": {
       "firehose_record_id": "1lxfuuuFomkpJYzt/34ZU/r8JYPf8Wyf7AXqlXm",
       "status": "success"
    },
    "id": "request123"
}
```

**Ejemplo de salida: Error**  

```
{
   "response" : {
       "error": "ResourceNotFoundException",
       "error_message": "An error occurred (ResourceNotFoundException) when calling the PutRecord operation: Firehose test1 not found under account 123456789012.",
       "status": "fail"
   },
   "id": "request123"
}
```

------

## Ejemplo de uso
<a name="kinesis-firehose-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#kinesis-firehose-connector-req) para el conector.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#kinesis-firehose-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Agregue el conector y configure sus [parámetros](#kinesis-firehose-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada JSON](#kinesis-firehose-connector-data-input) y enviar [datos de salida](#kinesis-firehose-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utiliza esta suscripción para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="kinesis-firehose-connector-usage-example"></a>

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

```
import greengrasssdk
import time
import json

iot_client = greengrasssdk.client('iot-data')
send_topic = 'kinesisfirehose/message'

def create_request_with_all_fields():
    return  {
        "request": {
            "data": "Message from Firehose Connector Test"
        },
        "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
```

## Licencias
<a name="kinesis-firehose-connector-license"></a>

El conector de Kinesis Firehose incluye las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="kinesis-firehose-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 5 | <a name="isolation-mode-changelog"></a>Se ha agregado el parámetro `IsolationMode` para configurar el modo de creación de contenedores del conector. | 
| 4 | <a name="upgrade-runtime-py3.7"></a>Se actualizó el tiempo de ejecución de Lambda a Python 3.7, lo que cambia el requisito de tiempo de ejecución. | 
| 3 | Se ha corregido para reducir el registro excesivo y otras correcciones de errores menores.  | 
| 2 | Se ha añadido compatibilidad para el envío de registros de datos por lotes a Firehose en un intervalo especificado. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/kinesis-firehose-connector.html)  | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="kinesis-firehose-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [¿Qué es Amazon Kinesis Data Firehose?](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) en la *Guía para desarrolladores de Amazon Kinesis*

# Conector de ML Feedback
<a name="ml-feedback-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El conector ML Feedback facilita el acceso a los datos del modelo de machine learning (ML) para volver a entrenar y analizar modelos. El conector:
+ Carga los datos de entrada (muestras) utilizados por el modelo de ML en Amazon S3. La entrada del modelo puede estar en cualquier formato, como imágenes, JSON o audio. Después de cargar muestras en la nube, puede utilizarlas para volver a entrenar el modelo y mejorar la precisión y exactitud de sus predicciones. Por ejemplo, puedes usar [SageMaker AI Ground Truth](https://docs.aws.amazon.com/sagemaker/latest/dg/sms.html) para etiquetar tus muestras y [SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) para volver a entrenar el modelo.
+ Publica los resultados de la predicción del modelo como mensajes MQTT. Esto le permite monitorizar y analizar la calidad de inferencia de su modelo en tiempo real. También puede almacenar los resultados de las predicciones y utilizarlos para analizar las tendencias a lo largo del tiempo.
+ Publica métricas sobre las subidas y los datos de las muestras en Amazon CloudWatch.

Para configurar este conector, describa las *configuraciones de comentarios* admitidas en formato JSON. Una configuración de retroalimentación define propiedades como el bucket de Amazon S3 de destino, el tipo de contenido y la [estrategia de muestreo](#ml-feedback-connector-sampling-strategies). Se utiliza una estrategia de muestreo para determinar qué muestras cargar.

Puede utilizar el conector ML Feedback en los siguientes escenarios:
+ Con funciones de Lambda definidas por el usuario. Sus funciones Lambda de inferencia locales utilizan el Machine AWS IoT Greengrass Learning SDK para invocar este conector y transmitir la configuración de retroalimentación objetivo, la entrada del modelo y la salida del modelo (resultados de predicción). Para ver un ejemplo, consulta [Ejemplo de uso](#ml-feedback-connector-usage).
+ Con el [conector de la clasificación de ML Image](image-classification-connector.md) (v2). Para utilizar este conector con el conector de clasificación de ML Image, configure el parámetro `MLFeedbackConnectorConfigId` para el conector de clasificación de ML Image.
+ Con el [conector de detección de objetos de ML](obj-detection-connector.md) Para utilizar este conector con el conector de detección de ML Object, configure el parámetro `MLFeedbackConnectorConfigId` para el conector de detección de objetos de ML.

**ARN**: `arn:aws:greengrass:region::/connectors/MLFeedback/versions/1`

## Requisitos
<a name="ml-feedback-connector-req"></a>

Este conector exige los siguientes requisitos:
+ AWS IoT Greengrass Core Software v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ Uno o más buckets de Amazon S3. El número de buckets que utilice depende de su estrategia de muestreo.
+ El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción `s3:PutObject` en los objetos del bucket de Amazon S3 de destino, tal como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "s3:PutObject",
              "Resource": [
                  "arn:aws:s3:::bucket-name/*"
              ]
          }
      ]
  }
  ```

------

  La política debe incluir todos los buckets de destino como recursos. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1)

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).
+ El [conector CloudWatch Metrics](cloudwatch-metrics-connector.md) se agregó al grupo Greengrass y se configuró. Esto solo es necesario si desea utilizar la característica de informes de métricas.
+ AWS IoT Greengrass Se requiere [Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.1.0 para interactuar con este conector.

## Parameters
<a name="ml-feedback-connector-param"></a>

`FeedbackConfigurationMap`  
Un conjunto de una o varias configuraciones de comentarios que el conector puede utilizar para cargar muestras en Amazon S3. Una configuración de comentarios define parámetros como el bucket de destino, el tipo de contenido y la [estrategia de muestreo](#ml-feedback-connector-sampling-strategies). Cuando se invoca este conector, el conector o la función de Lambda que realiza la llamada especifica una configuración de comentarios de destino.  
Mostrar el nombre en la AWS IoT consola: mapa de configuración de **comentarios**  
Obligatorio: `true`  
Tipo: una cadena JSON bien formada que define el conjunto de configuraciones de comentarios admitidas. Para ver un ejemplo, consulta [FeedbackConfigurationMap ejemplo](#ml-feedback-connector-feedbackconfigmap).    
  
El ID de un objeto de configuración de comentarios tiene los siguientes requisitos.    
  
El ID:  
+ Debe ser único entre los objetos de configuración.
+ Debe comenzar por una letra o un número. Puede contener letras minúsculas y mayúsculas, números y guiones.
+ Debe tener entre 2 y 63 caracteres de longitud.
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`  
Ejemplos: `MyConfig0`, `config-a` y `12id`
El cuerpo de un objeto de configuración de comentarios contiene las siguientes propiedades.    
`s3-bucket-name`  
El nombre del bucket de Amazon S3 de destino.  
El rol de grupo debe permitir la acción `s3:PutObject` en todos los buckets de destino. Para obtener más información, consulte [Requisitos](#ml-feedback-connector-req).
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[a-z0-9\.\-]{3,63}$`  
`content-type`  
El tipo de contenido de las muestras que se van a cargar. Todo el contenido de una configuración de retroalimentación individual debe ser del mismo tipo.  
Obligatorio: `true`  
Tipo: `string`  
Ejemplos: `image/jpeg`, `application/json` y `audio/ogg`  
`s3-prefix`  
El prefijo de clave que se va a utilizar para las muestras cargadas. Un prefijo es similar a un nombre de directorio. Le permite almacenar datos similares en el mismo directorio en un bucket. Para obtener más información, consulte [Clave de objeto y metadatos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html) en la *Guía del usuario de Amazon Simple Storage Service*.  
Obligatorio: `false`  
Tipo: `string`  
`file-ext`  
La extensión de archivo que se va a utilizar para las muestras cargadas. Debe ser una extensión de archivo válida para el tipo de contenido.  
Obligatorio: `false`  
Tipo: `string`  
Ejemplos: `jpg`, `json` y `ogg`  
`sampling-strategy`  
La [estrategia de muestreo](#ml-feedback-connector-sampling-strategies) que se va a utilizar para filtrar qué muestras cargar. Si se omite, el conector intenta cargar todas las muestras que recibe.  
Obligatorio: `false`  
Tipo: una cadena JSON bien formada que contiene las siguientes propiedades.    
`strategy-name`  
El nombre de la estrategia de muestreo.  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `RANDOM_SAMPLING`, `LEAST_CONFIDENCE`, `MARGIN` o `ENTROPY`  
`rate`  
La velocidad de la estrategia de muestreo [Random](#ml-feedback-connector-sampling-strategies-random) (Aleatorio).  
Obligatorio: `true` si `strategy-name` es `RANDOM_SAMPLING`.  
Tipo: `number`  
Valores válidos: `0.0 - 1.0`  
`threshold`  
El umbral de la estrategia de muestreo [Least Confidence](#ml-feedback-connector-sampling-strategies-least-confidence) (Confianza mínima), [Margin](#ml-feedback-connector-sampling-strategies-margin) (Margen) o [Entropy](#ml-feedback-connector-sampling-strategies-entropy) (Entropía).  
Obligatorio: `true` si `strategy-name` es `LEAST_CONFIDENCE`, `MARGIN` o `ENTROPY`.  
Tipo: `number`  
Valores válidos:  
+ `0.0 - 1.0` para la estrategia `LEAST_CONFIDENCE` o `MARGIN`.
+ `0.0 - no limit` para la estrategia `ENTROPY`.

`RequestLimit`  
El número máximo de solicitudes que el conector puede procesar a la vez.  
Puede utilizar este parámetro para restringir el consumo de memoria limitando el número de solicitudes que el conector procesa al mismo tiempo. Se ignorarán las solicitudes que superen ese límite.  
Nombre para mostrar en la AWS IoT consola: **límite de solicitudes**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `0 - 999`  
Patrón válido: `^$|^[0-9]{1,3}$`

### Ejemplo de creación de conector (AWS CLI)
<a name="ml-feedback-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector de ML Feedback.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyMLFeedbackConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/MLFeedback/versions/1",
            "Parameters": {
                "FeedbackConfigurationMap": "{  \"RandomSamplingConfiguration\": {  \"s3-bucket-name\": \"my-aws-bucket-random-sampling\",  \"content-type\": \"image/png\",  \"file-ext\": \"png\",  \"sampling-strategy\": {  \"strategy-name\": \"RANDOM_SAMPLING\",  \"rate\": 0.5  } },  \"LeastConfidenceConfiguration\": {  \"s3-bucket-name\": \"my-aws-bucket-least-confidence-sampling\",  \"content-type\": \"image/png\",  \"file-ext\": \"png\",  \"sampling-strategy\": {  \"strategy-name\": \"LEAST_CONFIDENCE\",  \"threshold\": 0.4  } } }", 
                "RequestLimit": "10"
            }
        }
    ]
}'
```

### FeedbackConfigurationMap ejemplo
<a name="ml-feedback-connector-feedbackconfigmap"></a>

A continuación se muestra un valor de ejemplo ampliado para el parámetro `FeedbackConfigurationMap`. Este ejemplo incluye varias configuraciones de comentarios que utilizan diferentes estrategias de muestreo.

```
{
    "ConfigID1": {
        "s3-bucket-name": "my-aws-bucket-random-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "RANDOM_SAMPLING",
            "rate": 0.5
        }
    },
    "ConfigID2": {
        "s3-bucket-name": "my-aws-bucket-margin-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "MARGIN",
            "threshold": 0.4
        }
    },
    "ConfigID3": {
        "s3-bucket-name": "my-aws-bucket-least-confidence-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "LEAST_CONFIDENCE",
            "threshold": 0.4
        }
    },
    "ConfigID4": {
        "s3-bucket-name": "my-aws-bucket-entropy-sampling",
        "content-type": "image/png",
        "file-ext": "png",
        "sampling-strategy": {
            "strategy-name": "ENTROPY",
            "threshold": 2
        }
    },
    "ConfigID5": {
        "s3-bucket-name": "my-aws-bucket-no-sampling",
        "s3-prefix": "DeviceA",
        "content-type": "application/json"
    }
}
```

### Estrategias de muestreo
<a name="ml-feedback-connector-sampling-strategies"></a>

El conector admite cuatro estrategias de muestreo que determinan si cargar muestras que se transfieren al conector. Las muestras son instancias discretas de datos que un modelo utiliza para una predicción. Puede utilizar estrategias de muestreo para filtrar por las muestras que es más probable que mejoren la precisión del modelo.

`RANDOM_SAMPLING`  <a name="ml-feedback-connector-sampling-strategies-random"></a>
Carga aleatoriamente muestras en función de la velocidad proporcionada. Carga una muestra si un valor generado aleatoriamente es inferior a la velocidad. Cuanto mayor sea la velocidad, más muestras se cargarán.  
Esta estrategia hace caso omiso de cualquier predicción de modelo que se proporcione.

`LEAST_CONFIDENCE`  <a name="ml-feedback-connector-sampling-strategies-least-confidence"></a>
Carga muestras cuya probabilidad de confianza máxima sea inferior al umbral proporcionado.    
Ejemplo de escenarios:  
Umbral: `.6`  
Predicción del modelo: `[.2, .2, .4, .2]`  
Probabilidad de confianza máxima: `.4`  
Resultado:  
Utilice el muestreo, ya que la probabilidad de confianza máxima (`.4`) es inferior o igual al umbral (`.6`).

`MARGIN`  <a name="ml-feedback-connector-sampling-strategies-margin"></a>
Carga muestras si el margen entre las dos primeras probabilidades de confianza se encuentra dentro del umbral proporcionado. El margen es la diferencia entre las dos primeras probabilidades.    
Ejemplo de escenarios:  
Umbral: `.02`  
Predicción del modelo: `[.3, .35, .34, .01]`  
Dos probabilidades de confianza principales: `[.35, .34]`  
Margen: `.01` (`.35 - .34`)  
Resultado:  
Utilice la muestra, ya que el margen (`.01`) es inferior o igual que el umbral (`.02`).

`ENTROPY`  <a name="ml-feedback-connector-sampling-strategies-entropy"></a>
Carga muestras cuya entropía es mayor que el umbral proporcionado. Utiliza la entropía normalizada de la predicción del modelo.    
Ejemplo de escenarios:  
Umbral: `0.75`  
Predicción del modelo: `[.5, .25, .25]`  
Entropía para la predicción: `1.03972`  
Resultado:  
Utilice la muestra porque la entropía (`1.03972`) es superior al umbral (`0.75`).

## Datos de entrada
<a name="ml-feedback-connector-data-input"></a>

Las funciones Lambda definidas por el usuario utilizan `publish` la función del cliente en `feedback` el SDK de Machine AWS IoT Greengrass Learning para invocar el conector. Para ver un ejemplo, consulta [Ejemplo de uso](#ml-feedback-connector-usage).

**nota**  
Este conector no acepta mensajes MQTT como datos de entrada.

La función `publish` acepta los argumentos siguientes:

ConfigId  
El ID de la configuración de comentarios de destino. Debe coincidir con el ID de una configuración de retroalimentación definida en el [FeedbackConfigurationMap](#ml-feedback-connector-param)parámetro del conector ML Feedback.  
Obligatorio: true  
Tipo: cadena

ModelInput  
Los datos de entrada que se pasaron a un modelo para la inferencia. Estos datos de entrada se cargan utilizando la configuración de destino a menos que se filtren en función de la estrategia de muestreo.  
Obligatorio: true  
Tipo: bytes

ModelPrediction  
La predicción se genera a partir del modelo. El tipo de resultado puede ser un diccionario o una lista. Por ejemplo, los resultados de predicción del conector de clasificación de ML Image son una lista de probabilidades (como `[0.25, 0.60, 0.15]`). Estos datos se publican en el tema `/feedback/message/prediction`.  
Obligatorio: true  
Tipo: diccionario o lista de valores de `float`

Metadatos  
Metadatos específicos de la aplicación definidos por el cliente que se añaden a la muestra cargada y se publican en el tema `/feedback/message/prediction`. El conector también inserta una clave `publish-ts` con un valor de marca temporal en los metadatos.  
Obligatorio: false  
Tipo: diccionario  
Ejemplo: `{"some-key": "some value"}`

## Datos de salida
<a name="ml-feedback-connector-data-output"></a>

Este conector publica datos en tres temas MQTT:
+ La información del estado del conector en el tema `feedback/message/status`.
+ Resultados de predicción en el tema `feedback/message/prediction`.
+ Métricas destinadas CloudWatch al `cloudwatch/metric/put` tema.

<a name="connectors-input-output-subscriptions"></a>Debe configurar las suscripciones para permitir la comunicación del conector en temas de MQTT. Para obtener más información, consulte [Entradas y salidas](connectors.md#connectors-inputs-outputs).

**Filtro de temas:** `feedback/message/status`  
Utilice este tema para monitorizar el estado de las cargas de muestra y las muestras eliminadas. El conector publica en este tema cada vez que recibe una solicitud.     
**Ejemplo del resultado: carga de muestra realizada correctamente**  

```
{
  "response": {
    "status": "success",
    "s3_response": {
      "ResponseMetadata": {
        "HostId": "IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km",
        "RetryAttempts": 1,
        "HTTPStatusCode": 200,
        "RequestId": "79104EXAMPLEB723",
        "HTTPHeaders": {
          "content-length": "0",
          "x-amz-id-2": "lbbqaDVFOhMlyU3gRvAX1ZIdg8P0WkGkCSSFsYFvSwLZk3j7QZhG5EXAMPLEdd4/pEXAMPLEUqU=",
          "server": "AmazonS3",
          "x-amz-expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"",
          "x-amz-request-id": "79104EXAMPLEB723",
          "etag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"",
          "date": "Thu, 11 Jul 2019 00:12:50 GMT",
          "x-amz-server-side-encryption": "AES256"
        }
      },
      "bucket": "greengrass-feedback-connector-data-us-west-2",
      "ETag": "\"b9c4f172e64458a5fd674EXAMPLE5628\"",
      "Expiration": "expiry-date=\"Wed, 17 Jul 2019 00:00:00 GMT\", rule-id=\"OGZjYWY3OTgtYWI2Zi00ZDllLWE4YmQtNzMyYzEXAMPLEoUw\"",
      "key": "s3-key-prefix/UUID.file_ext",
      "ServerSideEncryption": "AES256"
    }
  },
  "id": "5aaa913f-97a3-48ac-5907-18cd96b89eeb"
}
```
El conector añade los campos `bucket` y `key` a la respuesta desde Amazon S3. Para obtener más información sobre la respuesta de Amazon S3, consulte [Objeto PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html#RESTObjectPUT-responses) en la *Referencia de la API de Amazon Simple Storage Service.*.  
**Ejemplo del resultado: muestra eliminada debido a la estrategia de muestreo**  

```
{
  "response": {
    "status": "sample_dropped_by_strategy"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```  
**Ejemplo de resultado: error al cargar el ejemplo**  
Un estado de error incluye el mensaje de error como el valor `error_message` y la clase de excepción como el valor `error`.  

```
{
  "response": {
    "status": "fail",
    "error_message": "[RequestId: 4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3] Failed to upload model input data due to exception. Model prediction will not be published. Exception type: NoSuchBucket, error: An error occurred (NoSuchBucket) when calling the PutObject operation: The specified bucket does not exist",
    "error": "NoSuchBucket"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```  
**Ejemplo del resultado: solicitud limitada debido al límite de solicitudes**  

```
{
  "response": {
    "status": "fail",
    "error_message": "Request limit has been reached (max request: 10 ). Dropping request.",
    "error": "Queue.Full"
  },
  "id": "4bf5aeb0-d1e4-4362-5bb4-87c05de78ba3"
}
```

**Filtro de temas:** `feedback/message/prediction`  
Utilice este tema para escuchar predicciones basadas en datos de muestra cargados. Esto le permite analizar el rendimiento del modelo en tiempo real. Las predicciones de modelos se publican en este tema solo si los datos se cargan correctamente en Amazon S3. Los mensajes publicados en este tema están en formato JSON. Contienen el enlace al objeto de datos cargado, la predicción del modelo y los metadatos incluidos en la solicitud.  
También puede almacenar los resultados de las predicciones y utilizarlos para analizar las tendencias a lo largo del tiempo e informar de ellas. Las tendencias pueden proporcionar información valiosa. Por ejemplo, una *reducción de la precisión a lo largo del tiempo* puede ayudarle a decidir si el modelo debe volver a entrenarse.    
**Ejemplo de salida**  

```
{
  "source-ref": "s3://greengrass-feedback-connector-data-us-west-2/s3-key-prefix/UUID.file_ext",
  "model-prediction": [
    0.5,
    0.2,
    0.2,
    0.1
  ],
  "config-id": "ConfigID2",
  "metadata": {
    "publish-ts": "2019-07-11 00:12:48.816752"
  }
}
```
Puede configurar el [conector de IoT Analytics](iot-analytics-connector.md) para suscribirse a este tema y enviar la información AWS IoT Analytics para un análisis posterior o histórico.

**Filtro de temas:** `cloudwatch/metric/put`  
Este es el tema de salida que se utiliza para publicar métricas en CloudWatch. Esta función requiere que instale y configure el [conector CloudWatch Metrics](cloudwatch-metrics-connector.md).  
Entre las métricas se incluyen:  
+ El número de muestras cargadas.
+ El tamaño de las muestras cargadas.
+ El número de errores de cargas en Amazon S3.
+ El número de muestras eliminadas en función de la estrategia de muestreo.
+ El número de solicitudes restringidas.  
**Ejemplo de salida: tamaño de la muestra de datos (publicada antes de la carga real)**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 47592,
      "unit": "Bytes",
      "metricName": "SampleSize"
    }
  }
}
```  
**Ejemplo del resultado: carga de muestra realizada correctamente**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleUploadSuccess"
    }
  }
}
```  
**Ejemplo de resultado: carga de muestra realizada correctamente y resultado de predicción publicado**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleAndPredictionPublished"
    }
  }
}
```  
**Ejemplo de resultado: error al cargar el ejemplo**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleUploadFailure"
    }
  }
}
```  
**Ejemplo del resultado: muestra eliminada debido a la estrategia de muestreo**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "SampleNotUsed"
    }
  }
}
```  
**Ejemplo del resultado: solicitud limitada debido al límite de solicitudes**  

```
{
  "request": {
    "namespace": "GreengrassFeedbackConnector",
    "metricData": {
      "value": 1,
      "unit": "Count",
      "metricName": "ErrorRequestThrottled"
    }
  }
}
```

## Ejemplo de uso
<a name="ml-feedback-connector-usage"></a>

El siguiente ejemplo es una función de Lambda definida por el usuario que utiliza el [SDK AWS IoT Greengrass de machine learning](lambda-functions.md#lambda-sdks-ml) para enviar datos al conector ML Feedback.

**nota**  
Puede descargar el SDK de AWS IoT Greengrass Machine Learning desde la [página de AWS IoT Greengrass descargas](what-is-gg.md#gg-ml-sdk-download).

```
import json
import logging
import os
import sys
import greengrass_machine_learning_sdk as ml

client = ml.client('feedback')

try:
    feedback_config_id = os.environ["FEEDBACK_CONFIG_ID"]
    model_input_data_dir = os.environ["MODEL_INPUT_DIR"]
    model_prediction_str = os.environ["MODEL_PREDICTIONS"]
    model_prediction = json.loads(model_prediction_str)
except Exception as e:
    logging.info("Failed to open environment variables. Failed with exception:{}".format(e))
    sys.exit(1)

try:
    with open(os.path.join(model_input_data_dir, os.listdir(model_input_data_dir)[0]), 'rb') as f:
        content = f.read()
except Exception as e:
    logging.info("Failed to open model input directory. Failed with exception:{}".format(e))
    sys.exit(1)    

def invoke_feedback_connector():
    logging.info("Invoking feedback connector.")
    try:
        client.publish(
            ConfigId=feedback_config_id,
            ModelInput=content,
            ModelPrediction=model_prediction
        )
    except Exception as e:
        logging.info("Exception raised when invoking feedback connector:{}".format(e))
        sys.exit(1)    

invoke_feedback_connector()

def function_handler(event, context):
    return
```

## Licencias
<a name="ml-feedback-connector-license"></a>



El conector de ML Feedback incluye las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Véase también
<a name="ml-feedback-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# Conector de la clasificación de ML Image
<a name="image-classification-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

Los [conectores](connectors.md) de clasificación de imágenes de ML proporcionan un servicio de inferencia de aprendizaje automático (ML) que se ejecuta en el AWS IoT Greengrass núcleo. Este servicio de inferencia local realiza la clasificación de imágenes mediante un modelo entrenado por el algoritmo de clasificación de imágenes de SageMaker IA.

Las funciones Lambda definidas por el usuario utilizan el AWS IoT Greengrass SDK de Machine Learning para enviar solicitudes de inferencia al servicio de inferencia local. El servicio ejecuta la inferencia localmente y devuelve las probabilidades de que la imagen de entrada pertenezca a categorías específicas.

AWS IoT Greengrass proporciona las siguientes versiones de este conector, que está disponible para varias plataformas.

------
#### [ Version 2 ]


| Connector | Descripción y ARN | 
| --- | --- | 
| Clasificación de imágenes XML: Aarch64 JTX2 |  Servicio de inferencia de clasificación de imágenes para NVIDIA Jetson. TX2 Admite aceleración de GPU. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2` | 
| Clasificación de imágenes de ML x86\$164 |  Servicio de inferencia para clasificación de imágenes para plataformas x86\$164. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/2` | 
| Clasificación de imágenes ML ARMv7 |  Servicio de inferencia de clasificación de imágenes para ARMv7 plataformas. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2` | 

------
#### [ Version 1 ]


| Connector | Descripción y ARN | 
| --- | --- | 
| Clasificación de imágenes XML Aarch64 JTX2 |  Servicio de inferencia de clasificación de imágenes para NVIDIA Jetson. TX2 Admite aceleración de GPU. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/1` | 
| Clasificación de imágenes de ML x86\$164 |  Servicio de inferencia para clasificación de imágenes para plataformas x86\$164. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationx86-64/versions/1` | 
| Clasificación de imágenes de ML Armv7 |  Servicio de inferencia para clasificación de imágenes para plataformas Armv7. **ARN**: `arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/1` | 

------

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#image-classification-connector-changelog).

## Requisitos
<a name="image-classification-connector-req"></a>

Estos conectores tienen los siguientes requisitos:

------
#### [ Version 2 ]
+ AWS IoT Greengrass Core Software v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="req-image-classification-framework"></a>Dependencias del MXNet marco Apache instalado en el dispositivo principal. Para obtener más información, consulte [Instalar MXNet dependencias en el núcleo AWS IoT Greengrass](#image-classification-connector-config).
+ <a name="req-image-classification-resource"></a>Un [recurso de aprendizaje automático](ml-inference.md#ml-resources) del grupo Greengrass que hace referencia a una fuente de modelos de SageMaker IA. Este modelo debe ser entrenado por el algoritmo de clasificación de imágenes de SageMaker IA. Para obtener más información, consulte [Algoritmo de clasificación de imágenes](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.
+ <a name="req-image-classification-feedback"></a>El [conector de Feedback de ML ](ml-feedback-connector.md) añadido al grupo de Greengrass y configurado. Solo es necesario si desea utilizar el conector para cargar datos de entrada del modelo y publicar predicciones en un tema de MQTT.
+ <a name="req-image-classification-policy"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción de `sagemaker:DescribeTrainingJob` en la tarea de entrenamiento de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sagemaker:DescribeTrainingJob"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:123456789012:training-job/training-job-name"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

  Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1) Si cambia el trabajo de entrenamiento de destino en el futuro, asegúrese de actualizar el rol de grupo.
+ AWS IoT Greengrass Se requiere [Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.1.0 para interactuar con este conector.

------
#### [ Version 1 ]
+ AWS IoT Greengrass Core Software v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="req-image-classification-framework"></a>Dependencias del MXNet marco Apache instalado en el dispositivo principal. Para obtener más información, consulte [Instalar MXNet dependencias en el núcleo AWS IoT Greengrass](#image-classification-connector-config).
+ <a name="req-image-classification-resource"></a>Un [recurso de aprendizaje automático](ml-inference.md#ml-resources) del grupo Greengrass que hace referencia a una fuente de modelos de SageMaker IA. Este modelo debe ser entrenado por el algoritmo de clasificación de imágenes de SageMaker IA. Para obtener más información, consulte [Algoritmo de clasificación de imágenes](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.
+ <a name="req-image-classification-policy"></a>El [rol del grupo de Greengrass](group-role.md) configurado para permitir la acción de `sagemaker:DescribeTrainingJob` en la tarea de entrenamiento de destino, tal y como se muestra en la siguiente política de IAM de ejemplo.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "sagemaker:DescribeTrainingJob"
              ],
              "Resource": "arn:aws:sagemaker:us-east-1:123456789012:training-job/training-job-name"
          }
      ]
  }
  ```

------

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

  Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1) Si cambia el trabajo de entrenamiento de destino en el futuro, asegúrese de actualizar el rol de grupo.
+ AWS IoT Greengrass Se requiere [Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.0.0 o posterior para interactuar con este conector.

------

## Parámetros de conector
<a name="image-classification-connector-param"></a>

Estos conectores proporcionan los siguientes parámetros.

------
#### [ Version 2 ]

`MLModelDestinationPath`  <a name="param-image-classification-mdlpath"></a>
Es la ruta local absoluta del recurso ML dentro del entorno de Lambda. Esta es la ruta de destino que se ha especificado para el recurso de aprendizaje automático.  
Si ha creado el recurso de aprendizaje automático en la consola, esta es la ruta local.
Nombre para mostrar en la AWS IoT consola: ruta de destino **del modelo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MLModelResourceId`  <a name="param-image-classification-mdlresourceid"></a>
El ID del recurso de aprendizaje automático que hace referencia al modelo de origen.  
Mostrar el nombre en la AWS IoT consola: **SageMaker recurso ARN del trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9:_-]+`

`MLModelSageMakerJobArn`  <a name="param-image-classification-mdljobarn"></a>
El ARN del trabajo de formación en SageMaker IA que representa la fuente del modelo de SageMaker IA. El modelo debe entrenarse mediante el algoritmo de clasificación de imágenes de la SageMaker IA.  
Nombre para mostrar en la AWS IoT consola: ARN del **SageMaker trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$`

`LocalInferenceServiceName`  <a name="param-image-classification-svcname"></a>
El nombre del servicio de inferencia local. Las funciones Lambda definidas por el usuario invocan el servicio pasando el nombre a la función `invoke_inference_service` del SDK de Machine AWS IoT Greengrass Learning. Para ver un ejemplo, consulta [Ejemplo de uso](#image-classification-connector-usage).  
Nombre para mostrar en la AWS IoT consola: nombre del servicio de **inferencia local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9][a-zA-Z0-9-]{1,62}`

`LocalInferenceServiceTimeoutSeconds`  <a name="param-image-classification-svctimeout"></a>
La cantidad de tiempo (en segundos) antes de que se termine la solicitud de inferencia. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **Tiempo de espera (segundo)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`LocalInferenceServiceMemoryLimitKB`  <a name="param-image-classification-svcmemorylimit"></a>
La cantidad de memoria (en KB) a la que el servicio tiene acceso. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **límite de memoria (KB)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
El contexto de informática de la CPU o GPU (acelerada). Esta propiedad se aplica únicamente al JTX2 conector Aarch64 de clasificación de imágenes ML.  
**Nombre para mostrar en la AWS IoT consola: aceleración de GPU**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `CPU` o `GPU`

`MLFeedbackConnectorConfigId`  <a name="param-image-classification-feedbackconfigid"></a>
El ID de la configuración de retroalimentación que se va a utilizar para cargar los datos de entrada del modelo. Debe coincidir con el ID de una configuración de comentarios definida para el [conector de comentarios de aprendizaje automático](ml-feedback-connector.md).  
Este parámetro solo es necesario si desea utilizar el conector de comentarios de aprendizaje automático para cargar datos de entrada del modelo y publicar predicciones en un tema de MQTT.  
Nombre para mostrar en la AWS IoT consola: **ID de configuración del conector ML Feedback**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

------
#### [ Version 1 ]

`MLModelDestinationPath`  <a name="param-image-classification-mdlpath"></a>
Es la ruta local absoluta del recurso ML dentro del entorno de Lambda. Esta es la ruta de destino que se ha especificado para el recurso de aprendizaje automático.  
Si ha creado el recurso de aprendizaje automático en la consola, esta es la ruta local.
Nombre para mostrar en la AWS IoT consola: **ruta de destino del modelo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MLModelResourceId`  <a name="param-image-classification-mdlresourceid"></a>
El ID del recurso de aprendizaje automático que hace referencia al modelo de origen.  
Mostrar el nombre en la AWS IoT consola: **SageMaker recurso ARN del trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9:_-]+`

`MLModelSageMakerJobArn`  <a name="param-image-classification-mdljobarn"></a>
El ARN del trabajo de formación en SageMaker IA que representa la fuente del modelo de SageMaker IA. El modelo debe entrenarse mediante el algoritmo de clasificación de imágenes de la SageMaker IA.  
Nombre para mostrar en la AWS IoT consola: ARN del **SageMaker trabajo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^arn:aws:sagemaker:[a-zA-Z0-9-]+:[0-9]+:training-job/[a-zA-Z0-9][a-zA-Z0-9-]+$`

`LocalInferenceServiceName`  <a name="param-image-classification-svcname"></a>
El nombre del servicio de inferencia local. Las funciones Lambda definidas por el usuario invocan el servicio pasando el nombre a la función `invoke_inference_service` del SDK de Machine AWS IoT Greengrass Learning. Para ver un ejemplo, consulta [Ejemplo de uso](#image-classification-connector-usage).  
Nombre para mostrar en la AWS IoT consola: nombre del servicio de **inferencia local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9][a-zA-Z0-9-]{1,62}`

`LocalInferenceServiceTimeoutSeconds`  <a name="param-image-classification-svctimeout"></a>
La cantidad de tiempo (en segundos) antes de que se termine la solicitud de inferencia. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **Tiempo de espera (segundo)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`LocalInferenceServiceMemoryLimitKB`  <a name="param-image-classification-svcmemorylimit"></a>
La cantidad de memoria (en KB) a la que el servicio tiene acceso. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: **límite de memoria (KB)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[1-9][0-9]*`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
El contexto de informática de la CPU o GPU (acelerada). Esta propiedad se aplica únicamente al JTX2 conector Aarch64 de clasificación de imágenes ML.  
**Nombre para mostrar en la AWS IoT consola: aceleración de GPU**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `CPU` o `GPU`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="image-classification-connector-create"></a>

Los siguientes comandos de la CLI crean un parámetro `ConnectorDefinition` con una versión inicial que contiene un conector Image Classification de ML.

**Ejemplo: instancia de CPU**  
Este ejemplo crea una instancia del conector Image Classification de ML Armv7l.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyImageClassificationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationARMv7/versions/2",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier",
                "LocalInferenceServiceName": "imageClassification",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "MLFeedbackConnectorConfigId": "MyConfig0"
            }
        }
    ]
}'
```

**Ejemplo: instancia de GPU**  
En este ejemplo, se crea una instancia del JTX2 conector Aarch64 de clasificación de imágenes ML, que admite la aceleración de la GPU en una placa NVIDIA TX2 Jetson.  

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyImageClassificationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ImageClassificationAarch64JTX2/versions/2",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "MLModelSageMakerJobArn": "arn:aws:sagemaker:us-west-2:123456789012:training-job:MyImageClassifier",
                "LocalInferenceServiceName": "imageClassification",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "GPUAcceleration": "GPU",
                "MLFeedbackConnectorConfigId": "MyConfig0"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de estos conectores tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

**En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="image-classification-connector-data-input"></a>

 Estos conectores aceptan un archivo de imagen como entrada. Los archivos de imagen de entrada deben tener el formato `jpeg` o `png`. Para obtener más información, consulte [Ejemplo de uso](#image-classification-connector-usage). 

Estos conectores no aceptan mensajes MQTT como datos de entrada.

## Datos de salida
<a name="image-classification-connector-data-output"></a>

Estos conectores devuelven una predicción con formato para el objeto identificado en la imagen de entrada:

```
[0.3,0.1,0.04,...]
```

La predicción contiene una lista de valores que se corresponden con las categorías utilizadas en el conjunto de datos de entrenamiento durante la capacitación de modelos. Cada valor representa la probabilidad de que la imagen se encuentre dentro de la categoría correspondiente. La categoría con la mayor probabilidad es la predicción dominante.

Estos conectores no publican mensajes MQTT como datos de salida.

## Ejemplo de uso
<a name="image-classification-connector-usage"></a>

El siguiente ejemplo de función de Lambda utiliza el [SDK de Machine Learning de AWS IoT Greengrass](lambda-functions.md#lambda-sdks-ml) para interactuar con un conector de Image Classification de ML.

**nota**  
 Puede descargar el SDK desde la página de descargas del [SDK de machine learning de AWS IoT Greengrass](what-is-gg.md#gg-ml-sdk-download).

En el ejemplo se inicializa un cliente SDK y de forma sincrónica llama a la función `invoke_inference_service` del SDK para invocar el servicio de inferencia local. Pasa el tipo de algoritmo, el nombre del servicio, el tipo de imagen y contenido de imágenes. A continuación, el ejemplo analiza la respuesta del servicio para obtener los resultados de probabilidad (predicciones).

------
#### [ Python 3.7 ]

```
import logging
from threading import Timer

import numpy as np

import greengrass_machine_learning_sdk as ml

# We assume the inference input image is provided as a local file
# to this inference client Lambda function.
with open('/test_img/test.jpg', 'rb') as f:
    content = bytearray(f.read())

client = ml.client('inference')

def infer():
    logging.info('invoking Greengrass ML Inference service')

    try:
        resp = client.invoke_inference_service(
            AlgoType='image-classification',
            ServiceName='imageClassification',
            ContentType='image/jpeg',
            Body=content
        )
    except ml.GreengrassInferenceException as e:
        logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e))
        return
    except ml.GreengrassDependencyException as e:
        logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e))
        return

    logging.info('resp: {}'.format(resp))
    predictions = resp['Body'].read().decode("utf-8")
    logging.info('predictions: {}'.format(predictions))
    
    # The connector output is in the format: [0.3,0.1,0.04,...]
    # Remove the '[' and ']' at the beginning and end.
    predictions = predictions[1:-1]
    count = len(predictions.split(','))
    predictions_arr = np.fromstring(predictions, count=count, sep=',')

    # Perform business logic that relies on the predictions_arr, which is an array
    # of probabilities.
    
    # Schedule the infer() function to run again in one second.
    Timer(1, infer).start()
    return

infer()

def function_handler(event, context):
    return
```

------
#### [ Python 2.7 ]

```
import logging
from threading import Timer

import numpy

import greengrass_machine_learning_sdk as gg_ml

# The inference input image.
with open("/test_img/test.jpg", "rb") as f:
    content = f.read()

client = gg_ml.client("inference")


def infer():
    logging.info("Invoking Greengrass ML Inference service")

    try:
        resp = client.invoke_inference_service(
            AlgoType="image-classification",
            ServiceName="imageClassification",
            ContentType="image/jpeg",
            Body=content,
        )
    except gg_ml.GreengrassInferenceException as e:
        logging.info('Inference exception %s("%s")', e.__class__.__name__, e)
        return
    except gg_ml.GreengrassDependencyException as e:
        logging.info('Dependency exception %s("%s")', e.__class__.__name__, e)
        return

    logging.info("Response: %s", resp)
    predictions = resp["Body"].read()
    logging.info("Predictions: %s", predictions)

    # The connector output is in the format: [0.3,0.1,0.04,...]
    # Remove the '[' and ']' at the beginning and end.
    predictions = predictions[1:-1]
    predictions_arr = numpy.fromstring(predictions, sep=",")
    logging.info("Split into %s predictions.", len(predictions_arr))

    # Perform business logic that relies on predictions_arr, which is an array
    # of probabilities.

    # Schedule the infer() function to run again in one second.
    Timer(1, infer).start()


infer()


# In this example, the required AWS Lambda handler is never called.
def function_handler(event, context):
    return
```

------

La `invoke_inference_service` función del AWS IoT Greengrass Machine Learning SDK acepta los siguientes argumentos.


| Argumento | Description (Descripción) | 
| --- | --- | 
| `AlgoType` | El nombre del tipo de algoritmo que usar para la interferencia. En la actualidad, solo se admite `image-classification`. Obligatorio: `true` Tipo: `string` Valores válidos: `image-classification` | 
| `ServiceName` | El nombre del servicio de inferencia local. Utilice el nombre que especificó para el parámetro `LocalInferenceServiceName` al configurar el conector. Obligatorio: `true` Tipo: `string` | 
| `ContentType` | El tipo mime de la imagen de entrada. Obligatorio: `true` Tipo: `string` Valores válidos: `image/jpeg, image/png` | 
| `Body` | El contenido del archivo de la imagen de entrada. Obligatorio: `true` Tipo: `binary` | 

## Instalar MXNet dependencias en el núcleo AWS IoT Greengrass
<a name="image-classification-connector-config"></a>

Para utilizar un conector de clasificación de imágenes de aprendizaje automático, debe instalar las dependencias del MXNet marco Apache en el dispositivo principal. Los conectores utilizan el marco de trabajo para servir al modelo de ML.

**nota**  
Estos conectores vienen con una MXNet biblioteca precompilada, por lo que no es necesario instalar el MXNet marco en el dispositivo principal. 

AWS IoT Greengrass proporciona scripts para instalar las dependencias en las siguientes plataformas y dispositivos comunes (o para utilizarlos como referencia al instalarlos). Si utiliza una plataforma o dispositivo diferente, consulte la [MXNet documentación](https://mxnet.apache.org/) de la configuración.

Antes de instalar MXNet las dependencias, asegúrate de que las [bibliotecas del sistema](#image-classification-connector-logging) necesarias (con las versiones mínimas especificadas) estén presentes en el dispositivo.

------
#### [ NVIDIA Jetson TX2 ]

1. Instalación del conjunto de herramientas CUDA 9.0 y cuDNN 7.0. Puede seguir las instrucciones en [Configuración de otros dispositivos](setup-filter.other.md) en el tutorial de Introducción.

1. Habilitar repositorios universales para que el conector pueda instalar software abierto mantenido por la comunidad. Para obtener más información, consulte [Repositories/Ubuntu](https://help.ubuntu.com/community/Repositories/Ubuntu) en la documentación de Ubuntu.

   1. Abra el archivo `/etc/apt/sources.list`.

   1. Asegúrese de que las siguientes líneas no tienen comentarios.

      ```
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      ```

1. Guarde una copia del siguiente script de instalación en un archivo llamado `nvidiajtx2.sh` en el dispositivo del núcleo.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev python-dev
   
   echo 'Install latest pip...'
   wget https://bootstrap.pypa.io/get-pip.py
   python get-pip.py
   rm get-pip.py
   
   pip install numpy==1.15.0 scipy
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo nvidiajtx2.sh
   ```

------
#### [ x86\$164 (Ubuntu or Amazon Linux)  ]

1. Guarde una copia del siguiente script de instalación en un archivo llamado `x86_64.sh` en el dispositivo del núcleo.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1
     apt-get install -y python3.7 python3.7-dev
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1 python-dev python-pip
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext python-pip
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   pip install numpy==1.15.0 scipy opencv-python
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo x86_64.sh
   ```

------
#### [ Armv7 (Raspberry Pi) ]

1. Guarde una copia del siguiente script de instalación en un archivo llamado `armv7l.sh` en el dispositivo del núcleo.

------
#### [ Python 3.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```

**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

------
#### [ Python 2.7 ]

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev python-dev
   
   # python-opencv depends on python-numpy. The latest version in the APT repository is python-numpy-1.8.2
   # This script installs python-numpy first so that python-opencv can be installed, and then install the latest
   # numpy-1.15.x with pip
   apt-get install -y python-numpy python-opencv
   dpkg --remove --force-depends python-numpy
   
   echo 'Install latest pip...'
   wget https://bootstrap.pypa.io/get-pip.py
   python get-pip.py
   rm get-pip.py
   
   pip install --upgrade numpy==1.15.0 picamera scipy
   
   echo 'Dependency installation/upgrade complete.'
   ```

------

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo bash armv7l.sh
   ```
**nota**  
En una solución Raspberry Pi, el uso de `pip` para instalar dependencias de aprendizaje automático es una operación de uso intensivo de memoria que puede provocar que el dispositivo se quede sin memoria y deje de responder. Como alternativa, puede aumentar temporalmente el tamaño de intercambio:  
En `/etc/dphys-swapfile`, aumente el valor de la variable `CONF_SWAPSIZE` y, a continuación, ejecute el siguiente comando para reiniciar `dphys-swapfile`.  

   ```
   /etc/init.d/dphys-swapfile restart
   ```

------

## Registro y solución de problemas
<a name="image-classification-connector-logging"></a>

Según la configuración del grupo, los registros de eventos y errores se escriben en los CloudWatch registros, en el sistema de archivos local o en ambos. Los registros de este conector utilizan el prefijo `LocalInferenceServiceName`. Si el conector se comporta de forma inesperada, compruebe los registros del conector. Estos suelen contener información de depuración útil, como, por ejemplo, que falta una dependencia de biblioteca de ML o la causa de un error de inicio del conector.

Si el AWS IoT Greengrass grupo está configurado para escribir registros locales, el conector escribe los archivos de registro en ellos`greengrass-root/ggc/var/log/user/region/aws/`. Para obtener más información sobre los registros de Greengrass, consulte [Supervisión con AWS IoT Greengrass registros](greengrass-logs-overview.md).

Utilice la siguiente información como ayuda para solucionar problemas con los conectores Image Classification de ML.

**Bibliotecas del sistema obligatorias**

Las siguientes pestañas muestran las bibliotecas del sistema necesarias para cada conector Image Classification de ML.

------
#### [ ML Image Classification Aarch64 JTX2 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-aarch64.so.1 | GLIBC\$12.17 | 
| libc.so.6 | GLIBC\$12.17 | 
| libcublas.so.9.0 | no aplicable | 
| libcudart.so.9.0 | no aplicable | 
| libcudnn.so.7 | no aplicable | 
| libcufft.so.9.0 | no aplicable | 
| libcurand.so.9.0 | no aplicable | 
| libcusolver.so.9.0 | no aplicable | 
| libgcc\$1s.so.1 | GCC\$14.2.0 | 
| libgomp.so.1 | GOMP\$14.0, OMP\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.17 | 
| librt.so.1 | GLIBC\$12.17 | 
| libstdc\$1\$1.so.6 | GLIBCXX\$13.4.21, CXXABI\$11.3.8 | 

------
#### [ ML Image Classification x86\$164 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-x86-64.so.2 | GCC\$14.0.0 | 
| libc.so.6 | GLIBC\$12.4 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.2.5 | 
| librt.so.1 | GLIBC\$12.2.5 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, GLIBCXX\$13.4.21 | 

------
#### [ ML Image Classification Armv7 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-armhf.so.3 | GLIBC\$12.4 | 
| libc.so.6 | GLIBC\$12.7 | 
| libgcc\$1s.so.1 | GCC\$14.0.0 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.4 | 
| libpthread.so.0 | GLIBC\$12.4 | 
| librt.so.1 | GLIBC\$12.4 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, CXXABI\$1ARM\$11.3.3, GLIBCXX\$13.4.20 | 

------

**Problemas**


| Síntoma | Solución | 
| --- | --- | 
|  En una Raspberry Pi, se registra el siguiente mensaje de error y no está utilizando la cámara: `Failed to initialize libdc1394`   |  Ejecute el comando siguiente para deshabilitar el controlador: <pre>sudo ln /dev/null /dev/raw1394</pre> Esta operación es efímera y el enlace simbólico desaparecerá después del reinicio. Consulte el manual de su distribución de SO para obtener información acerca de cómo crear automáticamente el enlace al reiniciar.  | 

## Licencias
<a name="image-classification-connector-license"></a>

Los conectores Image Classification de ML incluyen las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License
+ [Biblioteca de red neuronal profunda (DNNL)](https://github.com/intel/mkl-dnn)/Licencia Apache 2.0
+ [Biblioteca de tiempo de ejecución OpenMP\$1](https://software.intel.com/content/www/us/en/develop/documentation/cpp-compiler-developer-guide-and-reference/top/optimization-and-programming-guide/openmp-support/openmp-library-support/openmp-run-time-library-routines.html)/Consulte [Licencias de bibliotecas de tiempo de ejecución Intel OpenMP](#openmp-license).
+ [mxnet](https://pypi.org/project/mxnet/)/Licencia Apache 2.0
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

**Licencias de biblioteca de tiempo de ejecución Intel OpenMP**. El tiempo de ejecución de Intel® OpenMP\$1 dispone de licencia doble, con una licencia comercial (COM) como parte de los productos Intel® Parallel Studio XE Suite y una licencia de código abierto BSD (OSS).

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="image-classification-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 2 | Se agregó el `MLFeedbackConnectorConfigId` parámetro para admitir el uso del [conector ML Feedback](ml-feedback-connector.md) para cargar datos de entrada del modelo, publicar predicciones en un tema de MQTT y publicar métricas en Amazon CloudWatch.  | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="image-classification-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Cómo realizar la inferencia de machine learning](ml-inference.md)
+ [Algoritmo de clasificación de imágenes](https://docs.aws.amazon.com/sagemaker/latest/dg/image-classification.html) en la *Guía para desarrolladores de Amazon SageMaker AI*

# Conector de detección de objetos de ML
<a name="obj-detection-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

Los [conectores](connectors.md) ML Object Detection proporcionan un servicio de inferencia de aprendizaje automático (ML) que se ejecuta en el AWS IoT Greengrass núcleo. Este servicio de inferencia local realiza la detección de objetos mediante un modelo de detección de objetos compilado por el compilador de aprendizaje profundo SageMaker AI Neo. Se admiten dos tipos de modelos de detección de objetos: Single Shot Multibox Detector (SSD) y You Only Look Once (YOLO) v3. Para obtener más información, consulte [Requisitos del modelo de detección de objetos](#obj-detection-connector-req-model).

 Las funciones Lambda definidas por el usuario utilizan el AWS IoT Greengrass SDK de Machine Learning para enviar solicitudes de inferencia al servicio de inferencia local. El servicio realiza la inferencia local en una imagen de entrada y devuelve una lista de predicciones para cada objeto detectado en la imagen. Cada predicción contiene una categoría de objeto, una puntuación de confianza de predicción y coordenadas de píxeles que especifican un cuadro delimitador alrededor del objeto previsto. 

AWS IoT Greengrass proporciona conectores de detección de objetos ML para múltiples plataformas:


| Connector | Descripción y ARN | 
| --- | --- | 
| Detección de objetos ML: Aarch64 JTX2 |  Servicio de inferencia y detección de objetos para NVIDIA Jetson. TX2 Admite aceleración de GPU.  **ARN**: `arn:aws:greengrass:region::/connectors/ObjectDetectionAarch64JTX2/versions/1`   | 
| Detección de objetos de ML x86\$164 |  Servicio de inferencia de detección de objetos para plataformas x86\$164.  **ARN**: `arn:aws:greengrass:region::/connectors/ObjectDetectionx86-64/versions/1`   | 
| Detección de objetos ML ARMv7 |   Servicio de inferencia y detección de objetos para ARMv7 plataformas.   **ARN**: `arn:aws:greengrass:region::/connectors/ObjectDetectionARMv7/versions/1`   | 

## Requisitos
<a name="obj-detection-connector-req"></a>

Estos conectores tienen los siguientes requisitos:
+ AWS IoT Greengrass Core Software v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ Dependencias del entorno de ejecución de aprendizaje profundo SageMaker AI Neo instalado en el dispositivo principal. Para obtener más información, consulte [Instalación de las dependencias del tiempo de ejecución de Neo Deep Learning en el núcleo AWS IoT Greengrass](#obj-detection-connector-config).
+ Un [recurso de ML](ml-inference.md#ml-resources) en el grupo de Greengrass. El recurso de ML debe hacer referencia a un bucket de Amazon S3 que contenga un modelo de detección de objetos. Para obtener más información, consulte [Orígenes del modelo de Amazon S3](ml-inference.md#s3-ml-resources).
**nota**  
El modelo debe ser un tipo de modelo de detección de objetos Single Shot Multibox Detector o You Only Look Once v3. Debe compilarse con el compilador de aprendizaje profundo SageMaker AI Neo. Para obtener más información, consulte [Requisitos del modelo de detección de objetos](#obj-detection-connector-req-model).
+ <a name="req-image-classification-feedback"></a>El [conector de Feedback de ML ](ml-feedback-connector.md) añadido al grupo de Greengrass y configurado. Solo es necesario si desea utilizar el conector para cargar datos de entrada del modelo y publicar predicciones en un tema de MQTT.
+ AWS IoT Greengrass Se requiere [Machine Learning SDK](lambda-functions.md#lambda-sdks-ml) v1.1.0 para interactuar con este conector.

### Requisitos del modelo de detección de objetos
<a name="obj-detection-connector-req-model"></a>

Los conectores de detección de objetos de ML admiten los tipos de modelos de detección de objetos Single Shot multibox Detector (SSD) y You Only Look Once (YOLO) v3. Puede utilizar los componentes de detección de objetos proporcionados por [GluonCV](https://gluon-cv.mxnet.io) para entrenar el modelo con su propio conjunto de datos. También puede utilizar modelos entrenados previamente de GluonCV Model Zoo:
+ [Modelo SSD entrenado previamente](https://gluon-cv.mxnet.io/build/examples_detection/demo_ssd.html)
+ [Modelo YOLO v3 entrenado previamente](https://gluon-cv.mxnet.io/build/examples_detection/demo_yolo.html)

El modelo de detección de objetos debe entrenarse con imágenes de entrada de 512 x 512. Los modelos entrenados previamente de GluonCV Model Zoo ya cumplen este requisito.

Los modelos de detección de objetos entrenados deben compilarse con el compilador de aprendizaje profundo SageMaker AI Neo. Al compilar, asegúrese de que el hardware de destino coincida con el hardware del dispositivo de Greengrass Core. Para obtener más información, consulte [ SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) en la *Guía para desarrolladores de Amazon SageMaker AI*.

El modelo compilado debe añadirse como un recurso de ML ([origen del modelo de Amazon S3](ml-inference.md#s3-ml-resources)) al mismo grupo de Greengrass que el conector.

## Parámetros de conector
<a name="obj-detection-connector-param"></a>

Estos conectores proporcionan los siguientes parámetros.

`MLModelDestinationPath`  
La ruta absoluta al bucket de Amazon S3 que contiene el modelo de ML compatible con Neo. Esta es la ruta de destino que se ha especificado para el recurso del modelo de aprendizaje automático.  
Mostrar nombre en la AWS IoT consola: **ruta de destino del modelo**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MLModelResourceId`  
El ID del recurso de aprendizaje automático que hace referencia al modelo de origen.  
Nombre para mostrar en la AWS IoT consola: recurso **ML del grupo Greengrass**  
Obligatorio: `true`  
Tipo: `S3MachineLearningModelResource`  
Patrón válido: `^[a-zA-Z0-9:_-]+$`

`LocalInferenceServiceName`  
El nombre del servicio de inferencia local. Las funciones Lambda definidas por el usuario invocan el servicio pasando el nombre a la función `invoke_inference_service` del SDK de Machine AWS IoT Greengrass Learning. Para ver un ejemplo, consulta [Ejemplo de uso](#obj-detection-connector-usage).  
Nombre para mostrar en la AWS IoT consola: nombre del servicio de **inferencia local**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

`LocalInferenceServiceTimeoutSeconds`  
El tiempo (en segundos) antes de que se termine la solicitud de inferencia. El valor mínimo es 1. El valor predeterminado es 10.  
Nombre para mostrar en la AWS IoT consola: **Tiempo de espera (segundo)**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[1-9][0-9]*$`

`LocalInferenceServiceMemoryLimitKB`  
La cantidad de memoria (en KB) a la que el servicio tiene acceso. El valor mínimo es 1.  
Nombre para mostrar en la AWS IoT consola: límite de **memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[1-9][0-9]*$`

`GPUAcceleration`  <a name="param-image-classification-gpuacceleration"></a>
El contexto de informática de la CPU o GPU (acelerada). Esta propiedad se aplica únicamente al JTX2 conector Aarch64 de clasificación de imágenes ML.  
**Nombre para mostrar en la AWS IoT consola: aceleración de GPU**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `CPU` o `GPU`

`MLFeedbackConnectorConfigId`  <a name="param-image-classification-feedbackconfigid"></a>
El ID de la configuración de retroalimentación que se va a utilizar para cargar los datos de entrada del modelo. Debe coincidir con el ID de una configuración de comentarios definida para el [conector de comentarios de aprendizaje automático](ml-feedback-connector.md).  
Este parámetro solo es necesario si desea utilizar el conector de comentarios de aprendizaje automático para cargar datos de entrada del modelo y publicar predicciones en un tema de MQTT.  
Nombre para mostrar en la AWS IoT consola: **ID de configuración del conector ML Feedback**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|^[a-zA-Z0-9][a-zA-Z0-9-]{1,62}$`

### Ejemplo de creación de conector (AWS CLI)
<a name="obj-detection-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene un conector detección de objetos de ML. En este ejemplo, se crea una instancia del ARMv7l conector ML Object Detection.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyObjectDetectionConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ObjectDetectionARMv7/versions/1",
            "Parameters": {
                "MLModelDestinationPath": "/path-to-model",
                "MLModelResourceId": "my-ml-resource",
                "LocalInferenceServiceName": "objectDetection",
                "LocalInferenceServiceTimeoutSeconds": "10",
                "LocalInferenceServiceMemoryLimitKB": "500000",
                "MLFeedbackConnectorConfigId" : "object-detector-random-sampling"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de estos conectores tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="obj-detection-connector-data-input"></a>

 Estos conectores aceptan un archivo de imagen como entrada. Los archivos de imagen de entrada deben tener el formato `jpeg` o `png`. Para obtener más información, consulte [Ejemplo de uso](#obj-detection-connector-usage). 

Estos conectores no aceptan mensajes MQTT como datos de entrada.

## Datos de salida
<a name="obj-detection-connector-data-output"></a>

 Estos conectores devuelven una lista con formato de resultados de predicciones para los objetos identificados en la imagen de entrada: 

```
     {
         "prediction": [
             [
                 14,
                 0.9384938478469849,
                 0.37763649225234985,
                 0.5110225081443787,
                 0.6697432398796082,
                 0.8544386029243469
             ],
             [
                 14,
                 0.8859519958496094,
                 0,
                 0.43536216020584106,
                 0.3314110040664673,
                 0.9538808465003967
             ],
             [
                 12,
                 0.04128098487854004,
                 0.5976729989051819,
                 0.5747185945510864,
                 0.704264223575592,
                 0.857937216758728
             ],
             ...
         ]
     }
```

Cada predicción de la lista está incluida entre corchetes y contiene seis valores:
+  El primer valor representa la categoría de objeto prevista para el objeto identificado. Las categorías de objetos y sus valores correspondientes se determinan al entrenar el modelo de machine learning de detección de objetos en el compilador de aprendizaje profundo Neo.
+ El segundo valor es la puntuación de confianza para la predicción de categorías de objetos. Esto representa la probabilidad de que la predicción sea correcta. 
+ Los cuatro últimos valores se corresponden con dimensiones de píxeles que representan un cuadro delimitador alrededor del objeto previsto en la imagen.

Estos conectores no publican mensajes MQTT como datos de salida.

## Ejemplo de uso
<a name="obj-detection-connector-usage"></a>

El siguiente ejemplo de función de Lambda utiliza el [SDK de Machine Learning AWS IoT Greengrass](lambda-functions.md#lambda-sdks-ml) para interactuar con un conector de detección de objetos de ML.

**nota**  
 Puede descargar el SDK desde la página de descargas del [SDK de machine learning de AWS IoT Greengrass](what-is-gg.md#gg-ml-sdk-download). 

En el ejemplo se inicializa un cliente SDK y de forma sincrónica llama a la función `invoke_inference_service` del SDK para invocar el servicio de inferencia local. Pasa el tipo de algoritmo, el nombre del servicio, el tipo de imagen y contenido de imágenes. A continuación, el ejemplo analiza la respuesta del servicio para obtener los resultados de probabilidad (predicciones).

```
import logging
from threading import Timer

import numpy as np

import greengrass_machine_learning_sdk as ml

# We assume the inference input image is provided as a local file
# to this inference client Lambda function.
with open('/test_img/test.jpg', 'rb') as f:
    content = bytearray(f.read())

client = ml.client('inference')

def infer():
    logging.info('invoking Greengrass ML Inference service')

    try:
        resp = client.invoke_inference_service(
            AlgoType='object-detection',
            ServiceName='objectDetection',
            ContentType='image/jpeg',
            Body=content
        )
    except ml.GreengrassInferenceException as e:
        logging.info('inference exception {}("{}")'.format(e.__class__.__name__, e))
        return
    except ml.GreengrassDependencyException as e:
        logging.info('dependency exception {}("{}")'.format(e.__class__.__name__, e))
        return

    logging.info('resp: {}'.format(resp))
    predictions = resp['Body'].read().decode("utf-8")
    logging.info('predictions: {}'.format(predictions))
    predictions = eval(predictions) 

    # Perform business logic that relies on the predictions.
    
    # Schedule the infer() function to run again in ten second.
    Timer(10, infer).start()
    return

infer()

def function_handler(event, context):
    return
```

La `invoke_inference_service` función del AWS IoT Greengrass Machine Learning SDK acepta los siguientes argumentos.


| Argumento | Descripción | 
| --- | --- | 
| `AlgoType` | El nombre del tipo de algoritmo que usar para la interferencia. En la actualidad, solo se admite `object-detection`. Obligatorio: `true` Tipo: `string` Valores válidos: `object-detection` | 
| `ServiceName` | El nombre del servicio de inferencia local. Utilice el nombre que especificó para el parámetro `LocalInferenceServiceName` al configurar el conector. Obligatorio: `true` Tipo: `string` | 
| `ContentType` | El tipo mime de la imagen de entrada. Obligatorio: `true` Tipo: `string` Valores válidos: `image/jpeg, image/png` | 
| `Body` | El contenido del archivo de la imagen de entrada. Obligatorio: `true` Tipo: `binary` | 

## Instalación de las dependencias del tiempo de ejecución de Neo Deep Learning en el núcleo AWS IoT Greengrass
<a name="obj-detection-connector-config"></a>

Los conectores de detección de objetos ML vienen incluidos en el motor de ejecución de aprendizaje profundo (DLR) de SageMaker AI Neo. Los conectores utilizan el tiempo de ejecución para ofrecer el modelo de ML. Para utilizar estos conectores, debe instalar las dependencias para el DLR en su dispositivo principal. 

Antes de instalar las dependencias de DLR, asegúrese de que las [bibliotecas del sistema](#obj-detection-connector-logging) requeridas (con la versiones mínimas especificadas) están presentes en el dispositivo.

------
#### [ NVIDIA Jetson TX2 ]

1. Instalación del conjunto de herramientas CUDA 9.0 y cuDNN 7.0. Puede seguir las instrucciones en [Configuración de otros dispositivos](setup-filter.other.md) en el tutorial de Introducción.

1. Habilitar repositorios universales para que el conector pueda instalar software abierto mantenido por la comunidad. Para obtener más información, consulte [Repositories/Ubuntu](https://help.ubuntu.com/community/Repositories/Ubuntu) en la documentación de Ubuntu.

   1. Abra el archivo `/etc/apt/sources.list`.

   1. Asegúrese de que las siguientes líneas no tienen comentarios.

      ```
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial universe
      deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates universe
      ```

1. Guarde una copia del siguiente script de instalación en un archivo llamado `nvidiajtx2.sh` en el dispositivo del núcleo.

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   echo 'Assuming that universe repos are enabled and checking dependencies...'
   apt-get -y update
   apt-get -y dist-upgrade
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev libatlas-base-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```
**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo nvidiajtx2.sh
   ```

------
#### [ x86\$164 (Ubuntu or Amazon Linux)  ]

1. Guarde una copia del siguiente script de instalación en un archivo llamado `x86_64.sh` en el dispositivo del núcleo.

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   release=$(awk -F= '/^NAME/{print $2}' /etc/os-release)
   
   if [ "$release" == '"Ubuntu"' ]; then
     # Ubuntu. Supports EC2 and DeepLens. DeepLens has all the dependencies installed, so
     # this is mostly to prepare dependencies on Ubuntu EC2 instance.
     apt-get -y update
     apt-get -y dist-upgrade
   
     apt-get install -y libgfortran3 libsm6 libxext6 libxrender1
     apt-get install -y python3.7 python3.7-dev
   elif [ "$release" == '"Amazon Linux"' ]; then
     # Amazon Linux. Expect python to be installed already
     yum -y update
     yum -y upgrade
   
     yum install -y compat-gcc-48-libgfortran libSM libXrender libXext
   else
     echo "OS Release not supported: $release"
     exit 1
   fi
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```
**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo x86_64.sh
   ```

------
#### [ ARMv7 (Raspberry Pi) ]

1. Guarde una copia del siguiente script de instalación en un archivo llamado `armv7l.sh` en el dispositivo del núcleo.

   ```
   #!/bin/bash
   set -e
   
   echo "Installing dependencies on the system..."
   
   apt-get update
   apt-get -y upgrade
   
   apt-get install -y liblapack3 libopenblas-dev liblapack-dev
   apt-get install -y python3.7 python3.7-dev
   
   python3.7 -m pip install --upgrade pip
   python3.7 -m pip install numpy==1.15.0
   python3.7 -m pip install opencv-python || echo 'Error: Unable to install OpenCV with pip on this platform. Try building the latest OpenCV from source (https://github.com/opencv/opencv).'
   
   echo 'Dependency installation/upgrade complete.'
   ```
**nota**  
<a name="opencv-build-from-source"></a>Si [OpenCV](https://github.com/opencv/opencv) no se instala correctamente con este script, puede intentar realizar la compilación desde el código fuente. Para obtener más información, consulte [Instalación en Linux](https://docs.opencv.org/4.1.0/d7/d9f/tutorial_linux_install.html) en la documentación de OpenCV o vea otros recursos online para su plataforma.

1. En el directorio en el que guardó el archivo, ejecute el siguiente comando:

   ```
   sudo bash armv7l.sh
   ```
**nota**  
En una solución Raspberry Pi, el uso de `pip` para instalar dependencias de aprendizaje automático es una operación de uso intensivo de memoria que puede provocar que el dispositivo se quede sin memoria y deje de responder. Como alternativa, puede aumentar temporalmente el tamaño de intercambio. En `/etc/dphys-swapfile`, aumente el valor de la variable `CONF_SWAPSIZE` y, a continuación, ejecute el siguiente comando para reiniciar `dphys-swapfile`.  

   ```
   /etc/init.d/dphys-swapfile restart
   ```

------

## Registro y solución de problemas
<a name="obj-detection-connector-logging"></a>

Según la configuración del grupo, los registros de eventos y errores se escriben en los CloudWatch registros, en el sistema de archivos local o en ambos. Los registros de este conector utilizan el prefijo `LocalInferenceServiceName`. Si el conector se comporta de forma inesperada, compruebe los registros del conector. Estos suelen contener información de depuración útil, como, por ejemplo, que falta una dependencia de biblioteca de ML o la causa de un error de inicio del conector.

Si el AWS IoT Greengrass grupo está configurado para escribir registros locales, el conector escribe los archivos de registro en ellos`greengrass-root/ggc/var/log/user/region/aws/`. Para obtener más información sobre los registros de Greengrass, consulte [Supervisión con AWS IoT Greengrass registros](greengrass-logs-overview.md).

Utilice la siguiente información como ayuda para solucionar problemas con los conectores de la detección de objetos de ML.

**Bibliotecas del sistema obligatorias**

Las siguientes pestañas muestran las bibliotecas del sistema necesarias para cada conector detección de objetos de ML.

------
#### [ ML Object Detection Aarch64 JTX2 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-aarch64.so.1 | GLIBC\$12.17 | 
| libc.so.6 | GLIBC\$12.17 | 
| libcublas.so.9.0 | no aplicable | 
| libcudart.so.9.0 | no aplicable | 
| libcudnn.so.7 | no aplicable | 
| libcufft.so.9.0 | no aplicable | 
| libcurand.so.9.0 | no aplicable | 
| libcusolver.so.9.0 | no aplicable | 
| libgcc\$1s.so.1 | GCC\$14.2.0 | 
| libgomp.so.1 | GOMP\$14.0, OMP\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libnvinfer.so.4 | no aplicable | 
| libnvrm\$1gpu.so | no aplicable | 
| libnvrm.so | no aplicable | 
| libnvidia-fatbinaryloader.so.28.2.1 | no aplicable | 
| libnvos.so | no aplicable | 
| libpthread.so.0 | GLIBC\$12.17 | 
| librt.so.1 | GLIBC\$12.17 | 
| libstdc\$1\$1.so.6 | GLIBCXX\$13.4.21, CXXABI\$11.3.8 | 

------
#### [ ML Object Detection x86\$164 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-x86-64.so.2 | GCC\$14.0.0 | 
| libc.so.6 | GLIBC\$12.4 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.23 | 
| libpthread.so.0 | GLIBC\$12.2.5 | 
| librt.so.1 | GLIBC\$12.2.5 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, GLIBCXX\$13.4.21 | 

------
#### [ ML Object Detection ARMv7 ]


| Library | Versión mínima | 
| --- | --- | 
| ld-linux-armhf.so.3 | GLIBC\$12.4 | 
| libc.so.6 | GLIBC\$12.7 | 
| libgcc\$1s.so.1 | GCC\$14.0.0 | 
| libgfortran.so.3 | GFORTRAN\$11.0 | 
| libm.so.6 | GLIBC\$12.4 | 
| libpthread.so.0 | GLIBC\$12.4 | 
| librt.so.1 | GLIBC\$12.4 | 
| libstdc\$1\$1.so.6 | CXXABI\$11.3.8, CXXABI\$1ARM\$11.3.3, GLIBCXX\$13.4.20 | 

------

**Problemas**


| Síntoma | Solución | 
| --- | --- | 
|  En una Raspberry Pi, se registra el siguiente mensaje de error y no está utilizando la cámara: `Failed to initialize libdc1394`   |  Ejecute el comando siguiente para deshabilitar el controlador: <pre>sudo ln /dev/null /dev/raw1394</pre> Esta operación es efímera. El enlace simbólico desaparece después de reiniciar. Consulte el manual de su distribución de SO para obtener información sobre cómo crear automáticamente el enlace al reiniciar.  | 

## Licencias
<a name="obj-detection-connector-license"></a>

Los conectores detección de objetos de ML incluyen las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License
+ [Tiempo de ejecución de aprendizaje profundo](https://github.com/neo-ai/neo-ai-dlr)/Licencia Apache 2.0
+ <a name="six-license"></a>[six](https://github.com/benjaminp/six)/MIT

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Véase también
<a name="obj-detection-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Cómo realizar la inferencia de machine learning](ml-inference.md)
+ [Algoritmo de detección de objetos](https://docs.aws.amazon.com/sagemaker/latest/dg/object-detection.html) en la *Guía para desarrolladores de Amazon SageMaker AI*

# Conector adaptador de protocolo Modbus-RTU
<a name="modbus-protocol-adapter-connector"></a>

El [conector](connectors.md) del adaptador de protocolo Modbus-RTU recopila información de los dispositivos Modbus RTU que están en el grupo. AWS IoT Greengrass 

Este conector recibe los parámetros de una solicitud de Modbus RTU de una función de Lambda definida por el usuario. Envía la solicitud correspondiente y, a continuación, publica la respuesta del dispositivo de destino como mensaje de MQTT.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#modbus-protocol-adapter-connector-changelog).

## Requisitos
<a name="modbus-protocol-adapter-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-modbus-req-physical-connection"></a>Una conexión física entre el AWS IoT Greengrass núcleo y los dispositivos Modbus. El núcleo debe ser conectado físicamente a la red de Modbus RTU a través de un puerto serie (por ejemplo, un puerto USB).
+ <a name="conn-modbus-req-serial-port-resource"></a>Un [recurso de dispositivo local](access-local-resources.md) en el grupo Greengrass que apunta al puerto serie Modbus físico.
+ <a name="conn-modbus-req-user-lambda"></a>Una función de Lambda definida por el usuario que envía los parámetros de una solicitud de Modbus RTU a este conector. Los parámetros de la solicitud deben ajustarse a los patrones esperados e incluir las direcciones IDs y direcciones de los dispositivos de destino de la red Modbus RTU. Para obtener más información, consulte [Datos de entrada](#modbus-protocol-adapter-connector-data-input).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-modbus-req-physical-connection"></a>Una conexión física entre el AWS IoT Greengrass núcleo y los dispositivos Modbus. El núcleo debe ser conectado físicamente a la red de Modbus RTU a través de un puerto serie (por ejemplo, un puerto USB).
+ <a name="conn-modbus-req-serial-port-resource"></a>Un [recurso de dispositivo local](access-local-resources.md) en el grupo Greengrass que apunta al puerto serie Modbus físico.
+ <a name="conn-modbus-req-user-lambda"></a>Una función de Lambda definida por el usuario que envía los parámetros de una solicitud de Modbus RTU a este conector. Los parámetros de la solicitud deben ajustarse a los patrones esperados e incluir las direcciones IDs y direcciones de los dispositivos de destino de la red Modbus RTU. Para obtener más información, consulte [Datos de entrada](#modbus-protocol-adapter-connector-data-input).

------

## Parámetros de conector
<a name="modbus-protocol-adapter-connector-param"></a>

Este conector admite los siguientes parámetros:

`ModbusSerialPort-ResourceId`  
El ID del recurso de dispositivo local que representa el puerto de serie físico de Modbus.  
A este conector se le concede acceso de lectura y escritura al recurso.
Nombre para mostrar en la AWS IoT consola: recurso de puerto serie **Modbus**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`ModbusSerialPort`  
La ruta absoluta del puerto de serie físico de Modbus del dispositivo. Esta es la ruta de origen que haya especificado para el recurso de dispositivo local de Modbus.  
Nombre para mostrar en la AWS IoT consola: **ruta de origen del recurso de puerto serie Modbus**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

### Ejemplo de creación de conector (AWS CLI)
<a name="modbus-protocol-adapter-connector-create"></a>

El siguiente comando CLI crea un `ConnectorDefinition` con una versión inicial que contiene el conector del adaptador del protocolo Modbus-RTU.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyModbusRTUProtocolAdapterConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ModbusRTUProtocolAdapter/versions/3",
            "Parameters": {
                "ModbusSerialPort-ResourceId": "MyLocalModbusSerialPort",
                "ModbusSerialPort": "/path-to-port"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

**nota**  
Tras implementar el conector del adaptador de protocolo Modbus-RTU, podrás utilizarlo AWS IoT Things Graph para organizar las interacciones entre los dispositivos de tu grupo. Para obtener más información, consulte [Modbus](https://docs.aws.amazon.com/thingsgraph/latest/ug/iot-tg-protocols-modbus.html) en la *Guía del usuario de AWS IoT Things Graph *.

## Datos de entrada
<a name="modbus-protocol-adapter-connector-data-input"></a>

Este conector acepta los parámetros de una solicitud de Modbus RTU de una función de Lambda definida por el usuario en un tema de MQTT. Los mensajes de entrada deben tener un formato JSON válido.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`modbus/adapter/request`

**Propiedades de mensajes**  
El mensaje de solicitud varía en función del tipo de solicitud de Modbus RTU que representa. Las siguientes propiedades son necesarias para todas las solicitudes:  
+ En el objeto `request`:
  + `operation`. Nombre de la operación que se va a ejecutar. Por ejemplo, especifique `"operation": "ReadCoilsRequest"` para leer salidas digitales (coils). Este valor debe ser una cadena Unicode. Para obtener información sobre las operaciones admitidas, consulte [Solicitudes y respuestas de Modbus RTU](#modbus-protocol-adapter-connector-requests-responses).
  + `device`. El dispositivo de destino de la solicitud. Este valor debe estar entre `0 - 247`.
+ La propiedad `id`. ID de la solicitud. Este valor se utiliza para la desduplicación de datos y se devuelve tal cual se encuentra en la propiedad `id` de todas las respuestas, incluidas las de error. Este valor debe ser una cadena Unicode.
Si la solicitud incluye un campo de dirección, debe especificar el valor como un entero. Por ejemplo, `"address": 1`.
El resto de los parámetros que se incluirán en la solicitud dependen de la operación. Todos los parámetros de solicitud son necesarios, excepto el CRC, que se gestiona por separado. Para ver ejemplos, consulta [Solicitudes y respuestas de ejemplo](#modbus-protocol-adapter-connector-examples).

**Ejemplo de entrada: Solicitud de lectura de salidas digitales (coils)**  

```
{
    "request": {
        "operation": "ReadCoilsRequest",
    	"device": 1,
    	"address": 1,
    	"count": 1
    },
    "id": "TestRequest"
}
```

## Datos de salida
<a name="modbus-protocol-adapter-connector-data-output"></a>

Este conector publica las respuestas a las solicitudes de Modbus RTU entrantes.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`modbus/adapter/response`

**Propiedades de mensajes**  
El formato del mensaje de respuesta varía en función de la solicitud correspondiente y el estado de la respuesta. Para ver ejemplos, consulta [Solicitudes y respuestas de ejemplo](#modbus-protocol-adapter-connector-examples).  
Una respuesta para una operación de escritura es simplemente un eco de la solicitud. Aunque no se devuelve información significante para las respuestas de escritura, se recomienda comprobar el estado de la respuesta.
Cada respuesta incluye las siguientes propiedades:  
+ En el objeto `response`:
  + `status`. El estado de la solicitud. El estado puede ser uno de los siguientes valores:
    + `Success`. La solicitud es válida, se envía a la red de Modbus RTU y se devuelve una respuesta.
    + `Exception`. La solicitud es válida, se envía a la red de Modbus RTU y se devuelve una respuesta de excepción. Para obtener más información, consulte [Estado de respuesta: excepción](#modbus-protocol-adapter-connector-response-exception).
    + `No Response`. La solicitud no era válida y el conector detecta el error antes de que la solicitud se envíe a través de la red de Modbus RTU. Para obtener más información, consulte [Estado de respuesta: sin respuesta](#modbus-protocol-adapter-connector-response-noresponse).
  + `device`. El dispositivo al que se envía la solicitud.
  + `operation`. El tipo de solicitud que se envía.
  + `payload`. El contenido de la respuesta que se ha devuelto. Si `status` es `No Response`, este objeto contiene únicamente una propiedad `error` con la descripción de error (por ejemplo, `"error": "[Input/Output] No Response received from the remote unit"`).
+ La propiedad `id`. La ID de la solicitud, que se utilizan para la desduplicación de datos.

**Ejemplo de salida: Correcto**  

```
{
    "response" : {
        "status" : "success",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 1,
        	"bits": [1]
    	}
     },
     "id" : "TestRequest"
}
```

**Ejemplo de salida: Error**  

```
{
    "response" : {
        "status" : "fail",
        "error_message": "Internal Error",
        "error": "Exception",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 129,
        	"exception_code": 2
    	}
     },
     "id" : "TestRequest"
}
```
Para obtener más ejemplos, consulte [Solicitudes y respuestas de ejemplo](#modbus-protocol-adapter-connector-examples).

## Solicitudes y respuestas de Modbus RTU
<a name="modbus-protocol-adapter-connector-requests-responses"></a>

Este conector acepta los parámetros de solicitud de Modbus RTU como [datos de entrada](#modbus-protocol-adapter-connector-data-input) y publica las respuestas como [datos de salida](#modbus-protocol-adapter-connector-data-output).

Se admiten las siguientes operaciones comunes.


| Nombre de la operación en la solicitud | Código de característica en la respuesta | 
| --- | --- | 
| ReadCoilsRequest | 01 | 
| ReadDiscreteInputsRequest | 02 | 
| ReadHoldingRegistersRequest | 03 | 
| ReadInputRegistersRequest | 04 | 
| WriteSingleCoilRequest | 05 | 
| WriteSingleRegisterRequest | 06 | 
| WriteMultipleCoilsRequest | 15 | 
| WriteMultipleRegistersRequest | 16 | 
| MaskWriteRegisterRequest | 22 | 
| ReadWriteMultipleRegistersRequest | 23 | 

### Solicitudes y respuestas de ejemplo
<a name="modbus-protocol-adapter-connector-examples"></a>

A continuación, se muestran ejemplos de solicitudes y respuestas de las operaciones compatibles.

Leer bobinas  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "ReadCoilsRequest",
    	"device": 1,
    	"address": 1,
    	"count": 1
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 1,
        	"bits": [1]
    	}
     },
     "id" : "TestRequest"
}
```

Leer entradas discretas  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "ReadDiscreteInputsRequest",
        "device": 1,
        "address": 1,
        "count": 1
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
        "operation": "ReadDiscreteInputsRequest",
        "payload": {
            "function_code": 2,
            "bits": [1]
        }
     },
     "id" : "TestRequest"
}
```

Leer registros mantenidos  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "ReadHoldingRegistersRequest",
    	"device": 1,
    	"address": 1,
    	"count": 1
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "ReadHoldingRegistersRequest",
    	"payload": {
    	    "function_code": 3,
            "registers": [20,30]
    	}
     },
     "id" : "TestRequest"
}
```

Leer registros de entrada  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "ReadInputRegistersRequest",
    	"device": 1,
    	"address": 1,
    	"value": 1
    },
    "id": "TestRequest"
}
```

Escribir una única bobina  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "WriteSingleCoilRequest",
    	"device": 1,
    	"address": 1,
    	"value": 1
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "WriteSingleCoilRequest",
    	"payload": {
    	    "function_code": 5,
    	    "address": 1,
    	    "value": true
    	}
     },
     "id" : "TestRequest"
```

Escribir un único registro  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "WriteSingleRegisterRequest",
    	"device": 1,
    	"address": 1,
    	"value": 1
    },
    "id": "TestRequest"
}
```

Escribir varias bobinas  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "WriteMultipleCoilsRequest",
    	"device": 1,
    	"address": 1,
    	"values": [1,0,0,1]
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "WriteMultipleCoilsRequest",
    	"payload": {
    	    "function_code": 15,
    	    "address": 1,
    	    "count": 4
    	}
     },
     "id" : "TestRequest"
}
```

Escribir varios registros  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "WriteMultipleRegistersRequest",
    	"device": 1,
    	"address": 1,
    	"values": [20,30,10]
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "WriteMultipleRegistersRequest",
    	"payload": {
    	    "function_code": 23,
    	    "address": 1,
       		"count": 3
    	}
     },
     "id" : "TestRequest"
}
```

Máscara de registro de escritura  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "MaskWriteRegisterRequest",
    	"device": 1,
    	"address": 1,
        "and_mask": 175,
        "or_mask": 1
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "MaskWriteRegisterRequest",
    	"payload": {
    	    "function_code": 22,
            "and_mask": 0,
            "or_mask": 8
    	}
     },
     "id" : "TestRequest"
}
```

Leer y escribir varios registros  
**Ejemplo de solicitud:**  

```
{
    "request": {
        "operation": "ReadWriteMultipleRegistersRequest",
    	"device": 1,
    	"read_address": 1,
        "read_count": 2,
        "write_address": 3,
        "write_registers": [20,30,40]
    },
    "id": "TestRequest"
}
```
**Ejemplo de respuesta:**  

```
{
    "response": {
        "status": "success",
        "device": 1,
    	"operation": "ReadWriteMultipleRegistersRequest",
    	"payload": {
    	    "function_code": 23,
    	    "registers": [10,20,10,20]
    	}
     },
     "id" : "TestRequest"
}
```
Los registros devueltos en esta respuesta son los registros desde los que se lee.

### Estado de respuesta: excepción
<a name="modbus-protocol-adapter-connector-response-exception"></a>

Las excepciones pueden producirse cuando el formato de la solicitud es válido, pero la solicitud no se completó correctamente. En este caso, la respuesta contiene la siguiente información:
+ `status` se establece en `Exception`.
+ `function_code` equivale al código de la característica de la solicitud \$1 128.
+ `exception_code` contiene el código de excepción. Para obtener más información, consulte los códigos de excepción de Modbus.

**Ejemplo:**

```
{
    "response" : {
        "status" : "fail",
        "error_message": "Internal Error",
        "error": "Exception",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"function_code": 129,
        	"exception_code": 2
    	}
     },
     "id" : "TestRequest"
}
```

### Estado de respuesta: sin respuesta
<a name="modbus-protocol-adapter-connector-response-noresponse"></a>

Este conector realiza las comprobaciones de validación de la solicitud de Modbus. Por ejemplo, comprueba los formatos no válidos y los campos que faltan. Si no se supera la validación, el conector no envía la solicitud. En su lugar, devuelve una respuesta que contiene la siguiente información:
+ `status` se establece en `No Response`.
+ `error` contiene el motivo del error.
+ `error_message` contiene el mensaje de error.

**Ejemplos:**

```
{
    "response" : {
        "status" : "fail",
        "error_message": "Invalid address field. Expected <type 'int'>, got <type 'str'>",
        "error": "No Response",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"error": "Invalid address field. Expected <type 'int'>, got <type 'str'>"
    	}
     },
     "id" : "TestRequest"
}
```

Si la solicitud selecciona como destino un dispositivo inexistente o si la red de Modbus RTU no funciona, es posible que aparezca una respuesta `ModbusIOException`, que utiliza el formato de respuesta No.

```
{
    "response" : {
        "status" : "fail",
        "error_message": "[Input/Output] No Response received from the remote unit",
        "error": "No Response",
        "device": 1,
    	"operation": "ReadCoilsRequest",
    	"payload": {
        	"error": "[Input/Output] No Response received from the remote unit"
    	}
     },
     "id" : "TestRequest"
}
```

## Ejemplo de uso
<a name="modbus-protocol-adapter-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#modbus-protocol-adapter-connector-req) para el conector.

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#modbus-protocol-adapter-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-device-resource"></a>Agregue el recurso de dispositivo local requerido y conceda acceso de lectura/escritura a la función de Lambda.

   1. Agregue el conector y configure sus [parámetros](#modbus-protocol-adapter-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#modbus-protocol-adapter-connector-data-input) y enviar [datos de salida](#modbus-protocol-adapter-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utiliza esta suscripción para ver los mensajes de estado en la consola. AWS IoT 

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="modbus-protocol-adapter-connector-usage-example"></a>

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

```
import greengrasssdk
import json

TOPIC_REQUEST = 'modbus/adapter/request'

# Creating a greengrass core sdk client
iot_client = greengrasssdk.client('iot-data')

def create_read_coils_request():
	request = {
		"request": {
			"operation": "ReadCoilsRequest",
			"device": 1,
			"address": 1,
			"count": 1
		},
		"id": "TestRequest"
	}
	return request

def publish_basic_request():
	iot_client.publish(payload=json.dumps(create_read_coils_request()), topic=TOPIC_REQUEST)

publish_basic_request()

def lambda_handler(event, context):
	return
```

## Licencias
<a name="modbus-protocol-adapter-connector-license"></a>

El conector del adaptador del protocolo Modbus-RTU incluye las siguientes licencias y software de terceros:
+ [pymodbus](https://github.com/riptideio/pymodbus/blob/master/README.rst)/BSD
+ [pyserial](https://github.com/pyserial/pyserial)/BSD

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="modbus-protocol-adapter-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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 actualizó el ARN del conector para Región de AWS brindar soporte. Se ha mejorado el registro de errores. | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="modbus-protocol-adapter-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# Conector adaptador de protocolo Modbus-TCP
<a name="modbus-tcp-connector"></a>

El [conector](connectors.md) del adaptador de protocolo Modbus-TCP recopila datos de los dispositivos locales a través del protocolo Modbus-TCP y los publica en las secuencias `StreamManager` seleccionadas.

También puede usar este conector con el conector de IoT SiteWise y su SiteWise puerta de enlace de IoT. Su puerta de enlace debe proporcionar la configuración del conector. Para obtener más información, consulte [Configurar una fuente Modbus TCP](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/configure-modbus-source.html) en la guía del SiteWise usuario de IoT. 

**nota**  
 Este conector se ejecuta en modo [sin aislamiento de contenedores](lambda-group-config.md#no-container-mode), por lo que puede implementarlo en un AWS IoT Greengrass grupo que se ejecute en un contenedor de Docker. 

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/ModbusTCPConnector/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/ModbusTCPConnector/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/ModbusTCPConnector/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#modbus-tcp-connector-changelog).

## Requisitos
<a name="modbus-tcp-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 1 - 3 ]
+ AWS IoT Greengrass Software básico, versión 1.10.2 o posterior.
+ El administrador de transmisiones está activado en el AWS IoT Greengrass grupo.
+ Java 8 instalado en el dispositivo de núcleo y añadido a la variable de entorno `PATH`.

**nota**  
 Este conector solo está disponible en las siguientes regiones:   
ap-southeast-1
ap-southeast-2
eu-central-1
eu-west-1
us-east-1
us-west-2
cn-north-1

------

## Parámetros de conector
<a name="modbus-tcp-connector-param"></a>

Este conector admite los siguientes parámetros:

`LocalStoragePath`  
El directorio del AWS IoT Greengrass host en el que el SiteWise conector de IoT puede escribir datos persistentes. El directorio predeterminado es `/var/sitewise`.  
Nombre para mostrar en la AWS IoT consola: **ruta de almacenamiento local**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|\/.`

`MaximumBufferSize`  
El tamaño máximo en GB para el uso SiteWise del disco de IoT. El tamaño por defecto es de 10 GB.  
Nombre para mostrar en la AWS IoT consola: **tamaño máximo del búfer de disco**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^\s*$|[0-9]+`

`CapabilityConfiguration`  
El conjunto de configuraciones de recopiladores Modbus TCP desde las que el conector recopila datos o a las que se conecta.  
Nombre para mostrar en la AWS IoT consola: **CapabilityConfiguration**  
Obligatorio: `false`  
Tipo: una cadena JSON bien formada que define el conjunto de configuraciones de comentarios admitidas.

A continuación, se muestra un ejemplo de una `CapabilityConfiguration`.

```
{
    "sources": [
        {
            "type": "ModBusTCPSource",
            "name": "SourceName1",
            "measurementDataStreamPrefix": "SourceName1_Prefix",
            "destination": {
                "type": "StreamManager",
                "streamName": "SiteWise_Stream_1",
                "streamBufferSize": 8
            },
            "endpoint": {
                "ipAddress": "127.0.0.1",
                "port": 8081,
                "unitId": 1
            },
            "propertyGroups": [
                {
                    "name": "GroupName",
                    "tagPathDefinitions": [
                        {
                            "type": "ModBusTCPAddress",
                            "tag": "TT-001",
                            "address": "30001",
                            "size": 2,
                            "srcDataType": "float",
                            "transformation": "byteWordSwap",
                            "dstDataType": "double"
                        }
                    ],
                    "scanMode": {
                        "type": "POLL",
                        "rate": 100
                    }
                }
            ]
        }
    ]
}
```

### Ejemplo de creación de conector (AWS CLI)
<a name="modbus-connector-create"></a>

El siguiente comando de la CLI crea un `ConnectorDefinition` con una versión inicial que contiene el conector del adaptador del protocolo Modbus-TCP.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '
{
    "Connectors": [
        {
            "Id": "MyModbusTCPConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ModbusTCP/versions/3",
            "Parameters": {
                "capability_configuration": "{\"version\":1,\"namespace\":\"iotsitewise:modbuscollector:1\",\"configuration\":\"{\"sources\":[{\"type\":\"ModBusTCPSource\",\"name\":\"SourceName1\",\"measurementDataStreamPrefix\":\"\",\"endpoint\":{\"ipAddress\":\"127.0.0.1\",\"port\":8081,\"unitId\":1},\"propertyGroups\":[{\"name\":\"PropertyGroupName\",\"tagPathDefinitions\":[{\"type\":\"ModBusTCPAddress\",\"tag\":\"TT-001\",\"address\":\"30001\",\"size\":2,\"srcDataType\":\"hexdump\",\"transformation\":\"noSwap\",\"dstDataType\":\"string\"}],\"scanMode\":{\"rate\":200,\"type\":\"POLL\"}}],\"destination\":{\"type\":\"StreamManager\",\"streamName\":\"SiteWise_Stream\",\"streamBufferSize\":10},\"minimumInterRequestDuration\":200}]}\"}"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

## Datos de entrada
<a name="modbus-tcp-connector-data-input"></a>

Este conector no acepta mensajes MQTT como datos de entrada.

## Datos de salida
<a name="modbus-tcp-connector-data-output"></a>

Este conector publica datos en `StreamManager`. Debe configurar el flujo de mensajes de destino. Los mensajes de salida tienen la siguiente estructura:

```
{
    "alias": "string",
    "messages": [
        {
            "name": "string",
            "value": boolean|double|integer|string,
            "timestamp": number,
            "quality": "string"
        }
    ]
}
```

## Licencias
<a name="modbus-tcp-connector-license"></a>

El conector adaptador del protocolo Modbus-TCP incluye el siguiente software/licencia de terceros:
+ [Petri Modbus digital](https://github.com/digitalpetri/modbus)

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="modbus-tcp-connector-changelog"></a>

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


| Versión | Cambios | Date | 
| --- | --- | --- | 
| 3 (recomendado) | Esta versión contiene correcciones de errores. | 22 de diciembre de 2021 | 
| 2 | Se agregó soporte para cadenas fuente UTF8 ISO8859 codificadas y ASCII. | 24 de mayo de 2021 | 
| 1 | Versión inicial. | 15 de diciembre de 2020 | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="modbus-tcp-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# Conector Raspberry Pi GPIO
<a name="raspberrypi-gpio-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El [conector](connectors.md) GPIO de Raspberry Pi controla los pines de entrada y salida de uso general (GPIO) en un dispositivo del núcleo de Raspberry Pi.

Este conector sondea pines de entrada a un intervalo especificado y publica los cambios de estado en temas de MQTT. También acepta las solicitudes de lectura y escritura como mensajes de MQTT de las funciones de Lambda definidas por el usuario. Las solicitudes de escritura se utilizan para establecer el pin en tensión alta o baja.

El conector proporciona los parámetros que se usan para designar los pines de entrada y salida. Este comportamiento se configura antes de la implementación del grupo. No se puede cambiar en el tiempo de ejecución.
+ Los pines de entrada se pueden utilizar para recibir datos de dispositivos periféricos.
+ Los pines de salida se pueden utilizar para controlar periféricos o enviar datos a periféricos.

Puede utilizar este conector para admitir muchas situaciones, como:
+ Controlar las luces LED verde, ámbar y roja de un semáforo.
+ Controlar un ventilador (conectado a un relé eléctrico) en función de los datos de un sensor de humedad.
+ Alertar a los empleados de una tienda minorista cuando los clientes pulsen un botón.
+ Usar un interruptor de luz inteligente para controlar otros dispositivos de IoT.

**nota**  
Este conector no es adecuado para aplicaciones que tienen requisitos en tiempo real. Los eventos con períodos cortos podrían pasarse por alto.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#raspberrypi-gpio-connector-changelog).

## Requisitos
<a name="raspberrypi-gpio-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior.
+ Versión 3.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 modelo B o Raspberry Pi 3 modelo B/B\$1. Debe conocer la secuencia de pines de su Raspberry Pi. Para obtener más información, consulte [Secuencia de pines de GPIO](#raspberrypi-gpio-connector-req-pins).
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>Un [recurso de dispositivo local](access-local-resources.md) en el grupo de Greengrass que apunta a `/dev/gpiomem` en la Raspberry Pi. Si crea el recurso en la consola, debe seleccionar la opción **Añadir automáticamente los permisos de grupo de OS del grupo de Linux propietario del recurso**. En la API, defina la propiedad `GroupOwnerSetting.AutoAddGroupOwner` en `true`.
+ <a name="conn-gpio-req-rpi-gpio"></a>El módulo [RPiGPIO](https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/) instalado en la Raspberry Pi. En Raspbian, este módulo se instala de forma predeterminada. Puede utilizar el comando siguiente para volverlo a instalar:

  ```
  sudo pip install RPi.GPIO
  ```

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-gpio-req-pin-seq"></a>Raspberry Pi 4 modelo B o Raspberry Pi 3 modelo B/B\$1. Debe conocer la secuencia de pines de su Raspberry Pi. Para obtener más información, consulte [Secuencia de pines de GPIO](#raspberrypi-gpio-connector-req-pins).
+ <a name="conn-gpio-req-dev-gpiomem-resource"></a>Un [recurso de dispositivo local](access-local-resources.md) en el grupo de Greengrass que apunta a `/dev/gpiomem` en la Raspberry Pi. Si crea el recurso en la consola, debe seleccionar la opción **Añadir automáticamente los permisos de grupo de OS del grupo de Linux propietario del recurso**. En la API, defina la propiedad `GroupOwnerSetting.AutoAddGroupOwner` en `true`.
+ <a name="conn-gpio-req-rpi-gpio"></a>El módulo [RPiGPIO](https://sourceforge.net/p/raspberry-gpio-python/wiki/Home/) instalado en la Raspberry Pi. En Raspbian, este módulo se instala de forma predeterminada. Puede utilizar el comando siguiente para volverlo a instalar:

  ```
  sudo pip install RPi.GPIO
  ```

------

### Secuencia de pines de GPIO
<a name="raspberrypi-gpio-connector-req-pins"></a>

El conector Raspberry Pi GPIO hace referencia a los pines GPIO por el esquema de numeración del sistema en chip (SoC) subyacente, no por la disposición física de los pines GPIO. El orden físico de los pines puede variar en las versiones de Raspberry Pi. Para obtener más información, consulte [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/) en la documentación de Raspberry Pi.

El conector no puede validar que los pines de entrada y salida configurados se asignen correctamente en el hardware subyacente de su Raspberry Pi. Si la configuración de pines no es válida, el conector devuelve un error de tiempo de ejecución cuando se intenta iniciar en el dispositivo. Para solucionar este problema, vuelva a configurar el conector y, a continuación, impleméntelo de nuevo.

**nota**  
Asegúrese de que los periféricos para los pines de GPIO están correctamente cableados para evitar daños de componentes.

## Parámetros de conector
<a name="raspberrypi-gpio-connector-param"></a>

Este conector proporciona los siguientes parámetros:

`InputGpios`  
Lista separada por comas de números de pines de GPIO para configurar como entradas. Si lo desea, añada `U` para establecer una resistencia de subida de pines o `D` para establecer la resistencia de bajada. Ejemplo: `"5,6U,7D"`.  
Nombre para mostrar en la AWS IoT consola: pines GPIO **de entrada**  
Obligatorio: `false`. Debe especificar pines de entrada, de salida o ambos.  
Tipo: `string`  
Patrón válido: `^$|^[0-9]+[UD]?(,[0-9]+[UD]?)*$`

`InputPollPeriod`  
El intervalo (en milisegundos) entre cada operación de sondeo, que comprueba los pines de GPIO de entrada para buscar cambios de estado. El valor mínimo es 1.  
Este valor depende del escenario y del tipo de dispositivos que se sondearán. Por ejemplo, un valor de `50` debe ser lo suficientemente rápido para detectar una pulsación de botón.  
Nombre para mostrar en la AWS IoT consola: período de sondeo del **GPIO de entrada**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|^[1-9][0-9]*$`

`OutputGpios`  
Lista separada por comas de números de pines de GPIO para configurar como salidas. Si lo desea, añada `H` para establecer un estado alto (1) o `L` para establecer un estado bajo (0). Ejemplo: `"8H,9,27L"`.  
Nombre para mostrar en la AWS IoT consola: pines **GPIO de salida**  
Obligatorio: `false`. Debe especificar pines de entrada, de salida o ambos.  
Tipo: `string`  
Patrón válido: `^$|^[0-9]+[HL]?(,[0-9]+[HL]?)*$`

`GpioMem-ResourceId`  
El ID del recurso de dispositivo local que representa `/dev/gpiomem`.  
A este conector se le concede acceso de lectura y escritura al recurso.
Nombre para mostrar en la AWS IoT consola: dispositivo **de recursos for /dev/gpiomem**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

### Ejemplo de creación de conector (AWS CLI)
<a name="raspberrypi-gpio-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector GPIO de Raspberry Pi.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyRaspberryPiGPIOConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/RaspberryPiGPIO/versions/3",
            "Parameters": {
                "GpioMem-ResourceId": "my-gpio-resource",
                "InputGpios": "5,6U,7D",
                "InputPollPeriod": 50,
                "OutputGpios": "8H,9,27L"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="raspberrypi-gpio-connector-data-input"></a>

Este conector acepta solicitudes de lectura o escritura para pines de GPIO en dos temas de MQTT.
+ Solicitudes de lectura en el tema `gpio/+/+/read`.
+ Solicitudes de escritura en el tema `gpio/+/+/write`.

Para publicar en estos temas, reemplace los comodines `+` con el nombre de cosa de núcleo y el número de pines de destino, respectivamente. Por ejemplo:

```
gpio/core-thing-name/gpio-number/read
```

**nota**  
Actualmente, cuando crea una suscripción que utiliza el conector GPIO de Raspberry Pi, debe especificar un valor para al menos uno de los comodines \$1 en el tema.

**Filtro de temas:** `gpio/+/+/read`  
Use este tema para que el conector lea el estado del pin de GPIO que se especifica en el tema.  
El conector publica la respuesta en el tema de salida correspondiente (por ejemplo, `gpio/core-thing-name/gpio-number/state`).    
**Propiedades de mensajes**  
Ninguna. Los mensajes que se envían a este tema se pasan por alto.

**Filtro de temas:** `gpio/+/+/write`  
Use este tema para enviar solicitudes de escritura a un pin de GPIO. Esto indica al conector que establezca el pin de GPIO que se especifica en el tema con una tensión baja o alta.  
+ `0` establece el pin en voltaje bajo.
+ `1` establece el pin en voltaje alto.
El conector publica la respuesta en el tema de salida `/state` correspondiente (por ejemplo, `gpio/core-thing-name/gpio-number/state`).    
**Propiedades de mensajes**  
El valor `0` o `1`, como un número entero o cadena.  
**Ejemplo de entrada**  

```
0
```

## Datos de salida
<a name="raspberrypi-gpio-connector-data-output"></a>

Este conector publica los datos en dos temas:
+ Los cambios de estado de alto o bajo en el tema `gpio/+/+/state`.
+ Los errores en el tema `gpio/+/error`.

**Filtro de temas:** `gpio/+/+/state`  
Use este tema para escuchar los cambios de estado de pines de entrada y respuestas de las solicitudes de lectura. El conector devuelve la cadena `"0"` si el pin se encuentra en un estado bajo, o `"1"` si se trata de un estado alto.  
Al publicar en este tema, el conector reemplaza los comodines `+` por el nombre de cosa de núcleo y el pin de destino, respectivamente. Por ejemplo:  

```
gpio/core-thing-name/gpio-number/state
```
Actualmente, cuando crea una suscripción que utiliza el conector GPIO de Raspberry Pi, debe especificar un valor para al menos uno de los comodines \$1 en el tema.  
**Ejemplo de salida**  

```
0
```

**Filtro de temas:** `gpio/+/error`  
Use este tema para escuchar errores. El conector publica en este tema como resultado de una solicitud no válida (por ejemplo, cuando se solicita un cambio de estado en un pin de entrada).  
Al publicar en este tema, el conector reemplaza el comodín `+` por el nombre de cosa de núcleo.    
**Ejemplo de salida**  

```
{
   "topic": "gpio/my-core-thing/22/write",
   "error": "Invalid GPIO operation",
   "long_description": "GPIO 22 is configured as an INPUT GPIO. Write operations are not permitted."
 }
```

## Ejemplo de uso
<a name="raspberrypi-gpio-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#raspberrypi-gpio-connector-req) para el conector.

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#raspberrypi-gpio-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-device-resource"></a>Agregue el recurso de dispositivo local requerido y conceda acceso de lectura/escritura a la función de Lambda.

   1. Agregue el conector y configure sus [parámetros](#raspberrypi-gpio-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#raspberrypi-gpio-connector-data-input) y enviar [datos de salida](#raspberrypi-gpio-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Esta suscripción se utiliza para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="raspberrypi-gpio-connector-usage-example"></a>

El siguiente ejemplo de función de Lambda envía un mensaje de entrada al conector. En este ejemplo, se envían solicitudes de lectura de un conjunto de pins de GPIO de entrada. En él se muestra cómo crear temas utilizando el nombre de objeto y el número pin del dispositivo central.

```
import greengrasssdk
import json
import os

iot_client = greengrasssdk.client('iot-data')
INPUT_GPIOS = [6, 17, 22]

thingName = os.environ['AWS_IOT_THING_NAME']

def get_read_topic(gpio_num):
    return '/'.join(['gpio', thingName, str(gpio_num), 'read'])

def get_write_topic(gpio_num):
    return '/'.join(['gpio', thingName, str(gpio_num), 'write'])

def send_message_to_connector(topic, message=''):
    iot_client.publish(topic=topic, payload=str(message))

def set_gpio_state(gpio, state):
    send_message_to_connector(get_write_topic(gpio), str(state))

def read_gpio_state(gpio):
    send_message_to_connector(get_read_topic(gpio))

def publish_basic_message():
    for i in INPUT_GPIOS:
    	read_gpio_state(i)

publish_basic_message()

def lambda_handler(event, context):
    return
```

## Licencias
<a name="raspberrypi-gpio-connector-license"></a>

El conector GPIO de Raspberry Pi incluye las siguientes licencias y software de terceros:
+ [RPi.GPIO /MIT](https://pypi.org/project/RPi.GPIO/)

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="raspberrypi-gpio-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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 actualizó el ARN del conector para Región de AWS brindar soporte. | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="raspberrypi-gpio-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [GPIO](https://www.raspberrypi.org/documentation/usage/gpio/) en la documentación de Raspberry Pi

# Conector Serial Stream
<a name="serial-stream-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El [conector](connectors.md) Serial Stream lee y escribe en un puerto serie de un dispositivo AWS IoT Greengrass central.

Este conector es compatible con dos modos de operación:
+ **Lectura bajo demanda**. Recibe las solicitudes de lectura y escritura en temas de MQTT y publica la respuesta de la operación de lectura o el estado de la operación de escritura.
+ **Lectura de sondeo**. Lee desde el puerto de serie a intervalos regulares. Este modo también admite Read-On-Demand solicitudes.

**nota**  
Las solicitudes de lectura se limitan a una longitud de lectura máxima de 63994 bytes. Las solicitudes de escritura se limitan a una longitud de datos máxima de 128000 bytes.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 3 | `arn:aws:greengrass:region::/connectors/SerialStream/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/SerialStream/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/SerialStream/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#serial-stream-connector-changelog).

## Requisitos
<a name="serial-stream-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-serial-stream-req-serial-port-resource"></a>Un [recurso de dispositivo local](access-local-resources.md) en el grupo Greengrass que apunta al puerto serie de destino.
**nota**  
Antes de implementar este conector, le recomendamos que configure el puerto de serie y verifique que puede leer y escribir en él. 

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-serial-stream-req-serial-port-resource"></a>Un [recurso de dispositivo local](access-local-resources.md) en el grupo Greengrass que apunta al puerto serie de destino.
**nota**  
Antes de implementar este conector, le recomendamos que configure el puerto de serie y verifique que puede leer y escribir en él. 

------

## Parámetros de conector
<a name="serial-stream-connector-param"></a>

Este conector proporciona los siguientes parámetros:

`BaudRate`  
La velocidad en baudios de la conexión de serie.  
Nombre para mostrar en la AWS IoT consola: velocidad en **baudios**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `110, 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 56000, 57600, 115200, 230400`  
Patrón válido: `^110$|^300$|^600$|^1200$|^2400$|^4800$|^9600$|^14400$|^19200$|^28800$|^38400$|^56000$|^57600$|^115200$|^230400$`

`Timeout`  
El tiempo de espera (en segundos) para una operación de lectura.  
**Nombre para mostrar en la AWS IoT consola: Timeout**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `1 - 59`  
Patrón válido: `^([1-9]|[1-5][0-9])$`

`SerialPort`  
La ruta absoluta al puerto de serie físico del dispositivo. Esta es la ruta de origen que haya especificado para el recurso de dispositivo local.  
Nombre para mostrar en la AWS IoT consola: **puerto serie**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[/a-zA-Z0-9_-]+`

`SerialPort-ResourceId`  
El ID del recurso de dispositivo local que representa el puerto de serie físico.  
A este conector se le concede acceso de lectura y escritura al recurso.
Nombre para mostrar en la AWS IoT consola: **recurso de puerto serie**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[a-zA-Z0-9_-]+`

`PollingRead`  
Establece el modo de lectura: Polling-Read o. Read-On-Demand  
+ Para el modo de lectura de sondeo, especifique `true`. En este modo, se necesitan las propiedades `PollingInterval`, `PollingReadType` y `PollingReadLength`.
+ Para el Read-On-Demand modo, especifique. `false` En este modo, los valores de tipo y longitud se especifican en la solicitud de lectura.
Nombre para mostrar en la AWS IoT consola: **modo de lectura**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `true, false`  
Patrón válido: `^([Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$`

`PollingReadLength`  
La longitud de los datos (en bytes) que se leen en cada operación de lectura de sondeo. Esto se aplica únicamente cuando se utiliza de modo de lectura de sondeo.  
Nombre para mostrar en la AWS IoT consola: **longitud de lectura del sondeo**  
Obligatorio: `false`. Esta propiedad es obligatoria cuando `PollingRead` es `true`.  
Tipo: `string`  
Patrón válido: `^(|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-2][0-9]{3}|63[0-8][0-9]{2}|639[0-8][0-9]|6399[0-4])$`

`PollingReadInterval`  
El intervalo (en segundos) en el que tiene lugar la lectura de sondeo. Esto se aplica únicamente cuando se utiliza de modo de lectura de sondeo.  
Nombre para mostrar en la AWS IoT consola: **intervalo de lectura del sondeo**  
Obligatorio: `false`. Esta propiedad es obligatoria cuando `PollingRead` es `true`.  
Tipo: `string`  
Valores válidos: 1 - 999  
Patrón válido: `^(|[1-9]|[1-9][0-9]|[1-9][0-9][0-9])$`

`PollingReadType`  
El tipo de datos que el subproceso de sondeo lee. Esto se aplica únicamente cuando se utiliza de modo de lectura de sondeo.  
Nombre para mostrar en la AWS IoT consola: **tipo de lectura de sondeo**  
Obligatorio: `false`. Esta propiedad es obligatoria cuando `PollingRead` es `true`.  
Tipo: `string`  
Valores válidos: `ascii, hex`  
Patrón válido: `^(|[Aa][Ss][Cc][Ii][Ii]|[Hh][Ee][Xx])$`

`RtsCts`  
Indica si se debe habilitar el control de flujo RTS/CTS. El valor predeterminado es `false`. Para obtener más información, consulte [RTS, CTS, and RTR](https://en.wikipedia.org/wiki/RS-232#RTS,_CTS,_and_RTR).   
Nombre para mostrar en la AWS IoT consola: control de flujo **RTS/CTS**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `true, false`  
Patrón válido: `^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$`

`XonXoff`  
Indica si se debe habilitar el control de flujo de software. El valor predeterminado es `false`. Para obtener más información, consulte [Software flow control](https://en.wikipedia.org/wiki/Software_flow_control).  
Nombre para mostrar en la AWS IoT consola: Control de flujo por **software**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `true, false`  
Patrón válido: `^(|[Tt][Rr][Uu][Ee]|[Ff][Aa][Ll][Ss][Ee])$`

`Parity`  
La paridad del puerto de serie. El valor predeterminado es `N`. Para obtener más información, consulte [Parity](https://en.wikipedia.org/wiki/Serial_port#Parity).   
Nombre para mostrar en la AWS IoT consola: **paridad de puertos serie**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `N, E, O, S, M`  
Patrón válido: `^(|[NEOSMneosm])$`

### Ejemplo de creación de conector (AWS CLI)
<a name="serial-stream-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector Serial Stream. Configura el conector para el modo de lectura de sondeo.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MySerialStreamConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/SerialStream/versions/3",
            "Parameters": {
                "BaudRate" : "9600",
                "Timeout" : "25",
                "SerialPort" : "/dev/serial1",
                "SerialPort-ResourceId" : "my-serial-port-resource",
                "PollingRead" : "true",
                "PollingReadLength" : "30",
                "PollingReadInterval" : "30",
                "PollingReadType" : "hex"
            }
        }
    ]
}'
```

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="serial-stream-connector-data-input"></a>

Este conector acepta las solicitudes de lectura o escritura para los puertos de serie en dos temas de MQTT. Los mensajes de entrada deben tener un formato JSON válido.
+ Solicitudes de lectura en el tema `serial/+/read/#`.
+ Solicitudes de escritura en el tema `serial/+/write/#`.

Para publicar en estos temas, sustituya el comodín `+` con el nombre de cosa de núcleo y el comodín `#` con la ruta al puerto de serie. Por ejemplo:

```
serial/core-thing-name/read/dev/serial-port
```

**Filtro de temas:** `serial/+/read/#`  
Consulte este tema para enviar las solicitudes de lectura bajo demanda a un pin de serie. Las solicitudes de lectura se limitan a una longitud de lectura máxima de 63994 bytes.    
**Propiedades de mensajes**    
`readLength`  
La longitud de los datos para leer desde el puerto de serie.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[1-9][0-9]*$`  
`type`  
El tipo de datos para leer.  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `ascii, hex`  
Patrón válido: `(?i)^(ascii|hex)$`  
`id`  
Un ID arbitrario para la solicitud. Esta propiedad se usa para asignar una solicitud de entrada a una respuesta de salida.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `.+`  
**Ejemplo de entrada**  

```
{
    "readLength": "30",
    "type": "ascii",
    "id": "abc123"
}
```

**Filtro de temas:** `serial/+/write/#`  
Use este tema para enviar solicitudes de escritura a un pin de serie. Las solicitudes de escritura se limitan a una longitud de datos máxima de 128000 bytes.    
**Propiedades de mensajes**    
`data`  
La cadena para escribir en el puerto de serie.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[1-9][0-9]*$`  
`type`  
El tipo de datos para leer.  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `ascii, hex`  
Patrón válido: `^(ascii|hex|ASCII|HEX)$`  
`id`  
Un ID arbitrario para la solicitud. Esta propiedad se usa para asignar una solicitud de entrada a una respuesta de salida.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `.+`  
**Ejemplo entrada: solicitud ASCII**  

```
{
    "data": "random serial data",
    "type": "ascii",
    "id": "abc123"
}
```  
**Ejemplo entrada: solicitud hex**  

```
{
    "data": "base64 encoded data",
    "type": "hex",
    "id": "abc123"
}
```

## Datos de salida
<a name="serial-stream-connector-data-output"></a>

El conector publica los datos de salida en dos temas:
+ La información del estado del conector en el tema `serial/+/status/#`.
+ Las respuestas de solicitudes de lectura en el tema `serial/+/read_response/#`.

Al publicar en este tema, el conector sustituye el comodín `+` con el nombre de cosa de núcleo y el comodín `#` con la ruta al puerto de serie. Por ejemplo:

```
serial/core-thing-name/status/dev/serial-port
```

**Filtro de temas:** `serial/+/status/#`  
Consulte este tema para escuchar el estado de las solicitudes de lectura y escritura. Si una propiedad `id` está incluida en la solicitud, se devuelve en la respuesta.    
**Ejemplo de salida: Correcto**  

```
{
    "response": {
        "status": "success"
    },
    "id": "abc123"
}
```  
**Ejemplo de salida: Error**  
Una respuesta de error incluye una propiedad `error_message` que describe el error o el tiempo de espera que se produce cuando se realiza la operación de lectura o escritura.  

```
{
    "response": {
        "status": "fail",
        "error_message": "Could not write to port"
    },
    "id": "abc123"
}
```

**Filtro de temas:** `serial/+/read_response/#`  
Utilice este tema para recibir los datos de respuesta de una operación de lectura. Los datos de respuesta son Base64 codificados si el tipo es `hex`.    
**Ejemplo de salida**  

```
{
    "data": "output of serial read operation"
    "id": "abc123"
}
```

## Ejemplo de uso
<a name="serial-stream-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#serial-stream-connector-req) para el conector.

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#serial-stream-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-device-resource"></a>Agregue el recurso de dispositivo local requerido y conceda acceso de lectura/escritura a la función de Lambda.

   1. Agregue el conector a su grupo y configure sus [parámetros](#serial-stream-connector-param).

   1. Agregue suscripciones al grupo que permitan que el conector reciba [datos de entrada](#serial-stream-connector-data-input) y envíe [datos de salida](#serial-stream-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Esta suscripción se utiliza para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="serial-stream-connector-usage-example"></a>

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

```
import greengrasssdk
import json

TOPIC_REQUEST = 'serial/CORE_THING_NAME/write/dev/serial1'

# Creating a greengrass core sdk client
iot_client = greengrasssdk.client('iot-data')

def create_serial_stream_request():
	request = {
		"data": "TEST",
		"type": "ascii",
		"id": "abc123"
	}
	return request

def publish_basic_request():
	iot_client.publish(payload=json.dumps(create_serial_stream_request()), topic=TOPIC_REQUEST)

publish_basic_request()

def lambda_handler(event, context):
	return
```

## Licencias
<a name="serial-stream-connector-license"></a>

El conector Serial Stream incluye el siguiente software y licencia de terceros:
+ [pyserial](https://github.com/pyserial/pyserial)/BSD

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="serial-stream-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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 actualizó el ARN del conector para Región de AWS brindar soporte. | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="serial-stream-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# ServiceNow MetricBase Conector de integración
<a name="servicenow-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El [conector](connectors.md) de ServiceNow MetricBase integración publica métricas de series temporales de los dispositivos Greengrass para. ServiceNow MetricBase Esto permite almacenar, analizar y visualizar datos de serie temporal desde el entorno del núcleo de Greengrass y actuar en eventos locales.

Este conector recibe datos de series temporales sobre un tema de MQTT y los publica en la ServiceNow API a intervalos regulares.

Puede utilizar este conector para admitir situaciones como:
+ Crear alertas basadas en umbrales y alarmas en función de los datos de serie temporal recogidos mediante dispositivos Greengrass.
+ Utilice los datos de los servicios de tiempo de los dispositivos Greengrass con aplicaciones personalizadas integradas en la ServiceNow plataforma.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#servicenow-connector-changelog).

## Requisitos
<a name="servicenow-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior. AWS IoT Greengrass [debe configurarse para admitir secretos locales, tal y como se describe en los requisitos de confidencialidad.](secrets.md#secrets-reqs)
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-servicenow-req-servicenow-account"></a>Una ServiceNow cuenta con una suscripción activada a MetricBase. Además, se deben crear una métrica y una tabla de métricas en la cuenta. Para obtener más información, consulte [MetricBase](https://docs.servicenow.com/bundle/london-servicenow-platform/page/administer/metricbase/concept/metricbase.html)la ServiceNow documentación.
+ <a name="conn-servicenow-req-secret"></a>Un tipo de texto secreto AWS Secrets Manager que almacena el nombre de usuario y la contraseña para iniciar sesión en la ServiceNow instancia con una autenticación básica. El secreto debe contener las claves "user" and "password" con los valores correspondientes. Para obtener más información, consulte [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.
+ Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Secrets Manager. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass Software básico, versión 1.7 o posterior. AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos](secrets.md#secrets-reqs) de confidencialidad.
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-servicenow-req-servicenow-account"></a>Una ServiceNow cuenta con una suscripción activada a MetricBase. Además, se deben crear una métrica y una tabla de métricas en la cuenta. Para obtener más información, consulte [MetricBase](https://docs.servicenow.com/bundle/london-servicenow-platform/page/administer/metricbase/concept/metricbase.html)la ServiceNow documentación.
+ <a name="conn-servicenow-req-secret"></a>Un tipo de texto secreto AWS Secrets Manager que almacena el nombre de usuario y la contraseña para iniciar sesión en la ServiceNow instancia con una autenticación básica. El secreto debe contener las claves "user" and "password" con los valores correspondientes. Para obtener más información, consulte [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.
+ Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Secrets Manager. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

------

## Parámetros de conector
<a name="servicenow-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Version 4 ]

`PublishInterval`  <a name="service-now-PublishInterval"></a>
El número máximo de segundos que hay que esperar entre una publicación y otra ServiceNow. El valor máximo es 900.  
El conector se publica hasta el ServiceNow momento en `PublishBatchSize` que se alcanza o `PublishInterval` caduca.  
Mostrar el nombre en la AWS IoT consola: **intervalo de publicación en segundos**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `1 - 900`  
Patrón válido: `[1-9]|[1-9]\d|[1-9]\d\d|900`

`PublishBatchSize`  <a name="service-now-PublishBatchSize"></a>
El número máximo de valores métricos que se pueden agrupar en lotes antes de publicarlos ServiceNow.  
El conector se publica ServiceNow cuando `PublishBatchSize` se alcanza o `PublishInterval` caduca.  
Mostrar el nombre en la AWS IoT consola: **tamaño del lote de publicación**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`InstanceName`  <a name="service-now-InstanceName"></a>
El nombre de la instancia a la que se va a conectar ServiceNow.  
Nombre para mostrar en la AWS IoT consola: **nombre de la ServiceNow instancia**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`DefaultTableName`  <a name="service-now-DefaultTableName"></a>
El nombre de la tabla que contiene la MetricBase base de datos de series temporales `GlideRecord` asociada a la misma. La propiedad `table` de la carga de mensajes de entrada se puede utilizar para anular este valor.  
Nombre para mostrar en la AWS IoT consola: **nombre de la tabla que contiene la métrica**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MaxMetricsToRetain`  <a name="service-now-MaxMetricsToRetain"></a>
El número máximo de métricas para guardar en la memoria antes de que se sustituyen por nuevas métricas.  
Este límite se aplica cuando no hay conexión a Internet y el conector comienza a almacenar en búfer las métricas que se van a publicar más adelante. Cuando el búfer está lleno, la métricas más antiguas se sustituyen por nuevas.  
Las métricas no se guardan si el proceso de host para el conector se interrumpe. Por ejemplo, este grupo puede ocurrir durante la implementación de grupos o cuando el dispositivo se reinicia.
Este valor debe ser mayor que el tamaño del lote y lo suficientemente grande como para almacenar mensajes en función de la velocidad de entrada de los mensajes de MQTT.  
Nombre para mostrar en la AWS IoT consola: número **máximo de métricas que se deben conservar en la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`AuthSecretArn`  <a name="service-now-AuthSecretArn"></a>
El secreto AWS Secrets Manager que almacena el nombre ServiceNow de usuario y la contraseña. Esto debe ser un secreto de tipo de texto. El secreto debe contener las claves "user" and "password" con los valores correspondientes.  
Nombre para mostrar en la AWS IoT consola: **ARN del secreto de autenticación**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`AuthSecretArn-ResourceId`  <a name="service-now-AuthSecretArn-ResourceId"></a>
El recurso secreto del grupo que hace referencia al secreto de Secrets Manager para las ServiceNow credenciales.  
Nombre para mostrar en la AWS IoT consola: recurso de **token de autenticación**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

------
#### [ Version 1 - 3 ]

`PublishInterval`  <a name="service-now-PublishInterval"></a>
El número máximo de segundos que se debe esperar entre una publicación y otra ServiceNow. El valor máximo es 900.  
El conector se publica hasta el ServiceNow momento en `PublishBatchSize` que se alcanza o `PublishInterval` caduca.  
Mostrar el nombre en la AWS IoT consola: **intervalo de publicación en segundos**  
Obligatorio: `true`  
Tipo: `string`  
Valores válidos: `1 - 900`  
Patrón válido: `[1-9]|[1-9]\d|[1-9]\d\d|900`

`PublishBatchSize`  <a name="service-now-PublishBatchSize"></a>
El número máximo de valores métricos que se pueden agrupar en lotes antes de publicarlos ServiceNow.  
El conector se publica ServiceNow cuando `PublishBatchSize` se alcanza o `PublishInterval` caduca.  
Mostrar el nombre en la AWS IoT consola: **tamaño del lote de publicación**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`InstanceName`  <a name="service-now-InstanceName"></a>
El nombre de la instancia a la que se va a conectar ServiceNow.  
Nombre para mostrar en la AWS IoT consola: **nombre de la ServiceNow instancia**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`DefaultTableName`  <a name="service-now-DefaultTableName"></a>
El nombre de la tabla que contiene la MetricBase base de datos de series temporales `GlideRecord` asociada a la misma. La propiedad `table` de la carga de mensajes de entrada se puede utilizar para anular este valor.  
Nombre para mostrar en la AWS IoT consola: **nombre de la tabla que contiene la métrica**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`MaxMetricsToRetain`  <a name="service-now-MaxMetricsToRetain"></a>
El número máximo de métricas para guardar en la memoria antes de que se sustituyen por nuevas métricas.  
Este límite se aplica cuando no hay conexión a Internet y el conector comienza a almacenar en búfer las métricas que se van a publicar más adelante. Cuando el búfer está lleno, la métricas más antiguas se sustituyen por nuevas.  
Las métricas no se guardan si el proceso de host para el conector se interrumpe. Por ejemplo, este grupo puede ocurrir durante la implementación de grupos o cuando el dispositivo se reinicia.
Este valor debe ser mayor que el tamaño del lote y lo suficientemente grande como para almacenar mensajes en función de la velocidad de entrada de los mensajes de MQTT.  
Nombre para mostrar en la AWS IoT consola: número **máximo de métricas que se deben conservar en la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`AuthSecretArn`  <a name="service-now-AuthSecretArn"></a>
El secreto AWS Secrets Manager que almacena el nombre ServiceNow de usuario y la contraseña. Esto debe ser un secreto de tipo de texto. El secreto debe contener las claves "user" and "password" con los valores correspondientes.  
Nombre para mostrar en la AWS IoT consola: **ARN del secreto de autenticación**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`AuthSecretArn-ResourceId`  <a name="service-now-AuthSecretArn-ResourceId"></a>
El recurso secreto del grupo que hace referencia al secreto de Secrets Manager para las ServiceNow credenciales.  
Nombre para mostrar en la AWS IoT consola: recurso de **token de autenticación**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="servicenow-connector-create"></a>

El siguiente comando CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector de ServiceNow MetricBase integración.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyServiceNowMetricBaseIntegrationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/ServiceNowMetricBaseIntegration/versions/4",
            "Parameters": {
                "PublishInterval" : "10",
                "PublishBatchSize" : "50",
                "InstanceName" : "myinstance",
                "DefaultTableName" : "u_greengrass_app",
                "MaxMetricsToRetain" : "20000",
                "AuthSecretArn" : "arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "AuthSecretArn-ResourceId" : "MySecretResource", 
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="servicenow-connector-data-input"></a>

Este conector acepta métricas de series temporales sobre un tema de MQTT y las publica en. ServiceNow Los mensajes de entrada deben tener un formato JSON válido.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`servicenow/metricbase/metric`

**Propiedades de mensajes**    
`request`  
Información acerca de la tabla, el registro y la métrica. Esta solicitud representa el objeto `seriesRef` en una solicitud POST de serie temporal. Para obtener más información, consulte [Clotho Time Series API - POST](https://docs.servicenow.com/bundle/london-application-development/page/integrate/inbound-rest/concept/Clotho-Time-Series-API.html#clotho-POST-put).  
  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`subject`  
El parámetro `sys_id` del registro específico en la tabla.  
Obligatorio: `true`  
Tipo: `string`  
`metric_name`  
El nombre del campo de métrica.  
Obligatorio: `true`  
Tipo: `string`  
`table`  
El nombre de la tabla en la que se almacenará el registro. Especifique este valor para anular el parámetro `DefaultTableName`.  
Obligatorio: `false`  
Tipo: `string`  
`value`  
El valor del punto de datos individual.  
Obligatorio: `true`  
Tipo: `float`  
`timestamp`  
La marca temporal del punto de datos individual. El valor predeterminado es la hora actual.  
Obligatorio: `false`  
Tipo: `string`

**Ejemplo de entrada**  

```
{
    "request": {
        "subject":"ef43c6d40a0a0b5700c77f9bf387afe3",
        "metric_name":"u_count",
        "table": "u_greengrass_app"
        "value": 1.0,
        "timestamp": "2018-10-14T10:30:00"
    }
}
```

## Datos de salida
<a name="servicenow-connector-data-output"></a>

Este conector publica información de estado como datos de salida en un tema MQTT.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`servicenow/metricbase/metric/status`

**Ejemplo de salida: Correcto**  

```
{
    "response": {
        "metric_name": "Errors",
        "table_name": "GliderProd",
        "processed_on": "2018-10-14T10:35:00",
        "response_id": "khjKSkj132qwr23fcba",
        "status": "success",
        "values": [
            {
                "timestamp": "2016-10-14T10:30:00",
                "value": 1.0
            },
            {
                "timestamp": "2016-10-14T10:31:00",
                "value": 1.1
            }
        ]
    }
}
```

**Ejemplo de salida: Error**  

```
{
    "response": {
        "error": "InvalidInputException",
        "error_message": "metric value is invalid",
        "status": "fail"
    }
}
```
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.

## Ejemplo de uso
<a name="servicenow-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#servicenow-connector-req) para el conector.

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#servicenow-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-secret-resource"></a>Agregue el recurso secreto requerido y conceda acceso de lectura a la función de Lambda.

   1. Agregue el conector y configure sus [parámetros](#servicenow-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#servicenow-connector-data-input) y enviar [datos de salida](#servicenow-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utiliza esta suscripción para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="servicenow-connector-usage-example"></a>

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

```
import greengrasssdk
import json

iot_client = greengrasssdk.client('iot-data')
SEND_TOPIC = 'servicenow/metricbase/metric'

def create_request_with_all_fields():
    return {
        "request": {
             "subject": '2efdf6badbd523803acfae441b961961',
             "metric_name": 'u_count',
             "value": 1234,
             "timestamp": '2018-10-20T20:22:20',
             "table": 'u_greengrass_metricbase_test'
        }
    }

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
```

## Licencias
<a name="servicenow-connector-license"></a>

El conector ServiceNow MetricBase de integración incluye el siguiente software o licencia de terceros:
+ [pysnow](https://github.com/rbw/pysnow)/MIT

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="servicenow-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>Se ha agregado el parámetro `IsolationMode` para configurar el modo de creación de contenedores del conector. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="servicenow-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# Conector SNS
<a name="sns-connector"></a>

El [conector](connectors.md) SNS publica mensajes en un tema de Amazon SNS. Esto permite a los servidores web, direcciones de correo electrónico y otros suscriptores de mensajes responder a los eventos del grupo de Greengrass.

Este conector recibe información de mensaje de SNS sobre un tema de MQTT y, a continuación, envía el mensaje a un tema de SNS especificado. Si lo desea, puede utilizar las funciones de Lambda personalizadas para implementar los filtros o la lógica de formato en los mensajes antes de que se publiquen en este conector.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/SNS/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/SNS/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/SNS/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/SNS/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#sns-connector-changelog).

## Requisitos
<a name="sns-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-sns-req-sns-config"></a>Un tema de SNS configurado. Para obtener instrucciones, consulte el [tema Creación de un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.
+ <a name="conn-sns-req-iam-policy"></a>El [rol del grupo Greengrass](group-role.md) se configuró para permitir la `sns:Publish` acción en el Amazon de destino SNStopic, como se muestra en el siguiente ejemplo de política de IAM.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "sns:Publish"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:sns:us-east-1:123456789012:topic-name"
              ]
          }
      ]
  }
  ```

------

  Este conector le permite anular dinámicamente el tema predeterminado en la carga de mensajes de entrada. Si su implementación utiliza esta característica, la política de IAM debe permitir a `sns:Publish` el permiso en todos los temas de destino. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1)

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0"></a>AWS IoT Greengrass Software básico v1.7 o posterior.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-sns-req-sns-config"></a>Un tema de SNS configurado. Para obtener instrucciones, consulte el [tema Creación de un tema de Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-tutorial-create-topic.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.
+ <a name="conn-sns-req-iam-policy"></a>El [rol del grupo Greengrass](group-role.md) se configuró para permitir la `sns:Publish` acción en el Amazon de destino SNStopic, como se muestra en el siguiente ejemplo de política de IAM.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "Stmt1528133056761",
              "Action": [
                  "sns:Publish"
              ],
              "Effect": "Allow",
              "Resource": [
              "arn:aws:sns:us-east-1:123456789012:topic-name"
              ]
          }
      ]
  }
  ```

------

  Este conector le permite anular dinámicamente el tema predeterminado en la carga de mensajes de entrada. Si su implementación utiliza esta característica, la política de IAM debe permitir a `sns:Publish` el permiso en todos los temas de destino. Puede conceder acceso granular o condicional a recursos (por ejemplo, utilizando un esquema de nomenclatura con comodín \$1)

  <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

------

## Parámetros de conector
<a name="sns-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Version 4 ]

`DefaultSNSArn`  <a name="sns-DefaultSNSArn"></a>
El ARN del tema de SNS predeterminado en el que publicar mensajes. El tema de destino se puede anular mediante la propiedad `sns_topic_arn` en la carga de mensajes de entrada.  
El rol de grupo debe permitir el permiso `sns:Publish` en todos los temas de destino. Para obtener más información, consulte [Requisitos](#sns-connector-req).
Nombre para mostrar en la AWS IoT consola: ARN del **tema SNS predeterminado**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

------
#### [ Versions 1 - 3 ]

`DefaultSNSArn`  <a name="sns-DefaultSNSArn"></a>
El ARN del tema de SNS predeterminado en el que publicar mensajes. El tema de destino se puede anular mediante la propiedad `sns_topic_arn` en la carga de mensajes de entrada.  
El rol de grupo debe permitir el permiso `sns:Publish` en todos los temas de destino. Para obtener más información, consulte [Requisitos](#sns-connector-req).
Nombre para mostrar en la AWS IoT consola: ARN del **tema SNS predeterminado**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="sns-connector-create"></a>

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

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MySNSConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/SNS/versions/4",
            "Parameters": {
                "DefaultSNSArn": "arn:aws:sns:region:account-id:topic-name",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="sns-connector-data-input"></a>

Este conector acepta la información de mensaje de SNS sobre un tema de MQTT y, a continuación, publica el mensaje tal cual en el tema de SNS de destino. Los mensajes de entrada deben tener un formato JSON válido.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`sns/message`

**Propiedades de mensajes**    
`request`  
Información sobre los mensajes que se envían al tema de SNS.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`message`  
El contenido del mensaje como cadena o en formato JSON. Para ver ejemplos, consulte [Ejemplo de entrada](#sns-connector-data-input-example).  
Para enviar JSON, la propiedad `message_structure` debe establecerse en `json` y el mensaje debe ser un objeto JSON codificado como cadena que contenga una clave `default`.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.*`  
`subject`  
El asunto del mensaje.  
Obligatorio: `false`  
Escriba: texto ASCII, de hasta 100 caracteres. Este debe empezar por una letra, un número o un signo de puntuación. Este no debe incluir saltos de línea ni caracteres de control.  
Patrón válido: `.*`  
`sns_topic_arn`  
El ARN del tema de SNS en el que publicar mensajes. Si se especifica, el conector publica en este tema en lugar del tema predeterminado.  
El rol de grupo debe permitir el permiso `sns:Publish` en cualquier tema de destino. Para obtener más información, consulte [Requisitos](#sns-connector-req).
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `arn:aws:sns:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):([a-zA-Z0-9-_]+)$`  
`message_structure`  
La estructura del mensaje.  
Obligatorio: `false`. Se debe especificar para enviar un mensaje JSON.  
Tipo: `string`  
Valores válidos: `json`  
`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 no utiliza esta característica, puede omitir esta propiedad o especificar una cadena vacía.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `.*`

**Límites**  
El tamaño del mensaje está limitado a un tamaño de mensaje de SNS máximo de 256 KB.

**Ejemplo de entrada: mensaje en cadena**  <a name="sns-connector-data-input-example"></a>
Este ejemplo envía un mensaje en cadena. Especifica la propiedad `sns_topic_arn` opcional, que anula el tema de destino predeterminado.  

```
{
    "request": {
        "subject": "Message subject",
        "message": "Message data",
        "sns_topic_arn": "arn:aws:sns:region:account-id:topic2-name"
    },
    "id": "request123"
}
```

**Ejemplo de entrada: mensaje JSON**  
Este ejemplo envía un mensaje como objeto JSON codificado en cadena que incluye la clave `default`.  

```
{
    "request": {
        "subject": "Message subject",
        "message": "{ \"default\": \"Message data\" }",
        "message_structure": "json"
    },
    "id": "request123"
}
```

## Datos de salida
<a name="sns-connector-data-output"></a>

Este conector publica información de estado como datos de salida en un tema MQTT.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`sns/message/status`

**Ejemplo de salida: Correcto**  

```
{
    "response": {
        "sns_message_id": "f80a81bc-f44c-56f2-a0f0-d5af6a727c8a",
        "status": "success"
    },
    "id": "request123"
}
```

**Ejemplo de salida: Error**  

```
{
   "response" : {
        "error": "InvalidInputException",
        "error_message": "SNS Topic Arn is invalid",
        "status": "fail"
   },
   "id": "request123"
}
```

## Ejemplo de uso
<a name="sns-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#sns-connector-req) para el conector.

   <a name="set-up-group-role"></a>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)](group-role.md#manage-group-role-console) o [Administración del rol de grupo de Greengrass (CLI)](group-role.md#manage-group-role-cli).

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#sns-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. Agregue el conector y configure sus [parámetros](#sns-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#sns-connector-data-input) y enviar [datos de salida](#sns-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Esta suscripción se utiliza para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="sns-connector-usage-example"></a>

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 = 'sns/message'

def create_request_with_all_fields():
    return  {
        "request": {
            "message": "Message from SNS Connector Test"
        },
        "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
```

## Licencias
<a name="sns-connector-license"></a>

El conector de SNS incluye las siguientes licencias y software de terceros:<a name="boto-3-licenses"></a>
+ [AWS SDK para Python (Boto3)](https://pypi.org/project/boto3/)/Apache License 2.0
+ [botocore](https://pypi.org/project/botocore/)/Apache License 2.0
+ [dateutil](https://pypi.org/project/python-dateutil/1.4/)/PSF License
+ [docutils](https://pypi.org/project/docutils/)/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain
+ [jmespath](https://pypi.org/project/jmespath/)/MIT License
+ [s3transfer](https://pypi.org/project/s3transfer/)/Apache License 2.0
+ [urllib3](https://pypi.org/project/urllib3/)/MIT License

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="sns-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>Se ha agregado el parámetro `IsolationMode` para configurar el modo de creación de contenedores del conector. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="sns-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Publicar acción](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sns.html#SNS.Client.publish) en la documentación de Boto 3
+ [¿Qué es Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*

# Conector de integración de Splunk
<a name="splunk-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El [conector](connectors.md) de integración de Splunk publica los datos de los dispositivos Greengrass en Splunk. Esto permite usar Splunk para monitorizar y analizar el entorno del núcleo de Greengrass y actuar en eventos locales. El conector se integra con el recopilador de eventos HTTP (HEC). Para obtener más información, consulte [Introduction to Splunk HTTP Event Collector](https://dev.splunk.com/view/event-collector/SP-CAAAE6M) en la documentación de Splunk.

Este conector recibe datos de eventos y registro en un tema de MQTT y publica los datos como están en la API de Splunk.

Puede utilizar este conector para admitir escenarios industriales como estos:
+ Los operadores pueden utilizar datos periódicos de actuadores y sensores (por ejemplo, lecturas de temperatura, presión y agua) para desencadenar alarmas cuando se superen determinados umbrales.
+ Los desarrolladores utilizar los datos recopilados de maquinaria industrial para crear modelos de machine learning que pueden monitorizar el equipamiento para buscar posibles problemas.

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 4 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#splunk-connector-changelog).

## Requisitos
<a name="splunk-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 3 - 4 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior. AWS IoT Greengrass [debe configurarse para admitir secretos locales, tal y como se describe en los requisitos de confidencialidad.](secrets.md#secrets-reqs)
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ <a name="conn-splunk-req-http-event-collector"></a>La funcionalidad del recopilador de eventos HTTP debe estar habilitado en Splunk. Para obtener más información, consulte [Set up and use HTTP Event Collector in Splunk Web](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector) en la documentación de Splunk.
+ <a name="conn-splunk-req-secret"></a>Un secreto de tipo texto AWS Secrets Manager que almacena tu token HTTP Event Collector de Splunk. Para obtener más información, consulte [Acerca de los tokens del recopilador de eventos](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector#About_Event_Collector_tokens) en la documentación de Splunk y [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.
**nota**  
Para crear el secreto en la consola de Secrets Manager, introduzca su token en la pestaña **Plaintext**. No incluya comillas ni ningún otro formato. En la API, especifique el token como valor de la propiedad `SecretString`.
+ Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Secrets Manager. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

------
#### [ Versions 1 - 2 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass Software básico v1.7 o posterior. AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos](secrets.md#secrets-reqs) de confidencialidad.
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ <a name="conn-splunk-req-http-event-collector"></a>La funcionalidad del recopilador de eventos HTTP debe estar habilitado en Splunk. Para obtener más información, consulte [Set up and use HTTP Event Collector in Splunk Web](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector) en la documentación de Splunk.
+ <a name="conn-splunk-req-secret"></a>Un secreto de tipo texto AWS Secrets Manager que almacena tu token HTTP Event Collector de Splunk. Para obtener más información, consulte [Acerca de los tokens del recopilador de eventos](https://docs.splunk.com/Documentation/Splunk/7.2.0/Data/UsetheHTTPEventCollector#About_Event_Collector_tokens) en la documentación de Splunk y [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.
**nota**  
Para crear el secreto en la consola de Secrets Manager, introduzca su token en la pestaña **Plaintext**. No incluya comillas ni ningún otro formato. En la API, especifique el token como valor de la propiedad `SecretString`.
+ Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Secrets Manager. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

------

## Parámetros de conector
<a name="splunk-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Version 4 ]

`SplunkEndpoint`  <a name="splunk-SplunkEndpoint"></a>
El punto de enlace de la instancia de Splunk. Este valor debe contener el protocolo, el nombre de host y el puerto.  
Nombre para mostrar en la AWS IoT consola: punto final de **Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$`

`MemorySize`  <a name="splunk-MemorySize"></a>
La cantidad de memoria (en KB) para asignar al conector.  
Nombre para mostrar en la AWS IoT consola: tamaño de **la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`SplunkQueueSize`  <a name="splunk-SplunkQueueSize"></a>
Número máximo de elementos que se van a guardar en la memoria antes de que los elementos se envíen o descarten. Cuando se alcanza este límite, se elementos más antiguos en la cola se reemplazan por los más recientes. Este límite normalmente se aplica cuando no existe conexión a Internet.  
Nombre para mostrar en la AWS IoT consola: número **máximo de elementos que se pueden conservar**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`SplunkFlushIntervalSeconds`  <a name="splunk-SplunkFlushIntervalSeconds"></a>
El intervalo (en segundos) para publicar datos recibidos en HEC de Splunk. El valor máximo es 900. Para configurar el conector con el fin de publicar elementos a medida que se reciben (sin hacerlo por lotes), especifique 0.  
Nombre para mostrar en la AWS IoT consola: intervalo de **publicación de Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[0-9]|[1-9]\d|[1-9]\d\d|900`

`SplunkTokenSecretArn`  <a name="splunk-SplunkTokenSecretArn"></a>
El secreto AWS Secrets Manager que contiene el token de Splunk. Esto debe ser un secreto de tipo de texto.  
Nombre para mostrar en la AWS IoT consola: **ARN del secreto del token de autenticación de Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:secretsmanager:[a-z]{2}-[a-z]+-\d{1}:\d{12}?:secret:[a-zA-Z0-9-_]+-[a-zA-Z0-9-_]+`

`SplunkTokenSecretArn-ResourceId`  <a name="splunk-SplunkTokenSecretArn-ResourceId"></a>
Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Splunk.  
Nombre para mostrar en la AWS IoT consola: recurso de token de autenticación de **Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`SplunkCustomCALocation`  <a name="splunk-SplunkCustomCALocation"></a>
La ruta del archivo de la autoridad de certificación personalizada (CA) de Splunk (por ejemplo, `/etc/ssl/certs/splunk.crt`).  
Nombre para mostrar en la AWS IoT consola: ubicación de la autoridad de certificación **personalizada de Splunk**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|/.*`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

------
#### [ Version 1 - 3 ]

`SplunkEndpoint`  <a name="splunk-SplunkEndpoint"></a>
El punto de enlace de la instancia de Splunk. Este valor debe contener el protocolo, el nombre de host y el puerto.  
Nombre para mostrar en la AWS IoT consola: punto final de **Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^(http:\/\/|https:\/\/)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$`

`MemorySize`  <a name="splunk-MemorySize"></a>
La cantidad de memoria (en KB) para asignar al conector.  
Nombre para mostrar en la AWS IoT consola: tamaño de **la memoria**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`SplunkQueueSize`  <a name="splunk-SplunkQueueSize"></a>
Número máximo de elementos que se van a guardar en la memoria antes de que los elementos se envíen o descarten. Cuando se alcanza este límite, se elementos más antiguos en la cola se reemplazan por los más recientes. Este límite normalmente se aplica cuando no existe conexión a Internet.  
Nombre para mostrar en la AWS IoT consola: número **máximo de elementos que se pueden conservar**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `^[0-9]+$`

`SplunkFlushIntervalSeconds`  <a name="splunk-SplunkFlushIntervalSeconds"></a>
El intervalo (en segundos) para publicar datos recibidos en HEC de Splunk. El valor máximo es 900. Para configurar el conector con el fin de publicar elementos a medida que se reciben (sin hacerlo por lotes), especifique 0.  
Nombre para mostrar en la AWS IoT consola: intervalo de **publicación de Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `[0-9]|[1-9]\d|[1-9]\d\d|900`

`SplunkTokenSecretArn`  <a name="splunk-SplunkTokenSecretArn"></a>
El secreto AWS Secrets Manager que contiene el token de Splunk. Esto debe ser un secreto de tipo de texto.  
Nombre para mostrar en la AWS IoT consola: **ARN del secreto del token de autenticación de Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:secretsmanager:[a-z]{2}-[a-z]+-\d{1}:\d{12}?:secret:[a-zA-Z0-9-_]+-[a-zA-Z0-9-_]+`

`SplunkTokenSecretArn-ResourceId`  <a name="splunk-SplunkTokenSecretArn-ResourceId"></a>
Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Splunk.  
Nombre para mostrar en la AWS IoT consola: recurso de token de autenticación de **Splunk**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`SplunkCustomCALocation`  <a name="splunk-SplunkCustomCALocation"></a>
La ruta del archivo de la autoridad de certificación personalizada (CA) de Splunk (por ejemplo, `/etc/ssl/certs/splunk.crt`).  
Nombre para mostrar en la AWS IoT consola: ubicación de la autoridad de certificación **personalizada de Splunk**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|/.*`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="splunk-connector-create"></a>

El siguiente comando de la CLI crea una `ConnectorDefinition` con una versión inicial que contiene el conector de integración de Splunk.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MySplunkIntegrationConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/SplunkIntegration/versions/4",
            "Parameters": {
                "SplunkEndpoint": "https://myinstance.cloud.splunk.com:8088",
                "MemorySize": 200000,
                "SplunkQueueSize": 10000,
                "SplunkFlushIntervalSeconds": 5,
                "SplunkTokenSecretArn":"arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "SplunkTokenSecretArn-ResourceId": "MySplunkResource", 
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

**nota**  
La función de Lambda de este conector tiene un ciclo de vida [prolongado](lambda-functions.md#lambda-lifecycle).

En la AWS IoT Greengrass consola, 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)](connectors-console.md).

## Datos de entrada
<a name="splunk-connector-data-input"></a>

Este conector acepta datos de eventos y registro en un tema de MQTT y publica los datos recibidos como están en la API de Splunk. Los mensajes de entrada deben tener un formato JSON válido.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`splunk/logs/put`

**Propiedades de mensajes**    
`request`  
Los datos de eventos que se van a enviar a la API de Splunk. Los eventos debe cumplir las especificaciones de la API [services/collector](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector).  
Obligatorio: `true`  
Tipo: `object`. Solo es obligatoria la propiedad `event`.  
`id`  
Un ID arbitrario para la solicitud. Esta propiedad se usa para asignar una solicitud de entrada a un estado de salida.  
Obligatorio: `false`  
Tipo: `string`

**Límites**  
Todos los límites que son impuestos por la API de Splunk se aplican a las métricas cuando se utiliza este conector. Para obtener más información, consulte [services/collector](https://docs.splunk.com/Documentation/Splunk/latest/RESTREF/RESTinput#services.2Fcollector).

**Ejemplo de entrada**  

```
{
    "request": {
        "event": "some event",
        "fields": {
            "severity": "INFO",
            "category": [
                "value1",
                "value2"
            ]
        }
    },
    "id": "request123"
}
```

## Datos de salida
<a name="splunk-connector-data-output"></a>

Este conector publica los datos de salida en dos temas:
+ Información de estado en el tema `splunk/logs/put/status`.
+ Los errores en el tema `splunk/logs/put/error`.

**Filtro de temas:** `splunk/logs/put/status`  
Use este tema para escuchar el estado de las solicitudes. Cada vez que el conector envía un lote de datos recibidos a la API de Splunk, publica una lista IDs de las solicitudes que se han realizado correctamente y las que han fallado.    
**Ejemplo de salida**  

```
{
    "response": {
        "succeeded": [
            "request123",
            ...
        ],
        "failed": [
            "request789",
            ...
        ]
    }
}
```

**Filtro de temas:** `splunk/logs/put/error`  
Use este tema para escuchar errores del conector. La propiedad `error_message` que describe el error o el tiempo de espera que se producen cuando se espera al procesar la solicitud.    
**Ejemplo de salida**  

```
{
    "response": {
        "error": "UnauthorizedException",
        "error_message": "invalid splunk token",
        "status": "fail"
    }
}
```
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.

## Ejemplo de uso
<a name="splunk-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Si usa otros tiempos de ejecución de Python, puede crear un enlace simbólico de Python3.x a Python 3.7.
Los temas [Introducción a los conectores (consola)](connectors-console.md) y [Introducción a los conectores (CLI)](connectors-cli.md) contienen pasos detallados que muestran cómo configurar e implementar un conector de notificaciones Twilio de ejemplo.

1. Asegúrese de cumplir los [requisitos](#splunk-connector-req) para el conector.

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#splunk-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-secret-resource"></a>Agregue el recurso secreto requerido y conceda acceso de lectura a la función de Lambda.

   1. Agregue el conector y configure sus [parámetros](#splunk-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#splunk-connector-data-input) y enviar [datos de salida](#splunk-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Utiliza esta suscripción para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="splunk-connector-usage-example"></a>

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 = 'splunk/logs/put'

def create_request_with_all_fields():
    return {
        "request": {
            "event": "Access log test message."
        },
        "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
```

## Licencias
<a name="splunk-connector-license"></a>

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="splunk-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 4 | <a name="isolation-mode-changelog"></a>Se ha agregado el parámetro `IsolationMode` para configurar el modo de creación de contenedores del conector. | 
| 3 | <a name="upgrade-runtime-py3.7"></a>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.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="splunk-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)

# Conector de notificaciones de Twilio
<a name="twilio-notifications-connector"></a>

**aviso**  <a name="connectors-extended-life-phase-warning"></a>
Este conector ha pasado a la *fase de vida útil prolongada* y AWS IoT Greengrass no lanzará actualizaciones que proporcionen características, mejoras de las características existentes, parches de seguridad o correcciones de errores. Para obtener más información, consulte [AWS IoT Greengrass Version 1 política de mantenimiento](maintenance-policy.md).

El [conector](connectors.md) de notificaciones Twilio realiza llamadas telefónicas automatizadas o envía mensajes de texto a través de Twilio. Puede utilizar este conector para enviar notificaciones en respuesta a los eventos en el grupo de Greengrass. Para llamadas telefónicas, el conector puede reenviar un mensaje de voz al destinatario.

Este conector recibe la información de mensaje de Twilio sobre un tema de MQTT y, a continuación, activa una notificación de Twilio.

**nota**  
Para ver un tutorial que muestre cómo utilizar el conector de notificaciones Twilio, consulte [Introducción a los conectores de Greengrass (consola)](connectors-console.md) o [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md).

Este conector tiene las siguientes versiones.


| Versión | ARN | 
| --- | --- | 
| 5 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/5` | 
| 4 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4` | 
| 3 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/3` | 
| 2. | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/2` | 
| 1 | `arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/1` | 

Para obtener información sobre los cambios de versión, consulte el [Registro de cambios](#twilio-notifications-connector-changelog).

## Requisitos
<a name="twilio-notifications-connector-req"></a>

Este conector exige los siguientes requisitos:

------
#### [ Version 4 - 5 ]
+ <a name="conn-req-ggc-v1.9.3-secrets"></a>AWS IoT Greengrass Software básico v1.9.3 o posterior. AWS IoT Greengrass [debe configurarse para admitir secretos locales, tal y como se describe en los requisitos de confidencialidad.](secrets.md#secrets-reqs)
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ <a name="conn-req-py-3.7-and-3.8"></a>Se necesita tener la versión 3.7 o 3.8 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadido a la variable de entorno PATH.
**nota**  <a name="use-runtime-py3.8"></a>
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.
+ Un SID de una cuenta de Twilio, un token de autenticación y un número de teléfono habilitado para Twilio. Después de crear un proyecto de Twilio, estos valores están disponibles en el panel del proyecto.
**nota**  
Puede utilizar una cuenta de prueba de Twilio. Si utiliza una cuenta de prueba, debe añadir números de teléfono de destinatarios que no sean de Twilio a una lista de números de teléfono verificados. Para obtener más información, consulte [Cómo trabajar con su cuenta de prueba gratuita de Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).
+ <a name="conn-twilio-req-secret"></a>Un tipo de texto secreto AWS Secrets Manager que almacena el token de autenticación de Twilio. Para obtener más información, consulte [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.
**nota**  
Para crear el secreto en la consola de Secrets Manager, introduzca su token en la pestaña **Plaintext**. No incluya comillas ni ningún otro formato. En la API, especifique el token como valor de la propiedad `SecretString`.
+ Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Secrets Manager. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

------
#### [ Versions 1 - 3 ]
+ <a name="conn-req-ggc-v1.7.0-secrets"></a>AWS IoT Greengrass Software básico v1.7 o posterior. AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos](secrets.md#secrets-reqs) de confidencialidad.
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ Versión 2.7 de [Python](https://www.python.org/) instalada en el dispositivo principal y añadida a la variable de entorno PATH.
+ Un SID de una cuenta de Twilio, un token de autenticación y un número de teléfono habilitado para Twilio. Después de crear un proyecto de Twilio, estos valores están disponibles en el panel del proyecto.
**nota**  
Puede utilizar una cuenta de prueba de Twilio. Si utiliza una cuenta de prueba, debe añadir números de teléfono de destinatarios que no sean de Twilio a una lista de números de teléfono verificados. Para obtener más información, consulte [Cómo trabajar con su cuenta de prueba gratuita de Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).
+ <a name="conn-twilio-req-secret"></a>Un tipo de texto secreto AWS Secrets Manager que almacena el token de autenticación de Twilio. Para obtener más información, consulte [Creación de un secreto básico](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) en la *Guía del usuario de AWS Secrets Manager *.
**nota**  
Para crear el secreto en la consola de Secrets Manager, introduzca su token en la pestaña **Plaintext**. No incluya comillas ni ningún otro formato. En la API, especifique el token como valor de la propiedad `SecretString`.
+ Se crea un recurso de secretos en el grupo de Greengrass que hace referencia al secreto de Secrets Manager. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

------

## Parámetros de conector
<a name="twilio-notifications-connector-param"></a>

Este conector proporciona los siguientes parámetros:

------
#### [ Version 5 ]

`TWILIO_ACCOUNT_SID`  <a name="twilio-TWILIO_ACCOUNT_SID"></a>
El SID de cuenta de Twilio que se utiliza para invocar a la API de Twilio.  
Nombre para mostrar en la AWS IoT consola: SID de la cuenta de **Twilio**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`TwilioAuthTokenSecretArn`  <a name="twilio-TwilioAuthTokenSecretArn"></a>
El ARN del secreto del Secrets Manager que almacena el token de autenticación de Twilio.  
Este se usa para obtener acceso al valor del secreto local en el núcleo.
Nombre para mostrar en la AWS IoT consola: **ARN del token de autenticación secreto de Twilio**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`TwilioAuthTokenSecretArn-ResourceId`  <a name="twilio-TwilioAuthTokenSecretArn-ResourceId"></a>
El ID del recurso de secreto del grupo de Greengrass que hace referencia al secreto del token de autenticación de Twilio.  
Nombre para mostrar en la AWS IoT consola: recurso de token de autenticación de **Twilio**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`DefaultFromPhoneNumber`  <a name="twilio-DefaultFromPhoneNumber"></a>
El número de teléfono predeterminado habilitado para Twilio que Twilio utiliza para enviar mensajes. Twilio utiliza este número para iniciar el mensaje o la llamada.  
+ Si no configura un número de teléfono predeterminado, debe especificar un número de teléfono en la propiedad `from_number` en el cuerpo del mensaje de entrada.
+ Si efectivamente configura un número de teléfono predeterminado, tiene la opción de anular el predeterminado especificando la propiedad `from_number` en el cuerpo del mensaje de entrada.
Nombre para mostrar en la AWS IoT consola: **predeterminado a partir del número de teléfono**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|\+[0-9]+`

`IsolationMode`  <a name="IsolationMode"></a>
El modo de [creación de contenedores](connectors.md#connector-containerization) para este conector. El valor predeterminado es`GreengrassContainer`, lo que significa que el conector se ejecuta en un entorno de ejecución aislado dentro del AWS IoT Greengrass contenedor.  
La configuración de creación de contenedores predeterminada para el grupo no se aplica a los conectores.
Nombre para mostrar en la AWS IoT consola: **modo de aislamiento del contenedor**  
Obligatorio: `false`  
Tipo: `string`  
Valores válidos: `GreengrassContainer` o `NoContainer`  
Patrón válido: `^NoContainer$|^GreengrassContainer$`

------
#### [ Version 1 - 4 ]

`TWILIO_ACCOUNT_SID`  <a name="twilio-TWILIO_ACCOUNT_SID"></a>
El SID de cuenta de Twilio que se utiliza para invocar a la API de Twilio.  
Nombre para mostrar en la AWS IoT consola: SID de la **cuenta de Twilio**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`TwilioAuthTokenSecretArn`  <a name="twilio-TwilioAuthTokenSecretArn"></a>
El ARN del secreto del Secrets Manager que almacena el token de autenticación de Twilio.  
Este se usa para obtener acceso al valor del secreto local en el núcleo.
Nombre para mostrar en la AWS IoT consola: **ARN del token de autenticación secreto de Twilio**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `arn:aws:secretsmanager:[a-z0-9\-]+:[0-9]{12}:secret:([a-zA-Z0-9\\]+/)*[a-zA-Z0-9/_+=,.@\-]+-[a-zA-Z0-9]+`

`TwilioAuthTokenSecretArn-ResourceId`  <a name="twilio-TwilioAuthTokenSecretArn-ResourceId"></a>
El ID del recurso de secreto del grupo de Greengrass que hace referencia al secreto del token de autenticación de Twilio.  
Nombre para mostrar en la AWS IoT consola: recurso de token de autenticación de **Twilio**  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`

`DefaultFromPhoneNumber`  <a name="twilio-DefaultFromPhoneNumber"></a>
El número de teléfono predeterminado habilitado para Twilio que Twilio utiliza para enviar mensajes. Twilio utiliza este número para iniciar el mensaje o la llamada.  
+ Si no configura un número de teléfono predeterminado, debe especificar un número de teléfono en la propiedad `from_number` en el cuerpo del mensaje de entrada.
+ Si efectivamente configura un número de teléfono predeterminado, tiene la opción de anular el predeterminado especificando la propiedad `from_number` en el cuerpo del mensaje de entrada.
Nombre para mostrar en la AWS IoT consola: **predeterminado a partir del número de teléfono**  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `^$|\+[0-9]+`

------

### Ejemplo de creación de conector (AWS CLI)
<a name="twilio-notifications-connector-create"></a>

El siguiente ejemplo de comando de la CLI crea un `ConnectorDefinition` con una versión inicial que contiene el conector de notificaciones Twilio.

```
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
    "Connectors": [
        {
            "Id": "MyTwilioNotificationsConnector",
            "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/5",
            "Parameters": {
                "TWILIO_ACCOUNT_SID": "abcd12345xyz",
                "TwilioAuthTokenSecretArn": "arn:aws:secretsmanager:region:account-id:secret:greengrass-secret-hash",
                "TwilioAuthTokenSecretArn-ResourceId": "MyTwilioSecret",
                "DefaultFromPhoneNumber": "+19999999999",
                "IsolationMode" : "GreengrassContainer"
            }
        }
    ]
}'
```

Para ver tutoriales que muestran cómo añadir el conector de notificaciones de Twilio a un grupo, consulte [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md) y [Introducción a los conectores de Greengrass (consola)](connectors-console.md).

## Datos de entrada
<a name="twilio-notifications-connector-data-input"></a>

Este conector acepta la información de mensaje de Twilio en dos temas de MQTT. Los mensajes de entrada deben tener un formato JSON válido.
+ La información del mensaje de texto en el tema `twilio/txt`.
+ La información del mensaje de teléfono en el tema `twilio/call`.

**nota**  
La carga de mensajes de entrada puede incluir un mensaje de texto (`message`) o un mensaje de voz (`voice_message_location`), pero no ambos.

**Filtro de temas: `twilio/txt`**    
**Propiedades de mensajes**    
`request`  
Información sobre la notificación de Twilio.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`recipient`  
El destinatario del mensaje. Solo se admite un destinatario.  
Obligatorio: `true`  
Escriba: `object` que incluya las siguientes propiedades:    
`name`  
El nombre del destinatario.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.*`  
`phone_number`  
El número de teléfono del destinatario.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `\+[1-9]+`  
`message`  
El contenido de texto del mensaje de texto. Solo los mensajes de texto se admiten en este tema. Para mensajes de voz, utilice `twilio/call`.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`  
`from_number`  
El número de teléfono del remitente. Twilio utiliza este número de teléfono para iniciar el mensaje. Esta propiedad es necesaria si el parámetro `DefaultFromPhoneNumber` no está configurado. Si `DefaultFromPhoneNumber` está configurado, puede utilizar esta propiedad para anular el valor predeterminado.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `\+[1-9]+`  
`retries`  
El número de reintentos. El valor predeterminado es 0.  
Obligatorio: `false`  
Tipo: `integer`  
`id`  
Un ID arbitrario para la solicitud. Esta propiedad se usa para asignar una solicitud de entrada a una respuesta de salida.   
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`  
**Ejemplo de entrada**  

```
{
    "request": {
        "recipient": {
            "name": "Darla",
            "phone_number": "+12345000000",
            "message": "Hello from the edge"
        },
        "from_number": "+19999999999",
        "retries": 3
    },
    "id": "request123"
}
```

**Filtro de temas: `twilio/call`**    
**Propiedades de mensajes**    
`request`  
Información sobre la notificación de Twilio.  
Obligatorio: `true`  
Escriba: `object` que incluye las siguientes propiedades:    
`recipient`  
El destinatario del mensaje. Solo se admite un destinatario.  
Obligatorio: `true`  
Escriba: `object` que incluya las siguientes propiedades:    
`name`  
El nombre del destinatario.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`  
`phone_number`  
El número de teléfono del destinatario.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `\+[1-9]+`  
`voice_message_location`  
La URL del contenido de audio para el mensaje de voz. Esta debe estar en formato TwiML. Solo los mensajes de voz se admiten en este tema. Para mensajes de texto, utilice `twilio/txt`.  
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`  
`from_number`  
El número de teléfono del remitente. Twilio utiliza este número de teléfono para iniciar el mensaje. Esta propiedad es necesaria si el parámetro `DefaultFromPhoneNumber` no está configurado. Si `DefaultFromPhoneNumber` está configurado, puede utilizar esta propiedad para anular el valor predeterminado.  
Obligatorio: `false`  
Tipo: `string`  
Patrón válido: `\+[1-9]+`  
`retries`  
El número de reintentos. El valor predeterminado es 0.  
Obligatorio: `false`  
Tipo: `integer`  
`id`  
Un ID arbitrario para la solicitud. Esta propiedad se usa para asignar una solicitud de entrada a una respuesta de salida.   
Obligatorio: `true`  
Tipo: `string`  
Patrón válido: `.+`  
**Ejemplo de entrada**  

```
{
    "request": {
        "recipient": {
            "name": "Darla",
            "phone_number": "+12345000000",
            "voice_message_location": "https://some-public-TwiML"
        },
        "from_number": "+19999999999",
        "retries": 3
    },
    "id": "request123"
}
```

## Datos de salida
<a name="twilio-notifications-connector-data-output"></a>

Este conector publica información de estado como datos de salida en un tema MQTT.

<a name="topic-filter"></a>**Filtro de temas en la suscripción**  
`twilio/message/status`

**Ejemplo de salida: Correcto**  

```
{
    "response": {
        "status": "success",
        "payload": {
            "from_number": "+19999999999",
            "messages": {
                "message_status": "queued",
                "to_number": "+12345000000",
                "name": "Darla"
            }
        }
    },
    "id": "request123"
}
```

**Ejemplo de salida: Error**  

```
{
    "response": {
        "status": "fail",
        "error_message": "Recipient name cannot be None",
        "error": "InvalidParameter",
        "payload": None
        }
    },
    "id": "request123"
}
```
La propiedad `payload` en la salida es la respuesta de la API de Twilio al enviar el mensaje. Si el conector detecta que los datos de entrada no son válidos (por ejemplo, no especifica un campo de entrada requerido), el conector devuelve un error y establece el valor en `None`. A continuación se muestran cargas de ejemplo:  

```
{
    'from_number':'+19999999999',
    'messages': {
        'name':'Darla',
        'to_number':'+12345000000',
        'message_status':'undelivered'
    }
}
```

```
{
    'from_number':'+19999999999',
    'messages': {
        'name':'Darla',
        'to_number':'+12345000000',
        'message_status':'queued'
    }
}
```

## Ejemplo de uso
<a name="twilio-notifications-connector-usage"></a>

<a name="connectors-setup-intro"></a>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**  <a name="connectors-setup-get-started-topics"></a>
Los [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md) temas [Introducción a los conectores de Greengrass (consola)](connectors-console.md) y temas contienen end-to-end pasos que muestran cómo configurar, implementar y probar el conector de notificaciones de Twilio.

1. Asegúrese de cumplir los [requisitos](#twilio-notifications-connector-req) para el conector.

1. <a name="connectors-setup-function"></a>Cree y publique una función de Lambda que envíe datos de entrada al conector.

   Guarde el [código de ejemplo](#twilio-notifications-connector-usage-example) como un archivo PY. <a name="connectors-setup-function-sdk"></a>Descargue y descomprima el [SDK de AWS IoT Greengrass Core para Python](lambda-functions.md#lambda-sdks-core). 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.

   <a name="connectors-setup-function-publish"></a>Después de crear la función de Lambda de Python 3.7, publique una versión de característica y cree un alias.

1. Configuración del grupo de Greengrass.

   1. <a name="connectors-setup-gg-function"></a>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).

   1. <a name="connectors-setup-secret-resource"></a>Agregue el recurso secreto requerido y conceda acceso de lectura a la función de Lambda.

   1. Agregue el conector y configure sus [parámetros](#twilio-notifications-connector-param).

   1. Agregue suscripciones que permitan al conector recibir [datos de entrada](#twilio-notifications-connector-data-input) y enviar [datos de salida](#twilio-notifications-connector-data-output) en filtros de tema compatibles.
      + <a name="connectors-setup-subscription-input-data"></a>Establezca la función de Lambda como fuente, el conector como destino y utilice un filtro de tema de entrada compatible.
      + <a name="connectors-setup-subscription-output-data"></a>Establezca el conector como origen, AWS IoT Core como destino y utilice un filtro de tema de salida compatible. Usas esta suscripción para ver los mensajes de estado en la AWS IoT consola.

1. <a name="connectors-setup-deploy-group"></a>Implemente el grupo.

1. <a name="connectors-setup-test-sub"></a>En la AWS IoT consola, en la página de **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 característica envíe mensajes.

### Ejemplo
<a name="twilio-notifications-connector-usage-example"></a>

El siguiente ejemplo de función de Lambda envía un mensaje de entrada al conector. En este ejemplo, se activa un mensaje de texto.

```
import greengrasssdk
import json

iot_client = greengrasssdk.client('iot-data')
TXT_INPUT_TOPIC = 'twilio/txt'
CALL_INPUT_TOPIC = 'twilio/call'

def publish_basic_message():

    txt = {
        "request": {
            "recipient" : {
                "name": "Darla",
                "phone_number": "+12345000000",
                "message": 'Hello from the edge'
            },
            "from_number" : "+19999999999"
        },
        "id" : "request123"
    }
    
    print("Message To Publish: ", txt)

    client.publish(topic=TXT_INPUT_TOPIC,
                   payload=json.dumps(txt))

publish_basic_message()

def lambda_handler(event, context):
    return
```

## Licencias
<a name="twilio-notifications-connector-license"></a>

El conector de notificaciones Twilio incluye las siguientes licencias y software de terceros:
+ [twilio-python](https://github.com/twilio/twilio-python)/MIT

Este conector se publica bajo el [contrato de licencia de software de Greengrass Core](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf).

## Registros de cambios
<a name="twilio-notifications-connector-changelog"></a>

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


| Versión | Cambios | 
| --- | --- | 
| 5 | <a name="isolation-mode-changelog"></a>Se ha agregado el parámetro `IsolationMode` para configurar el modo de creación de contenedores del conector. | 
| 4 | <a name="upgrade-runtime-py3.7"></a>Se actualizó el tiempo de ejecución de Lambda a Python 3.7, lo que cambia el requisito de tiempo de ejecución. | 
| 3 | Se ha introducido una corrección para reducir el registro excesivo. | 
| 2 | Pequeñas correcciones de errores y mejoras. | 
| 1 | Versión inicial.  | 

<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Véase también
<a name="twilio-notifications-connector-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [Introducción a los conectores de Greengrass (CLI)](connectors-cli.md)
+ [Twilio API Reference](https://www.twilio.com/docs/api)

# Introducción a los conectores de Greengrass (consola)
<a name="connectors-console"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.7 y versiones posteriores.

En este tutorial se muestra cómo utilizarla Consola de administración de AWS para trabajar con conectores.

Utilice conectores para acelerar el ciclo de vida de desarrollo. Los conectores son módulos precompilados y reutilizables que puede simplificar la interacción con los servicios, los protocolos y los recursos. Pueden ayudarle a implementar la lógica de negocio en los dispositivos de Greengrass con mayor rapidez. Para obtener más información, consulte [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md).

En este tutorial configurará e implementará el conector de [Notificaciones de Twilio](twilio-notifications-connector.md). El conector recibe la información del mensaje de Twilio como datos de entrada y, a continuación, desencadena un mensaje de texto de Twilio. El flujo de datos se muestra en el siguiente diagrama.

![\[Flujo de datos de la función de Lambda al conector de Notificaciones de Twilio a Twilio.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/connectors/twilio-solution.png)


Después de configurar el conector, debe crear una función de Lambda y una suscripción.
+ La función evalúa los datos simulados desde un sensor de temperatura. Publica condicionalmente la información del mensaje de Twilio a un tema de MQTT. Este es el tema al que se suscribe el conector.
+ La suscripción permite que la función se publique en el tema y que el conector reciba datos del tema.

El conector de Notificaciones de Twilio necesita un token de autenticación de Twilio para interactuar con la API de Twilio. El token es un tipo de texto secreto creado en un recurso grupal AWS Secrets Manager y al que se hace referencia desde él. Esto permite AWS IoT Greengrass crear una copia local del secreto en el núcleo de Greengrass, donde se cifra y se pone a disposición del conector. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

El tutorial contiene los siguientes pasos generales:

1. [Crear un secreto en Secrets Manager](#connectors-console-create-secret)

1. [Agregar un recurso de secreto a un grupo](#connectors-console-create-resource)

1. [Agregar un conector al grupo](#connectors-console-create-connector)

1. [Creación de un paquete de implementación de la función de Lambda](#connectors-console-create-deployment-package)

1. [Crear una función de Lambda](#connectors-console-create-function)

1. [Agregar una función al grupo](#connectors-console-create-gg-function)

1. [Agregar suscripciones al grupo](#connectors-console-create-subscription)

1. [Implementar el grupo](#connectors-console-create-deployment)

1. [Pruebe la solución](#connectors-console-test-solution)

Completar el tutorial debería tomarle aproximadamente 20 minutos.

## Requisitos previos
<a name="connectors-console-prerequisites"></a>

Para completar este tutorial, se necesita lo siguiente:
+ Un grupo de Greengrass y un núcleo de Greengrass (v1.9.3 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](gg-gs.md). El tutorial de introducción también incluye pasos para instalar el software AWS IoT Greengrass Core.
+ Python 3.7 instalado en el dispositivo AWS IoT Greengrass principal.
+  AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos de confidencialidad](secrets.md#secrets-reqs).
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ Un SID de una cuenta de Twilio, un token de autenticación y un número de teléfono habilitado para Twilio. Después de crear un proyecto de Twilio, estos valores están disponibles en el panel del proyecto.
**nota**  
Puede utilizar una cuenta de prueba de Twilio. Si utiliza una cuenta de prueba, debe añadir números de teléfono de destinatarios que no sean de Twilio a una lista de números de teléfono verificados. Para obtener más información, consulte [Cómo trabajar con su cuenta de prueba gratuita de Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).

## Paso 1: Creación de un secreto de Secrets Manager
<a name="connectors-console-create-secret"></a>

En este paso, utilizas la AWS Secrets Manager consola para crear un secreto de tipo texto para tu token de autenticación de Twilio.

1. <a name="create-secret-step-signin"></a>Inicie sesión en la [consola de AWS Secrets Manager](https://console.aws.amazon.com/secretsmanager/).
**nota**  
Para obtener más información sobre este proceso, consulte [Paso 1: Crear y almacenar el secreto en AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/tutorials_basic.html) en la *Guía del usuario de AWS Secrets Manager *.

1. <a name="create-secret-step-create"></a>Elija **Almacenar un secreto nuevo**.

1. <a name="create-secret-step-othertype"></a>En **Seleccionar tipo de secreto**, elija **Otro tipo de secreto**.

1. En **Especifica los key/value pares que se van a almacenar para este secreto**, en la pestaña **Texto simple**, introduce tu token de autenticación de Twilio. Quite todo el formato JSON e introduzca solo el valor del token.

1. <a name="create-secret-step-encryption"></a>Mantenga **aws/secretsmanager** seleccionado para la clave de cifrado y, a continuación, seleccione **Siguiente**.
**nota**  
No se te cobrará nada AWS KMS si utilizas la clave AWS gestionada predeterminada que Secrets Manager crea en tu cuenta.

1. En **Secret name (Nombre del secreto)**, escriba **greengrass-TwilioAuthToken** y, a continuación, seleccione **Next (Siguiente)**.
**nota**  
De forma predeterminada, el rol de servicio Greengrass permite AWS IoT Greengrass obtener el valor de los secretos con nombres que comienzan por *greengrass* -. Para obtener más información, consulte [requisitos de secretos](secrets.md#secrets-reqs).

1. <a name="create-secret-step-rotation"></a>Este tutorial no requiere rotación, así que elija desactivar la rotación automática y, a continuación, seleccione **Siguiente**.

1. <a name="create-secret-step-review"></a>En la página **Review (Revisar)**, revise los ajustes y, a continuación, seleccione **Store (Almacenar)**.

   A continuación, se crea un recurso de secreto en su grupo de Greengrass que hace referencia al secreto.

## Paso 2: Agregar un recurso de secreto a un grupo de Greengrass
<a name="connectors-console-create-resource"></a>

En este paso, va a añadir un *recurso de secreto* al grupo de Greengrass. Este recurso es una referencia al secreto que creó en el paso anterior.

1. <a name="console-gg-groups"></a>En el panel de navegación de la AWS IoT consola, en **Administrar**, expanda **los dispositivos Greengrass** y, a continuación, elija **Grupos (V1)**.

1. <a name="create-secret-resource-step-choosegroup"></a>Elija el grupo al que desee añadir el recurso de secreto.

1. <a name="create-secret-resource-step-secretstab"></a>En la página de configuración del grupo, elija la pestaña **Recursos** y, a continuación, desplácese hacia abajo hasta la sección **Secretos**. La sección **Secretos** muestra los recursos secretos que pertenecen al grupo. Puede añadir, editar y quitar los recursos de secreto de esta sección.
**nota**  
Como alternativa, la consola le permite crear un secreto y un recurso secreto al configurar un conector o una función de Lambda. Puede hacerlo desde la página **Configurar parámetros** del conector o desde la página **Recursos** de la función de Lambda.

1. <a name="create-secret-resource-step-addsecretresource"></a>Seleccione **Añadir** en la sección **Secretos**.

1. En la página **Añadir un recurso secreto**, introduzca **MyTwilioAuthToken** el **nombre del recurso**.

1. Para el **secreto**, elija **greengrass-**. TwilioAuthToken

1. <a name="create-secret-resource-step-selectlabels"></a>En la sección **Seleccionar etiquetas (opcional)**, la AWSCURRENT etiqueta provisional representa la última versión del secreto. Esta etiqueta siempre está incluida en un recurso de secreto.
**nota**  
Este tutorial solo requiere la AWSCURRENT etiqueta. De forma opcional, puede incluir etiquetas que requieran su función de Lambda o un conector.

1. Seleccione **Add resource** (Añadir recurso).

## Paso 3: Agregar un conector al grupo de Greengrass
<a name="connectors-console-create-connector"></a>

En este paso va a configurar parámetros para el [conector Notificaciones de Twilio](twilio-notifications-connector.md) y añadirlo al grupo.

1. En la página de configuración de grupo, elija **Connectors (Conectores)** y, a continuación, elija **Add a connector (Añadir un conector)**.

1. En la página **Añadir conector**, selecciona **Notificaciones de Twilio**.

1. Elija la versión .

1. En la sección **Configuración**:
   + Para el **recurso de token de autenticación de Twilio**, introduzca el recurso que creó en el paso anterior.
**nota**  
Cuando se introduce el recurso, la propiedad **ARN de secreto de token de autenticación de Twilio** se rellena automáticamente.
   + En **Default from phone number (Predeterminado de número de teléfono)**, introduzca su número de teléfono habilitado para Twilio.
   + Para **Twilio account SID (SID de cuenta de Twilio)**, introduzca su SID de cuenta de Twilio.

1. Seleccione **Add resource** (Añadir recurso).

## Paso 4: Creación de un paquete de implementación de la función de Lambda
<a name="connectors-console-create-deployment-package"></a>

Para crear una función de Lambda, primero debe crear un *paquete de implementación* de funciones de Lambda que contenga el código de la función y las dependencias. Las funciones de Lambda de Greengrass requieren el [SDK de AWS IoT Greengrass Core](lambda-functions.md#lambda-sdks-core) para tareas como la comunicación con los mensajes de MQTT en el entorno principal y el acceso a los secretos locales. En este tutorial se crea una característica de Python para que utilice la versión Python del SDK en el paquete de implementación.

1. <a name="download-ggc-sdk"></a> Desde la página de descargas del [SDK AWS IoT Greengrass principal](what-is-gg.md#gg-core-sdk-download), descarga el SDK AWS IoT Greengrass básico para Python en tu ordenador.

1. <a name="unzip-ggc-sdk"></a>Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta `greengrasssdk`.

1. Guarde la siguiente función de código de Python en un archivo local llamado "`temp_monitor.py`".

   ```
   import greengrasssdk
   import json
   import random
   
   client = greengrasssdk.client('iot-data')
   
   # publish to the Twilio Notifications connector through the twilio/txt topic
   def function_handler(event, context):
       temp = event['temperature']
       
       # check the temperature
       # if greater than 30C, send a notification
       if temp > 30:
           data = build_request(event)
           client.publish(topic='twilio/txt', payload=json.dumps(data))
           print('published:' + str(data))
           
       print('temperature:' + str(temp))
       return
   
   # build the Twilio request from the input data
   def build_request(event):
       to_name = event['to_name']
       to_number = event['to_number']
       temp_report = 'temperature:' + str(event['temperature'])
   
       return {
           "request": {
               "recipient": {
                   "name": to_name,
                   "phone_number": to_number,
                   "message": temp_report
               }
           },
           "id": "request_" + str(random.randint(1,101))
       }
   ```

1. Comprima en un archivo ZIP los siguientes elementos en un archivo denominado "`temp_monitor_python.zip`". Al crear el archivo ZIP, incluya únicamente el código y sus dependencias, no la carpeta donde se encuentran.
   + **temp\$1monitor.py**. Lógica de la aplicación.
   + **greengrasssdk**. Biblioteca necesaria para las funciones de Lambda Greengrass de Python que publican mensajes MQTT.

   Este es el paquete de implementación de la función de Lambda.

Ahora, cree una función de Lambda que use el paquete de implementación.

## Paso 5: Crear una función Lambda en la consola AWS Lambda
<a name="connectors-console-create-function"></a>

En este paso, utilizará la AWS Lambda consola para crear una función Lambda y configurarla para que utilice su paquete de despliegue. A continuación, publicará una versión de la característica y creará un alias.

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

   1. <a name="lambda-console-open"></a>En Consola de administración de AWS, elija **Servicios** y abra la AWS Lambda consola.

   1. <a name="lambda-console-create-function"></a>Elija **Crear función**, y, a continuación, elija **Autor desde cero**.

   1. En la sección **Basic information (Información básica)**, utilice los siguientes valores:
      + En **Function name** (Nombre de la característica), introduzca **TempMonitor**.
      + 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. Esta función no la utiliza AWS IoT Greengrass.

   1. <a name="lambda-console-save-function"></a>En la parte inferior de la página, elija **Create function**.

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

   1. <a name="lambda-console-upload"></a>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.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Seleccione **Cargar** y, a continuación, elija su paquete de implementación de `temp_monitor_python.zip`. A continuación, elija **Guardar**.

   1. <a name="lambda-console-runtime-settings-para"></a>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 **temp\$1monitor.function\$1handler**.

   1. <a name="lambda-console-save-config"></a>Seleccione **Save**.
**nota**  
El botón de **prueba** de la AWS Lambda consola no funciona con esta función. El SDK AWS IoT Greengrass principal no contiene los módulos necesarios para ejecutar las funciones de Greengrass Lambda 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.

1. Ahora, publique la primera versión de su función de Lambda y cree un [alias para la versión](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
**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. <a name="shared-publish-function-version"></a>En el menú **Actions**, elija **Publish new version**.

   1. <a name="shared-publish-function-version-description"></a>En **Version description (Descripción de versión)**, escriba **First version** y, a continuación, elija **Publish (Publicar)**.

   1. En la página de configuración **TempMonitor: 1**, en el menú **Acciones**, seleccione **Crear** alias.

   1. En la página **Create a new alias**, utilice los valores siguientes:
      + En **Nombre**, escriba **GG\$1TempMonitor**.
      + En **Version (Versión)**, elija **1**.
**nota**  
AWS IoT Greengrass **no admite los alias de Lambda para las versiones \$1LATEST.**

   1. Seleccione **Crear**.

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

## Paso 6: Agregar una función de Lambda al grupo de Greengrass
<a name="connectors-console-create-gg-function"></a>

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 Lambda de Greengrass utilizando la configuración específica del grupo](lambda-group-config.md).

1. <a name="choose-add-lambda"></a>En la página de configuración del grupo, elija la pestaña **Funciones de Lambda**.

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

1. En la página **Agregar función Lambda**, elija **TempMonitor**su función Lambda.

1. Para la **versión de la función Lambda**, elija **Alias:** GG\$1. TempMonitor

1. Elija **Añadir función de Lambda**.

## Paso 7: Agregar suscripciones al grupo de Greengrass
<a name="connectors-console-create-subscription"></a>

<a name="connectors-how-to-add-subscriptions-p1"></a>En este paso añadirá una suscripción que habilita la función de Lambda para enviar datos de entrada al conector. El conector define los temas de MQTT a los que se suscribe, por lo que esta suscripción utiliza uno de los temas. Este es el mismo tema en el que se publica la función de ejemplo.

<a name="connectors-how-to-add-subscriptions-p2"></a>Para este tutorial, también debe crear suscripciones que permitan a la función recibir lecturas de temperatura simuladas AWS IoT y AWS IoT recibir información de estado del conector.

1. <a name="shared-subscriptions-addsubscription"></a>En la página de configuración del grupo, elija la pestaña **Suscripciones** y, a continuación, elija **Añadir suscripción**.

1. En la página **Crear una suscripción**, configure el origen y el destino de la siguiente manera:

   1. En **Tipo de fuente**, elija **Función Lambda** y, a continuación, elija. **TempMonitor**

   1. Para **Tipo de destino**, seleccione **Conector** y, a continuación, seleccione **Notificaciones de Twilio**.

1. En el **Filtro de temas**, escriba **twilio/txt**.

1. Seleccione **Crear subscripción**.

1. Repita los pasos 1 a 4 para crear una suscripción que permita AWS IoT publicar mensajes en la función.

   1. Para **Tipo de origen**, elija **Servicio** y, a continuación, **Nube de IoT**.

   1. En **Seleccione un objetivo**, elija **Función Lambda** y, a continuación, elija. **TempMonitor**

   1. En **Topic filter (Filtro de temas)**, escriba **temperature/input**.

1. Repita los pasos del 1 al 4 para crear una suscripción que permita al conector publicar mensajes en AWS IoT.

   1. Para **Tipo de origen**, seleccione **Conector** y, a continuación, seleccione **Notificaciones de Twilio**.

   1. Para **Tipo de destino**, elija **Servicio** y, a continuación, **Nube de IoT**.

   1. En **Topic filter (Filtro de temas)**, se introduce **twilio/message/status** automáticamente. Este es el tema predefinido en el que publica el conector.

## Paso 8: Implementar el grupo de Greengrass
<a name="connectors-console-create-deployment"></a>

Implemente el grupo en el dispositivo del núcleo.

1. <a name="shared-deploy-group-checkggc"></a>Asegúrese de que el AWS IoT Greengrass núcleo esté funcionando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

   1. Para comprobar si el daemon 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 daemon está en ejecución.
**nota**  
La versión de la ruta depende de la versión del software AWS IoT Greengrass principal que esté instalada en el dispositivo principal.

   1. Inicio de daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="shared-deploy-group-deploy"></a>En la página de configuración de grupo, elija **Implementar**.

1. <a name="shared-deploy-group-ipconfig"></a>

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

   1. 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**.

   1. 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 los puntos finales 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](service-role.md) y asócielo al suyo Cuenta de AWS en el actual. Región de AWS Este rol le permite acceder AWS IoT Greengrass a sus recursos en los AWS servicios.

      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 AWS IoT Greengrass](gg-troubleshooting.md).

**nota**  
<a name="one-conn-version"></a>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](connectors.md#upgrade-connector-versions).

## Pruebe la solución
<a name="connectors-console-test-solution"></a>

1. <a name="choose-test-page"></a>En la página de inicio de la AWS IoT consola, selecciona **Probar**.

1. Para **Suscribirse al tema**, utilice los siguientes valores y, a continuación, seleccione **Suscribirse**. El conector Notificaciones de Twilio publica información sobre el estado en este tema.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-console.html)

1. Para **Publicar en tema**, utilice los siguientes valores y, a continuación, seleccione **Publicar** para invocar la función.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-console.html)

   Si se ejecuta correctamente, el destinatario recibe el mensaje de texto y la consola muestra el estado `success` de los [datos de salida](twilio-notifications-connector.md#twilio-notifications-connector-data-output).

   Ahora, cambie el valor de `temperature` en el mensaje de entrada a **29** y publíquelo. Como es inferior a 30, la TempMonitor función no activa ningún mensaje de Twilio.

## Véase también
<a name="connectors-console-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+  [conectores de Greengrass proporcionados por AWS](connectors-list.md)

# Introducción a los conectores de Greengrass (CLI)
<a name="connectors-cli"></a>

Esta función está disponible para AWS IoT Greengrass Core v1.7 y versiones posteriores.

En este tutorial se muestra cómo utilizarla AWS CLI para trabajar con conectores.

Utilice conectores para acelerar el ciclo de vida de desarrollo. Los conectores son módulos precompilados y reutilizables que puede simplificar la interacción con los servicios, los protocolos y los recursos. Pueden ayudarle a implementar la lógica de negocio en los dispositivos de Greengrass con mayor rapidez. Para obtener más información, consulte [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md).

En este tutorial configurará e implementará el conector de [Notificaciones de Twilio](twilio-notifications-connector.md). El conector recibe la información del mensaje de Twilio como datos de entrada y, a continuación, desencadena un mensaje de texto de Twilio. El flujo de datos se muestra en el siguiente diagrama.

![\[Flujo de datos de la función de Lambda al conector de Notificaciones de Twilio a Twilio.\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/images/connectors/twilio-solution.png)


Después de configurar el conector, debe crear una función de Lambda y una suscripción.
+ La función evalúa los datos simulados desde un sensor de temperatura. Publica condicionalmente la información del mensaje de Twilio a un tema de MQTT. Este es el tema al que se suscribe el conector.
+ La suscripción permite que la función se publique en el tema y que el conector reciba datos del tema.

El conector de Notificaciones de Twilio necesita un token de autenticación de Twilio para interactuar con la API de Twilio. El token es un tipo de texto secreto creado en un recurso grupal AWS Secrets Manager y al que se hace referencia desde él. Esto permite AWS IoT Greengrass crear una copia local del secreto en el núcleo de Greengrass, donde se cifra y se pone a disposición del conector. Para obtener más información, consulte [Despliega los secretos hasta la AWS IoT Greengrass médula](secrets.md).

El tutorial contiene los siguientes pasos generales:

1. [Crear un secreto en Secrets Manager](#connectors-cli-create-secret)

1. [Crear una versión y una definición del recurso](#connectors-cli-create-resource-definition)

1. [Crear una versión y una definición del conector](#connectors-cli-create-connector-definition)

1. [Creación de un paquete de implementación de la función de Lambda](#connectors-cli-create-deployment-package)

1. [Crear una función de Lambda](#connectors-cli-create-function)

1. [Crear una versión y una definición de la función](#connectors-cli-create-function-definition)

1. [Crear una versión y una definición de la suscripción](#connectors-cli-create-subscription-definition)

1. [Cree una versión del grupo](#connectors-cli-create-group-version)

1. [Creación de una implementación](#connectors-cli-create-deployment)

1. [Pruebe la solución](#connectors-cli-test-solution)

Completar el tutorial debería tomarle aproximadamente 30 minutos.

**Uso de la API AWS IoT Greengrass **

Es útil para comprender los siguientes patrones a la hora de trabajar con componentes de grupo y grupos de Greengrass (por ejemplo, los conectores, las funciones y los recursos del grupo).
+ En la parte superior de la jerarquía, un componente tiene un objeto de *definición* que es un contenedor de los objetos de *versión*. A su vez, una versión es un contenedor para los conectores, las funciones u otros tipos de componentes.
+ Al realizar una implementación en el núcleo de Greengrass, implementará un grupo específico. Una versión de grupo puede contener una versión de cada tipo de componente. Un núcleo es obligatorio, pero los demás se incluyen según sea necesario.
+ Las versiones son inmutables, por lo que debe crear nuevas versiones cuando desee realizar cambios. 

**sugerencia**  
Si recibe un error al ejecutar un AWS CLI comando, añada el `--debug` parámetro y vuelva a ejecutar el comando para obtener más información sobre el error.

La AWS IoT Greengrass API le permite crear varias definiciones para un tipo de componente. Por ejemplo, puede crear un objeto `FunctionDefinition` cada vez que cree un parámetro `FunctionDefinitionVersion`, o bien puede añadir nuevas versiones a una definición existente. Esta flexibilidad le permite personalizar su sistema de administración de versiones.

## Requisitos previos
<a name="connectors-cli-prerequisites"></a>

Para completar este tutorial, se necesita lo siguiente:
+ Un grupo de Greengrass y un núcleo de Greengrass (v1.9.3 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](gg-gs.md). El tutorial de introducción también incluye pasos para instalar el software AWS IoT Greengrass Core.
+ Python 3.7 instalado en el dispositivo AWS IoT Greengrass principal.
+  AWS IoT Greengrass debe configurarse para admitir secretos locales, tal y como se describe en [los requisitos de confidencialidad](secrets.md#secrets-reqs).
**nota**  
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por *greengrass-*.
+ Un SID de una cuenta de Twilio, un token de autenticación y un número de teléfono habilitado para Twilio. Después de crear un proyecto de Twilio, estos valores están disponibles en el panel del proyecto.
**nota**  
Puede utilizar una cuenta de prueba de Twilio. Si utiliza una cuenta de prueba, debe añadir números de teléfono de destinatarios que no sean de Twilio a una lista de números de teléfono verificados. Para obtener más información, consulte [Cómo trabajar con su cuenta de prueba gratuita de Twilio](https://www.twilio.com/docs/usage/tutorials/how-to-use-your-free-trial-account).
+ AWS CLI instalado y configurado en su ordenador. Para obtener más información, consulte [Instalación de la AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) y [Configuración de la AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) en la *Guía del usuario de la AWS Command Line Interface *.

   

  Los ejemplos de este tutorial están redactados para Linux y otros sistemas basados en Unix. Si utiliza Windows, consulte [Especificación de valores de parámetros para AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-using-param.html) para obtener más información sobre las diferencias de sintaxis.

  Si el comando contiene una cadena JSON, el tutorial ofrece un ejemplo que tiene el JSON en una sola línea. En algunos sistemas, puede que sea más sencillo editar y ejecutar comandos con este formato.

## Paso 1: Creación de un secreto de Secrets Manager
<a name="connectors-cli-create-secret"></a>

En este paso, utilizas la AWS Secrets Manager API para crear un secreto para tu token de autenticación de Twilio.

1. En primer lugar, cree el secreto.
   + *twilio-auth-token*Sustitúyelo por tu token de autenticación de Twilio.

   ```
   aws secretsmanager create-secret --name greengrass-TwilioAuthToken --secret-string twilio-auth-token
   ```
**nota**  
De forma predeterminada, el rol de servicio Greengrass permite AWS IoT Greengrass obtener el valor de los secretos con nombres que comienzan por *greengrass* -. Para obtener más información, consulte [requisitos de secretos](secrets.md#secrets-reqs).

1. Copie el `ARN` del secreto de la salida. Puede utilizar esto para crear el recurso de secretos y configurar el conector de Notificaciones de Twilio.

## Paso 2: Crear una versión y una definición del recurso
<a name="connectors-cli-create-resource-definition"></a>

En este paso, utilizas la AWS IoT Greengrass API para crear un recurso secreto para tu secreto de Secrets Manager.

1. Cree una definición de recurso que incluya una versión inicial.
   + *secret-arn*`ARN`Sustitúyalo por el secreto que copió en el paso anterior.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{
       "Resources": [
           {
               "Id": "TwilioAuthToken",
               "Name": "MyTwilioAuthToken",
               "ResourceDataContainer": {
                   "SecretsManagerSecretResourceData": {
                       "ARN": "secret-arn"
                   }
               }
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-resource-definition \
   --name MyGreengrassResources \
   --initial-version '{"Resources": [{"Id": "TwilioAuthToken", "Name": "MyTwilioAuthToken", "ResourceDataContainer": {"SecretsManagerSecretResourceData": {"ARN": "secret-arn"}}}]}'
   ```

------

1. Copie el parámetro `LatestVersionArn` de la definición de recurso de la salida. Este valor se usa para añadir la versión de la definición de recurso a la versión de grupo que implementó en el núcleo.

## Paso 3: Crear una versión y una definición del conector
<a name="connectors-cli-create-connector-definition"></a>

En este paso va a configurar parámetros para el conector Notificaciones de Twilio.

1. Cree una definición de conector con una versión inicial.
   + *account-sid*Sustitúyalo por el SID de tu cuenta de Twilio.
   + *secret-arn*Sustitúyelo `ARN` por el secreto de tu Secrets Manager. El conector utiliza esto para obtener el valor del secreto local.
   + *phone-number*Sustitúyelo por tu número de teléfono compatible con Twilio. Twilio lo utiliza para iniciar el mensaje de texto. Esto se puede anular en la carga de mensajes de entrada. Use el siguiente formato: `+19999999999`.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{
       "Connectors": [
           {
               "Id": "MyTwilioNotificationsConnector",
               "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4",
               "Parameters": {
                   "TWILIO_ACCOUNT_SID": "account-sid",
                   "TwilioAuthTokenSecretArn": "secret-arn",
                   "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken",
                   "DefaultFromPhoneNumber": "phone-number"
               }
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-connector-definition \
   --name MyGreengrassConnectors \
   --initial-version '{"Connectors": [{"Id": "MyTwilioNotificationsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Parameters": {"TWILIO_ACCOUNT_SID": "account-sid", "TwilioAuthTokenSecretArn": "secret-arn", "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken", "DefaultFromPhoneNumber": "phone-number"}}]}'
   ```

------
**nota**  
`TwilioAuthToken` es el ID que usó en el paso anterior para crear el recurso de secretos.

1. Copie el parámetro `LatestVersionArn` de la definición de conector de la salida. Este valor se usa para añadir la versión de la definición de conector a la versión de grupo que se implementa en el núcleo.

## Paso 4: Creación de un paquete de implementación de la función de Lambda
<a name="connectors-cli-create-deployment-package"></a>

Para crear una función de Lambda, primero debe crear un *paquete de implementación* de funciones de Lambda que contenga el código de la función y las dependencias. Las funciones de Lambda de Greengrass requieren el [SDK de AWS IoT Greengrass Core](lambda-functions.md#lambda-sdks-core) para tareas como la comunicación con los mensajes de MQTT en el entorno principal y el acceso a los secretos locales. En este tutorial se crea una característica de Python para que utilice la versión Python del SDK en el paquete de implementación.

1. <a name="download-ggc-sdk"></a> Desde la página de descargas del [SDK AWS IoT Greengrass principal](what-is-gg.md#gg-core-sdk-download), descarga el SDK AWS IoT Greengrass básico para Python en tu ordenador.

1. <a name="unzip-ggc-sdk"></a>Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta `greengrasssdk`.

1. Guarde la siguiente función de código de Python en un archivo local llamado "`temp_monitor.py`".

   ```
   import greengrasssdk
   import json
   import random
   
   client = greengrasssdk.client('iot-data')
   
   # publish to the Twilio Notifications connector through the twilio/txt topic
   def function_handler(event, context):
       temp = event['temperature']
       
       # check the temperature
       # if greater than 30C, send a notification
       if temp > 30:
           data = build_request(event)
           client.publish(topic='twilio/txt', payload=json.dumps(data))
           print('published:' + str(data))
           
       print('temperature:' + str(temp))
       return
   
   # build the Twilio request from the input data
   def build_request(event):
       to_name = event['to_name']
       to_number = event['to_number']
       temp_report = 'temperature:' + str(event['temperature'])
   
       return {
           "request": {
               "recipient": {
                   "name": to_name,
                   "phone_number": to_number,
                   "message": temp_report
               }
           },
           "id": "request_" + str(random.randint(1,101))
       }
   ```

1. Comprima en un archivo ZIP los siguientes elementos en un archivo denominado "`temp_monitor_python.zip`". Al crear el archivo ZIP, incluya únicamente el código y sus dependencias, no la carpeta donde se encuentran.
   + **temp\$1monitor.py**. Lógica de la aplicación.
   + **greengrasssdk**. Biblioteca necesaria para las funciones de Lambda Greengrass de Python que publican mensajes MQTT.

   Este es el paquete de implementación de la función de Lambda.

## Paso 5: Creación de una función de Lambda
<a name="connectors-cli-create-function"></a>

Ahora, cree una función de Lambda que use el paquete de implementación.

1. <a name="cli-create-empty-lambda-role"></a>Cree un rol de IAM para poder pasar el ARN del rol cuando cree la función.

------
#### [ JSON Expanded ]

   ```
   aws iam create-role --role-name Lambda_empty --assume-role-policy '{
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "lambda.amazonaws.com"
               },
              "Action": "sts:AssumeRole"
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws iam create-role --role-name Lambda_empty --assume-role-policy '{"Version": "2012-10-17",		 	 	  "Statement": [{"Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"},"Action": "sts:AssumeRole"}]}'
   ```

------
**nota**  
AWS IoT Greengrass no usa este rol porque los permisos para sus funciones Lambda de Greengrass se especifican en el rol de grupo de Greengrass. En este tutorial, va a crear un rol vacío.

1. <a name="cli-copy-lambda-role-arn"></a>Copie la `Arn` del resultado.

1. Utilice la AWS Lambda API para crear la función. TempMonitor El siguiente comando da por hecho que el archivo ZIP está en el directorio actual.
   + Reemplace *role-arn* por el `Arn` que ha copiado.

   ```
   aws lambda create-function \
   --function-name TempMonitor \
   --zip-file fileb://temp_monitor_python.zip \
   --role role-arn \
   --handler temp_monitor.function_handler \
   --runtime python3.7
   ```

1. Publique una versión de la función.

   ```
   aws lambda publish-version --function-name TempMonitor --description 'First version'
   ```

1. Cree un alias a la versión publicada.

   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.
**nota**  
AWS IoT Greengrass **no admite los alias de Lambda para las versiones \$1LATEST.**

   ```
   aws lambda create-alias --function-name TempMonitor --name GG_TempMonitor --function-version 1
   ```

1. Copie la `AliasArn` del resultado. Este valor se utiliza al configurar la función para AWS IoT Greengrass y al crear una suscripción.

Ahora está listo para configurar la función para AWS IoT Greengrass.

## Paso 6: Crear una versión y una definición de la función
<a name="connectors-cli-create-function-definition"></a>

Para usar una función Lambda en un AWS IoT Greengrass núcleo, debe crear una versión de definición de función que haga referencia a la función Lambda por alias y defina la configuración a nivel de grupo. Para obtener más información, consulte [Control de la ejecución de funciones de Lambda de Greengrass utilizando la configuración específica del grupo](lambda-group-config.md).

1. Cree una definición de función que incluya una versión inicial.
   + *alias-arn*Sustitúyala por la `AliasArn` que copió al crear el alias.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{
       "Functions": [
           {
               "Id": "TempMonitorFunction",
               "FunctionArn": "alias-arn",
               "FunctionConfiguration": {
                   "Executable": "temp_monitor.function_handler",
                   "MemorySize": 16000,
                   "Timeout": 5
               }
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-function-definition \
   --name MyGreengrassFunctions \
   --initial-version '{"Functions": [{"Id": "TempMonitorFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": {"Executable": "temp_monitor.function_handler", "MemorySize": 16000,"Timeout": 5}}]}'
   ```

------

1. Copie la `LatestVersionArn` del resultado. Este valor se usa para añadir la versión de la definición de función a la versión de grupo que implementó en el núcleo.

1. Copie la `Id` del resultado. Este valor se usa más tarde al actualizar la función.

## Paso 7: Crear una versión y una definición de la suscripción
<a name="connectors-cli-create-subscription-definition"></a>

<a name="connectors-how-to-add-subscriptions-p1"></a>En este paso añadirá una suscripción que habilita la función de Lambda para enviar datos de entrada al conector. El conector define los temas de MQTT a los que se suscribe, por lo que esta suscripción utiliza uno de los temas. Este es el mismo tema en el que se publica la función de ejemplo.

<a name="connectors-how-to-add-subscriptions-p2"></a>Para este tutorial, también debe crear suscripciones que permitan a la función recibir lecturas de temperatura simuladas AWS IoT y AWS IoT recibir información de estado del conector.

1. Cree una definición de suscripción que contenga una versión inicial que incluya las suscripciones.
   + *alias-arn*Sustitúyalo por el `AliasArn` que copió al crear el alias de la función. Utilice este ARN para las dos suscripciones que lo utilizan.

    

------
#### [ JSON Expanded ]

   ```
   aws greengrass create-subscription-definition --initial-version '{
       "Subscriptions": [
           {
               "Id": "TriggerNotification",
               "Source": "alias-arn",
               "Subject": "twilio/txt",
               "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4"
           },        
           {
               "Id": "TemperatureInput",
               "Source": "cloud",
               "Subject": "temperature/input",
               "Target": "alias-arn"
           },
           {
               "Id": "OutputStatus",
               "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4",
               "Subject": "twilio/message/status",
               "Target": "cloud"
           }
       ]
   }'
   ```

------
#### [ JSON Single-line ]

   ```
   aws greengrass create-subscription-definition \
   --initial-version '{"Subscriptions": [{"Id": "TriggerNotification", "Source": "alias-arn", "Subject": "twilio/txt", "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4"},{"Id": "TemperatureInput", "Source": "cloud", "Subject": "temperature/input", "Target": "alias-arn"},{"Id": "OutputStatus", "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Subject": "twilio/message/status", "Target": "cloud"}]}'
   ```

------

1. Copie la `LatestVersionArn` del resultado. Este valor se usa para añadir la versión de la definición de suscripción a la versión de grupo que implementó en el núcleo.

## Paso 8: Crear una versión del grupo
<a name="connectors-cli-create-group-version"></a>

Ahora, puede crear una versión de grupo que contenga todos los elementos que desea implementar. Para ello, cree una versión de grupo que haga referencia a la versión de destino de cada tipo de componente.

En primer lugar, obtenga el ID de grupo y el ARN de la versión de la definición del núcleo. Estos valores son necesarios para crear la versión de grupo.

1. Obtenga el ID del grupo y la última versión del grupo:

   1. <a name="get-group-id-latestversion"></a>Obtenga el grupo y IDs la versión grupal de Greengrass objetivo. En este procedimiento, suponemos que estos son el último grupo y la última versión de grupo. La siguiente consulta devuelve el grupo creado más recientemente.

      ```
      aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
      ```

      También puede hacer la consulta por nombre. No es necesario que los nombres de grupo sean únicos, por lo que podrían devolverse varios grupos.

      ```
      aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
      ```
**nota**  
<a name="find-group-ids-console"></a>También puede encontrar estos valores en la AWS IoT consola. El ID de grupo se muestra en la página **Settings (Configuración)** del grupo. La versión del grupo IDs se muestra en la pestaña **Implementaciones** del grupo.

   1. <a name="copy-target-group-id"></a>Copie el `Id` del grupo de destino de la salida. Puede utilizar esto para obtener la versión de la definición de núcleo y al implementar el grupo.

   1. <a name="copy-latest-group-version-id"></a>Copie el `LatestVersion` del resultado, que es el ID de la última versión añadida al grupo. Puede utilizar esto para obtener la versión de la definición de núcleo.

1. Obtenga el ARN de la versión de la definición principal:

   1. Obtenga la versión de grupo. En este paso, suponemos que la última versión de grupo incluye una versión de la definición de núcleo.
      + *group-id*Sustitúyala por la `Id` que copiaste para el grupo.
      + *group-version-id*Sustitúyala por la `LatestVersion` que copiaste para el grupo.

      ```
      aws greengrass get-group-version \
      --group-id group-id \
      --group-version-id group-version-id
      ```

   1. Copie la `CoreDefinitionVersionArn` del resultado.

1. Cree una versión de grupo.
   + *group-id*Sustitúyala por la `Id` que copiaste para el grupo.
   + *core-definition-version-arn*Sustitúyalo por el `CoreDefinitionVersionArn` que copió para la versión de definición básica.
   + *resource-definition-version-arn*Sustitúyalo por el `LatestVersionArn` que copió para la definición del recurso.
   + *connector-definition-version-arn*Sustitúyalo por el `LatestVersionArn` que copió para la definición del conector.
   + *function-definition-version-arn*Sustitúyalo por el `LatestVersionArn` que copió para la definición de la función.
   + *subscription-definition-version-arn*Sustitúyala por la `LatestVersionArn` que copiaste para la definición de suscripción.

   ```
   aws greengrass create-group-version \
   --group-id group-id \
   --core-definition-version-arn core-definition-version-arn \
   --resource-definition-version-arn resource-definition-version-arn \
   --connector-definition-version-arn connector-definition-version-arn \
   --function-definition-version-arn function-definition-version-arn \
   --subscription-definition-version-arn subscription-definition-version-arn
   ```

1. Copie el valor de `Version` del resultado. Este es el ID de la versión del grupo. Este valor se usa para implementar la versión de grupo.

## Paso 9: Crear una implementación
<a name="connectors-cli-create-deployment"></a>

Implemente el grupo en el dispositivo del núcleo.

1. <a name="check-gg-daemon-is-running"></a>En el terminal de un dispositivo principal, asegúrese de que el AWS IoT Greengrass daemon esté en ejecución.

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

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

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

   1. Inicio de daemon:

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. <a name="create-deployment"></a>Cree una implementación de .
   + *group-id*Sustitúyalo por el `Id` que copiaste para el grupo.
   + *group-version-id*Sustitúyala por la `Version` que copiaste para la nueva versión del grupo.

   ```
   aws greengrass create-deployment \
   --deployment-type NewDeployment \
   --group-id group-id \
   --group-version-id group-version-id
   ```

1. <a name="copy-deployment-id"></a>Copie la `DeploymentId` del resultado.

1. <a name="get-deployment-status"></a>Obtenga el estado de las implementaciones.
   + *group-id*Sustitúyala por la `Id` que copiaste para el grupo.
   + *deployment-id*Sustitúyalo por el `DeploymentId` que copió para la implementación.

   ```
   aws greengrass get-deployment-status \
   --group-id group-id \
   --deployment-id deployment-id
   ```

   Si el estado es `Success`, la implementación fue correcta. Para obtener ayuda sobre la resolución de problemas, consulte [Solución de problemas AWS IoT Greengrass](gg-troubleshooting.md).

## Pruebe la solución
<a name="connectors-cli-test-solution"></a>

1. <a name="choose-test-page"></a>En la página de inicio de la AWS IoT consola, selecciona **Probar**.

1. Para **Suscribirse al tema**, utilice los siguientes valores y, a continuación, seleccione **Suscribirse**. El conector Notificaciones de Twilio publica información sobre el estado en este tema.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-cli.html)

1. Para **Publicar en tema**, utilice los siguientes valores y, a continuación, seleccione **Publicar** para invocar la función.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/greengrass/v1/developerguide/connectors-cli.html)

   Si se ejecuta correctamente, el destinatario recibe el mensaje de texto y la consola muestra el estado `success` de los [datos de salida](twilio-notifications-connector.md#twilio-notifications-connector-data-output).

   Ahora, cambie el valor de `temperature` en el mensaje de entrada a **29** y publíquelo. Como es inferior a 30, la TempMonitor función no activa ningún mensaje de Twilio.

## Véase también
<a name="connectors-cli-see-also"></a>
+ [Integración con servicios y protocolos mediante conectores de Greengrass](connectors.md)
+ [conectores de Greengrass proporcionados por AWS](connectors-list.md)
+ [Introducción a los conectores de Greengrass (consola)](connectors-console.md)
+ [AWS Secrets Manager comandos](https://docs.aws.amazon.com/cli/latest/reference/secretsmanager) en la Referencia de *AWS CLI comandos*
+ <a name="see-also-iam-cli"></a>[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/cli/latest/reference/iam) de la Referencia de *AWS CLI comandos*
+ <a name="see-also-lambda-cli"></a>[AWS Lambda comandos](https://docs.aws.amazon.com/cli/latest/reference/lambda) de la Referencia de *AWS CLI comandos*
+ <a name="see-also-gg-cli"></a>[AWS IoT Greengrass comandos](https://docs.aws.amazon.com/cli/latest/reference/greengrass/index.html) de la *Referencia de AWS CLI comandos*