

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.

# IoT
<a name="iot-pattern-list"></a>

**Topics**
+ [Extraer y consultar atributos de AWS IoT SiteWise metadatos en un lago de datos](extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.md)
+ [Configuración y solución de problemas de AWS IoT Greengrass con dispositivos cliente](set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.md)
+ [Más patrones](iot-more-patterns-pattern-list.md)

# Extraer y consultar atributos de AWS IoT SiteWise metadatos en un lago de datos
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake"></a>

*Ambarish Dongaonkar, Amazon Web Services*

## Resumen
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-summary"></a>

AWS IoT SiteWise utiliza modelos y jerarquías de activos para representar sus equipos, procesos e instalaciones industriales. Cada modelo o activo puede tener varios atributos específicos de su entorno. Los ejemplos de atributos de los metadatos incluyen el sitio o la ubicación física del activo, los detalles de la planta y los identificadores del equipo. Estos valores de atributos complementan los datos de medición de los activos para maximizar el valor empresarial. El machine learning (ML) puede proporcionar información adicional sobre estos metadatos y agilizar las tareas de ingeniería.

Sin embargo, los atributos de los metadatos no se pueden consultar directamente desde el AWS IoT SiteWise servicio. Para que los atributos se puedan consultar, debe extraerlos e incorporarlos a un lago de datos. Este patrón utiliza un script de Python para extraer los atributos de todos los AWS IoT SiteWise activos e incorporarlos a un lago de datos de un bucket de Amazon Simple Storage Service (Amazon S3). Cuando haya completado este proceso, podrá utilizar consultas SQL en Amazon Athena para acceder a los atributos de los AWS IoT SiteWise metadatos y a otros conjuntos de datos, como los conjuntos de datos de medidas. La información de los atributos de los metadatos también es útil cuando se trabaja con AWS IoT SiteWise monitores o paneles. También puede crear un [panel de Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html) mediante los atributos extraídos del bucket de Amazon S3.

El patrón tiene un código de referencia y puede implementarlo utilizando los mejores servicios de cómputo para su caso de uso, como AWS Lambda o AWS Glue.

## Requisitos previos y limitaciones
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-prereqs"></a>

**Requisitos previos **
+ Un activo Cuenta de AWS.
+ Permisos para configurar AWS Lambda funciones o AWS Glue trabajos.
+ Un bucket de Amazon S3.
+ Los modelos y jerarquías de activos se configuran en AWS IoT SiteWise. Para obtener más información, consulte [Creación de modelos de activos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-asset-models.html) en la AWS IoT SiteWise documentación.

## Arquitectura
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-architecture"></a>

Puede usar una función Lambda o un AWS Glue trabajo para completar este proceso. Recomendamos usar Lambda si tiene menos de 100 modelos y cada modelo tiene un promedio de 15 atributos o menos. Para todos los demás casos de uso, se recomienda utilizar AWS Glue.

La arquitectura de la solución y el flujo de trabajo se muestran en el siguiente diagrama.

![\[Diagrama de arquitectura que muestra el proceso de extracción y consulta descrito.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/22b59ff7-3df3-4a5b-9973-d43967bd58fd/images/fa3d80bf-df9a-49fe-971c-a055339b2cd2.png)


1. Se ejecuta el AWS Glue trabajo programado o la función Lambda. Extrae los atributos de metadatos de los activos AWS IoT SiteWise y los ingiere en un bucket de Amazon S3.

1. Un AWS Glue rastreador rastrea los datos extraídos en el bucket de Amazon S3 y crea tablas en un. AWS Glue Data Catalog

1. Con SQL estándar, Amazon Athena consulta las tablas del AWS Glue Data Catalog.

**Automatización y escala**

Puede programar la función o el AWS Glue trabajo de Lambda para que se ejecute diaria o semanalmente, según la frecuencia de actualización de las configuraciones de sus AWS IoT SiteWise activos.

La cantidad de AWS IoT SiteWise activos que el código de muestra puede procesar no tiene límite, pero una gran cantidad de activos puede aumentar el tiempo necesario para completar el proceso.

## Tools (Herramientas)
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) es un servicio de consultas interactivo que facilita el análisis de datos en Amazon S3 con SQL estándar.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) es un servicio de extracción, transformación y carga (ETL) completamente administrado. Ayuda a clasificar, limpiar, enriquecer y mover datos de forma fiable entre almacenes de datos y flujos de datos.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le ayuda a administrar de forma segura el acceso a sus AWS recursos al controlar quién está autenticado y autorizado a usarlos.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) lo ayuda a recopilar, modelar, analizar y visualizar datos de equipos industriales a escala.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) es un servicio de almacenamiento de objetos basado en la nube que lo ayuda a almacenar, proteger y recuperar cualquier cantidad de datos.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

## Epics
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-epics"></a>

### Configurar el trabajo o la función
<a name="set-up-the-job-or-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configurar los permisos en IAM. | En la consola de IAM, conceda permisos a la función de IAM que asume la función o el AWS Glue trabajo de Lambda para realizar lo siguiente:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.html)Para obtener más información, consulte [Crear roles para un Servicio de AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) en la documentación de IAM. | AWS general | 
| Cree la función o AWS Glue el trabajo de Lambda. | Si utiliza Lambda, cree una función de Lambda nueva. En **Tiempo de ejecución**, elija **Python**. Para más información, consulte [Creación de funciones de Lambda con Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) en la documentación de Lambda.Si lo está utilizando AWS Glue, cree un nuevo trabajo de shell de Python en la AWS Glue consola. Para obtener más información, consulte [Añadir trabajos de shell de Python](https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-job-python-properties) en la AWS Glue documentación.  | AWS general | 
| Actualice la función o AWS Glue el trabajo de Lambda. | Modifique la nueva función o AWS Glue trabajo de Lambda e introduzca el ejemplo de código en la sección [Información adicional](#extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional). Modifique el código según sea necesario para su caso de uso. Para obtener más información, consulte [Editar código mediante el editor de consola](https://docs.aws.amazon.com/lambda/latest/dg/foundation-console.html#code-editor) en la documentación de Lambda y consulte [Trabajar con scripts](https://docs.aws.amazon.com/glue/latest/dg/console-edit-script.html) en la AWS Glue documentación. | AWS general | 

### Ejecutar el trabajo o la función
<a name="run-the-job-or-function"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Ejecute la función o AWS Glue el trabajo de Lambda. | Ejecute la función o AWS Glue el trabajo de Lambda. Para obtener más información, consulte [Invocar la función Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually) en la documentación de Lambda o [consulte Iniciar trabajos mediante](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) activadores en la documentación. AWS Glue Esto extrae los atributos de metadatos de los activos y modelos de la AWS IoT SiteWise jerarquía y los almacena en el bucket de Amazon S3 especificado. | AWS general | 
| Configure un AWS Glue rastreador. | Configure un AWS Glue rastreador con el clasificador de formatos necesario para un archivo con formato CSV. Utilice los detalles del bucket y el prefijo de Amazon S3 utilizados en la función AWS Glue o el trabajo de Lambda. Para obtener más información, consulte [Definir rastreadores](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) en la documentación. AWS Glue  | AWS general | 
| Ejecute el AWS Glue rastreador. | Ejecute el rastreador para procesar el archivo de datos creado por la función AWS Glue o el trabajo de Lambda. El rastreador crea una tabla en el lugar especificado. AWS Glue Data Catalog Para obtener más información, consulte la sección Cómo [iniciar rastreadores mediante activadores](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) en la AWS Glue documentación. | AWS general | 
| Consulte los atributos de los metadatos. | Con Amazon Athena, utilice SQL estándar para realizar consultas AWS Glue Data Catalog según sea necesario para su caso de uso. Puede unir la tabla de atributos de metadatos con otras bases de datos y tablas. Para más información, consulte [Introducción](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html) en la documentación de Amazon Athena. | AWS general | 

## Recursos relacionados
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-resources"></a>
+ [Documentación de Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ [AWS Glue documentación](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [AWS IoT SiteWise Referencia de la API](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/index.html)
+ [AWS IoT SiteWise guía de usuario](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)
  + [Introducción](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started.html)
  + [Crear modelos de activos industriales](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-asset-models.html)
  + [Definición de relaciones entre los modelos de activos (jerarquías)](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html)
  + [Asociación y disociación de activos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/add-associated-assets.html)
  + [Creación de la AWS IoT SiteWise demostración](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started-demo.html#create-getting-started-demo)
+ [IOTSiteWise](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotsitewise.html) (documentación del SDK para Python)
+ [Documentación de Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)

## Información adicional
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional"></a>

**Código**

El código de ejemplo que se proporciona es de referencia y puede personalizarlo según sea necesario para su caso de uso.

```
# Following code can be used in an AWS Lambda function or in an AWS Glue Python shell job. 
# IAM roles used for this job need read access to the AWS IoT SiteWise service and write access to the S3 bucket.
sw_client = boto3.client('iotsitewise')
s3_client = boto3.client('s3')
output = io.StringIO()
 
attribute_list=[]
bucket = '{3_bucket name}'
prefix = '{s3_bucket prefix}'
output.write("model_id,model_name,asset_id,asset_name,attribuet_id,attribute_name,attribute_value\n")
     
m_resp = sw_client.list_asset_models()
for m_rec in m_resp['assetModelSummaries']:
     model_id = m_rec['id']
     model_name = m_rec['name']
 
     attribute_list.clear()
     dam_response = sw_client.describe_asset_model(assetModelId=model_id)
     for rec in dam_response['assetModelProperties']:
         if 'attribute' in rec['type']:
            attribute_list.append(rec['name'])
     
     response = sw_client.list_assets(assetModelId=model_id, filter='ALL')
     for asset in response['assetSummaries']:
         asset_id = asset['id']
         asset_name = asset['name']
         resp = sw_client.describe_asset(assetId=asset_id)
         for rec in resp['assetProperties']:
            if rec['name'] in attribute_list:
                p_resp = sw_client.get_asset_property_value(assetId=asset_id, propertyId=rec['id'])
                if 'propertyValue' in p_resp:
                    if p_resp['propertyValue']['value']:
                        if 'stringValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['stringValue']) + "\n")                             
                        if 'doubleValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['doubleValue']) + "\n")
                        if 'integerValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['integerValue']) + "\n")
                         if 'booleanValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['booleanValue']) + "\n")
 
output.seek(0)
s3_client.put_object(Bucket=bucket, Key= prefix + '/data.csv', Body=output.getvalue())
output.close()
```

# Configuración y solución de problemas de AWS IoT Greengrass con dispositivos cliente
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices"></a>

*Marouane Sefiani y Akalanka De Silva, Amazon Web Services*

## Resumen
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-summary"></a>

AWS IoT Greengrass es un servicio en la nube y de tiempo de ejecución de periferia de código abierto que le ayuda a crear, implementar y administrar software de Internet de las Cosas (IoT) en los dispositivos periféricos. Los casos de uso de AWS IoT Greengrass incluyen:
+ Hogares inteligentes en los que se utiliza una puerta de enlace de AWS IoT Greengrass como centro de automatización del hogar
+ Fábricas inteligentes donde AWS IoT Greengrass puede facilitar la incorporación y el procesamiento local de datos desde el taller

AWS IoT Greengrass puede actuar como un punto de conexión MQTT seguro y autenticado para otros dispositivos periféricos (también conocidos como *dispositivos cliente*) que, de otro modo, normalmente se conectarían directamente a AWS IoT Core. Esta capacidad resulta útil cuando los dispositivos cliente no tienen acceso directo a la red del punto de conexión de AWS IoT Core.

Puede configurar AWS IoT Greengrass para su uso con dispositivos cliente en los siguientes casos de uso:
+ Para que los dispositivos cliente envíen datos a AWS IoT Greengrass
+ Para que AWS IoT Greengrass reenvíe datos a AWS IoT Core
+ Para aprovechar las características avanzadas del motor de reglas de AWS IoT Core

Estas capacidades requieren la instalación y configuración de los siguientes componentes en el dispositivo AWS IoT Greengrass:
+ Intermediario MQTT
+ Puente MQTT
+ Autenticación del dispositivo cliente
+ Detector de IP

Además, los mensajes publicados desde los dispositivos cliente deben estar en formato JSON o en formato [Protocol Buffers (protobuf)](https://protobuf.dev/).

Este patrón describe cómo instalar y configurar estos componentes necesarios y proporciona consejos para la solución de problemas y las prácticas recomendadas.

## Requisitos previos y limitaciones
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa
+ [Interfaz de la línea de comandos de AWS (AWS CLI) versión 2](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)
+ Dos dispositivos cliente con Python 3.7 o posterior
+ Un dispositivo central que ejecute Java Runtime Environment (JRE) versión 8 o posterior y [Amazon Corretto 11](https://aws.amazon.com/corretto/) u [OpenJDK 11](https://openjdk.java.net/)

**Limitaciones**
+ Debe elegir una región de AWS en la que esté disponible AWS IoT Core. Para ver la lista actual de regiones de AWS IoT Core, consulte [Servicios de AWS por región](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).
+ El dispositivo principal debe tener al menos 172 MB de RAM y 512 MB de espacio en disco.

## Arquitectura
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-architecture"></a>

El siguiente diagrama muestra la arquitectura de soluciones para este patrón.

![\[Arquitectura de soluciones para configurar AWS IoT Greengrass con dispositivos cliente\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/0656c5ae-d979-4cf7-be92-a46fa81cab0d.png)


La arquitectura incluye:
+ Dos dispositivos cliente. Cada dispositivo contiene una clave privada, un certificado de dispositivo y un certificado de la entidad de certificación (CA) raíz. El SDK para dispositivos de AWS IoT, que contiene un cliente MQTT, también está instalado en cada dispositivo cliente.
+ Un dispositivo principal que haya implementado AWS IoT Greengrass con los siguientes componentes:
  + Intermediario MQTT
  + Puente MQTT
  + Autenticación del dispositivo cliente
  + Detector de IP

Esta arquitectura admite los siguientes escenarios:
+ Los dispositivos cliente pueden usar su cliente MQTT para comunicarse entre sí a través del intermediario MQTT del dispositivo principal.
+ Los dispositivos cliente también pueden comunicarse con AWS IoT Core en la nube a través del intermediario MQTT del dispositivo principal y el puente MQTT.
+ AWS IoT Core en la nube puede enviar mensajes a los dispositivos cliente a través del cliente de prueba MQTT y el puento MQTT y el intermediario MQTT del dispositivo principal.

Para obtener más información sobre las comunicaciones entre los dispositivos cliente y el dispositivo principal, consulte la sección [información adicional](#set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional).

## Tools (Herramientas)
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-tools"></a>

**Servicios de AWS**
+ [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html) es un servicio en la nube y de tiempo de ejecución de borde de Internet de las Cosas (IoT) de código abierto que le ayuda a crear, implementar y administrar aplicaciones de IoT en los dispositivos.
+ [AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html) proporciona una comunicación bidireccional segura para que los dispositivos conectados a Internet se conecten a la nube de AWS.
+ [Los SDK de dispositivos de AWS IoT](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html) son un kit de desarrollo de software que contienen bibliotecas de código abierto, guías de desarrolladores con ejemplos y guías de migración para que pueda crear productos o soluciones de IoT innovadores en las plataformas de hardware deseadas.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) le permite administrar de forma segura el acceso a los recursos de AWS mediante el control de quién está autenticado y autorizado a utilizarlos.

## Prácticas recomendadas
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-best-practices"></a>
+ La carga útil de los mensajes de los dispositivos cliente debe estar en formato JSON o Protobuf para aprovechar las características avanzadas del motor de reglas de AWS IoT Core, como la transformación y las acciones condicionales.
+ Configure el puente MQTT para permitir la comunicación bidireccional.
+ Configure e implemente el componente detector de IP en AWS IoT Greengrass para garantizar que las direcciones IP del dispositivo principal se incluyan en el campo del nombre alternativo del asunto (SAN) del certificado de intermediario de MQTT.

## Epics
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-epics"></a>

### Configure el dispositivo principal
<a name="set-up-the-core-device"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configurar AWS IoT Greengrass en el dispositivo principal. | Instale el software AWS IoT Greengrass Core siguiendo las instrucciones de la [guía para desarrolladores](https://docs.aws.amazon.com/greengrass/v2/developerguide/install-greengrass-core-v2.html). | AWS IoT Greengrass | 
| Compruebe el estado de la instalación. | Utilice el siguiente comando para comprobar el estado del servicio AWS IoT Greengrass en su dispositivo principal:<pre>sudo systemctl status greengrass.service</pre>El resultado esperado del comando es:<pre>Launched Nucleus successfully</pre> | AWS general | 
| Configure una política de IAM y asóciela al rol de servicio de Greengrass. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS general | 
| Configure e implemente los componentes necesarios en el dispositivo principal de AWS IoT Greengrass. | Configure e implemente los siguientes componentes:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS IoT Greengrass | 
| Confirme que el puente MQTT permite la comunicación bidireccional. | Para retransmitir mensajes MQTT entre los dispositivos cliente y AWS IoT Core, configure e implemente el componente puente MQTT y especifique los temas que se van a retransmitir. A continuación se muestra un ejemplo:<pre>{<br />  "mqttTopicMapping": {<br />    "ClientDevicesToCloud": {<br />      "topic": "dt/#",<br />      "source": "LocalMqtt",<br />      "target": "IotCore"<br />    },<br />    "CloudToClientDevices": {<br />      "topic": "cmd/#",<br />      "source": "IotCore",<br />      "target": "LocalMqtt"<br />    }<br />  }<br />}</pre> | AWS IoT Greengrass | 
| Confirme que el componente de autenticación permite a los dispositivos cliente conectarse y publicar temas o suscribirse a ellos.  | La siguiente configuración `aws.greengrass.clientdevices.Auth` permite que todos los dispositivos cliente se conecten, publiquen mensajes y se suscriban a todos los temas.<pre>{<br />  "deviceGroups": {<br />    "formatVersion": "2021-03-05",<br />    "definitions": {<br />      "MyPermissiveDeviceGroup": {<br />        "selectionRule": "thingName: *",<br />        "policyName": "MyPermissivePolicy"<br />      }<br />    },<br />    "policies": {<br />      "MyPermissivePolicy": {<br />        "AllowAll": {<br />          "statementDescription": "Allow client devices to perform all actions.",<br />          "operations": [<br />            "*"<br />          ],<br />          "resources": [<br />            "*"<br />          ]<br />        }<br />      }<br />    }<br />  }<br />}</pre> | AWS IoT Greengrass | 

### Configurar los dispositivos cliente
<a name="set-up-client-devices"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar el SDK para dispositivos con AWS IoT. | Instale el SDK para dispositivos con AWS IoT en los dispositivos cliente. Para obtener una lista completa de los idiomas admitidos y los correspondientes SDKs, consulte la [documentación de AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html).Por ejemplo, el SDK de dispositivos de AWS IoT para Python se [encuentra en GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2). Para instalar este SDK:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html)Como opción, puede instalar el SDK desde el repositorio de origen:<pre># Create a workspace directory to hold all the SDK files<br />mkdir sdk-workspace<br />cd sdk-workspace<br /># Clone the repository<br />git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git<br /># Install using Pip (use 'python' instead of 'python3' on Windows)<br />python3 -m pip install ./aws-iot-device-sdk-python-v2</pre> | AWS IoT general | 
| Cree un objeto. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS IoT Core | 
| Descargue el certificado de CA del dispositivo principal de Greengrass. | Si espera que el dispositivo principal de Greengrass funcione en entornos fuera de línea, debe poner el certificado de CA principal de Greengrass a disposición del dispositivo cliente para que pueda verificar el certificado del intermediario MQTT (emitido por la CA principal de Greengrass). Por lo tanto, es importante obtener una copia de este certificado. Utilice alguna de los siguientes opciones para descargar el certificado de CA:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | AWS general | 
| Copiar las credenciales en los dispositivos cliente. | Copiar el certificado de CA principal de Greengrass, el certificado del dispositivo y la clave privada en los dispositivos cliente. | AWS general | 
| Asociar los dispositivos cliente al dispositivo principal. | Asociar los dispositivos cliente a un dispositivo principal para que puedan detectar el dispositivo principal. A continuación, los dispositivos cliente pueden usar la [API de descubrimiento de Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/greengrass-discover-api.html) para recuperar la información de conectividad y los certificados de sus dispositivos principales asociados. Para obtener más información, consulte [Asociación de dispositivos cliente](https://docs.aws.amazon.com/greengrass/v2/developerguide/associate-client-devices.html) en la documentación de AWS IoT Greengrass.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html)Los dispositivos cliente que asoció ahora pueden usar la API de detección de Greengrass para detectar este dispositivo principal. | AWS IoT Greengrass | 

### Envíe y reciba datos
<a name="send-and-receive-data"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Enviar datos de un dispositivo cliente a otro dispositivo cliente. | Utilice el cliente MQTT de su dispositivo para publicar un mensaje sobre el tema `dt/client1/sensor`. | AWS general | 
| Envíe datos desde el dispositivo cliente a AWS IoT Core. | Utilice el cliente MQTT de su dispositivo para publicar un mensaje sobre el tema `dt/client1/sensor`.En el cliente de prueba de MQTT, suscríbase al tema sobre el que el dispositivo está enviando mensajes o suscríbase a **\$1** para todos los temas (consulte los [detalles](https://docs.aws.amazon.com/iot/latest/developerguide/view-mqtt-messages.html)). | AWS general | 
| Enviar mensajes desde AWS IoT Core a dispositivos cliente. | En la página del cliente de prueba de MQTT, en la pestaña **Publish to a topic (Publicar en un tema)**, en el campo **Topic name (Nombre del tema)**, introduzca el nombre del tema de su mensaje. En este ejemplo, utilice `cmd/client1` para el tema. | AWS general | 

## Resolución de problemas
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-troubleshooting"></a>


| Problema | Solución | 
| --- | --- | 
| **No se pudo verificar el error del certificado del servidor** | Este error se produce cuando el cliente MQTT no puede verificar el certificado presentado por el intermediario MQTT durante el protocolo de enlace TLS. La razón más común es que el cliente MQTT no tiene el certificado de CA. Siga estos pasos para asegurarse de que el certificado de CA se proporciona al cliente MQTT.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices.html) | 
| **No se pudo verificar el error del nombre del servidor** | Este error se produce cuando el cliente MQTT no puede comprobar que se está conectando al servidor correcto. La razón más común es que la dirección IP del dispositivo Greengrass no aparece en el campo SAN del certificado.Siga las instrucciones de la solución anterior para obtener el certificado de intermediario MQTT y compruebe que el campo SAN contiene la dirección IP del dispositivo AWS IoT Greengrass, tal y como se explica en la sección [Información adicional](#set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional). Si no es así, confirme que el componente del detector de IP está instalado correctamente y reinicie el dispositivo principal. | 
| **No se puede verificar el nombre del servidor solo cuando se conecta desde un dispositivo cliente integrado** | Mbed TLS, que es una biblioteca TLS popular que se utiliza en los dispositivos integrados, actualmente solo admite la verificación de nombres DNS en el campo SAN del certificado, como se muestra en el código de la biblioteca Mbed TLS. Como el dispositivo principal no tiene su propio nombre de dominio y depende de la dirección IP, los clientes de TLS que utilizan Mbed TLS no pasarán la verificación del nombre del servidor durante el protocolo de enlace TLS, lo que provocará un fallo de conexión. Recomendamos que añada la verificación de la dirección IP de SAN a la biblioteca Mbed TLS en la [función x509\$1crt\$1check\$1san](https://github.com/Mbed-TLS/mbedtls/blob/6a327a5fdc2786cb50b4dbe5e3a75884a1f8435a/library/x509_crt.c#L2548). | 

## Recursos relacionados
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-resources"></a>
+ [Documentación de AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/v2/developerguide/what-is-iot-greengrass.html)
+ [Documentación de AWS IoT Core de AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/what-is-aws-iot.html)
+ [Componente intermediario MQTT](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-broker-moquette-component.html)
+ [Componente puente MQTT](https://docs.aws.amazon.com/greengrass/v2/developerguide/mqtt-bridge-component.html)
+ [Componente de autenticación del dispositivo cliente](https://docs.aws.amazon.com/greengrass/v2/developerguide/client-device-auth-component.html)
+ [Componente detector de IP](https://docs.aws.amazon.com/greengrass/v2/developerguide/ip-detector-component.html)
+ [SDK de dispositivos AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html)
+ [Implementación de dispositivos de clientes locales con AWS IoT Greengrass](https://aws.amazon.com/blogs/iot/implementing-local-client-devices-with-aws-iot-greengrass/) (entrada del blog de AWS)
+ [RFC 5280: perfil del certificado de infraestructura de clave pública X.509 de Internet y de la lista de revocación de certificados (CRL)](https://www.rfc-editor.org/rfc/rfc5280)

## Información adicional
<a name="set-up-and-troubleshoot-aws-iot-greengrass-with-client-devices-additional"></a>

Esta sección ofrece información adicional sobre las comunicaciones entre los dispositivos cliente y el dispositivo principal.

El intermediario MQTT escucha en el puerto 8883 del dispositivo principal los intentos de conexión con un cliente TLS. En la siguiente ilustración se muestra un ejemplo de un certificado de servidor de intermediario MQTT.

![\[Ejemplo de certificado de servidor de intermediario MQTT\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/b2c324a1-60cd-4194-80e7-e5184662146a.png)


El certificado de ejemplo muestra los siguientes detalles:
+ El certificado lo emite la CA principal de AWS IoT Greengrass, que es local y específica del dispositivo principal; es decir, actúa como una CA local.
+ El componente de autenticación del cliente rota automáticamente este certificado cada semana, como se muestra en la siguiente ilustración. Puede establecer este intervalo en la configuración del componente de autenticación del cliente.

![\[Rotación del certificado de servidor del intermediario MQTT\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/65bcdc5c-a71c-4f52-adcd-21910fabfc2a.png)

+ El nombre alternativo del asunto (SAN) desempeña un papel fundamental en la verificación del nombre del servidor por parte del cliente TLS. Ayuda al cliente TLS a garantizar que se conecta al servidor correcto y ayuda a evitar man-in-the-middle ataques durante la configuración de la sesión TLS. En el certificado de ejemplo, el campo SAN indica que este servidor escucha en localhost (el conector de dominio Unix local) y que la interfaz de red tiene la dirección IP 192.168.1.12.

El cliente TLS utiliza el campo SAN del certificado para comprobar que se está conectando a un servidor legítimo durante la verificación del servidor. Por el contrario, durante un protocolo de enlace TLS típico entre un servidor HTTP y un navegador, el nombre de dominio del campo del nombre común (CN) o del campo SAN se utiliza para comprobar el dominio al que se está conectando realmente el navegador durante el proceso de verificación del servidor. Si el dispositivo principal no tiene un nombre de dominio, la dirección IP incluida en el campo SAN sirve para el mismo propósito. Para obtener más información, consulte la [sección Nombre alternativo del asunto](https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.6) de *RFC 5280: perfil del certificado de infraestructura de clave pública X.509 de Internet y de la lista de revocación de certificados (CRL)*.

El componente detector de IP de AWS IoT Greengrass garantiza que se incluyan las direcciones IP correctas en el campo SAN del certificado.

El certificado del ejemplo lo firma el dispositivo AWS IoT Greengrass que actúa como CA local. El cliente TLS (cliente MQTT) no conoce esta CA, por lo que debemos proporcionar un certificado de CA similar al siguiente.

![\[Ejemplo de certificado de CA\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/a340e6ea-dcfa-42a4-a370-c16ee08a6842/images/b08b3bcb-9e12-4f5a-9204-cf65ea32902f.png)


# Más patrones
<a name="iot-more-patterns-pattern-list"></a>

**Topics**
+ [Capturar datos de IoT directamente en Amazon S3 de forma rentable con AWS IoT Greengrass](cost-effectively-ingest-iot-data-directly-into-amazon-s3-using-aws-iot-greengrass.md)
+ [Implementación de sistemas de agentes en Amazon Bedrock con el marco CrewAI mediante Terraform](deploy-agentic-systems-on-amazon-bedrock-with-the-crewai-framework.md)
+ [Implemente aplicaciones en contenedores si se AWS IoT Greengrass V2 ejecutan como un contenedor Docker](deploy-containerized-applications-on-aws-iot-greengrass-version-2-running-as-a-docker-container.md)