

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.

# Connect dispositivos a AWS IoT
<a name="iot-connect-devices"></a>

Los dispositivos se conectan a otros servicios AWS IoT y a través de ellos AWS IoT Core. De este modo AWS IoT Core, los dispositivos envían y reciben mensajes mediante puntos de conexión específicos de su cuenta. Los [AWS IoT Dispositivo SDKs](#iot-connect-device-sdks) admiten comunicaciones entre dispositivos mediante los protocolos MQTT y WSS. Para obtener más información acerca de los protocolos que pueden usar los dispositivos, consulte [Protocolos de comunicación de dispositivos](protocols.md).

**Agente de mensajes**  
AWS IoT gestiona la comunicación de los dispositivos a través de un intermediario de mensajes. Los dispositivos y los clientes publican los mensajes en el agente de mensajes y también se suscriben a los mensajes que publica el agente de mensajes. Los mensajes se identifican mediante un [*tema*](topics.md) definido por la aplicación. Cuando el agente de mensajes recibe un mensaje publicado por un dispositivo o un cliente, lo vuelve a publicar en los dispositivos y clientes que estén suscritos a ese tema. El agente de mensajes también reenvía los mensajes al motor de AWS IoT [reglas](iot-rules.md), que puede actuar sobre el contenido del mensaje.

**AWS IoT seguridad de los mensajes**  
Conexiones de dispositivos que se AWS IoT van a utilizar [Certificados de cliente X.509](x509-client-certs.md) y [AWS firma V4](https://docs.aws.amazon.com//general/latest/gr/signing_aws_api_requests.html) para la autenticación. Las comunicaciones de los dispositivos están protegidas por la versión 1.3 de TLS y AWS IoT requieren que los dispositivos envíen la [extensión de indicación del nombre del servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) al conectarse. Para obtener más información, consulte [Seguridad del transporte](transport-security.html) en. AWS IoT

## AWS IoT datos del dispositivo y puntos finales de servicio
<a name="iot-connect-device-endpoints"></a>

**importante**  
Puede almacenar o almacenar en caché los puntos de conexión de su dispositivo. Esto significa que no tendrá que consultar la API de `DescribeEndpoint` cada vez que conecte un dispositivo nuevo. Los puntos de conexión no cambiarán después de AWS IoT Core crearlos para tu cuenta.

Cada cuenta tiene varios puntos de conexión de dispositivo que son exclusivos de la cuenta y admiten funciones de IoT específicas. Los puntos finales de datos del AWS IoT dispositivo admiten un publish/subscribe protocolo diseñado para las necesidades de comunicación de los dispositivos de IoT; sin embargo, otros clientes, como aplicaciones y servicios, también pueden usar esta interfaz si su aplicación requiere las funciones especializadas que proporcionan estos puntos finales. Los puntos finales de servicio de los AWS IoT dispositivos permiten el acceso centrado en los dispositivos a los servicios de seguridad y administración.

Para conocer el punto de conexión de datos del dispositivo de tu cuenta, puedes encontrarlo en la página de [https://console.aws.amazon.com//iot/home#/settings](https://console.aws.amazon.com//iot/home#/settings) de la consola. AWS IoT Core 

Si quiere saber cuál es el punto de conexión del dispositivo de su cuenta para una finalidad concreta, incluido el punto de conexión de datos del dispositivo, utilice el comando **describe-endpoint** de la CLI que se muestra aquí o la API de REST `DescribeEndpoint` y proporcione el valor del parámetro `endpointType` de la siguiente tabla.

```
aws iot describe-endpoint --endpoint-type endpointType
```

Este comando devuelve un *iot-endpoint* en el siguiente formato:`account-specific-prefix.iot.aws-region.amazonaws.com`.

Cada cliente tiene un punto de conexión `iot:Data-ATS` y `iot:Data`. Cada punto de conexión utiliza un certificado X.509 para autenticar al cliente. Recomendamos a los clientes que utilicen el tipo de punto de conexión `iot:Data-ATS` más reciente para evitar problemas relacionados con la desconfianza generalizada en las entidades de certificación de Symantec. Proporcionamos el `iot:Data` punto final para que los dispositivos recuperen datos de puntos finales antiguos que utilizan VeriSign certificados de compatibilidad con versiones anteriores. Para obtener más información, consulte [Autenticación del servidor](server-authentication.html).


**AWS IoT puntos finales para dispositivos**  

|  Finalidad del punto de conexión  |  Valor de `endpointType`  |  Description (Descripción)  | 
| --- | --- | --- | 
|  Operaciones de plano de datos de AWS IoT Core  |  `iot:Data-ATS`  |  Se utiliza para enviar y recibir datos desde y hacia los componentes agente de mensajes, [Device Shadow](iot-device-shadows.md) y [Rules Engine](iot-rules.md) de AWS IoT. `iot:Data-ATS` devuelve un punto de conexión de datos firmados por ATS.  | 
| Operaciones de plano de datos de AWS IoT Core(heredadas) |  `iot:Data`  | iot:Datadevuelve un punto final de datos VeriSign firmado que se proporciona para garantizar la compatibilidad con versiones anteriores. Los puntos de conexión de Symantec (iot:Data) no admiten MQTT 5. | 
|  AWS IoT Core acceso mediante credenciales  |  `iot:CredentialProvider`  |  Se utiliza para intercambiar el certificado X.509 integrado en un dispositivo por credenciales temporales con el fin de conectarse directamente con otros servicios de AWS . Para obtener más información sobre cómo conectarse a otros AWS servicios, consulte [Autorización de llamadas directas a AWS](authorizing-direct-aws.md) servicios.  | 
|  Operaciones de datos de trabajos de AWS IoT Device Management  |  `iot:Jobs`  |  Se utiliza para permitir que los dispositivos interactúen con el servicio AWS IoT Jobs mediante el [HTTPS APIs del dispositivo Jobs](jobs-mqtt-api.md). `iot:Jobs` IPv4 solo se puede usar para. Si utiliza puntos de enlace de doble pila (IPv4 y IPv6), utilice el tipo de `iot:Data-ATS` punto final.  | 
|  AWS IoT Operaciones de Device Advisor  |  `iot:DeviceAdvisor`  |  Un tipo de punto de conexión de prueba que se utiliza para probar dispositivos con Device Advisor. Para obtener más información, consulte [Asesor de dispositivos](device-advisor.md).  | 
|  AWS IoT Core versión beta de datos (versión preliminar)  |  `iot:Data-Beta`  |  Un tipo de punto de conexión reservado para las versiones beta. Para obtener información sobre su uso actual, consulte [Configuraciones de dominio](iot-custom-endpoints-configurable.md).  | 

También puede utilizar su propio nombre de dominio completo (FQDN), por ejemplo*example.com*, y el certificado de servidor asociado, para conectar los dispositivos AWS IoT mediante. [Configuraciones de dominio](iot-custom-endpoints-configurable.md)

## AWS IoT Dispositivo SDKs
<a name="iot-connect-device-sdks"></a>

El AWS IoT dispositivo le SDKs ayuda a conectar sus dispositivos de IoT AWS IoT Core y es compatible con los protocolos MQTT y MQTT sobre WSS.

El AWS IoT dispositivo se SDKs diferencia del dispositivo AWS SDKs en que el AWS IoT dispositivo SDKs admite las necesidades de comunicación especializadas de los dispositivos de IoT, pero no es compatible con todos los servicios compatibles con el AWS SDKs. El AWS IoT dispositivo SDKs es compatible con los AWS SDKs que admiten todos los AWS servicios; sin embargo, utilizan diferentes métodos de autenticación y se conectan a diferentes puntos finales, lo que podría hacer que su uso no fuera AWS SDKs práctico en un dispositivo de IoT.

**Dispositivos móviles**  
Son [AWS Aplicaciones SDKs](iot-connect-service.md#iot-connect-mobile-sdks) compatibles tanto con las comunicaciones de los dispositivos MQTT como con algunos de los AWS IoT servicios APIs y con otros servicios. APIs AWS Si está desarrollando en un dispositivo móvil compatible, revise el SDK para ver si es la mejor opción para desarrollar su solución de IoT.

------
#### [ C\$1\$1 ]

**AWS IoT SDK para dispositivos C\$1\$1**

El SDK para dispositivos de AWS IoT C\$1\$1 permite a los desarrolladores crear aplicaciones conectadas utilizando AWS y APIs los AWS IoT Core servicios. En concreto, este SDK se diseñó para los dispositivos que no tienen limitación de recursos y requieren características avanzadas, como la puesta en cola de mensajes, la compatibilidad con varios procesos y las características de idioma más actualizadas. Para obtener más información, consulte los siguientes temas:
+ [AWS IoT El SDK del dispositivo C\$1\$1 v2 está activado GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)
+ [AWS IoT SDK de dispositivo C\$1\$1 v2 Léame](https://github.com/aws/aws-iot-device-sdk-cpp-v2#aws-iot-device-sdk-for-c-v2)
+ [AWS IoT Ejemplos de Device SDK C\$1\$1 v2](https://github.com/aws/aws-iot-device-sdk-cpp-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-for-c-v2)
+ [AWS IoT Documentación de la API C\$1\$1 v2 del SDK de dispositivos](https://aws.github.io/aws-iot-device-sdk-cpp-v2/)

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

**AWS IoT SDK de dispositivo para Python**

El SDK de AWS IoT dispositivos para Python permite a los desarrolladores escribir scripts de Python para usar sus dispositivos para acceder a la AWS IoT plataforma a través de MQTT o MQTT a través del protocolo WebSocket Secure (WSS). Al conectar sus dispositivos a los AWS IoT Core servicios, los usuarios pueden trabajar APIs de forma segura con el agente de mensajes, las reglas y el servicio Device Shadow que AWS IoT Core proporciona AWS Lambda, así como con otros AWS servicios como Amazon Kinesis y Amazon S3, entre otros.
+ [AWS IoT SDK de dispositivo para Python v2 en GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2)
+ [AWS IoT SDK de dispositivo para Python v2 Readme](https://github.com/aws/aws-iot-device-sdk-python-v2#aws-iot-device-sdk-v2-for-python)
+ [AWS IoT Ejemplos de SDK de dispositivos para Python v2](https://github.com/aws/aws-iot-device-sdk-python-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-v2-for-python)
+ [AWS IoT Documentación de la API del SDK de dispositivos para Python v2](https://aws.github.io/aws-iot-device-sdk-python-v2/)

------
#### [ JavaScript ]

**AWS IoT SDK de dispositivo para JavaScript**

El SDK de AWS IoT dispositivos JavaScript permite a los desarrolladores escribir JavaScript aplicaciones que accedan APIs a ellas AWS IoT Core mediante MQTT o MQTT a través del WebSocket protocolo. Se puede utilizar en entornos de Node.js y aplicaciones de navegador. Para obtener más información, consulte los siguientes temas:
+ [AWS IoT SDK de dispositivo para JavaScript la versión 2 en adelante GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)
+ [AWS IoT Lea el SDK del dispositivo para JavaScript la versión 2](https://github.com/aws/aws-iot-device-sdk-js-v2#aws-iot-device-sdk-for-javascript-v2)
+ [AWS IoT Ejemplos de SDK de dispositivo para la JavaScript versión 2](https://github.com/aws/aws-iot-device-sdk-js-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-for-javascript-v2)
+ [AWS IoT Documentación sobre la API del SDK de JavaScript dispositivos para la versión 2](https://aws.github.io/aws-iot-device-sdk-js-v2/index.html)

------
#### [ Java ]

**AWS IoT SDK de dispositivo para Java**

El AWS IoT Device SDK for Java permite a los desarrolladores de Java acceder a él a AWS IoT Core través APIs de MQTT o MQTT a través del WebSocket protocolo. El SDK admite el servicio Device Shadow. Puede tener acceso a las sombras mediante los métodos GET, UPDATE y DELETE de HTTP. El SDK es también compatible con un modelo de acceso a sombras simplificado, lo que permite a los desarrolladores intercambiar datos con las sombras utilizando métodos getter y setter, sin tener que serializar ni deserializar documentos JSON. Para obtener más información, consulte los siguientes temas:
+ [AWS IoT SDK de dispositivo para Java v2 activado GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)
+ [AWS IoT SDK de dispositivo para Java v2 (Léame)](https://github.com/aws/aws-iot-device-sdk-java-v2#aws-iot-device-sdk-for-java-v2)
+ [AWS IoT Ejemplos de SDK de dispositivos para Java v2](https://github.com/aws/aws-iot-device-sdk-java-v2/tree/main/samples#sample-apps-for-the-aws-iot-device-sdk-for-java-v2)
+ [AWS IoT Documentación de la API de Device SDK for Java v2](https://aws.github.io/aws-iot-device-sdk-java-v2/)

------
#### [ Embedded C ]

**AWS IoT SDK de dispositivo para C integrado**

**importante**  
Este SDK está diseñado para que lo utilicen desarrolladores de software incrustado con experiencia.

El AWS IoT Device SDK para Embedded C (C-SDK) es una colección de archivos fuente en C bajo la licencia de código abierto del MIT que se puede usar en aplicaciones integradas para conectar de forma segura dispositivos de IoT a AWS IoT Core. Incluye las bibliotecas MQTT, JSON Parser y AWS IoT Device Shadow, entre otras. Se distribuye como código fuente y está diseñado para integrarse en el firmware cliente junto con código de aplicación, otras bibliotecas y, opcionalmente, RTOS (Real Time Operating System). 

Por lo general, AWS IoT Device SDK para Embedded C está dirigido a dispositivos con recursos limitados que requieren un tiempo de ejecución optimizado en lenguaje C. Puede usar el SDK en cualquier sistema operativo y alojarlo en cualquier tipo de procesador (por ejemplo, MCUs y MPUs). Si su dispositivo tiene suficientes recursos de memoria y procesamiento disponibles, le recomendamos que utilice uno de los otros AWS IoT dispositivos y dispositivos móviles SDKs, como el SDK de AWS IoT dispositivos para C\$1\$1 JavaScript, Java o Python.

Para obtener más información, consulte los siguientes temas:
+ [AWS IoT SDK de dispositivo para C integrado en GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)
+ [AWS IoT SDK de dispositivo para C integrado: readme](https://github.com/aws/aws-iot-device-sdk-embedded-C#aws-iot-device-sdk-for-embedded-c)
+ [AWS IoT Ejemplos de SDK de dispositivo para C integrado](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/docs/doxygen/output/html/demos_main.html)

------

# Protocolos de comunicación de dispositivos
<a name="protocols"></a><a name="iot-message-broker"></a>

AWS IoT Core admite dispositivos y clientes que utilizan los protocolos MQTT y MQTT over WebSocket Secure (WSS) para publicar mensajes y suscribirse a ellos, y dispositivos y clientes que utilizan el protocolo HTTPS para publicar mensajes. Todos los protocolos admiten y IPv4 . IPv6 En esta sección se describen las diferentes opciones de conexión para dispositivos y clientes.

## Versiones del protocolo TLS
<a name="connection-protocol-tls"></a>

AWS IoT Core utiliza la [versión 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) de [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) y la [versión 1.3 de TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) para cifrar todas las comunicaciones. Puede configurar versiones adicionales de la política de TLS para su punto de conexión mediante el [establecimiento de los ajustes de TLS en las configuraciones de dominio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html). Al conectar los dispositivos a AWS IoT Core, los clientes pueden enviar la [extensión de indicación de nombre de servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), que es necesaria para características como el [registro de varias cuentas](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), los [puntos de conexión configurables](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html), los [dominios personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) y los [puntos de conexión de VPC](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html). Para obtener más información, consulte [Seguridad de transporte en AWS IoT](transport-security.html).

Los [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) admiten MQTT y MQTT a través de WSS y cumplen los requisitos de seguridad de las conexiones de los clientes. Recomendamos utilizar los [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) para conectar los clientes a AWS IoT.

## Protocolos, asignaciones de puertos y autenticación
<a name="protocol-mapping"></a><a name="protocol-port-mapping"></a>

La forma en que un dispositivo o cliente se conecta al agente de mensajes se puede configurar con un [tipo de autenticación](#connection-protocol-auth-mode). De forma predeterminada o cuando no se envía ninguna extensión SNI, el método de autenticación se basa en el protocolo de aplicación, el puerto y la extensión TLS de negociación del protocolo de capa de aplicación (ALPN) que utilizan los dispositivos. En la siguiente tabla se muestra la autenticación esperada en función del puerto y la ALPN.


**Protocolos, autenticación y asignaciones de puertos**  

| Protocolo | Operaciones admitidas | Autenticación | Puerto | Nombre del protocolo ALPN | 
| --- | --- | --- | --- | --- | 
|  MQTT ha terminado WebSocket  | Publicar, suscribirse | Signature Version 4 | 443 |  N/A  | 
|  Se acabó MQTT WebSocket  | Publicar, suscribirse | Autenticación personalizada | 443 |  N/A  | 
|  MQTT  | Publicar, suscribirse |  Certificado de cliente X.509  |  443†  |  `x-amzn-mqtt-ca`  | 
| MQTT | Publicar, suscribirse | Certificado de cliente X.509 | 8883 | N/A | 
|  MQTT  | Publicar, suscribirse |  Autenticación personalizada  |  443†  |  `mqtt`  | 
|  HTTPS  | Solo publicar |  Signature Version 4  |  443  |  N/A  | 
|  HTTPS  | Solo publicar |  Certificado de cliente X.509  |  443†  |  `x-amzn-http-ca`  | 
| HTTPS | Solo publicar | Certificado de cliente X.509 | 8443 | N/A | 
| HTTPS | Solo publicar | Autenticación personalizada | 443 | N/A | 

**Negociación de protocolo de capa de aplicación (ALPN)**  
† Al utilizar las configuraciones de punto final predeterminadas, los clientes que se conecten al puerto 443 con la autenticación mediante certificado de cliente X.509 deben implementar la extensión TLS de [negociación del protocolo de capa de aplicación (ALPN)](https://tools.ietf.org/html/rfc7301) y utilizar el [nombre del protocolo ALPN](https://tools.ietf.org/html/rfc7301#section-3.1) que aparece en el ALPN ProtocolNameList enviado por el cliente como parte del mensaje. `ClientHello`  
[En el puerto 443, el punto final [IoT:data-ATS](iot-connect-devices.md#iot-connect-device-endpoint-table) admite HTTP x-amzn-http-ca ALPN, pero el punto final IoT:Jobs no.](iot-connect-devices.md#iot-connect-device-endpoint-table)  
[En el puerto 8443 HTTPS y el puerto 443 MQTT con ALPN, no se puede usar la autenticación personalizada. x-amzn-mqtt-ca](custom-authentication.md)

Los clientes se conectan a los puntos finales Cuenta de AWS de sus dispositivos. Consulte [AWS IoT datos del dispositivo y puntos finales de servicio](iot-connect-devices.md#iot-connect-device-endpoints) para obtener información sobre cómo encontrar los puntos de conexión de los dispositivos de su cuenta.

**nota**  
AWS SDKs no requieren la URL completa. Solo requieren el nombre de host del punto final, como en el [`pubsub.py`ejemplo de AWS IoT Device SDK for Python on GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py#L100). Pasar la URL completa como se indica en la siguiente tabla puede generar un error (como un nombre de host no válido).


**Conectándose a AWS IoT Core**  

|  Protocolo  |  Punto de enlace o URL  | 
| --- | --- | 
|  MQTT  |  `iot-endpoint`  | 
|  MQTT a través de WSS  |  `wss://iot-endpoint/mqtt`  | 
|  HTTPS  |  `https://iot-endpoint/topics`  | 

## Elección de un protocolo de aplicación para la comunicación entre dispositivos
<a name="protocol-selection"></a>

Para la mayoría de las comunicaciones de los dispositivos de IoT a través de los puntos finales del dispositivo, querrá utilizar los protocolos Secure MQTT o MQTT over WebSocket Secure (WSS); sin embargo, los puntos finales del dispositivo también admiten HTTPS.

En la siguiente tabla se compara cómo se AWS IoT Core utilizan los dos protocolos de alto nivel (MQTT y HTTPS) para la comunicación entre dispositivos.


**AWS IoT protocolos de dispositivo (MQTT y HTTPS) side-by-side**  

|  Característica  |  [MQTT](mqtt.md)  |  [HTTPS](http.md)  | 
| --- | --- | --- | 
|  Soporte para publicación/suscripción  |  Publicar y suscribirse  |  Solo publicar  | 
|  Soporte para SDK  |  [AWS El dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) admite los protocolos MQTT y WSS  |  No compatible con el SDK, pero es posible usar métodos de lenguajes específicos para realizar solicitudes HTTPS  | 
|  Soporte para calidad del servicio  |  [Niveles 0 y 1 de calidad del servicio de MQTT](mqtt.md#mqtt-qos)  | Se admite la calidad del servicio al pasar un parámetro de cadena de consulta ?qos=qos donde el valor puede ser 0 o 1. Puede agregar esta cadena de consulta para publicar un mensaje con el valor de calidad del servicio que desee. | 
| ¿Se pueden perder los mensajes recibidos mientras el dispositivo estaba sin conexión? | Sí | No | 
|  Soporte de campo de `clientId`  |  Sí  |  No  | 
|  Detección de desconexión de dispositivos  |  Sí  |  No  | 
|  Comunicaciones seguras  |  Sí Consulte [Protocolos, asignaciones de puertos y autenticación](#protocol-mapping)  |  Sí Consulte [Protocolos, asignaciones de puertos y autenticación](#protocol-mapping)  | 
|  Definiciones de temas  |  Definido por la aplicación  |  Definido por la aplicación  | 
|  Formato de datos de mensajes  |  Definido por la aplicación  |  Definido por la aplicación  | 
| Sobrecarga de protocolo | Más baja | Más alta | 
| Consumo eléctrico | Más bajo | Más alto | 

## Elección de un tipo de autenticación para la comunicación entre dispositivos
<a name="connection-protocol-auth-mode"></a>

Puede configurar el tipo de autenticación para su punto de conexión de IoT mediante puntos de conexión configurables. Como alternativa, utilice la configuración predeterminada y determine cómo se autentican sus dispositivos con una combinación de protocolo de aplicación, puerto y extensión TLS de ALPN. El tipo de autenticación que elija determina cómo se autenticarán sus dispositivos cuando se conecten a ellos. AWS IoT Core Hay cinco tipos de autenticación: 

**Certificado X.509**

Autentica los dispositivos mediante [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html), que AWS IoT Core validan la autenticación del dispositivo. Este tipo de autenticación es compatible con los protocolos Secure MQTT (MQTT a través de TLS) y HTTPS.

**Certificado X.509 con autorizador personalizado**

Autentique los dispositivos con [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) y realice acciones de autenticación adicionales con un [autorizador personalizado](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html), que recibirá la información del certificado de cliente X.509. Este tipo de autenticación es compatible con los protocolos Secure MQTT (MQTT a través de TLS) y HTTPS. Este tipo de autenticación solo es posible mediante puntos de conexión configurables con autenticación personalizada X.509. No hay ninguna opción ALPN.

**AWS Firma, versión 4 (SigV4)**

Autentique los dispositivos mediante Cognito o su servicio de backend, que admiten la federación social y empresarial. Este tipo de autenticación funciona con los protocolos MQTT over WebSocket Secure (WSS) y HTTPS.

**Autorizador personalizado**

Autentique los dispositivos configurando una función de Lambda para procesar la información de autenticación personalizada enviada a AWS IoT Core. Este tipo de autenticación funciona con los protocolos MQTT seguro (MQTT sobre TLS), HTTPS y MQTT sobre WebSocket seguro (WSS).

**Predeterminado**

Autentique los dispositivos en función de la extensión de negociación del protocolo de capa de and/or aplicación (ALPN) de puertos que utilizan los dispositivos. No se admiten algunas opciones de autenticación adicionales. Para obtener más información, consulte [Protocolos, asignaciones de puertos y autenticación](#protocol-mapping).

La siguiente tabla muestra todas las combinaciones compatibles de tipos de autenticación y protocolos de aplicación.


**Combinaciones compatibles de tipos de autenticación y protocolos de aplicación**  

| Tipo de autenticación | Secure MQTT (MQTT a través de TLS) | MQTT a través de WebSocket Secure (WSS) | HTTPS | Predeterminado | 
| --- | --- | --- | --- | --- | 
| Certificado X.509 | ✓ |  | ✓ |  | 
| Certificado X.509 con autorizador personalizado | ✓ |  | ✓ |  | 
| AWS Firma versión 4 (SiGv4) |  | ✓ | ✓ |  | 
| Autorizador personalizado | ✓ | ✓ | ✓ |  | 
| Predeterminado |  |  |  | ✓ | 

## Límites de duración de la conexión
<a name="connection-duration"></a>

No se garantiza que las conexiones HTTPS duren más del tiempo necesario para recibir las solicitudes y responder.

La duración de la conexión MQTT depende de la característica de autenticación que utilice. La siguiente tabla muestra la duración máxima de la conexión en condiciones ideales para cada característica.


**Duración de la conexión MQTT por característica de autenticación**  

|  Característica  |  Duración máxima\$1  | 
| --- | --- | 
|  Certificado de cliente X.509  |  De 1 a 2 semanas  | 
|  Autenticación personalizada  |  De 1 a 2 semanas  | 
|  Signature Version 4  |  Hasta 24 horas  | 

\$1 No garantizado

Con los certificados X.509 y la autenticación personalizada, la duración de la conexión no tiene un límite estricto, pero puede durar incluso solo unos minutos. Las interrupciones en la conexión pueden producirse por diversos motivos. A continuación, se presentan algunos de los casos más comunes.
+ Interrupciones en la disponibilidad de la conexión wifi
+ Interrupciones de conexión del proveedor de servicios de Internet (ISP)
+ Parches de servicio
+ Implementaciones de servicios
+ Escalado automático de servicios
+ Host de servicio no disponible
+ Problemas y actualizaciones del equilibrador de carga
+ Errores del cliente

Los dispositivos deben implementar estrategias para detectar las desconexiones y volver a conectarse. Para obtener información sobre los eventos de desconexión y saber cómo gestionarlos, consulte[Eventos de conexión/desconexión](life-cycle-events.md#connect-disconnect) en [Eventos del ciclo de vida](life-cycle-events.md).

# MQTT
<a name="mqtt"></a>

[MQTT](http://mqtt.org/) (Transporte de telemetría de colas de mensajes) es un protocolo de mensajería ligero y ampliamente adoptado que está diseñado para dispositivos restringidos. La compatibilidad de AWS IoT Core con MQTT se basa en la [especificación MQTT v3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) y en la [especificación MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), con algunas diferencias, tal y como se documenta en [AWS IoT diferencias con las especificaciones de MQTT](#mqtt-differences). Al ser la última versión del estándar, MQTT 5 presenta varias características clave que hacen que un sistema basado en MQTT sea más robusto, incluidas nuevas mejoras de escalabilidad, informes de errores mejorados con respuestas de códigos de motivo, temporizadores de caducidad de mensajes, y sesiones y encabezados de mensajes de usuario personalizados. Para obtener más información sobre las funciones compatibles con MQTT 5, consulte Funciones AWS IoT Core compatibles con [MQTT 5](#mqtt5). AWS IoT Core también admite la comunicación entre versiones de MQTT (MQTT 3 y MQTT 5). Un editor de MQTT 3 puede enviar un mensaje de MQTT 3 a un suscriptor de MQTT 5 que recibirá un mensaje de publicación de MQTT 5, y viceversa.

 AWS IoT Core *admite conexiones de dispositivos que utilizan el protocolo MQTT y el protocolo MQTT sobre el protocolo WSS y que se identifican mediante un ID de cliente.* [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) es compatible con ambos protocolos y son las formas recomendadas de conectar los dispositivos a AWS IoT Core. El AWS IoT dispositivo SDKs admite las funciones necesarias para que los dispositivos y los clientes se conecten a los servicios y accedan AWS IoT a ellos. El dispositivo SDKs admite los protocolos de autenticación que requieren los AWS IoT servicios y los requisitos de identificación de conexión que requieren el protocolo MQTT y los protocolos MQTT sobre WSS. Para obtener información sobre cómo conectarse AWS IoT mediante el AWS dispositivo SDKs y enlaces a ejemplos AWS IoT en los idiomas compatibles, consulte. [Conexión con MQTT mediante el dispositivo AWS IoT SDKs](#mqtt-sdk) Para obtener más información acerca de los métodos de autenticación y las asignaciones de puertos para mensajes MQTT, consulte [Protocolos, asignaciones de puertos y autenticación](protocols.md#protocol-mapping).

Si bien recomendamos usar el AWS IoT dispositivo SDKs para conectarse AWS IoT, no son obligatorios. Sin embargo SDKs, si no utiliza el AWS IoT Dispositivo, debe proporcionar la seguridad de conexión y comunicación necesaria. Los clientes también deben enviar la [extensión TLS de Indicación de nombre de servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) en la solicitud de conexión. Se rechazan los intentos de conexión que no incluyan la SNI. Para obtener más información, consulte [Seguridad en el transporte en AWS IoT](transport-security.html). Los clientes que utilizan usuarios y AWS credenciales de IAM para autenticar a los clientes deben proporcionar la autenticación correcta de la [versión 4 de Signature](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html).

Una vez que sus clientes estén conectados, puede supervisar y gestionar sus conexiones de clientes MQTT mediante. APIs Para obtener más información, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect).

**Topics**
+ [Conexión con MQTT mediante el dispositivo AWS IoT SDKs](#mqtt-sdk)
+ [Opciones de calidad de servicio (QoS) de MQTT](#mqtt-qos)
+ [Sesiones persistentes de MQTT](#mqtt-persistent-sessions)
+ [Mensajes retenidos de MQTT](#mqtt-retain)
+ [Mensajes Last Will and Testament (LWT) de MQTT](#mqtt-lwt)
+ [Uso de connectAttributes](#connect-attribute)
+ [Características compatibles con MQTT 5](#mqtt5)
+ [Propiedades de MQTT 5](#mqtt5-properties)
+ [Códigos de motivo de MQTT](#mqtt5-reason-codes)
+ [AWS IoT diferencias con las especificaciones de MQTT](#mqtt-differences)
+ [Administración de conexiones de MQTT](#mqtt-client-disconnect)

## Conexión con MQTT mediante el dispositivo AWS IoT SDKs
<a name="mqtt-sdk"></a>

Esta sección contiene enlaces al AWS IoT dispositivo SDKs y al código fuente de programas de muestra que ilustran cómo conectar un dispositivo al AWS IoT mismo. Las aplicaciones de muestra enlazadas aquí muestran cómo conectarse AWS IoT mediante el protocolo MQTT y MQTT a través de WSS.

**nota**  
The AWS IoT Device SDKs ha lanzado un cliente MQTT 5.

------
#### [ C\$1\$1 ]

**Uso del SDK de dispositivos AWS IoT C\$1\$1 para conectar dispositivos**
+  [Código fuente de una aplicación de muestra que ilustra un ejemplo de conexión MQTT en C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2/blob/main/samples/mqtt/basic_connect/main.cpp) 
+ [AWS IoT SDK de dispositivo para C\$1\$1 v2 en GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)

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

**Uso del SDK de AWS IoT dispositivos para Python para conectar dispositivos**
+  [Código fuente de una aplicación de muestra que ilustra un ejemplo de conexión MQTT en Python](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py) 
+ [AWS IoT SDK de dispositivo v2 para Python activado GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2)

------
#### [ JavaScript ]

**Uso del SDK de AWS IoT dispositivos JavaScript para conectar dispositivos**
+  [Código fuente de una aplicación de muestra que muestra un ejemplo de conexión MQTT en JavaScript](https://github.com/aws/aws-iot-device-sdk-js-v2/blob/master/samples/node/pub_sub/index.ts) 
+ [AWS IoT SDK de dispositivo para la versión 2 en JavaScript adelante GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)

------
#### [ Java ]

**Uso del AWS IoT Device SDK for Java para conectar dispositivos**

**nota**  
El AWS IoT Device SDK for Java v2 ahora es compatible con el desarrollo de Android. Para obtener más información, consulte [AWS IoT Device SDK for Android](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/main/documents/ANDROID.md).
+  [Código fuente de una aplicación de muestra que ilustra un ejemplo de conexión MQTT en Java](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/master/samples/BasicPubSub/src/main/java/pubsub/PubSub.java) 
+ [AWS IoT SDK de dispositivo para Java v2 activado GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)

------
#### [ Embedded C ]

**Uso del SDK de AWS IoT dispositivos para C integrado para conectar dispositivos**

**importante**  
Este SDK está diseñado para que lo utilicen desarrolladores de software incrustado con experiencia.
+  [Código fuente de una aplicación de muestra que ilustra un ejemplo de conexión MQTT en Embedded C](https://github.com/aws/aws-iot-device-sdk-embedded-C/blob/master/demos/mqtt/mqtt_demo_basic_tls/mqtt_demo_basic_tls.c) 
+ [AWS IoT SDK de dispositivo para C integrado en GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)

------

## Opciones de calidad de servicio (QoS) de MQTT
<a name="mqtt-qos"></a>

AWS IoT y el AWS IoT dispositivo SDKs admiten los niveles de [calidad de servicio (QoS) `0` de MQTT](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349263) y. `1` El protocolo MQTT define un tercer nivel de QoS, el `2` nivel, AWS IoT pero no lo admite. Solo el protocolo MQTT admite la característica QoS. HTTPS admite QoS al pasar un parámetro de cadena de consulta `?qos=qos` donde el valor puede ser 0 o 1.

En esta tabla se describe cómo afecta cada nivel de QoS a los mensajes publicados en el agente de mensajes y por este. 


|  Con un nivel de QoS de...  |  El mensaje es…  |  Comentarios  | 
| --- | --- | --- | 
|  QoS nivel 0  |  Enviado cero o más veces  |  Este nivel debe usarse para los mensajes que se envían a través de enlaces de comunicación fiables o que pueden perderse sin problemas.  | 
|  QoS nivel 1  |  Se envía al menos una vez y, a continuación, varias veces hasta recibir una respuesta `PUBACK`  |  El mensaje no se considera completo hasta que el remitente reciba una respuesta `PUBACK` que indique que se ha entregado correctamente.  | 

## Sesiones persistentes de MQTT
<a name="mqtt-persistent-sessions"></a>

Las sesiones persistentes almacenan las suscripciones y los mensajes de un cliente, con una calidad de servicio (QoS) de 1, que el cliente no ha reconocido. Cuando el dispositivo se vuelve a conectar a una sesión persistente, la sesión se reanuda, las suscripciones se restablecen y los mensajes suscritos no confirmados recibidos y almacenados antes de la reconexión se envían al cliente.

El procesamiento de los mensajes almacenados se registra en CloudWatch métricas y registros. CloudWatch Para obtener información sobre las entradas escritas CloudWatch y los CloudWatch registros, consulte [Métricas del agente de mensajes](metrics_dimensions.md#message-broker-metrics) y[Entrada de registro en cola](cwl-format.md#log-mb-queued).

### Creación de una sesión persistente
<a name="mqtt-persistent-sessions-create"></a>

En MQTT 3, puede crear una sesión persistente de MQTT enviando un mensaje `CONNECT`, que establezca la marca `cleanSession` en `0`. Si no existe ninguna sesión para el cliente que envía el mensaje `CONNECT`, se crea una sesión persistente nueva. Si ya existe una sesión para el cliente, el cliente reanuda la sesión existente. Para crear una sesión limpia, se envía un mensaje `CONNECT` y se establece la marca `cleanSession` en `1`, y el agente no almacenará ningún estado de la sesión cuando el cliente se desconecte.

En MQTT 5, las sesiones persistentes se gestionan configurando la marca `Clean Start` y `Session Expiry Interval`. Clean Start controla el inicio de la sesión de conexión y el final de la sesión anterior. Si se establece `Clean Start` = `1`, se crea una nueva sesión y, si existe, se termina la sesión anterior. Si se establece `Clean Start` = `0`, la sesión de conexión reanuda la sesión anterior, si ya existe. El intervalo de caducidad de la sesión controla el final de la sesión de conexión. El intervalo de caducidad de la sesión especifica el tiempo, en segundos (entero de 4 bytes), que durará una sesión tras la desconexión. La configuración `Session Expiry interval` = `0` hace que la sesión finalice inmediatamente después de la desconexión. Si el intervalo de caducidad de la sesión no se especifica en el mensaje CONNECT, el valor predeterminado es 0.


**Inicio limpio y caducidad de la sesión de MQTT 5**  

| Valor de la propiedad | Description (Descripción) | 
| --- | --- | 
| Clean Start= 1 | Crea una nueva sesión y termina una sesión anterior, si existe. | 
| Clean Start= 0 | Reanuda una sesión si existe una sesión anterior. | 
| Session Expiry Interval> 0 | Persiste una sesión. | 
| Session Expiry interval= 0 | No persiste una sesión. | 

En MQTT 5, si establece `Clean Start` = `1` y `Session Expiry Interval` =`0`, equivale a una sesión limpia de MQTT 3. Si establece `Clean Start` = `0` y `Session Expiry Interval` >`0`, equivale a una sesión persistente de MQTT 3.

**nota**  
No se admiten sesiones persistentes entre versiones MQTT (MQTT 3 y MQTT 5). Una sesión persistente de MQTT 3 no se puede reanudar como una sesión de MQTT 5 y viceversa. 

### Operaciones durante una sesión persistente
<a name="mqtt-persistent-sessions-operation"></a>

Los clientes utilizan el atributo `sessionPresent` del mensaje de confirmación de conexión (`CONNACK`) para determinar si existe una sesión persistente. Si `sessionPresent` es `1`, hay una sesión persistente y todos los mensajes almacenados para el cliente se envían al cliente después de que el cliente reciba el `CONNACK`, tal y como se describe en [Tráfico de mensajes tras la reconexión a una sesión persistente](#persistent-session-reconnect). Si `sessionPresent` es `1`, el cliente no necesita volver a suscribirse. Sin embargo, si `sessionPresent` está establecido en `0`, significa que no existe ninguna sesión persistente y que el cliente debe volver a suscribirse a sus filtros de temas.

Una vez que el cliente se une a una sesión persistente, puede publicar mensajes y suscribirse a filtros de temas sin ningún indicador adicional en cada operación.

### Tráfico de mensajes tras volver a conectarse a una sesión persistente
<a name="persistent-session-reconnect"></a>

Una sesión persistente representa una conexión en curso entre un cliente y un agente de mensajes de MQTT. Cuando un cliente se conecta al agente de mensajes mediante una sesión persistente, el agente de mensajes guarda todas las suscripciones que el cliente realiza durante la conexión. Cuando el cliente se desconecta, el agente de mensajes almacena los mensajes QoS 1 sin confirmar y los mensajes QoS 1 nuevos publicados en los temas a los que el cliente está suscrito. Los mensajes se almacenan según el límite de la cuenta. Mensajes que superen el límite se eliminarán. Para más información acerca de los límites de mensajes persistentes, consulte [Puntos de conexión y cuotas de AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Cuando el cliente vuelve a conectarse la sesión persistente, todas las suscripciones se restablecen y todos los mensajes almacenados se envían al cliente a una velocidad máxima de 10 mensajes por segundo. En MQTT 5, si un QoS 1 saliente con un intervalo de caducidad de mensajes caduca cuando un cliente está desconectado, una vez que se reanude la conexión, el cliente no recibirá el mensaje caducado.

Tras la reconexión, los mensajes almacenados se envían al cliente a una velocidad limitada a 10 mensajes almacenados por segundo, junto con el tráfico de mensajes actual hasta que se alcance el límite de [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Como la velocidad de entrega de los mensajes almacenados es limitada, se tardarán varios segundos en entregar todos los mensajes almacenados si una sesión tiene más de 10 mensajes almacenados que entregar después de la reconexión.

En el caso de los suscriptores compartidos, los mensajes se pondrán en cola si al menos un suscriptor de un grupo utiliza una sesión persistente y no hay ningún suscriptor conectado para recibir el mensaje de QoS 1. La eliminación de la cola de mensajes se realiza a una velocidad máxima de 20 mensajes por segundo por cada suscriptor activo de un grupo. Para obtener más información, consulte [Cola de mensajes de suscripciones compartidas](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt5-shared-subscription-queuing).

### Finalizar una sesión persistente
<a name="ending-a-persistent-session"></a>

Las sesiones persistentes pueden finalizar de una de las siguientes formas:
+ Transcurre el tiempo de caducidad de la sesión persistente. El temporizador de caducidad de la sesión persistente se inicia cuando el agente de mensajes detecta que un cliente se ha desconectado, ya sea porque el cliente se ha desconectado o porque se ha agotado el tiempo de espera de la conexión. 
+ El cliente envía un mensaje `CONNECT` en el que se establece la marca `cleanSession` en `1`.
+ El cliente se desconecta manualmente y se borra la sesión mediante la API `DeleteConnection`. Para obtener más información, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect).

En MQTT 3, el valor predeterminado del tiempo de caducidad de las sesiones persistentes es de una hora, y esto se aplica a todas las sesiones de la cuenta.

En MQTT 5, puede establecer el intervalo de caducidad de la sesión para cada sesión en los paquetes CONNECT y DISCONNECT. 

Para el intervalo de caducidad de la sesión en el paquete DISCONNECT: 
+ Si la sesión actual tiene un intervalo de caducidad de sesión igual a 0, no puede establecer el intervalo de caducidad de la sesión en un valor superior a 0 en el paquete DISCONNECT.
+ Si la sesión actual tiene un intervalo de caducidad de sesión superior a 0 y se establece el intervalo de caducidad de la sesión en 0 en el paquete DISCONNECT, la sesión finalizará en DISCONNECT.
+ De lo contrario, el intervalo de caducidad de la sesión del paquete DISCONNECT actualizará el intervalo de caducidad de la sesión actual.

**nota**  
Los mensajes guardados en espera de ser enviados al cliente al finalizar la sesión se descartan; sin embargo, se siguen facturando según la tarifa de mensajería estándar, aunque no se hayan podido enviar. Para obtener más información sobre los precios de los mensajes, consulte [ Precios de AWS IoT Core](https://aws.amazon.com/iot-core/pricing). Puede configurar el intervalo de tiempo de caducidad.

### Reconexión después de que haya caducado una sesión persistente
<a name="reconnect-a-persistent-session"></a>

Si un cliente no se vuelve a conectar a su sesión persistente antes de que caduque, la sesión finaliza y los mensajes almacenados se descartan. Cuando un cliente se vuelve a conectar después de que la sesión haya caducado con una marca `cleanSession` establecida en `0`, el servicio crea una nueva sesión persistente. Las suscripciones o los mensajes de la sesión anterior no están disponibles para esta sesión porque se descartaron al expirar la sesión anterior.

### Cargos por mensajes de sesión persistentes
<a name="persistent-session-message-charges"></a>

Los mensajes se cobran Cuenta de AWS cuando el agente de mensajes envía un mensaje a un cliente o a una sesión persistente fuera de línea. Cuando un dispositivo desconectado con una sesión persistente se vuelve a conectar y reanuda la sesión, los mensajes almacenados se envían al dispositivo y se vuelven a cargar a su cuenta. Para obtener más información sobre los precios de los mensajes, consulte los [Precios de AWS IoT Core : Mensajería](https://aws.amazon.com/iot-core/pricing/#Messaging).

El tiempo de caducidad predeterminado de la sesión persistente, de una hora, se puede aumentar mediante el proceso de aumento de límites estándar. Tenga en cuenta que aumentar el tiempo de caducidad de la sesión puede aumentar los cargos por mensajes, ya que el tiempo adicional podría permitir almacenar más mensajes para el dispositivo sin conexión y esos mensajes adicionales se cargarían en su cuenta según la tarifa de mensajería estándar. El tiempo de caducidad de la sesión es aproximado y una sesión puede prolongarse hasta 30 minutos más que el límite de la cuenta; sin embargo, una sesión no superará el límite de la cuenta. Para obtener más información acerca de los límites de sesión, consulte [Cuotas de servicio de AWS](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits).

## Mensajes retenidos de MQTT
<a name="mqtt-retain"></a>

AWS IoT Core admite el `RETAIN` indicador descrito en el protocolo MQTT. Cuando un cliente establece la `RETAIN` marca en un mensaje MQTT que publica, AWS IoT Core guarda el mensaje. A continuación, puede enviarse a los nuevos suscriptores, recuperarse mediante una llamada a la operación [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html) y visualizarse en la [consola de AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages).

**Ejemplos del uso de mensajes retenidos en MQTT**
+ 

**Como mensaje de configuración inicial**  
Los mensajes retenidos de MQTT se envían a un cliente después de que el cliente se suscriba a un tema. Si desea que todos los clientes que se suscriban a un tema reciban el mensaje retenido de MQTT inmediatamente después de su suscripción, puede publicar un mensaje de configuración con el indicador `RETAIN` activado. Los clientes que se suscriben también reciben actualizaciones de esa configuración cada vez que se publica un mensaje de configuración nuevo.
+ 

**Como último mensaje de estado conocido**  
Los dispositivos pueden configurar el indicador `RETAIN` en los mensajes en estado actual para que AWS IoT Core los guarde. Cuando las aplicaciones se conectan o se vuelven a conectar, pueden suscribirse a este tema y obtener el último estado registrado inmediatamente después de suscribirse al tema del mensaje retenido. De esta forma, pueden evitar tener que esperar hasta el siguiente mensaje del dispositivo para ver el estado actual.

**Topics**
+ [Las tareas habituales con MQTT retienen los mensajes en AWS IoT Core](#mqtt-retain-using)
+ [Facturación y mensajes retenidos](#mqtt-retain-billing)
+ [Comparación de los mensajes retenidos de MQTT y las sesiones persistentes de MQTT](#mqtt-retain-persist)
+ [Los mensajes retenidos por MQTT y Device Shadows AWS IoT](#mqtt-retain-shadow)

### Las tareas habituales con MQTT retienen los mensajes en AWS IoT Core
<a name="mqtt-retain-using"></a>

AWS IoT Core guarda los mensajes MQTT con la `RETAIN` bandera puesta. Estos *mensajes retenidos* se envían a todos los clientes que se han suscrito al tema, como un mensaje MQTT normal, y también se almacenan para enviarlos a los nuevos suscriptores del tema.

Los mensajes MQTT retenidos requieren políticas específicas para autorizar a los clientes a acceder a ellos. Para ver ejemplos del uso de políticas de mensajes retenidos, consulte [Ejemplos de políticas de mensajes retenidos](retained-message-policy-examples.md).

En esta sección se describen las operaciones comunes que implican los mensajes retenidos.
+ 

**Creación de mensajes retenidos**  
El cliente determina si un mensaje se conserva cuando publica un mensaje MQTT. Los clientes pueden establecer el indicador `RETAIN` al publicar un mensaje mediante un [SDK de dispositivos](iot-sdks.md). Las aplicaciones y los servicios pueden establecer el indicador `RETAIN` cuando utilizan la [acción `Publish`](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) para publicar un mensaje de MQTT.

  Solo se conserva un mensaje por nombre de tema. Un mensaje nuevo con la marca RETAIN activada y publicada en un tema reemplaza cualquier mensaje retenido existente que se haya enviado anteriormente al tema. 
**nota**  
No puede publicar un [tema reservado](reserved-topics.md) con el indicador `RETAIN` activado.
+ 

**Suscripción a un tema de mensajes retenido**  
Los clientes se suscriben a los temas de mensajes retenidos como lo harían con cualquier otro tema de mensajes MQTT. Los mensajes retenidos que se reciben al suscribirse a un tema de mensajes retenidos tienen el indicador `RETAIN` activado. 

  Los mensajes retenidos se eliminan AWS IoT Core cuando un cliente publica un mensaje retenido con una carga útil de 0 bytes en el tema del mensaje retenido. Los clientes que se hayan suscrito al tema del mensaje retenido también recibirán el mensaje de 0 bytes.

  Si se suscribe a un filtro de temas con formato comodín que incluye un tema de mensaje retenido, el cliente puede recibir los mensajes subsiguientes publicados en el tema del mensaje retenido, pero no entrega el mensaje retenido al suscribirse.
**nota**  
Para recibir un mensaje retenido al suscribirse, el filtro de temas de la solicitud de suscripción debe coincidir exactamente con el tema del mensaje retenido.

  Los mensajes retenidos que se reciben al suscribirse a un tema de mensajes retenidos tienen el indicador `RETAIN` activado. Los mensajes retenidos que recibe un cliente suscriptor después de la suscripción, no lo hacen.
+ 

**Recuperación de un mensaje retenido**  
Los mensajes retenidos se entregan a los clientes automáticamente cuando se suscriben al tema que contiene el mensaje retenido. Para que un cliente reciba el mensaje retenido al suscribirse, debe suscribirse al nombre exacto del tema del mensaje retenido. Si se suscribe a un filtro de temas con formato comodín que incluye un tema de mensaje retenido, el cliente puede recibir los mensajes posteriores publicados en el tema del mensaje retenido, pero no entrega el mensaje retenido al suscribirse.

  Los servicios y las aplicaciones pueden enumerar y recuperar los mensajes retenidos llamando a [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) y [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html).

  No se impide que un cliente publique mensajes en un tema de mensaje retenido *sin* configurar el indicador `RETAIN`. Esto podría provocar resultados inesperados, como que el mensaje retenido no coincida con el mensaje recibido al suscribirse al tema.

  Con MQTT 5, si un mensaje retenido tiene establecido el intervalo de caducidad del mensaje y el mensaje retenido caduca, el nuevo suscriptor que se suscriba a ese tema no recibirá el mensaje retenido si se suscribe correctamente.
+ 

**Generación de una lista con los temas de los mensajes retenidos**  
Puede generar una lista de los mensajes retenidos llamando a [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) y los mensajes retenidos se pueden ver en la [consola de AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages). 
+ 

**Obtención de los detalles de los mensajes retenidos**  
Puede obtener los detalles de los mensajes retenidos llamando a [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html) y los puede ver en la [consola de AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages).
+ 

**Retención de un mensaje Will**  
[Los mensajes *Will*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) de MQTT que se crean cuando se conecta un dispositivo se pueden conservar configurando la marca `Will Retain` en el campo `Connect Flag bits`.
+ 

**Eliminación de mensajes retenidos**  
Los dispositivos, las aplicaciones y los servicios pueden eliminar un mensaje retenido publicando un mensaje con el indicador `RETAIN` activado y una carga útil de mensaje vacía (0 bytes) junto al nombre del tema del mensaje retenido que se va a eliminar. Estos mensajes eliminan el mensaje retenido AWS IoT Core y se envían a los clientes con una suscripción al tema, pero no se conservan. AWS IoT Core

  Los mensajes retenidos también se pueden eliminar de forma interactiva accediendo al mensaje retenido en la [consola de AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages). Los mensajes retenidos que se eliminan mediante la [consola de AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages) también envían un mensaje de 0 bytes a los clientes que se hayan suscrito al tema del mensaje retenido.

  Los mensajes retenidos no se pueden restaurar una vez eliminados. Un cliente tendría que publicar un nuevo mensaje retenido para sustituir al mensaje eliminado.
+ 

**Depuración y solución de problemas de los mensajes retenidos**  
La [consola de AWS IoT](https://console.aws.amazon.com//iot/home#) proporciona varias herramientas para ayudarle a solucionar los problemas de los mensajes retenidos:
  + 

**La página de **[mensajes retenidos](https://console.aws.amazon.com//iot/home#/retainedMessages)****  
La página de **mensajes retenidos** de la consola de AWS IoT proporciona una lista paginada de los mensajes retenidos que su cuenta ha almacenado en la región actual. En esta página puede hacer lo siguiente:
    + Consulte los detalles de cada mensaje retenido, como la carga del mensaje, la QoS y la hora en que se recibió.
    + Actualice el contenido de un mensaje retenido.
    + Elimine un mensaje retenido.
  + 

**El cliente de **[pruebas MQTT](https://console.aws.amazon.com//iot/home#/test)****  
La página del **cliente de pruebas de MQTT** de la consola de AWS IoT permite suscribirse a temas de MQTT y publicarlos. La opción de publicación le permite establecer la marca RETAIN en los mensajes que publique para simular el comportamiento de sus dispositivos. También puede utilizar el cliente de prueba de MQTT para supervisar mensajes de clientes conectados que administra a través de la interfaz de conexiones de clientes. Para obtener más información sobre la administración de conexiones de clientes, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect).

  Algunos resultados inesperados pueden deberse a estos aspectos de la forma en que se implementan los mensajes retenidos en AWS IoT Core.
  + 

**Límites de mensajes retenidos**  
Cuando una cuenta ha almacenado el número máximo de mensajes retenidos, AWS IoT Core devuelve una respuesta limitada a los mensajes publicados con el comando RETAIN activado y con cargas útiles superiores a 0 bytes, hasta que se eliminen algunos mensajes retenidos y el recuento de mensajes retenidos caiga por debajo del límite.
  + 

**Pedido de entrega de mensajes retenidos**  
No se garantiza la secuencia de entrega de mensajes retenidos y mensajes suscritos.

### Facturación y mensajes retenidos
<a name="mqtt-retain-billing"></a>

La publicación de mensajes con el indicador `RETAIN` activado desde un cliente, mediante la consola de AWS IoT o mediante una llamada a [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) conlleva los gastos de mensajería adicionales descritos en la sección [Precios de mensajería de AWS IoT Core](https://aws.amazon.com//iot-core/pricing/#Messaging).

La recuperación de los mensajes retenidos por parte de un cliente, mediante una AWS IoT consola o mediante una llamada [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)conlleva gastos de mensajería además de los cargos por uso normal de la API. Los cargos adicionales se describen en [Precios de mensajería de AWS IoT Core](https://aws.amazon.com//iot-core/pricing/#Messaging).

Los [mensajes *Will*](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) que se publiquen cuando un dispositivo se desconecte inesperadamente incurrirán en los cargos de mensajería descritos en el apartado [Precios de mensajería de AWS IoT Core](https://aws.amazon.com//iot-core/pricing/#Messaging).

Para obtener más información sobre los costes de mensajería, consulte [Precios de mensajería de AWS IoT Core](https://aws.amazon.com//iot-core/pricing/#Messaging).

### Comparación de los mensajes retenidos de MQTT y las sesiones persistentes de MQTT
<a name="mqtt-retain-persist"></a>

Los mensajes retenidos y las sesiones persistentes son características estándar de MQTT que permiten a los dispositivos recibir los mensajes que se publicaron sin conexión a Internet. Los mensajes retenidos se pueden publicar desde sesiones persistentes. En esta sección se describen los aspectos clave de estas características y la forma en que funcionan juntas.


|    |  Mensajes retenidos  |  Sesiones persistentes  | 
| --- | --- | --- | 
|  **Características principales**  |  Los mensajes retenidos se pueden usar para configurar grandes grupos de dispositivos después de que se conecten o enviarles notificaciones. Los mensajes retenidos también se pueden usar cuando desee que los dispositivos reciban solo el último mensaje publicado en un tema tras una reconexión.  |  Las sesiones persistentes son útiles para los dispositivos que tienen una conectividad intermitente y pueden pasar por alto varios mensajes importantes. Los dispositivos se pueden conectar con una sesión persistente para recibir los mensajes enviados mientras están desconectados.  | 
|  **Ejemplos**  |  Los mensajes retenidos pueden proporcionar a los dispositivos información de configuración sobre su entorno cuando se conectan a Internet. La configuración inicial podría incluir una lista de otros temas de mensajes a los que debería suscribirse o información sobre cómo debe configurar su zona horaria local.  |  Los dispositivos que se conectan a través de una red móvil con conectividad intermitente pueden utilizar sesiones persistentes para evitar perder los mensajes importantes que se envían cuando un dispositivo está fuera de la cobertura de la red o necesita apagar la radio móvil.   | 
|  **Mensajes recibidos al suscribirse por primera vez a un tema**  |  Tras suscribirse a un tema con un mensaje retenido, se recibe el mensaje retenido más reciente.  |  Tras suscribirse a un tema sin un mensaje retenido, no se recibe ningún mensaje hasta que se publique uno en el tema.  | 
|  **Temas suscritos tras la reconexión**  |  Sin una sesión persistente, el cliente debe suscribirse a los temas tras la reconexión.  |  Los temas suscritos se restauran tras la reconexión.  | 
|  **Mensajes recibidos tras la reconexión**  |  Tras suscribirse a un tema con un mensaje retenido, se recibe el mensaje retenido más reciente.   |  Todos los mensajes publicados con un QOS igual a 1 y a los que se haya suscrito con un QOS igual a 1 mientras el dispositivo estaba desconectado se envían cuando el dispositivo se vuelve a conectar.  | 
|  **Caducidad de los datos/sesiones**   |  En MQTT 3, los mensajes retenidos no caducan. Se almacenan hasta que se sustituyan o eliminen. En MQTT 5, los mensajes retenidos caducan después del intervalo de caducidad establecido. Para obtener más información, consulte [Caducidad de los mensajes](#mqtt5).  |  Las sesiones persistentes caducan si el cliente no se vuelve a conectar dentro del periodo de espera. Cuando caduca una sesión persistente, se eliminan las suscripciones del cliente y los mensajes guardados que se publicaron con una QOS = 1 y a los que se suscribió con una QOS = 1 mientras el dispositivo estaba desconectado. Los mensajes caducados no se entregarán. Para obtener más información acerca de la caducidad de las sesiones con sesiones persistentes, consulte [Sesiones persistentes de MQTT](#mqtt-persistent-sessions).  | 

Para obtener más información acerca del almacenamiento persistente, consulte [Sesiones persistentes de MQTT](#mqtt-persistent-sessions).

Con mensajes retenidos, el cliente de publicación determina si un mensaje debe conservarse y entregarse a un dispositivo después de que se conecte, independientemente de que haya tenido una sesión anterior o no. La elección de almacenar un mensaje la realiza el publicador y el mensaje almacenado se entrega a todos los clientes actuales y futuros que se suscriban con suscripciones QoS 0 o QoS 1. Los mensajes retenidos guardan solo un mensaje sobre un tema determinado cada vez.

Cuando una cuenta ha almacenado el número máximo de mensajes retenidos, AWS IoT Core devuelve una respuesta limitada a los mensajes publicados con la marca RETAIN activada y con cargas útiles superiores a 0 bytes hasta que se eliminen algunos mensajes retenidos y el recuento de mensajes retenidos caiga por debajo del límite.

### Los mensajes retenidos por MQTT y Device Shadows AWS IoT
<a name="mqtt-retain-shadow"></a>

Tanto los mensajes retenidos como las sombras de dispositivo retienen los datos de un dispositivo, pero se comportan de manera diferente y tienen diferentes propósitos. En esta sección se describen sus similitudes y diferencias.


|    |  Mensajes retenidos  |  Sombras del dispositivo  | 
| --- | --- | --- | 
|  **La carga de los mensajes tiene una estructura o un esquema predefinidos**  | Según lo definido por la implementación. MQTT no especifica una estructura o esquema para la carga de sus mensajes. |  AWS IoT admite una estructura de datos específica.  | 
|  **La actualización de la carga del mensaje genera mensajes de eventos**  | Al publicar un mensaje retenido, se envía el mensaje a los clientes suscritos, pero no se generan mensajes de actualización adicionales. |  La actualización de un a sombra de dispositivo produce los [mensajes de actualización que describen el cambio](https://docs.aws.amazon.com//iot/latest/developerguide/device-shadow-mqtt.html#update-delta-pub-sub-topic).  | 
|  **Las actualizaciones de los mensajes están numeradas**  | Los mensajes retenidos no se numeran automáticamente. | Los documentos de sombra de dispositivo tienen números de versión y marcas de tiempo automáticos. | 
|  **La carga del mensaje está adjunta a un recurso**  | Los mensajes retenidos no se asocian a un recurso de objeto. |  Las sombras de dispositivos se asocian a un recurso de objetos.  | 
|  **Actualización de los elementos individuales de la carga del mensaje**  |  Los elementos individuales del mensaje no se pueden cambiar sin actualizar toda la carga del mensaje.  |  Los elementos individuales de un documento de sombra de dispositivo se pueden actualizar sin necesidad de actualizar todo el documento de sombra de dispositivo.  | 
|  **El cliente recibe los datos del mensaje al suscribirse**  |  El cliente recibe automáticamente un mensaje retenido después de suscribirse a un tema con un mensaje retenido.  |  Los clientes pueden suscribirse a las actualizaciones de sombra de dispositivo, pero deben solicitar el estado actual de forma deliberada.  | 
|  **Indexación y capacidad de búsqueda**  |  Los mensajes retenidos no se indexan para su búsqueda.  |  La indexación de flotas indexa los datos de sombra de dispositivo para su búsqueda y agregación.  | 

## Mensajes Last Will and Testament (LWT) de MQTT
<a name="mqtt-lwt"></a>

Last Will and Testament (LWT) es una característica de MQTT. Con LWT, los clientes pueden especificar un mensaje que el agente publicará en un tema definido por el cliente y lo enviará a todos los clientes que se hayan suscrito al tema cuando se produzca una desconexión no iniciada. El mensaje que especifican los clientes se denomina mensaje LWT o mensaje Will, y el tema que definen los clientes se denomina tema Will. Puede especificar un mensaje LWT cuando un dispositivo se conecte al agente. Estos mensajes se pueden conservar configurando la marca `Will Retain` en el campo `Connect Flag bits` durante la conexión. Por ejemplo, si la marca `Will Retain` está establecido en `1`, el mensaje Will se almacenará en el agente en el tema Will asociado. Para obtener más información, consulte [Plantillas de mensaje](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc479576982).

Al administrar las conexiones de los clientes, puede controlar si los mensajes de LWT se publican al desconectar un cliente. Para obtener más información, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect).

El agente almacenará los mensajes Will hasta que se produzca una desconexión no iniciada. Cuando eso suceda, el agente publicará los mensajes para todos los clientes que se hayan suscrito al tema Will para notificarles la desconexión. Si el cliente se desconecta del agente con una desconexión iniciada por el cliente mediante el mensaje MQTT DISCONNECT, el agente no publicará los mensajes LWT almacenados. En el resto de los casos, se enviarán los mensajes de LWT. Dada la naturaleza asíncrona del procesamiento de desconexiones, no se garantiza que los mensajes de LWT se envíen en orden durante la reconexión. Le recomendamos que utilice [los eventos del ciclo](life-cycle-events.md) de vida para mejorar la precisión de la detección del estado de la conectividad, ya que estos eventos proporcionan atributos como las marcas de tiempo y los números de versión para gestionar out-of-order los eventos. Para obtener una lista completa de los escenarios de desconexión en los que el agente enviará los mensajes de LWT, consulte [Eventos de conexión y desconexión](https://docs.aws.amazon.com//iot/latest/developerguide/life-cycle-events.html#connect-disconnect).

## Uso de connectAttributes
<a name="connect-attribute"></a>

`ConnectAttributes` le permite especificar qué atributos quiere usar en su mensaje de conexión en sus políticas de IAM, como `PersistentConnect` y `LastWill`. Con `ConnectAttributes`, puede crear políticas que no otorguen a los dispositivos acceso a nuevas características de forma predeterminada, lo que puede resultar útil si un dispositivo se ve comprometido.

`connectAttributes` admite las siguientes características:

`PersistentConnect`  
Utilice la característica `PersistentConnect` para guardar todas las suscripciones que el cliente contrate durante la conexión cuando se interrumpa la conexión entre el cliente y el agente.

`LastWill`  
Utilice la característica `LastWill` para publicar un mensaje `LastWillTopic` cuando un cliente se desconecte inesperadamente.

De forma predeterminada, su política tiene una conexión no persistente y no se transfieren atributos para esta conexión. Debe especificar una conexión persistente en su política de IAM si desea tener una.

Al administrar las conexiones de los clientes, puede ver los atributos de conexión y la configuración de la sesión de los clientes conectados. Para obtener más información, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect).

Para ver ejemplos de `ConnectAttributes`, consulte [Ejemplos de políticas de conexión](connect-policy.md).

## Características compatibles con MQTT 5
<a name="mqtt5"></a>

AWS IoT Core La compatibilidad con MQTT 5 se basa en la [especificación MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), con algunas diferencias, tal como se documenta en. [AWS IoT diferencias con las especificaciones de MQTT](#mqtt-differences)

**Topics**
+ [Suscripciones compartidas](#mqtt5-shared-subscription)
+ [Inicio limpio y caducidad de la sesión](#mqtt5-clean-start)
+ [Código de motivo en todos ACKs](#mqtt5-reason-code)
+ [Alias de temas](#mqtt5-topic-alias)
+ [Caducidad del mensaje](#mqtt5-message-expiry)
+ [Otras características de MQTT 5](#mqtt5-other-features)

### Suscripciones compartidas
<a name="mqtt5-shared-subscription"></a>

AWS IoT Core admite suscripciones compartidas tanto para MQTT 3.1.1 como para MQTT 5. Las suscripciones compartidas permiten que varios clientes compartan una suscripción a un tema y solo un cliente recibirá los mensajes publicados sobre ese tema mediante una distribución aleatoria. Las suscripciones compartidas pueden equilibrar eficazmente la carga de los mensajes de MQTT entre varios suscriptores. Por ejemplo, supongamos que tiene 1000 dispositivos que publican sobre el mismo tema y 10 aplicaciones de segundo plano que procesan esos mensajes. En ese caso, las aplicaciones de backend pueden suscribirse al mismo tema y cada una de ellas recibiría de forma aleatoria los mensajes publicados por los dispositivos en el tema compartido. De hecho, se trata de “compartir” la carga de esos mensajes. Las suscripciones compartidas también ofrecen una mayor resiliencia. Cuando una aplicación de segundo plano se desconecta, el agente distribuye la carga entre los suscriptores restantes del grupo. Cuando todos los suscriptores se desconectan, los mensajes se ponen en cola.

Las funciones de cola de mensajes están disponibles para las suscripciones compartidas en las conexiones MQTT 3.1.1 y MQTT 5 con el fin de mejorar la fiabilidad de la entrega de mensajes.

Para usar las suscripciones compartidas, los clientes se suscriben a un [filtro de temas](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) de una suscripción compartida de la siguiente manera:

```
$share/{ShareName}/{TopicFilter}
```
+ `$share` es una cadena literal que indica el filtro de temas de una suscripción compartida, que debe empezar por `$share`.
+ `{ShareName}` es una cadena de caracteres para especificar el nombre compartido utilizado por un grupo de suscriptores. Un filtro de temas de una suscripción compartida debe incluir un `ShareName` e ir seguido por el carácter `/`. `{ShareName}` no debe incluir los siguientes caracteres: `/`, `+` o `#`. El tamaño máximo para `{ShareName}` es de 128 caracteres UTF-8. 
+ `{TopicFilter}` sigue la misma sintaxis de [filtro de temas](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) que una suscripción no compartida. El tamaño máximo para `{TopicFilter}` es de 256 caracteres UTF-8.
+ Las dos barras diagonales obligatorias (`/`) de `$share/{ShareName}/{TopicFilter}` no se incluyen en el [número máximo de barras diagonales por tema y en el límite de filtros de temas](https://console.aws.amazon.com/servicequotas/home/services/iotcore/quotas/L-AD5A8D4F). 

Las suscripciones que tienen el mismo `{ShareName}/{TopicFilter}` pertenecen al mismo grupo de suscripciones compartidas. Puede crear varios grupos de suscripciones compartidas y no superar el [límite de suscripciones compartidas por grupo](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Para obtener más información, consulte [Puntos de conexión y cuotas de AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) en la *Referencia general de AWS *.

En las siguientes tablas se comparan las suscripciones no compartidas y las suscripciones compartidas:


****  

| Suscripción | Description (Descripción) | Ejemplos de filtros de temas | 
| --- | --- | --- | 
| Suscripciones no compartidas | Cada cliente crea una suscripción independiente para recibir los mensajes publicados. Cuando se publica un mensaje en un tema, todos los suscriptores de ese tema reciben una copia del mensaje. | <pre>sports/tennis<br />sports/#</pre> | 
| Suscripciones compartidas | Varios clientes pueden compartir una suscripción a un tema y solo un cliente recibirá los mensajes publicados sobre ese tema de forma aleatoria. |  <pre>$share/consumer/sports/tennis<br />$share/consumer/sports/#</pre>  | 


****  

| Flujo de suscripciones no compartidas  | Flujo de suscripciones compartidas | 
| --- | --- | 
|  ![\[Suscripciones regulares para MQTT 3 y MQTT 5 pulgadas. AWS IoT Core\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/mqtt_regular_subscription.gif)  |  ![\[Suscripciones compartidas para MQTT de 3 y MQTT de 5 pulgadas. AWS IoT Core\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/mqtt_shared_subscription.gif)  | 

**Notas importantes sobre el uso de las suscripciones compartidas**
+ Si el grupo compartido de suscriptores está formado por algún suscriptor de sesión persistente, si todos los suscriptores del grupo compartido están desconectados o si algún suscriptor infringe el límite de solicitudes de publicación por segundo por conexión, se pondrá en cola todos los mensajes de QoS 1 no confirmados y los mensajes de QoS 1 no entregados publicados en un grupo de suscripciones compartidas. Para obtener más información, consulte [Cola de mensajes de suscripciones compartidas](#mqtt5-shared-subscription-message-queuing).
+ Los mensajes de QoS 0 publicados en un grupo de suscripciones compartidas se eliminarán en caso de que se produzca un error.
+ Las suscripciones compartidas no reciben [mensajes retenidos](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-retain) cuando se suscriben a patrones de temas como parte de un grupo compartido de suscriptores. Los mensajes que se publican sobre temas que tienen suscriptores compartidos y que tienen indicador `RETAIN` activado se envían a los suscriptores compartidos como cualquier otro mensaje publicado.
+ Cuando las suscripciones compartidas incluyen caracteres comodín (\$1 o \$1), es posible que haya varias suscripciones compartidas que coincidan con un tema. Si eso ocurre, el agente de mensajes copia el mensaje de publicación y lo envía a un cliente aleatorio en cada suscripción compartida que coincida. En el siguiente diagrama se explica el comportamiento de caracteres comodín de las suscripciones compartidas.  
![\[Suscripciones compartidas con caracteres comodín. AWS IoT Core\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/mqtt_shared_subscriptions_wildcard.gif)

  En este ejemplo, hay tres suscripciones compartidas que coinciden con el tema de publicación de MQTT `sports/tennis`. El agente de mensajes copia el mensaje publicado y lo envía a un cliente aleatorio de cada grupo coincidente.

  El cliente 1 y el cliente 2 comparten la suscripción: `$share/consumer1/sports/tennis`

  El cliente 3 y el cliente 4 comparten la suscripción: `$share/consumer1/sports/#`

  El cliente 5 y el cliente 6 comparten la suscripción: `$share/consumer2/sports/tennis`

Para obtener más información sobre los límites de las suscripciones compartidas, consulte [Puntos de conexión y las cuotas de AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) en la *Referencia general de AWS *. Para probar las suscripciones compartidas mediante el cliente AWS IoT MQTT de la [AWS IoT consola, consulte](https://console.aws.amazon.com/iot/home). [Probar las suscripciones compartidas en el cliente MQTT](view-mqtt-messages.md#view-mqtt-shared-subscriptions) También puede ver a qué temas están suscritos los clientes conectados, incluidas las suscripciones compartidas, mediante las características de administración de conexiones de clientes. Para obtener más información, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect). Para obtener más información sobre las suscripciones compartidas, consulte [Suscripciones compartidas](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901250) de la especificación MQTTv5 .0.

#### Cola de mensajes de suscripciones compartidas
<a name="mqtt5-shared-subscription-message-queuing"></a>

Para mejorar la fiabilidad de la entrega de mensajes, las suscripciones compartidas incluyen funciones de cola de mensajes que almacenan los mensajes cuando no hay suscriptores en línea disponibles. Cuando un grupo de suscripciones compartidas incluye al menos un miembro con una sesión persistente, la característica de cola estará habilitada para el grupo. Al distribuir los mensajes, se seleccionarán los miembros en línea como destinatarios. Los mensajes de QoS 1 se ponen en cola cuando no se encuentra ningún miembro en línea o cuando los suscriptores superan el límite de [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Los mensajes en cola se entregan cuando los miembros existentes reanudan sus sesiones persistentes o cuando se unen al grupo nuevos miembros. Los mensajes en cola se envían a una velocidad máxima de 20 mensajes en cola por segundo por cada suscriptor activo del grupo, junto con cualquier otro mensaje que se entregue al suscriptor según las suscripciones.

De forma predeterminada, la retención de mensajes en cola sigue la cuota de [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Sin embargo, si se establece un intervalo de caducidad de mensajes (MEI) en el mensaje de publicación entrante, el MEI tiene prioridad. Cuando el MEI está presente, determina el periodo de retención del mensaje, independientemente del periodo de caducidad de la sesión persistente.

Las tasas de cola de mensajes están limitadas en función de la cuota de [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) y la cantidad de mensajes está limitada por la cuota de [https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Para ver y administrar sus cuotas, acceda a la [consola de Service Quotas](https://console.aws.amazon.com/servicequotas/home).

Puede supervisar la cola CloudWatch buscando `ApproximateQueueDepth` en el espacio de `AWS/Usage` nombres o puede usar el siguiente comando de CLI para enumerar las métricas asociadas a la profundidad de cola de cada grupo de suscripciones compartidas. 

```
aws cloudwatch list-metrics --namespace "AWS/Usage" --dimensions Name=Resource,Value='ApproximateQueueDepth'
```

Cuando se superan estos límites, solo se conservan los mensajes que ya estaban en cola antes de alcanzar el límite. Se eliminan los nuevos mensajes entrantes que superen los límites. El sistema no reemplaza los mensajes antiguos en cola por otros más nuevos.

La cola de mensajes se registra en métricas y registros. CloudWatch CloudWatch Para obtener información sobre las entradas escritas CloudWatch y los CloudWatch registros, consulte [Métricas del agente de mensajes](metrics_dimensions.md#message-broker-metrics) y[Entrada de registro en cola](cwl-format.md#log-mb-queued). Los mensajes en cola se siguen facturando según la tasa estándar de mensajes. Para obtener más información sobre los precios de los mensajes, consulte [ Precios de AWS IoT Core](https://aws.amazon.com/iot-core/pricing).

**Ciclo de vida de la sesión en un grupo de suscripciones compartidas**

Cuando una sesión válida se suscribe a un grupo, se convierte en miembro en línea del grupo. Cuando se cancela la suscripción o se desconecta, la sesión válida abandona el grupo.

Cuando una sesión persistente se suscribe a un grupo, se convierte en miembro en línea del grupo. Cuando se desconecta, permanece en el grupo, pero pasa a ser un miembro sin conexión del grupo. Cuando se vuelve a conectar, se convierte de nuevo en un miembro en línea. La sesión persistente abandona el grupo cuando se anula la suscripción de forma explícita o cuando caduca tras la desconexión.

### Inicio limpio y caducidad de la sesión
<a name="mqtt5-clean-start"></a>

Puede usar las funciones de inicio limpio y caducidad de la sesión para gestionar sus sesiones persistentes con más flexibilidad. Un marca de inicio limpio indica si la sesión debe iniciarse sin utilizar una sesión existente. Un intervalo de caducidad de la sesión indica cuánto tiempo se debe conservar la sesión tras una desconexión. El intervalo de caducidad de la sesión se puede modificar al desconectarse. Para obtener más información, consulte [Sesiones persistentes de MQTT](#mqtt-persistent-sessions).

### Código de motivo en todos ACKs
<a name="mqtt5-reason-code"></a>

Puede depurar o procesar los mensajes de error más fácilmente utilizando los códigos de motivo. El agente de mensajes devuelve los códigos de motivo en función del tipo de interacción con el agente (suscribirse, publicar o confirmar). Para obtener más información, consulte [Códigos de motivo de MQTT](#mqtt5-reason-codes). Para obtener una lista completa de los códigos de motivo de MQTT, consulte la [especificación de MQTT v5](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031).

### Alias de temas
<a name="mqtt5-topic-alias"></a>

Puede sustituir el nombre de un tema por un alias de tema, que es un entero de dos bytes. El uso de alias de temas puede optimizar la transmisión de los nombres de los temas y reducir potencialmente los costos de datos en los servicios de datos medidos. AWS IoT Core tiene un límite predeterminado de 8 alias de temas. Para obtener más información, consulte [Puntos de conexión y cuotas de AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) en la *Referencia general de AWS *.

### Caducidad del mensaje
<a name="mqtt5-message-expiry"></a>

Puede agregar valores de caducidad de los mensajes a los mensajes publicados. Estos valores representan el intervalo de caducidad de los mensajes (MEI) en segundos. Si los mensajes no se envían a los suscriptores en ese intervalo, los mensajes caducan y se eliminan. Si no establece el valor de caducidad del mensaje, el mensaje no caducará.

Al salir, el suscriptor recibirá un mensaje con el tiempo restante del intervalo de caducidad. Por ejemplo, si un mensaje de publicación entrante tiene una caducidad de 30 segundos y se envía al suscriptor después de 20 segundos, el campo de caducidad del mensaje se actualizará a 10. Es posible que el mensaje recibido por el suscriptor tenga un MEI actualizado de 0. Esto se debe a que tan pronto como el tiempo restante sea de 999 ms o menos, se actualizará a 0.

En AWS IoT Core, el MEI mínimo es 1. Si el intervalo se establece en 0 desde el lado del cliente, se ajustará a 1. El intervalo máximo de caducidad de mensajes es 604800 (7 días). Cualquier valor superior a este valor se ajustará al valor máximo.

En la comunicación entre versiones, el comportamiento de caducidad del mensaje lo decide la versión MQTT del mensaje de publicación entrante. Por ejemplo, un mensaje con fecha de caducidad enviado por una sesión a través de la cual se ha conectado MQTT5 puede caducar en el caso de los dispositivos suscritos con MQTT3 sesiones. En la siguiente tabla se muestra cómo la caducidad de los mensajes admite los siguientes tipos de mensajes de publicación:


****  

| Tipo de mensaje de publicación | Intervalo de caducidad de los mensajes | 
| --- | --- | 
| Publicación regular | Si un servidor no entrega el mensaje en el tiempo especificado, el mensaje caducado se eliminará y el suscriptor no lo recibirá. Esto incluye situaciones como cuando un dispositivo no publica sus mensajes de QoS 1.  | 
| Retener | Si un mensaje retenido caduca y un cliente nuevo se suscribe al tema, el cliente no recibirá el mensaje al suscribirse. | 
| Última voluntad | El intervalo de los mensajes de última voluntad comienza después de que el cliente se desconecte y el servidor intente entregar el mensaje de última voluntad a sus suscriptores. | 
| Mensajes en cola | Si un QoS 1 saliente con intervalo de caducidad de mensajes caduca cuando un cliente está desconectado, cuando se reanude la [sesión persistente](#mqtt-persistent-sessions), el cliente no recibirá el mensaje caducado. | 

### Otras características de MQTT 5
<a name="mqtt5-other-features"></a>

**Desconexión del servidor**

Cuando se produce una desconexión, el servidor puede enviar de forma proactiva al cliente una desconexión para notificar el cierre de la conexión con un código de motivo de la desconexión.

**Solicitud/respuesta**

Los editores pueden solicitar que el destinatario envíe una respuesta a un tema especificado por el editor en el momento de la recepción.

**Tamaño máximo de paquete**

El cliente y el servidor pueden especificar de forma independiente el tamaño máximo de paquete que admiten.

**Formato de carga y tipo de contenido**

Puede especificar el formato de carga (binario, texto) y el tipo de contenido al publicar un mensaje. Se reenvían al destinatario del mensaje.

## Propiedades de MQTT 5
<a name="mqtt5-properties"></a>

Las propiedades de MQTT 5 son adiciones importantes al estándar MQTT para admitir las nuevas funciones de MQTT 5, como la caducidad de la sesión y el patrón. Request/Response En AWS IoT Core, puede crear [reglas](https://docs.aws.amazon.com//iot/latest/developerguide/republish-rule-action.html) que reenvíen las propiedades de los mensajes salientes o utilizar [HTTP Publish para publicar](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) los mensajes MQTT con algunas de las nuevas propiedades.

En la siguiente tabla se enumeran todas las propiedades de MQTT 5 compatibles. AWS IoT Core 


| Propiedad | Description (Descripción) | Tipo de entrada | Paquete | 
| --- | --- | --- | --- | 
| Indicador de formato de carga | Un valor booleano que indica si la carga útil tiene formato UTF-8. | Byte | PUBLISH, CONNECT | 
| Tipo de contenido | Una cadena UTF-8 que describe el contenido de la carga. | Cadena UTF-8 | PUBLISH, CONNECT | 
| Tema de respuesta | Una cadena UTF-8 que describe el tema en el que el receptor debe publicar como parte del flujo de solicitud-respuesta. El tema no debe contener caracteres comodín. | Cadena UTF-8 | PUBLISH, CONNECT | 
| Datos de correlación | Los datos binarios que utiliza el remitente del mensaje de solicitud para identificar a qué solicitud corresponde el mensaje de respuesta. | Binario | PUBLISH, CONNECT | 
| Propiedades del usuario | Un par de cadenas UTF-8. Esta propiedad puede aparecer varias veces en un paquete. Los receptores recibirán los pares clave-valor en el mismo orden en que se enviaron. | Par de cadenas UTF-8 | CONNECT, PUBLISH, Propiedades Will, SUBSCRIBE, DISCONNECT, UNSUBSCRIBE | 
| Intervalo de caducidad de los mensajes | Un entero de 4 bytes que representa el intervalo de caducidad del mensaje en segundos. Si no existe, el mensaje no vence. | Entero de 4 bytes | PUBLISH, CONNECT | 
| Intervalo de caducidad de la sesión |  Un entero de 4 bytes que representa el intervalo de caducidad de la sesión en segundos. AWS IoT Core admite un máximo de 7 días, con un máximo predeterminado de una hora. Si el valor que ha establecido supera el máximo de su cuenta, AWS IoT Core devolverá el valor ajustado en el CONNACK.  | Entero de 4 bytes | CONNECT, CONNACK, DISCONNECT | 
| Identificador de cliente asignado | Un ID de cliente aleatorio que se genera AWS IoT Core cuando los dispositivos no especifican un ID de cliente. El ID de cliente aleatorio debe ser un identificador de cliente nuevo que no utilice ninguna otra sesión gestionada actualmente por el agente. | Cadena UTF-8 | CONNACK | 
| Servidor Keep Alive | Un entero de 2 bytes que representa el tiempo de mantenimiento activo asignado por el servidor. El servidor desconectará al cliente si el cliente permanece inactivo durante más tiempo que el tiempo de mantenimiento activo. | Entero de 2 bytes | CONNACK | 
| Solicitar información sobre el problema | Un valor booleano que indica si la cadena de motivo o las propiedades del usuario se envían en caso de errores. | Byte | CONNECT | 
| Recibir máximo | Un entero de 2 bytes que representa el número máximo de paquetes PUBLISH QOS > 0 que se pueden enviar sin recibir un PUBACK. | Entero de 2 bytes | CONNECT, CONNACK | 
| Máximo de alisas de tema | Este valor indica el valor más alto que se aceptará como alias de tema. El valor predeterminado es 0. | Entero de 2 bytes | CONNECT, CONNACK | 
| QoS máxima | El valor máximo de QoS que AWS IoT Core admite. El valor predeterminado es 1. AWS IoT Core no admite QoS 2. | Byte | CONNACK | 
| Retener disponible |  Un valor booleano que indica si el agente de mensajes admite los AWS IoT Core mensajes retenidos. El valor predeterminado de es 1.  | Byte | CONNACK | 
| Tamaño máximo de paquete | El tamaño máximo de paquete que se AWS IoT Core acepta y envía. No puede superar los 128 KB. | Entero de 4 bytes | CONNECT, CONNACK | 
| Suscripción comodín disponible |  Un valor booleano que indica si el agente de AWS IoT Core mensajes admite la suscripción Wildcard disponible. El valor predeterminado de es 1.  | Byte | CONNACK | 
| Identificador de suscripción disponible |  Un valor booleano que indica si el agente de AWS IoT Core mensajes admite el identificador de suscripción disponible. El valor predeterminado es 0.  | Byte | CONNACK | 

## Códigos de motivo de MQTT
<a name="mqtt5-reason-codes"></a>

MQTT 5 introduce una mejora en la notificación de errores con respuestas en códigos de motivo. AWS IoT Core puede devolver códigos de motivo, incluidos, entre otros, los siguientes agrupados por paquetes. Para obtener una lista completa de los códigos de motivo compatibles con MQTT 5, consulte las especificaciones de [MQTT 5](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031).


**Códigos de motivo de CONNACK**  

| Valor | Hex | Motivo: nombre en clave | Description (Descripción) | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Success | Se acepta la conexión. | 
| 128 | 0x80 | Error no especificado | El servidor no desea revelar el motivo del fallo o no se aplica ninguno de los otros códigos de motivo. | 
| 133 | 0x85 | El identificador de cliente no es válido | El identificador del cliente es una cadena válida, pero el servidor no lo permite. | 
| 134 | 0x86 | Nombre de usuario o contraseña incorrectos | El servidor no acepta el nombre de usuario o la contraseña especificados por el cliente. | 
| 135 | 0x87 | No tiene autorización | El cliente no está autorizado a conectarse. | 
| 144 | 0x90 | El nombre del tema no es válido | El nombre del tema Will está formado correctamente, pero el servidor no lo acepta. | 
| 151 | 0x97 | Cuota excedida | Se ha superado un límite de implementación o impuesto por la administración. | 
| 155 | 0x9B | QoS no admitida | El servidor no admite la QoS establecida en Will QoS. | 


**Códigos de motivo de PUBACK**  

| Valor | Hex | Motivo: nombre en clave | Description (Descripción) | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Success | Se acepta el mensaje. Continúa la publicación del mensaje de QoS 1. | 
| 128 | 0x80 | Error no especificado | El receptor no acepta la publicación, pero no quiere revelar el motivo o no coincide con ninguno de los otros valores. | 
| 135 | 0x87 | No tiene autorización | La PUBLICACIÓN no está autorizada. | 
| 144 | 0x90 | El nombre del tema no es válido | El nombre del tema no tiene un formato incorrecto, pero el cliente o el servidor no lo aceptan. | 
| 145 | 0x91 | Identificador de paquetes en uso | El identificador del paquete ya está en uso. Esto puede indicar una discrepancia en el estado de la sesión entre el cliente y el servidor. | 
| 151 | 0x97 | Cuota excedida | Se ha superado un límite de implementación o impuesto por la administración. | 


**Códigos de motivo de desconexión**  

| Valor | Hex | Motivo: nombre en clave | Description (Descripción) | 
| --- | --- | --- | --- | 
| 129 | 0x81 | Paquete con formato incorrecto | El paquete recibido no cumple con esta especificación. | 
| 130 | 0x82 | Error de protocolo | Se recibió un paquete inesperado o fuera de servicio. | 
| 135 | 0x87 | No tiene autorización | La solicitud no está autorizada. | 
| 139 | 0x8B | El servidor se está apagando | El servidor se está apagando. | 
| 141 | 0x8D | Tiempo de espera de Keep Alive | La conexión está cerrada porque no se ha recibido ningún paquete durante 1,5 veces el tiempo de Keep Alive. | 
| 142 | 0x8E | Sesión sustituida | Se ha conectado otra conexión que utiliza el mismo ID de cliente, lo que provoca el cierre de esta conexión. | 
| 143 | 0x8F | Filtro de tema no válido | El filtro de temas está formado correctamente, pero el servidor no lo acepta. | 
| 144 | 0x90 | El nombre del tema no es válido | El nombre del tema está formado correctamente, pero este cliente o servidor no lo acepta. | 
| 147 | 0x93 | Límite de recepción excedido | El cliente o servidor ha recibido más publicaciones que la cantidad máxima de recepción para la que no ha enviado PUBACK o PUBCOMP. | 
| 148 | 0x94 | Alias de tema no válido | El cliente o el servidor ha recibido un paquete PUBLISH que contiene un alias de tema superior al alias de tema máximo que envió en el paquete CONNECT o CONNACK. | 
| 151 | 0x97 | Cuota excedida | Se ha superado un límite de implementación o impuesto por la administración. | 
| 152 | 0x98 | Acción administrativa | La conexión se cierra debido a una acción administrativa. | 
| 155 | 0x9B | QoS no admitida | El cliente especificó una QoS superior a la QoS especificada en una QoS máxima en el CONNACK. | 
| 161 | 0xA1 | No se admiten los identificadores de suscripción | El servidor no admite identificadores de suscripción; no se acepta la suscripción. | 


**Códigos de motivo de SUBACK**  

| Valor | Hex | Motivo: nombre en clave | Description (Descripción) | 
| --- | --- | --- | --- | 
| 0 | 0x00 | QoS 0 concedida | Se acepta la suscripción y la QoS máxima enviada será QoS 0. Esto podría ser una QoS inferior a la solicitada. | 
| 1 | 0x01 | QoS 1 concedida | Se acepta la suscripción y la QoS máxima enviada será QoS 1. Esto podría ser una QoS inferior a la solicitada. | 
| 128 | 0x80 | Error no especificado | No se acepta la suscripción y el servidor no quiere revelar el motivo o no se aplica ninguno de los demás códigos de motivo. | 
| 135 | 0x87 | No tiene autorización | El cliente no está autorizado a realizar esta suscripción. | 
| 143 | 0x8F | Filtro de tema no válido | El filtro de temas está formado correctamente, pero no está permitido para este cliente. | 
| 145 | 0x91 | Identificador de paquetes en uso | El identificador de paquete especificado ya está en uso. | 
| 151 | 0x97 | Cuota excedida | Se ha superado un límite de implementación o impuesto por la administración. | 


**Códigos de motivo de UNSUBACK**  

| Valor | Hex | Motivo: nombre en clave | Description (Descripción) | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Success | Se elimina la suscripción. | 
| 128 | 0x80 | Error no especificado | No se ha podido cancelar la suscripción y el servidor no quiere revelar el motivo o no se aplica ninguno de los demás códigos de motivo. | 
| 143 | 0x8F | Filtro de tema no válido | El filtro de temas está formado correctamente, pero no está permitido para este cliente. | 
| 145 | 0x91 | Identificador de paquetes en uso | El identificador de paquete especificado ya está en uso. | 

## AWS IoT diferencias con las especificaciones de MQTT
<a name="mqtt-differences"></a>

La implementación del agente de mensajes se basa en la [especificación MQTT v3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) y la [especificación MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), pero se diferencia de las especificaciones en los siguientes aspectos:
+ AWS IoT no admite los siguientes paquetes para MQTT 3: PUBREC, PUBREL y PUBCOMP.
+ AWS IoT no admite los siguientes paquetes para MQTT 5: PUBREC, PUBREL, PUBCOMP y AUTH.
+ AWS IoT no admite la redirección de servidores MQTT 5.
+ AWS IoT solo admite los niveles de calidad de servicio (QoS) 0 y 1 de MQTT. AWS IoT no admite la publicación ni la suscripción con el nivel 2 de QoS. El agente de mensajes no envía PUBACK o SUBACK cuando se solicita QoS nivel 2.
+ En AWS IoT, suscribirse a un tema con un nivel de QoS 0 significa que un mensaje se entrega cero o más veces. Es posible que un mensaje se entregue más de una vez. Los mensajes que se entreguen más de una vez pueden enviarse con otro ID de paquete. En tal caso, la marca DUP no se establece.
+ Cuando responde a una solicitud de conexión, el agente de mensajes envía un mensaje CONNACK. Este mensaje contiene una marca para indicar si la conexión reanuda una sesión anterior.
+ Antes de enviar paquetes de control adicionales o una solicitud de desconexión, el cliente debe esperar a que recibir el mensaje CONNACK del agente de mensajes de AWS IoT .
+ Cuando un cliente se suscribe a un tema, puede haber un retraso entre el momento en que el agente de mensajes envía un SUBACK y el momento en que el cliente empieza a recibir nuevos mensajes coincidentes.
+ Cuando un cliente utiliza el carácter comodín `#` del filtro de temas para suscribirse a un tema, coinciden todas las cadenas que estén en su nivel o por debajo de él en la jerarquía de temas. Sin embargo, el tema principal no coincide. Por ejemplo, una suscripción al tema `sensor/#` recibe los mensajes publicados en los temas `sensor/`, `sensor/temperature` y `sensor/temperature/room1`, pero no los mensajes publicados en `sensor`. Para obtener más información acerca de cómo utilizar comodines, consulte [Filtros de nombres de temas](topics.md#topicfilters).
+ El agente de mensajes utiliza el ID de cliente para identificar a cada cliente. El ID de cliente se transfiere desde el cliente al agente de mensajes como parte de la carga de MQTT. Dos clientes que tengan el mismo ID de cliente no pueden estar conectados simultáneamente al agente de mensajes. Cuando un cliente se conecta al agente de mensajes mediante un ID de cliente que otro cliente está utilizando, se acepta la nueva conexión de cliente y se desconecta el cliente previamente conectado. También puede desconectar los clientes manualmente mediante. APIs Para obtener más información, consulte [Administración de conexiones de MQTT](#mqtt-client-disconnect).
+ En raras ocasiones, el agente de mensajes reenviará el mismo mensaje PUBLISH lógico con otro ID de paquete.
+ La suscripción a filtros de temas que contienen un carácter comodín no puede recibir los mensajes retenidos. Para recibir un mensaje retenido, la solicitud de suscripción debe contener un filtro de tema que coincida exactamente con el tema del mensaje retenido.
+ El agente de mensajes no garantiza el orden de recepción de los mensajes y ACK.
+ AWS IoT puede tener límites distintos de los especificados. Para obtener más información, consulte [Límites y cuotas del agente de mensajes y del protocolo de AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) en la *Guía de referencia de AWS IoT *.
+ No se admite el indicador MQTT DUP.

## Administración de conexiones de MQTT
<a name="mqtt-client-disconnect"></a>

AWS IoT Core proporciona ayuda APIs para gestionar las conexiones MQTT, incluida la posibilidad de desconectar los clientes y gestionar sus sesiones. Estas funciones le proporcionan un mayor control sobre su flota de AWS IoT clientes y le ayudan a solucionar problemas de conexión.

### DeleteConnection API
<a name="delete-connection-api"></a>

Utilice la `DeleteConnection` API para desconectar los dispositivos MQTT AWS IoT Core especificando su cliente IDs. Al desconectar un cliente, lo AWS IoT Core desconecta del intermediario de mensajes y, si lo desea, puede limpiar el estado de la sesión y suprimir el AWS IoT Core mensaje de Last Will and Testament (LWT).

Cuando llamas a la `DeleteConnection` API, AWS IoT Core realiza varias acciones para garantizar una desconexión limpia. AWS IoT Core primero envía un mensaje de desconexión de MQTT al cliente para finalizar la sesión de MQTT. A continuación, el servicio cierra el conector subyacente TCP/TLS .

El agente de mensajes envía un paquete `DISCONNECT` al dispositivo y publica un [evento del ciclo de vida](life-cycle-events.md) con el motivo de la desconexión `API_INITIATED_DISCONNECT`. Esto le ayuda a identificar cuándo se inició una desconexión a través de la API en lugar de hacerlo a través del cliente o debido a problemas de red. Puede supervisar estos eventos con fines de visibilidad, resolución de problemas y auditoría. Por ejemplo, puede usar AWS IoT reglas para procesar estos eventos y realizar un seguimiento de cuándo y por qué se desconectaron los clientes.

Si establece el `cleanSession` parámetro en`true`, AWS IoT Core elimina el estado de la sesión del cliente, incluidas todas las suscripciones y los mensajes en cola. Si borra una sesión, la sesión persistente finalizará. Si el cliente era una sesión persistente y el parámetro `preventWillMessage` está establecido en `false`, el servicio enviará el mensaje de LWT si está disponible, lo que resulta útil durante las operaciones de mantenimiento planificadas.

Al llamar a la API `DeleteConnection`, el proceso de desconexión comienza inmediatamente, pero el momento exacto en que el cliente reconoce la desconexión puede variar en función de las condiciones de la red y de la implementación del cliente. La mayoría de los clientes detectarán la desconexión en unos segundos, pero en algunos casos con una conectividad de red deficiente, es posible que el cliente tarde más en reconocer que se ha desconectado.

**nota**  
Al forzar la desconexión, el cliente debe volver a autenticarse y volver a autorizarse con un estado de sesión nuevo. La llamada a la API en sí misma no impide la reconexión de los clientes. Si lo desea, también debe modificar la credencial o política del cliente antes de emitir la llamada a la API `DeleteConnection`.

Para obtener información sobre precios, consulte [Precios de AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

#### Casos de uso
<a name="delete-connection-use-cases"></a>

La API `DeleteConnection` es útil para administrar los clientes malintencionados y que muestran un comportamiento problemático o consumen un número excesivo de recursos. Al forzar la desconexión, puede asegurarse de que los clientes restablezcan sus conexiones con la autenticación y la autorización adecuadas, lo que puede ayudar a resolver los problemas de consumo de recursos.

Las situaciones de redireccionamiento de clientes también sacan partido de esta API. Cuando necesite redirigir a los clientes a distintos puntos de conexión o bien Regiones de AWS, puede desconectarlos mediante programación y hacer que se vuelvan a conectar a un AWS IoT Core punto final diferente cambiando la configuración de DNS. Esta API puede ayudar a resolver conexiones bloqueadas o eliminar estados de sesión problemáticos que podrían estar impidiendo el funcionamiento normal.

#### Parámetros de la API
<a name="delete-connection-parameters"></a>

La API `DeleteConnection` acepta los siguientes parámetros:

clientId (obligatorio)  
El identificador único del cliente de MQTT que se va a desconectar. Se especifica en la ruta URL. El ID del cliente no puede comenzar por el símbolo de dólar (\$1).  
El cliente MQTT IDs puede contener caracteres que no son válidos en las solicitudes HTTP. Al utilizar la API `DeleteConnection`, debe codificar mediante URL (codificación porcentual) cualquier carácter del ID de cliente que sea válido en MQTT pero no en HTTP. Esto incluye caracteres especiales como espacios, barras diagonales (/) y caracteres UTF-8. Por ejemplo, un espacio se convierte en %20, una barra diagonal se convierte en %2F y el carácter UTF-8 ü se convierte en %C3%BC. La codificación adecuada garantiza que el cliente MQTT IDs se transmita correctamente en la llamada a la API basada en HTTP.

cleanSession (opcional)  
Especifica si se debe eliminar el estado de sesión del cliente al desconectarse. Establezca en `true` para eliminar toda la información sobre la sesión, incluidos mensajes en cola y suscripciones. Establezca en `false` para conservar el estado de la sesión. De forma predeterminada, esta opción está establecida en `false` (conserva el estado de la sesión). En las sesiones válidas, se ignorará este parámetro.

preventWillMessage (opcional)  
Controla si AWS IoT Core envía el mensaje de última voluntad y testamento (LWT) si está disponible en el momento de la desconexión. Establezca en `true` para evitar el envío del mensaje de LWT. Establezca en `false` para permitir el envío. De forma predeterminada, esta opción está establecida en `false` (envía LWT si está disponible).

#### Sintaxis de la API
<a name="delete-connection-syntax"></a>

La API `DeleteConnection` utiliza el siguiente formato de solicitud HTTP:

```
DELETE /connections/<clientId>?cleanSession=<cleanSession>&preventWillMessage=<preventWillMessage> HTTP/1.1
```

Solicitudes de ejemplo:

```
// Basic disconnect (preserves session, allows LWT message)
DELETE /connections/myDevice123 HTTP/1.1

// Disconnect and clear session
DELETE /connections/myDevice123?cleanSession=TRUE HTTP/1.1

// Disconnect, clear session, and prevent LWT message
DELETE /connections/myDevice123?cleanSession=TRUE&preventWillMessage=TRUE HTTP/1.1
```

Las solicitudes correctas devuelven HTTP 200 OK sin cuerpo de la respuesta.

**nota**  
El nombre del servicio que utiliza [AWS Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) para firmar las solicitudes es: *iotdevicegateway*. Puede encontrar el punto de conexión mediante el comando `aws iot describe-endpoint --endpoint-type iot:Data-ATS`.

#### Permisos necesarios
<a name="delete-connection-permissions"></a>

Para usar la API `DeleteConnection`, se requiere el siguiente permiso de IAM:

```
iot:DeleteConnection
```

Puede asignar este permiso a un cliente específico IDs mediante políticas basadas en recursos. Por ejemplo:

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:DeleteConnection",
            "Resource": "arn:aws:iot:region:account:client/myDevice*"
        }
    ]
}
```

#### Consideraciones importantes
<a name="delete-connection-considerations"></a>

Los clientes desconectados pueden intentar volver a conectarse inmediatamente, a menos que haya implementado una lógica adicional para impedir la reconexión. La operación de desconexión solo termina la conexión actual y no impide que una conexión se vuelva a conectar. Si necesita impedir la reconexión, plantéese implementar una lógica de cliente o deshabilitar la credencial de un dispositivo.

Los límites de velocidad se aplican a la API como parte de la limitación de velocidad de la AWS IoT Core API estándar. Cuando planifique las operaciones de desconexión masiva, asegúrese de tener en cuenta estos límites e implementar la lógica de reintentos y las estrategias de procesamiento por lotes adecuadas para evitar las limitaciones. Para obtener más información, consulte [Puntos de conexión y cuotas de AWS IoT Core](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits).

#### Respuestas de error
<a name="delete-connection-errors"></a>

La API `DeleteConnection` puede devolver las siguientes respuestas de error:

InvalidRequestException  
La solicitud no es válida. Esto puede ocurrir si el formato del ID de cliente no es válido, incluye un prefijo con el signo de dólar (\$1) o si faltan los parámetros necesarios.

ResourceNotFoundException  
El ID de cliente especificado no existe o no está conectado actualmente y no tiene una sesión persistente.

UnauthorizedException  
No está autorizado para realizar esta operación. Asegúrese de que tenga el permiso `iot:DeleteConnection` necesario.

ForbiddenException  
La persona que llama no está autorizada a realizar la solicitud. Esto puede deberse a la insuficiencia de los permisos de IAM o a las restricciones de las políticas basadas en los recursos.

ThrottlingException  
El índice supera el límite. Reduzca la frecuencia de las llamadas a la API e implemente la lógica de reintentos adecuada con un retroceso exponencial.

InternalFailureException  
Se ha producido un error inesperado. Vuelva a intentar la solicitud después de esperar unos segundos.

ServiceUnavailableException  
El servicio no está disponible temporalmente. Vuelva a intentar la solicitud después de esperar unos segundos.

# Publicación en HTTPS
<a name="http"></a>

Los clientes pueden publicar mensajes realizando solicitudes a la API REST utilizando los protocolos HTTP 1.0 o 1.1. Para obtener información sobre la autenticación y las asignaciones de puertos utilizados por las solicitudes HTTP, consulte [Protocolos, asignaciones de puertos y autenticación](protocols.md#protocol-mapping).

**nota**  
HTTPS no admite un valor `clientId` como lo hace MQTT. `clientId` está disponible cuando se usa MQTT, pero no cuando se usa HTTPS.

## URL del mensaje HTTPS
<a name="httpurl"></a>

Los dispositivos y los clientes publican sus mensajes con solicitudes POST a un punto de conexión específico del cliente y a una dirección URL específica del tema:

```
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
```
+  *IoT\$1data\$1endpoint*es el [punto final de los datos del AWS IoT dispositivo](iot-connect-devices.md#iot-connect-device-endpoints). Puedes encontrar el punto final en la AWS IoT consola, en la página de detalles del dispositivo, o en el cliente mediante el AWS CLI comando: 

  ```
  aws iot describe-endpoint --endpoint-type iot:Data-ATS
  ```

   El punto de conexión debería tener un aspecto similar al siguiente: `a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com` 
+ *url\$1encoded\$1topic\$1name*es el [nombre completo del tema](topics.md#topicnames) del mensaje que se envía.

## Ejemplos de código de mensajes HTTPS
<a name="codeexample"></a>

Estos son algunos ejemplos de cómo enviar un mensaje HTTPS a AWS IoT.

------
#### [ Python (port 8443) ]

```
import requests
import argparse

# define command-line parameters
parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.")
parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " +
                                                      "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"")
parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.")
parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.")
parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.")
parser.add_argument('--message', default="Hello World!", help="Message to publish. " +
                                                      "Specify empty string to publish nothing.")

# parse and load command-line parameter values
args = parser.parse_args()

# create and format values for HTTPS request
publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1'
publish_msg = args.message.encode('utf-8')

# make request
publish = requests.request('POST',
            publish_url,
            data=publish_msg,
            cert=[args.cert, args.key])

# print results
print("Response status: ", str(publish.status_code))
if publish.status_code == 200:
        print("Response body:", publish.text)
```

------
#### [ Python (port 443) ]

```
import requests
import http.client
import json
import ssl

ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT)
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2

# note the use of ALPN
ssl_context.set_alpn_protocols(["x-amzn-http-ca"])
ssl_context.load_verify_locations(cafile="./<root_certificate>")

# update the certificate and the AWS endpoint
ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>")
connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context)
message = {'data': 'Hello, I'm using TLS Client authentication!'}
json_data = json.dumps(message)
connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data)

# make request
response = connection.getresponse()

# print results
print(response.read().decode())
```

------
#### [ CURL ]

Puede usar [curl](https://curl.haxx.se) desde un cliente o dispositivo para enviar un mensaje a AWS IoT.

**Para usar curl para enviar un mensaje desde un dispositivo AWS IoT cliente**

1. Compruebe la versión de **curl**.

   1. En su cliente, ejecute este comando en un símbolo del sistema.

      **curl --help**

      En el texto de ayuda, busque las opciones TLS. Debería ver la opción `--tlsv1.2`.

   1. Si ve la opción `--tlsv1.2`, continúe.

   1. Si no ve la opción `--tlsv1.2` o aparece un error `command not found`, tal vez deba actualizar o instalar curl en el cliente o instalar `openssl` antes de continuar.

1. Instale los certificados en su cliente.

   Copie los archivos de certificado que creó al registrar su cliente (cosa) en la AWS IoT consola. Asegúrese de que tiene estos tres archivos de certificado en su cliente antes de continuar.
   + El archivo de certificado de entidad de certificación (*Amazon-root-CA-1.pem* en este ejemplo).
   + El archivo de certificado del cliente (*device.pem.crt* en este ejemplo).
   + El archivo de clave privada del cliente (*private.pem.key* en este ejemplo).

1. Cree la línea de comandos de **curl** y sustituya los valores reemplazables por los de su cuenta y sistema.

   ```
   curl --tlsv1.2 \
       --cacert Amazon-root-CA-1.pem \
       --cert device.pem.crt \
       --key private.pem.key \
       --request POST \
       --data "{ \"message\": \"Hello, world\" }" \
       "https://IoT_data_endpoint:8443/topics/topic?qos=1"
   ```  
--tlsv1.2  
Use TLS 1.2 (SSL).  
--cacert *Amazon-root-CA-1.pem*  
El nombre de archivo y la ruta de acceso, si es necesario, del certificado de entidad de certificación para verificar el par.  
--cert *device.pem.crt*  
El nombre y la ruta de acceso del archivo de certificado del cliente, si es necesario.  
--clave *private.pem.key*  
El nombre y la ruta del archivo de la clave privada del cliente, si es necesario.  
--request POST  
El tipo de solicitud HTTP (en este caso, POST).  
--datos «» *\$1 \$1"message\$1": \$1"Hello, world\$1" \$1*  
Los datos de HTTP POST que quiere publicar. En este caso, es una cadena JSON, con las comillas internas con el carácter de escape de barra invertida (\$1).  
«https: //:8443/temas/? *IoT\$1data\$1endpoint* *topic* qos=1"  
La URL del punto de conexión de datos del AWS IoT dispositivo de su cliente, seguida del puerto HTTPS`:8443`, seguido de la palabra clave `/topics/` y, en este caso, `topic` del nombre del tema. Especifique la calidad del servicio como parámetro de consulta, `?qos=1`.

1. Abra el cliente de pruebas de MQTT en la AWS IoT consola.

   Siga las instrucciones [Vea los mensajes MQTT con el cliente AWS IoT MQTT](view-mqtt-messages.md) y configure la consola para suscribirse a los mensajes con el nombre del tema *topic* utilizado en su **curl** comando, o utilice el filtro de temas comodín de. `#`

1. Pruebe el comando.

   Mientras monitoriza el tema en el cliente de prueba de la consola de AWS IoT , vaya a su cliente y ejecute la línea de comandos curl que creó en el paso 3. Debería ver los mensajes de su cliente en la consola.

------

# Temas de MQTT
<a name="topics"></a>

Los temas de MQTT identifican los AWS IoT mensajes. AWS IoT los clientes identifican los mensajes que publican asignando nombres a los temas de los mensajes. Los clientes identifican los mensajes a los que desean suscribirse (recibir) registrando un filtro de temas con AWS IoT Core. El agente de mensajes de utiliza nombres y filtros de temas para dirigir los mensajes de los clientes de publicación a los clientes de suscripción.

El agente de mensajes utiliza los temas para identificar los mensajes enviados mediante MQTT y enviados mediante HTTP al [URL del mensaje HTTPS](http.md#httpurl).

Aunque AWS IoT admite algunos [temas de sistema reservados](reserved-topics.md), la mayoría de los temas de MQTT los crea y gestiona usted, el diseñador del sistema. AWS IoT utiliza los temas para identificar los mensajes recibidos de los clientes de publicación y seleccionar los mensajes que se van a enviar a los clientes suscritos, tal y como se describe en las siguientes secciones. Antes de crear un espacio de nombres de temas para el sistema, consulte las características de los temas de MQTT para crear la jerarquía de nombres de temas que funcione mejor con su sistema de IoT.

## Nombres de temas
<a name="topicnames"></a>

Los nombres de los temas y los filtros de temas son cadenas codificadas por UTF-8. Pueden representar una jerarquía de información utilizando el carácter de barra diagonal (/) para separar los niveles de la jerarquía. Por ejemplo, este nombre de tema podría referirse a un sensor de temperatura en la sala 1:
+ `sensor/temperature/room1`

En este ejemplo, también puede haber otros tipos de sensores en otras salas con nombres de temas como:
+ `sensor/temperature/room2`
+ `sensor/humidity/room1`
+ `sensor/humidity/room2`

**nota**  
Cuando considere los nombres de los temas para los mensajes de su sistema, tenga en cuenta:  
Los nombres de temas y los filtros de temas distinguen entre mayúsculas y minúsculas.
Los nombres de los temas no deben contener información de identificación personal.
Los nombres de tema que comienzan por \$1 son [temas reservados](reserved-topics.md) que debe utilizar únicamente AWS IoT Core.
AWS IoT Core no puedo enviar ni recibir mensajes entre Cuenta de AWS nosotros o regiones.

Para obtener más información sobre cómo diseñar los nombres de los temas y el espacio de nombres, consulte nuestro documento técnico, [Diseño de temas MQTT para AWS IoT Core](https://docs.aws.amazon.com/whitepapers/latest/designing-mqtt-topics-aws-iot-core/designing-mqtt-topics-aws-iot-core.html).

Para ver ejemplos de cómo las aplicaciones pueden publicar y suscribirse a mensajes, empiece por [Cómo empezar con AWS IoT Core los tutoriales](iot-gs.md) y [SDK de dispositivos, SDK para móviles y cliente de dispositivo de AWS IoT](iot-sdks.md).

**importante**  
El espacio de nombres del tema está limitado a una región Cuenta de AWS y. Por ejemplo, el `sensor/temp/room1` tema utilizado por un usuario Cuenta de AWS de una región es distinto del `sensor/temp/room1` tema utilizado por la misma AWS cuenta en otra región o utilizado por cualquier otra cuenta Cuenta de AWS en cualquier región.

## ARN de tema
<a name="topicnames-arn"></a>

Todos los temas ARNs (Amazon Resource Names) tienen el siguiente formulario:

```
arn:aws:iot:aws-region:AWS-account-ID:topic/Topic
```

Por ejemplo, `arn:aws:iot:us-west-2:123EXAMPLE456:topic/application/topic/device/sensor` es un ARN del tema ` application/topic/device/sensor`.

## Filtros de nombres de temas
<a name="topicfilters"></a>

Los clientes suscriptores registran filtros de nombres de temas con el agente de mensajes para especificar los temas de mensajes que el agente de mensajes debe enviarles. Un filtro de nombre de tema puede ser un único nombre de tema para suscribirse a un único nombre de tema o puede incluir caracteres comodín para suscribirse a varios nombres de tema a la vez.

Los clientes de publicación no pueden utilizar caracteres comodín en los nombres de tema que publican. 

En la tabla siguiente se enumeran los caracteres comodín que se pueden utilizar en un filtro de temas. 


**Comodines de tema**  

| Carácter comodín | Coincide | Notas | 
| --- | --- | --- | 
| \$1 | Todas las cadenas en y por debajo de su nivel en la jerarquía de temas. |  Debe ser el último carácter del filtro de temas.  Debe ser el único carácter en su nivel de jerarquía de temas. Se puede utilizar en un filtro de temas que también contiene el carácter comodín \$1.  | 
| \$1 | Cualquier cadena en el nivel que contiene el carácter. |  Debe ser el único carácter en su nivel de jerarquía de temas. Se puede utilizar en varios niveles de un filtro de tema.  | 

Uso de comodines con los ejemplos de nombres de tema de sensor anteriores:
+ Una suscripción a `sensor/#` recibe los mensajes publicados en `sensor/`, `sensor/temperature` y `sensor/temperature/room1`, pero no los mensajes publicados en `sensor`. 
+ Una suscripción a `sensor/+/room1` recibe mensajes publicados en `sensor/temperature/room1` y `sensor/humidity/room1`, pero no mensajes enviados a `sensor/temperature/room2` o `sensor/humidity/room2`.

### ARN de filtro de temas
<a name="topicfilters-arn"></a>

Todos los filtros de temas ARNs (Amazon Resource Names) tienen el siguiente formulario:

```
arn:aws:iot:aws-region:AWS-account-ID:topicfilter/TopicFilter
```

Por ejemplo, `arn:aws:iot:us-west-2:123EXAMPLE456:topicfilter/application/topic/+/sensor` es un ARN del filtro de tema ` application/topic/+/sensor`.

# Carga de mensajes MQTT
<a name="topicdata"></a>

La carga útil de mensajes que se envía en tus mensajes MQTT no viene especificada por AWS IoT, a menos que sea para uno de los. [Temas reservados](reserved-topics.md) Para adaptarse a las necesidades de su aplicación, le recomendamos que defina la carga de mensajes para sus temas dentro de las restricciones de [AWS IoT Core Service Quotas para Protocolos](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-protocol-limits). 

El uso de un formato JSON para la carga útil de los mensajes permite al motor de AWS IoT reglas analizar los mensajes y aplicarles consultas SQL. Si su aplicación no requiere que el motor de reglas aplique consultas SQL a las cargas útiles de sus mensajes, puede utilizar cualquier formato de datos que requiera su aplicación. Para obtener información sobre las limitaciones y los caracteres reservados de un documento JSON utilizado en las consultas SQL, consulte [Extensiones JSON](iot-sql-json.md). 

Para obtener más información sobre el diseño de los temas de MQTT y sus correspondientes cargas de mensajes, consulte [Diseño de temas de MQTT](https://docs.aws.amazon.com/whitepapers/latest/designing-mqtt-topics-aws-iot-core/designing-mqtt-topics-aws-iot-core.html) para AWS IoT Core.

Si el límite de tamaño de un mensaje supera las cuotas de servicio, se producirá un `CLIENT_ERROR` con motivo `PAYLOAD_LIMIT_EXCEEDED` y “La carga útil del mensaje supera el límite de tamaño para el tipo de mensaje.” Para obtener más información sobre el límite de tamaño de los mensajes, consulte [Límites y cuotas del agente de mensajes AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits.html).

# Temas reservados
<a name="reserved-topics"></a>

Los temas que comienzan con un signo de dólar (\$1) están reservados para su uso exclusivo AWS IoT. Puede suscribirse y publicar en estos temas reservados según lo permitan; sin embargo, no puede crear nuevos temas que comiencen por un signo de dólar. Las operaciones de publicación o suscripción no admitidas a temas reservados pueden dar como resultado que se termine la conexión.

## Temas del modelo de activos
<a name="reserved-topics-other"></a>


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1 aws/sitewise/asset *assetModelId* -models/ /assets/ /properties/ *assetId* *propertyId*  |  Suscribirse  |  AWS IoT SiteWise publica notificaciones de propiedades de activos sobre este tema. Para obtener más información, consulte [Interacción con otros AWS servicios](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/interact-with-other-services.html) en la *Guía del AWS IoT SiteWise usuario*.  | 

## AWS IoT Device Defender temas
<a name="reserved-topics-device-defender"></a>

Estos mensajes admiten búferes de respuesta en formato de representación concisa de objetos binarios (CBOR) y en notación de JavaScript objetos (JSON), según el *payload-format* tema. AWS IoT Device Defender los temas solo admiten la publicación en MQTT.


| *payload-format* | Tipo de datos de formato de respuesta | 
| --- | --- | 
| cbor | Concise Binary Object Representation (Representación concisa de objetos binarios, CBOR) | 
| json | JavaScript Notación de objetos (JSON) | 

Para obtener más información, consulte [Envío de métricas desde dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).


| Topic | Operaciones permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/things/ /defender/metrics/ *thingName* *payload-format*  |  Publish  |  AWS IoT Device Defender los agentes publican métricas sobre este tema. Para obtener más información, consulte [Envío de métricas desde dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).   | 
|  \$1aws/things/ /defender/metrics/ /accepted *thingName* *payload-format*  |  Suscribirse  |  AWS IoT publica en este tema después de que un agente publique correctamente un mensaje en \$1aws/things/ /defender/metrics/. AWS IoT Device Defender *thingName* *payload-format* Para obtener más información, consulte [Envío de métricas desde dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).   | 
|  \$1aws/things/ /defender/metrics/ /rejected *thingName* *payload-format*  |  Suscribirse  |  AWS IoT publica en este tema después de que un agente publique un mensaje fallido en \$1aws/things/ /defender/metrics/. AWS IoT Device Defender *thingName* *payload-format* Para obtener más información, consulte [Envío de métricas desde dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).   | 

## AWS IoT Core Temas de ubicación de dispositivos
<a name="reserved-topics-device-location"></a>

AWS IoT Core La ubicación del dispositivo puede resolver los datos de medición de su dispositivo y proporcionar una ubicación estimada de sus dispositivos de IoT. Los datos de medición del dispositivo pueden incluir el GNSS, la conexión Wi-Fi, la red móvil y la dirección IP. AWS IoT Core A continuación, la ubicación del dispositivo elige el tipo de medición que proporciona la mejor precisión y resuelve la información de ubicación del dispositivo. Para obtener más información, consulte [AWS IoT Core Ubicación del dispositivo](device-location.md) y [Resolución de la ubicación del dispositivo mediante los temas de ubicación del AWS IoT Core dispositivo (MQTT)](device-location-reserved-topics.md).


| Topic | Operaciones permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/device\$1location/ /get\$1position\$1estimate *customer\$1device\$1id*  |  Publish  |  Un dispositivo publica sobre este tema para que los datos de medición sin procesar escaneados se resuelvan según la ubicación del dispositivo. AWS IoT Core   | 
|  \$1aws/device\$1location/ /get\$1position\$1estimate/accepted *customer\$1device\$1id*  |  Suscribirse  |  AWS IoT Core Device Location publica este tema después de haber resuelto correctamente la ubicación del dispositivo.  | 
|  \$1aws/device\$1location/ /get\$1position\$1estimate/rejected *customer\$1device\$1id*  |  Suscribirse  |  AWS IoT Core La ubicación del dispositivo publica este tema cuando no puede resolver la ubicación del dispositivo correctamente debido a errores 4xx.  | 

## Temas de eventos
<a name="reserved-topics-event"></a>

Los mensajes de eventos se publican cuando se producen determinados eventos. Por ejemplo, el registro genera eventos cuando se agregan, actualizan o eliminan objetos. En la tabla se muestran los distintos AWS IoT eventos y sus temas reservados.


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/events/certificates/registered/*caCertificateId*  |  Suscribirse  |  AWS IoT publica este mensaje cuando registra AWS IoT automáticamente un certificado y cuando un cliente presenta un certificado con el `PENDING_ACTIVATION` estado. Para obtener más información, consulte [Configurar la primera conexión de un cliente para el registro automático](auto-register-device-cert.md#configure-auto-reg-first-connect).  | 
|  \$1aws/events/job/*jobID*/cancelado  |  Suscribirse  | AWS IoT publica este mensaje cuando se cancela un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/job/jobID/cancellation\$1in\$1progress |  Suscribirse  | AWS IoT publica este mensaje cuando hay una cancelación de trabajo en curso. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
|  \$1aws/events/job/*jobID*/completado  |  Suscribirse  | AWS IoT publica este mensaje cuando se ha completado un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/job/jobID/eliminado |  Suscribirse  | AWS IoT publica este mensaje cuando se elimina un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/job/jobID/deletion\$1in\$1progress |  Suscribirse  | AWS IoT publica este mensaje cuando se está eliminando un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/cancelado |  Suscribirse  | AWS IoT publica este mensaje cuando se cancela la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/eliminado |  Suscribirse  | AWS IoT publica este mensaje cuando se elimina la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/failed |  Suscribirse  | AWS IoT publica este mensaje cuando se produce un error en la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/rejected |  Suscribirse  | AWS IoT publica este mensaje cuando se rechaza la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/removed |  Suscribirse  | AWS IoT publica este mensaje cuando se elimina una ejecución de trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/succeeded |  Suscribirse  | AWS IoT publica este mensaje cuando la ejecución de un trabajo se ha realizado correctamente. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/timed\$1out |  Suscribirse  | AWS IoT publica este mensaje cuando se agota el tiempo de espera de una ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md). | 
|  \$1aws/events/presence/connected/*clientId*  |  Suscribirse  |  AWS IoT publica este tema cuando se conecta un cliente MQTT con el ID de cliente especificado. AWS IoT Para obtener más información, consulte [Eventos de conexión/desconexión](life-cycle-events.md#connect-disconnect).  | 
|  \$1aws/events/presence/disconnected/*clientId*  |  Suscribirse  |  AWS IoT publica este tema cuando un cliente MQTT con el ID de cliente especificado se desconecta a. AWS IoT Para obtener más información, consulte [Eventos de conexión/desconexión](life-cycle-events.md#connect-disconnect).   | 
|  \$1aws/events/subscriptions/subscribed/*clientId*  |  Suscribirse  |  AWS IoT publica en este tema cuando un cliente de MQTT con el ID de cliente especificado se suscribe a un tema de MQTT. Para obtener más información, consulte [Eventos de suscripción/cancelación de suscripción](life-cycle-events.md#subscribe-unsubscribe-events).  | 
|  \$1aws/events/subscriptions/unsubscribed/*clientId*  |  Suscribirse  |  AWS IoT publica en este tema cuando un cliente de MQTT con el ID de cliente especificado cancela su suscripción a un tema de MQTT. Para obtener más información, consulte [Eventos de suscripción/cancelación de suscripción](life-cycle-events.md#subscribe-unsubscribe-events).  | 
|  \$1//created aws/events/thing *thingName*  |  Suscribirse  |  AWS IoT publica en este tema cuando se crea la *thingName* cosa. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thing/*thingName*/updated  |  Suscribirse  |  AWS IoT publica en este tema cuando *thingName* se actualiza. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thing/*thingName*/eliminado  |  Suscribirse  |  AWS IoT publica en este tema cuando se elimina la *thingName* cosa. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroup/*thingGroupName*/created  |  Suscribirse  |  AWS IoT publica en este tema cuando *thingGroupName* se crea el grupo de cosas. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroup/*thingGroupName*/updated  |  Suscribirse  |  AWS IoT publica en este tema cuando se *thingGroupName* actualiza el grupo de cosas. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroup/*thingGroupName*/eliminado  |  Suscribirse  |  AWS IoT publica en este tema cuando *thingGroupName* se elimina un grupo de cosas. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingType/*thingTypeName*/created  |  Suscribirse  |  AWS IoT publica en este tema cuando se crea el tipo de *thingTypeName* cosa. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingType/*thingTypeName*/updated  |  Suscribirse  |  AWS IoT publica en este tema cuando se actualiza el tipo de *thingTypeName* cosa. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingType/*thingTypeName*/eliminado  |  Suscribirse  |  AWS IoT publica en este tema cuando se elimina el tipo de *thingTypeName* cosa. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingTypeAssociation/thing/*thingName*/*thingTypeName*  |  Suscribirse  |  AWS IoT publica en este tema cuando algo *thingName* está asociado o disociado de un tipo *thingTypeName* de cosa. Para obtener más información, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroupMembership/thingGroup//thing/ *thingGroupName* /added *thingName*  |  Suscribirse  |   AWS IoT publica en este tema cuando *thingName* se agrega algo al grupo de cosas. *thingGroupName* Para obtener más información, consulte [Eventos de registro](registry-events.md).   | 
|  \$1aws/events/thingGroupMembership/thingGroup/*thingGroupName*/thing/ /removed *thingName*  |  Suscribirse  |   AWS IoT publica en este tema cuando *thingName* se elimina algo del grupo de cosas. *thingGroupName* Para obtener más información, consulte [Eventos de registro](registry-events.md).   | 
|   \$1aws/events/thingGroupHierarchy/thingGroup//*parentThingGroupName*childThingGroup/*childThingGroupName*/agregado  |  Suscribirse  |   AWS IoT publica en este tema cuando *childThingGroupName* se agrega un grupo de cosas al grupo *parentThingGroupName* de cosas. Para obtener más información, consulte [Eventos de registro](registry-events.md).   | 
|   \$1aws/events/thingGroupHierarchy/thingGroup/*parentThingGroupName*childThingGroup/*childThingGroupName*/eliminado  |  Suscribirse  |   AWS IoT publica en este tema cuando *childThingGroupName* se elimina un grupo de cosas del grupo *parentThingGroupName* de cosas. Para obtener más información, consulte [Eventos de registro](registry-events.md).   | 

## Temas de aprovisionamiento de flotas
<a name="reserved-topics-fleet"></a>

**nota**  
Las operaciones de cliente indicadas como **Recibir** en esta tabla indican los temas que se AWS IoT publican directamente para el cliente que los solicitó, independientemente de que el cliente esté suscrito al tema o no. Los clientes deben esperar recibir estos mensajes de respuesta aunque no estén suscritos a ellos. Estos mensajes de respuesta no pasan por el agente de mensajes y otros clientes o reglas no pueden suscribirse a ellos.

Estos mensajes admiten búferes de respuesta en formato de representación concisa de objetos binarios (CBOR) y en notación *payload-format* de JavaScript objetos (JSON), según el tema.


| *payload-format* | Tipo de datos de formato de respuesta | 
| --- | --- | 
| cbor | Concise Binary Object Representation (Representación concisa de objetos binarios, CBOR) | 
| json | JavaScript Notación de objetos (JSON) | 

Para obtener más información, consulte [API de MQTT de aprovisionamiento de dispositivos](fleet-provision-api.md).


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/certificates/create/*payload-format*  |  Publish  |  Publique en este tema para crear un certificado a partir de una solicitud de firma de certificado (CSR).  | 
|  \$1aws/certificates/create/*payload-format*/aceptado  |  Suscribirse, recibir  |  AWS IoT publica en este tema tras una llamada exitosa a \$1aws/certificates/create/*payload-format*.  | 
|  \$1aws/certificates/create/*payload-format*/rechazado  |  Suscribirse, recibir  |  AWS IoT publica en este tema después de una llamada fallida a \$1aws/certificates/create/*payload-format*.  | 
|  \$1 aws/certificates/create -from-csr/ *payload-format*  |  Publish  |  Publica en este tema para crear un certificado a partir de una CSR.  | 
|  \$1 aws/certificates/create -from-csr/ /aceptado *payload-format*  |  Suscribirse, recibir  |  AWS IoT publica en este tema una llamada exitosa a \$1 -from-csr/. aws/certificates/create *payload-format*  | 
|  \$1 -from-csr/ /rejected aws/certificates/create *payload-format*  | Suscribirse, recibir |  AWS IoT publica en este tema una llamada fallida a \$1 -from-csr/. aws/certificates/create *payload-format*  | 
|  *templateName*\$1aws/provisioning-templates/ /provision/ *payload-format*  |  Publish  |  Publique en este tema para registrar un objeto.  | 
|  \$1aws/provisioning-templates/ /provision/ *templateName* /accepted *payload-format*  | Suscribirse, recibir |  AWS IoT publica en este tema tras una llamada exitosa a \$1aws/provisioning-templates/ /provision/. *templateName* *payload-format*  | 
|  \$1aws/provisioning-templates/ /provision/ /rejected *templateName* *payload-format*  |  Suscribirse, recibir  |  AWS IoT publica en este tema tras una llamada fallida a \$1aws/provisioning-templates/ /provision/. *templateName* *payload-format*  | 

## Temas de trabajos
<a name="reserved-topics-job"></a>

**nota**  
Las operaciones de cliente indicadas como **Recibir** en esta tabla indican los temas que se AWS IoT publican directamente para el cliente que los solicitó, independientemente de que el cliente esté suscrito al tema o no. Los clientes deben esperar recibir estos mensajes de respuesta aunque no estén suscritos a ellos.  
Estos mensajes de respuesta no pasan por el agente de mensajes y otros clientes o reglas no pueden suscribirse a ellos. Para suscribirse a los mensajes relacionados con la actividad de trabajos, utilice los temas `notify` y `notify-next`.  
Al suscribirse a los temas de tareas y eventos `jobExecution` de su solución de monitoreo de flota, primero debe habilitar los [eventos de tareas y ejecución de tareas](iot-events.md) para recibir cualquier evento en la nube.  
Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/things/ /jobs/get *thingName*  |  Publish  |  Los dispositivos publican un mensaje en este tema para realizar una solicitud `GetPendingJobExecutions`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  *thingName*\$1aws/cosas//jobs/get/accepted  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir respuestas correctas de una solicitud `GetPendingJobExecutions`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).   | 
|  *thingName*\$1aws/cosas//jobs/get/rejected  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir una respuesta cuando se rechaza una solicitud `GetPendingJobExecutions`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/start-next *thingName*  |  Publish  |  Los dispositivos publican un mensaje en este tema para realizar una solicitud `StartNextPendingJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  *thingName*\$1aws/cosas//jobs/start-next/accepted  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir respuestas correctas a una solicitud `StartNextPendingJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  *thingName*\$1aws/cosas//jobs/start-next/rejected  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir una respuesta cuando se rechaza una solicitud `StartNextPendingJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/cosas/ /jobs/ /get *thingName* *jobId*  |  Publish  |  Los dispositivos publican un mensaje en este tema para realizar una solicitud `DescribeJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /get/accepted *jobId*  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir respuestas correctas a una solicitud `DescribeJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /get/rejected *jobId*  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir una respuesta cuando se rechaza una solicitud `DescribeJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /update *jobId*  |  Publish  |  Los dispositivos publican un mensaje en este tema para realizar una solicitud `UpdateJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ *thingName* /update/accepted *jobId*  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir respuestas correctas a una solicitud `UpdateJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  Nota Solo el dispositivo que publica en \$1aws/things/ /jobs/ /update recibe mensajes sobre este tema. *thingName* *jobId*   | 
|  \$1aws/things/ /jobs/ /update/rejected *thingName* *jobId*  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir una respuesta cuando se rechaza una solicitud `UpdateJobExecution`. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  Nota Solo el dispositivo que publica en \$1aws/things/ /jobs/ /update recibe mensajes sobre este tema. *thingName* *jobId*   | 
|  \$1aws/things/ /jobs/notify *thingName*  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir notificaciones cuando la ejecución de un trabajo se añade o elimina de la lista de ejecuciones pendientes de un objeto. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/notify-next *thingName*  |  Suscribirse, recibir  |  Los dispositivos se suscriben a este tema para recibir notificaciones cuando cambia la siguiente ejecución de un trabajo pendiente para el objeto. Para obtener más información, consulte [Operaciones de la API MQTT de dispositivos de Jobs](jobs-mqtt-api.md).  | 
|  \$1/aws/events/job/completado *jobId*  |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se completa un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).  | 
|  \$1aws/events/job//cancelado *jobId*  |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se cancela un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).  | 
|  \$1aws/events/job//eliminado *jobId*   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se elimina un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/cancelación\$1en curso   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se inicia la cancelación de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/eliminación\$1en curso   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se inicia la eliminación de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1 aws/events/jobExecution*jobId*//conseguido   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando la ejecución del trabajo se ejecuta satisfactoriamente. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1aws/events/jobExecution//falló *jobId*   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando la ejecución de un trabajo produce un error. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1aws/events/jobExecution//rechazado *jobId*   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se rechaza una ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1aws/events/jobExecution//cancelado *jobId*   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se cancela la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1aws/events/jobExecution//timed\$1out *jobId*   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se agota el tiempo de espera de ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1 aws/events/jobExecution*jobId*//eliminado   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se elimina la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 
|  \$1aws/events/jobExecution//eliminado *jobId*   |  Suscribirse  |  El servicio de trabajos publica un evento sobre este tema cuando se elimina la ejecución de un trabajo. Para obtener más información, consulte [Eventos de trabajos](events-jobs.md).   | 

## Temas de comandos
<a name="reserved-topics-commands"></a>

**nota**  
Las operaciones de cliente indicadas como **Recibir** en esta tabla indican los temas que se AWS IoT publican directamente para el cliente que los solicitó, independientemente de que el cliente esté suscrito al tema o no. Los clientes deben esperar recibir estos mensajes de respuesta aunque no estén suscritos a ellos.  
Estos mensajes de respuesta no pasan por el agente de mensajes y otros clientes o reglas no pueden suscribirse a ellos.


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/commands///executions/ /request/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/commands//*<devices>**<DeviceID>*/executions/ /request *<ExecutionId>*  |  Suscribirse, recibir  |  Los dispositivos reciben un mensaje sobre este tema cuando se solicita iniciar la ejecución de un comando desde la consola o mediante la API `StartCommandExecution`. En este caso, *<devices>* pueden ser cosas de IoT o clientes MQTT, y *<DeviceID>* pueden ser el nombre de la cosa IoT o el ID de cliente MQTT.  | 
|  \$1aws/commands/ //executions/ /response/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>*  |  Publish  |  Los dispositivos utilizan la API de MQTT `UpdateCommandExecution` para publicar un mensaje en este tema sobre la ejecución de comandos. El mensaje se publica como respuesta a la solicitud de iniciar la ejecución de un comando desde la consola o mediante la API `StartCommandExecution`. El mensaje publicado utilizará JSON o CBOR como. *<PayloadFormat>*  | 
|  \$1aws/commands///executions/ /response/accepted/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/commands//*<devices>**<DeviceID>*/executions/ /response/accepted *<ExecutionId>*  |  Suscribirse, recibir  |  Si el servicio en la nube procesó correctamente el resultado de la ejecución del comando, AWS IoT Device Management publicará una respuesta en el tema /accepted.  | 
|  \$1aws/commands//*<devices>**<DeviceID>*/executions/ *<ExecutionId>* /response/rechected/ *<PayloadFormat>* \$1aws/commands//*<devices>**<DeviceID>*/executions/ /response/rejected *<ExecutionId>*  |  Publish  |  Si el servicio en la nube no pudo procesar el resultado de la ejecución del comando, AWS IoT Device Management publicará una respuesta en el tema /rejected.  | 

## Temas de reglas
<a name="reserved-topics-rule"></a>


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/rules/ *ruleName*  |  Publish  |  Los dispositivos o las aplicaciones publican en este tema para activar reglas directamente. Para obtener más información, consulte [Reducción de los costes de mensajería con Basic Ingest](iot-basic-ingest.md).   | 

## Temas de tunelización segura
<a name="reserved-topics-secure"></a>


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/things/ /tunnels/notify *thing-name*  |  Suscribirse  |   AWS IoT publica este mensaje para que un agente de IoT inicie un proxy local en el dispositivo remoto. Para obtener más información, consulte [Fragmento de agente de IoT](configure-remote-device.md#agent-snippet).   | 

## Temas de sombra
<a name="reserved-topics-shadow"></a>

Las sombras con nombre y sin nombre utilizan los temas de esta sección. Los temas utilizados por cada uno solo difieren en el prefijo del tema. Esta tabla muestra el prefijo de tema utilizado por cada tipo de sombra.


| Valor de *ShadowTopicPrefix* | Tipo de sombra | 
| --- | --- | 
| \$1aws/things/ /shadow thingName | Sombra sin nombre (clásica) | 
| thingName\$1aws/cosas/ /shadow/name/ shadowName | Sombra con nombre | 

Para crear un tema completo, seleccione el tipo de sombra al que desee hacer referencia, sustitúyala y, si procede, *ShadowTopicPrefix* por sus valores correspondientes *thingName* y *shadowName* añádala al código auxiliar del tema, tal y como se muestra en la siguiente tabla. Recuerde que los temas distinguen entre mayúsculas y minúsculas.


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  *ShadowTopicPrefix*/eliminar  |  Publicar/suscribirse  |  Un dispositivo o una aplicación publica en este tema para eliminar una sombra. Para obtener más información, consulte [/delete](device-shadow-mqtt.md#delete-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/eliminar/aceptado  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se elimina una sombra. Para obtener más información, consulte [/delete/accepted](device-shadow-mqtt.md#delete-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/eliminar/rechazado  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se rechaza una solicitud para eliminar una sombra. Para obtener más información, consulte [/delete/rejected](device-shadow-mqtt.md#delete-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/get  |  Publicar/suscribirse  |  Una aplicación o un objeto publica un mensaje vacío en este tema para obtener una sombra. Para obtener más información, consulte [Temas MQTT de sombra de dispositivo](device-shadow-mqtt.md).  | 
|  *ShadowTopicPrefix*/get/accepted  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se realiza correctamente una solicitud de una sombra. Para obtener más información, consulte [/get/accepted](device-shadow-mqtt.md#get-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/get/rejected  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se rechaza una solicitud de una sombra. Para obtener más información, consulte [/get/rejected](device-shadow-mqtt.md#get-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/actualizar  |  Publicar/suscribirse  |  Un objeto o una aplicación publica en este tema para actualizar una sombra. Para obtener más información, consulte [/update](device-shadow-mqtt.md#update-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/aceptado  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se realiza correctamente una actualización en una sombra. Para obtener más información, consulte [/update/accepted](device-shadow-mqtt.md#update-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/rechazado  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se rechaza una actualización en una sombra. Para obtener más información, consulte [/update/rejected](device-shadow-mqtt.md#update-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/delta  |  Suscribirse  |  El servicio Device Shadow envía mensajes a este tema cuando se detecta una diferencia entre las secciones para los estados reported y desired de una sombra. Para obtener más información, consulte [/update/delta](device-shadow-mqtt.md#update-delta-pub-sub-topic).   | 
|  *ShadowTopicPrefix*/update/documents  |  Suscribirse  |  AWS IoT publica un documento estatal sobre este tema cada vez que se realiza correctamente una actualización de la sombra. Para obtener más información, consulte [/update/documents](device-shadow-mqtt.md#update-documents-pub-sub-topic).   | 

## Temas relacionados con la entrega de archivos basada en MQTT
<a name="reserved-topics-mqtt-based-file-delivery"></a>

**nota**  
Las operaciones de cliente indicadas como **Recibir** en esta tabla indican los temas que se AWS IoT publican directamente para el cliente que los solicitó, independientemente de que el cliente esté suscrito al tema o no. Los clientes deben esperar recibir estos mensajes de respuesta aunque no estén suscritos a ellos. Estos mensajes de respuesta no pasan por el agente de mensajes y otros clientes o reglas no pueden suscribirse a ellos.

Estos mensajes admiten búferes de respuesta en formato de representación concisa de objetos binarios (CBOR) y en notación *payload-format* de JavaScript objetos (JSON), según el tema.


| *payload-format* | Tipo de datos de formato de respuesta | 
| --- | --- | 
| cbor | Concise Binary Object Representation (Representación concisa de objetos binarios, CBOR) | 
| json | JavaScript Notación de objetos (JSON) | 


| Topic | Operaciones de cliente permitidas | Description (Descripción) | 
| --- | --- | --- | 
|  \$1aws/things/ /streams/ /data/ *ThingName* *StreamId* *payload-format*  |  Suscribirse, recibir  |  AWS La entrega de archivos basada en MQTT se publica en este tema si se acepta la solicitud «» de un dispositivo. GetStream La carga útil contiene los datos de la transmisión. Para obtener más información, consulte [Uso de la entrega de archivos AWS IoT basada en MQTT en dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /get/ *ThingName* *StreamId* *payload-format*  |  Publish  |  Un dispositivo publica en este tema para realizar una solicitud «». GetStream Para obtener más información, consulte [Uso de la entrega de archivos AWS IoT basada en MQTT en dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /description/ *ThingName* *StreamId* *payload-format*  |  Suscribirse, recibir  |  AWS La entrega de archivos basada en MQTT se publica en este tema si se acepta la solicitud «» de un dispositivo. DescribeStream La carga útil contiene la descripción del flujo. Para obtener más información, consulte [Uso de la entrega de archivos AWS IoT basada en MQTT en dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /describe/ *ThingName* *StreamId* *payload-format*  |  Publish  |  Un dispositivo publica en este tema para realizar una solicitud «». DescribeStream Para obtener más información, consulte [Uso de la entrega de archivos AWS IoT basada en MQTT en dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /rejected/ *ThingName* *StreamId* *payload-format*  |  Suscribirse, recibir  |  AWS La entrega de archivos basada en MQTT se publica en este tema si se rechaza una solicitud «» o «» de un dispositivo. DescribeStream GetStream Para obtener más información, consulte [Uso de la entrega de archivos AWS IoT basada en MQTT en dispositivos](mqtt-based-file-delivery-in-devices.md).   | 

## Temas reservados
<a name="reserved-topicnames-arn"></a>

Todos los temas reservados ARNs (Amazon Resource Names) tienen el siguiente formulario:

```
arn:aws:iot:aws-region:AWS-account-ID:topic/Topic
```

Por ejemplo, `arn:aws:iot:us-west-2:123EXAMPLE456:topic/$aws/things/thingName/jobs/get/accepted` es un ARN del tema reservado `$aws/things/thingName/jobs/get/accepted`.

# Configuraciones de dominio
<a name="iot-custom-endpoints-configurable"></a>

En AWS IoT Core, puede usar las configuraciones de dominio para configurar y administrar los comportamientos de sus puntos de enlace de datos. Con las configuraciones de dominio, puede generar varios puntos de enlace de AWS IoT Core datos, personalizarlos con sus propios nombres de dominio completos (FQDN) y los certificados de servidor asociados, y también asociar un autorizador personalizado. Para obtener más información, consulte [Autenticación y autorización personalizada](custom-authentication.md).

**nota**  
Esta función no está disponible en. AWS GovCloud (US) Regiones de AWS

**Topics**
+ [¿Qué es una configuración de dominio?](iot-domain-configuration-what-is.md)
+ [Creación y configuración de dominios AWS gestionados](iot-custom-endpoints-configurable-aws.md)
+ [Creación y configuración de dominios administrados por el cliente](iot-custom-endpoints-configurable-custom.md)
+ [Administración de configuraciones de dominio](iot-custom-endpoints-managing.md)
+ [Configuración de los ajustes de TLS en las configuraciones de dominio](iot-endpoints-tls-config.md)
+ [Configuración del certificado de servidor para la asociación de OCSP](iot-custom-endpoints-cert-config.md)

# ¿Qué es una configuración de dominio?
<a name="iot-domain-configuration-what-is"></a>

En AWS IoT Core, una configuración de dominio hace referencia a la instalación y configuración de un dominio (ya sea un dominio AWS gestionado o un dominio gestionado por el cliente) para los puntos finales de AWS IoT Core datos. AWS IoT Core también proporciona un punto final predeterminado para su AWS cuenta (`iot:Data-ATS`) para que los dispositivos se comuniquen con AWS IoT Core ellos.

**Topics**
+ [Casos de uso](#iot-custom-endpoints-configurable-use-cases)
+ [Conceptos clave](#iot-domain-configuration-key-concepts)
+ [Notas importantes](#iot-custom-endpoints-configurable-notes)

## Casos de uso
<a name="iot-custom-endpoints-configurable-use-cases"></a>

Puede utilizar configuraciones de dominio para simplificar tareas de la siguiente manera.
+ Migre los dispositivos a AWS IoT Core.
+ Admitir flotas de dispositivos heterogéneas manteniendo configuraciones de dominio diferentes para cada tipo de dispositivo
+ Mantenga la identidad de la marca (por ejemplo, mediante el nombre de dominio) al migrar la infraestructura de aplicaciones a AWS IoT Core.

## Conceptos clave
<a name="iot-domain-configuration-key-concepts"></a>

Los siguientes conceptos proporcionan detalles sobre las configuraciones de dominio y los conceptos relacionados.
+ **Configuración del dominio**

  La instalación y configuración de un dominio para sus puntos AWS IoT Core finales.
+ **Dominio de punto de conexión predeterminado**

  El dominio que AWS IoT proporciona el punto final predeterminado, como`iot:Data-ATS`. Para encontrar el punto final predeterminado, ejecute el comando [describe-endpoint o](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-endpoint.html) CLI [describe-domain-configuration](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html). También puede ir a la consola de AWS IoT Core y elegir **Configuraciones de dominio** en **Conectarse** en el menú de navegación de la izquierda. El punto de conexión predeterminado aparece con el nombre `iot:Data-ATS`.
+ **AWS dominio gestionado**

  El dominio que AWS se administrará. Si eliges un dominio AWS gestionado, tus dispositivos se conectarán mediante un punto de conexión de datos proporcionado por AWS. AWS gestionará el dominio y los certificados.
+ **Dominio administrado por el cliente**

  Es el dominio que administrará usted. También recibe el nombre de dominio personalizado. Si elige un dominio administrado por el cliente, sus dispositivos se conectarán mediante un punto de conexión de datos de dominio personalizado. Usted administrará el dominio y los certificados. El dominio gestionado por el cliente le permite personalizar el punto final URLs para que se adapte a sus necesidades. Por ejemplo, puede usar un nombre de dominio personalizado (`your-domain-name.com`) o aplicar políticas de acceso específicas.
+ **Tipo de autenticación**

  Es el tipo de autenticación que elige para autenticar sus dispositivos al conectarse a AWS IoT Core. Al crear una configuración de dominio, debe especificar un tipo de autenticación. Para obtener más información, consulte [Elección de un tipo de autenticación para la comunicación entre dispositivos](protocols.md#connection-protocol-auth-mode).
+ **Protocolo de aplicación**

  Son los protocolos de la capa de aplicación que utilizan sus dispositivos al conectarse a AWS IoT Core. Cuando cree una configuración de dominio, deberá especificar un protocolo de aplicación. Para obtener más información, consulte [Elección de un protocolo de aplicación para la comunicación entre dispositivos](protocols.md#protocol-selection).

## Notas importantes
<a name="iot-custom-endpoints-configurable-notes"></a>

AWS IoT Core utiliza la [extensión TLS de indicación de nombre de servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546) para aplicar las configuraciones de dominio. [Al conectar los dispositivos a AWS IoT Core, los clientes pueden enviar la [extensión de indicación del nombre del servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), que es necesaria para funciones como el [registro de varias cuentas](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), los puntos de [enlace configurables, los [dominios personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) y los puntos](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) de enlace de VPC.](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) También deben pasar un nombre de servidor que sea idéntico al nombre de dominio que especifique en la configuración del dominio. [Para probar este servicio, utilice la versión v2 del dispositivo en.AWS IoT SDKs](https://github.com/aws) GitHub

Si crea varios puntos de conexión de datos en el suyo Cuenta de AWS, estos compartirán AWS IoT Core recursos como temas de MQTT, sombras de dispositivos y reglas.

Al proporcionar los certificados de servidor para una configuración de dominio AWS IoT Core personalizada, los certificados tienen un máximo de cuatro nombres de dominio. Para obtener más información, consulte [Puntos de conexión y cuotas de AWS IoT Core](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#security-limits).

# Creación y configuración de dominios AWS gestionados
<a name="iot-custom-endpoints-configurable-aws"></a>

Puede crear un punto final configurable en un dominio AWS gestionado mediante la [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html)API. La configuración de un dominio AWS administrado consta de lo siguiente:
+ `domainConfigurationName`

  Un nombre definido por el usuario que identifique la configuración del dominio y el valor debe ser único para usted Región de AWS. No puede utilizar nombres de configuración de dominio que empiecen por `IoT:` porque están reservados para puntos de conexión predeterminados.
+ `defaultAuthorizerName` (opcional)

  El nombre del autorizador personalizado que se utilizará en el punto de conexión.
+ `allowAuthorizerOverride` (opcional)

  Un valor booleano que especifica si los dispositivos pueden anular el autorizador predeterminado especificando un autorizador diferente en el encabezado HTTP de la solicitud. Este valor es obligatorio si se especifica un valor para `defaultAuthorizerName`.
+ `serviceType` (opcional)

  El tipo de servicio que ofrece el punto final. AWS IoT Core solo admite el tipo `DATA` de servicio. Si especifica `DATA`, AWS IoT Core devuelve un punto de conexión del tipo `iot:Data-ATS`. No puede crear un punto final configurable `iot:Data` (VeriSign).
+ `TlsConfig` (opcional)

  Un objeto que especifica el servicio de autorización de un dominio. Para obtener más información, consulte [Configuración de los ajustes de TLS en las configuraciones de dominio](iot-endpoints-tls-config.md).

El siguiente AWS CLI comando de ejemplo crea una configuración de dominio para un `Data` punto final.

```
aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" --service-type "DATA"
```

El resultado del comando puede tener un aspecto similar al siguiente.

```
{
    "domainConfigurationName": "myDomainConfigurationName",
    "domainConfigurationArn": "arn:aws:iot:us-east-1:123456789012:domainconfiguration/myDomainConfigurationName/itihw"
}
```

# Creación y configuración de dominios administrados por el cliente
<a name="iot-custom-endpoints-configurable-custom"></a>

Las configuraciones de dominio permiten especificar un nombre de dominio completo (FQDN) personalizado para conectarse a AWS IoT Core. El uso de dominios gestionados por el cliente (también conocidos como dominios personalizados) tiene muchas ventajas: puede exponer su propio dominio o el dominio de su empresa a los clientes con fines de marca; puede cambiar fácilmente su propio dominio para apuntar a un nuevo corredor; puede admitir el arrendamiento múltiple para atender a clientes con diferentes dominios dentro del mismo Cuenta de AWS; y puede administrar los detalles de sus propios certificados de servidor, como la autoridad de certificación (CA) raíz utilizada para firmar el certificado, el algoritmo de firma, la profundidad de la cadena de certificados y el ciclo de vida del certificado.

El flujo de trabajo para establecer una configuración de dominio con un dominio personalizado consta de las tres etapas siguientes.

1. [Registrar certificados de servidor en AWS Certificate Manager](#iot-custom-endpoints-configurable-custom-register-certificate)

1. [Creación de una configuración de dominio](#iot-custom-endpoints-configurable-custom-domain-config)

1. [Creación de registros DNS](#iot-custom-endpoints-configurable-custom-dns)

## Registrar los certificados de servidor en el administrador de AWS certificados
<a name="iot-custom-endpoints-configurable-custom-register-certificate"></a>

Antes de crear una configuración de dominio con un dominio personalizado, debe registrar la cadena de certificados de servidor en [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html). Puede utilizar los siguientes tres tipos de certificados de servidor.
+ [Certificados públicos generados por ACM](#iot-custom-endpoints-configurable-custom-register-certificate-acm)
+ [Certificados externos firmados por una entidad emisora de certificación pública](#iot-custom-endpoints-configurable-custom-register-certificate-pubext)
+ [Certificados externos firmados por una entidad emisora de certificación privada](#iot-custom-endpoints-configurable-custom-register-certificate-privext)

**nota**  
AWS IoT Core considera que un certificado está firmado por una CA pública si está incluido en el [paquete ca de confianza de Mozilla](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt?raw=1).

### Requisitos de certificados
<a name="certificate-requirements"></a>

Consulte [Requisitos previos para la importación de certificados](/acm/latest/userguide/import-certificate-prerequisites.html) para conocer los requisitos para importar certificados a ACM. Además de estos requisitos, AWS IoT Core agrega los siguientes.
+ El certificado de hoja debe incluir la extensión x509 v3 de **uso extendido de claves** con un valor de **serverAuth** (autenticación de servidor web TLS). Si solicita el certificado a ACM, esta extensión se agrega automáticamente.
+ La profundidad máxima de la cadena de certificados es de 5 certificados.
+ El tamaño máximo de la cadena de certificados es de 16 KB.
+ Los algoritmos criptográficos y los tamaños de las claves compatibles son el RSA de 2048 bits (RSA\$12048) y el ECDSA de 256 bits (EC\$1prime256v1).

### Uso de un único certificado para varios dominios
<a name="one-certificate-for-multiple-domains"></a>

Si tiene previsto utilizar un certificado para cubrir varios subdominios, utilice un dominio comodín en el campo Nombre común (CN) o Nombres alternativos del firmante (SAN). Por ejemplo, utilice **\$1.iot.example.com** para cubrir dev.iot.example.com, qa.iot.example.com y prod.iot.example.com. Cada FQDN requiere su propia configuración de dominio, pero varias configuraciones de dominio pueden usar el mismo valor comodín. El CN o el SAN deben cubrir el FQDN que desea utilizar como dominio personalizado. Si SANs están presentes, se omite la CN y la SAN debe cubrir el FQDN que desee utilizar como dominio personalizado. Esta cobertura puede ser una coincidencia exacta o una coincidencia de caracteres comodín. Una vez validado y registrado un certificado comodín en una cuenta, se impide que otras cuentas de la región creen dominios personalizados que coincidan con el certificado.

En las siguientes secciones se describe cómo obtener cada tipo de certificado. Cada recurso de certificado requiere un Nombre de recurso de Amazon (ARN) registrado en ACM que usted utiliza cuando crea la configuración de su dominio.

### Certificados públicos generados por ACM
<a name="iot-custom-endpoints-configurable-custom-register-certificate-acm"></a>

Puede generar un certificado público para su dominio personalizado mediante la [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API. Cuando genera un certificado de esta manera, ACM valida que usted es el propietario del dominio personalizado. Para obtener más información, consulte [Solicitud de un certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) en la *Guía del usuario de AWS Certificate Manager *.

### Certificados externos firmados por una entidad emisora de certificación pública
<a name="iot-custom-endpoints-configurable-custom-register-certificate-pubext"></a>

Si ya tienes un certificado de servidor firmado por una entidad emisora de certificados pública (una entidad emisora de certificados incluida en el paquete de certificados de confianza de Mozilla), puedes importar la cadena de certificados directamente a ACM mediante la [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html)API. Para obtener más información sobre esta tarea, los requisitos previos y los requisitos de formato de certificado, consulte [Importación de certificados](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html).

### Certificados externos firmados por una entidad emisora de certificación privada
<a name="iot-custom-endpoints-configurable-custom-register-certificate-privext"></a>

Si ya tiene un certificado de servidor firmado por una entidad emisora de certificación privada o autofirmado, puede utilizar el certificado para crear la configuración de dominio, pero también debe crear un certificado público adicional en ACM para validar que usted es el propietario del dominio. Para ello, registre la cadena de certificados de su servidor en ACM mediante la API. [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html) Para obtener más información sobre esta tarea, los requisitos previos y los requisitos de formato de certificado, consulte [Importación de certificados](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html). 

### Creación de un certificado de validación
<a name="iot-custom-endpoints-configurable-create-validation-certificate"></a>

Tras importar el certificado a ACM, genere un certificado público para su dominio personalizado mediante la [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API. Cuando genera un certificado de esta manera, ACM valida que usted es el propietario del dominio personalizado. Para obtener más información, consulte [Solicitar un certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html). Cuando cree la configuración de dominio, utilice este certificado público como certificado de validación.

## Creación de una configuración de dominio
<a name="iot-custom-endpoints-configurable-custom-domain-config"></a>

Puede crear un punto final configurable en un dominio personalizado mediante la [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html)API. Una configuración de dominio para un dominio personalizado consta de lo siguiente:
+ `domainConfigurationName`

  El nombre definido por el usuario que identifica la configuración del dominio. Los nombres de configuración de dominio que comienzan por `IoT:` están reservados para los puntos de conexión predeterminados y no se pueden usar. Además, este valor debe ser exclusivo de su Región de AWS. 
+ `domainName`

  El FQDN al que utilizan sus dispositivos para conectarse AWS IoT Core. AWS IoT Core utiliza la extensión TLS de indicación de nombre de servidor (SNI) para aplicar las configuraciones de dominio. Los dispositivos deben usar esta extensión al conectarse y pasar un nombre de servidor idéntico al nombre de dominio especificado en la configuración del dominio.
+ `serverCertificateArns`

  El ARN de la cadena de certificados de servidor que registró en ACM. AWS IoT Core actualmente solo admite un certificado de servidor. 
+ `validationCertificateArn`

  El ARN del certificado público que generó en ACM para validar la propiedad de su dominio personalizado. Este argumento no es necesario si utiliza un certificado de servidor firmado públicamente o uno generado por ACM. 
+ `defaultAuthorizerName (optional)`

  El nombre del autorizador personalizado que se utilizará en el punto de conexión.
+ `allowAuthorizerOverride`

  Un valor booleano que especifica si los dispositivos pueden anular el autorizador predeterminado especificando un autorizador diferente en el encabezado HTTP de la solicitud. Este valor es obligatorio si se especifica un valor para `defaultAuthorizerName`. 
+ `serviceType`

  AWS IoT Core actualmente solo admite el tipo `DATA` de servicio. Si lo especifica`DATA`, AWS IoT devuelve un punto final con un tipo de punto final de`iot:Data-ATS`. 
+ `TlsConfig` (opcional)

  Un objeto que especifica el servicio de autorización de un dominio. Para obtener más información, consulte [Configuración de los ajustes de TLS en las configuraciones de dominio](iot-endpoints-tls-config.md).
+ `serverCertificateConfig` (opcional)

  Es un objeto que especifica la configuración del certificado de servidor para un dominio. Para obtener más información, consulte [Configuración del certificado de servidor para la asociación de OCSP](iot-custom-endpoints-cert-config.md).

El siguiente AWS CLI comando crea una configuración de dominio para **iot.example.com**.

```
aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" --service-type "DATA" 
--domain-name "iot.example.com" --server-certificate-arns serverCertARN --validation-certificate-arn validationCertArn
```

**nota**  
Tras crear la configuración de dominio, es posible que pasen hasta 60 minutos hasta que se entreguen los certificados de AWS IoT Core servidor personalizados.

Para obtener más información, consulte [Administración de configuraciones de dominio](iot-custom-endpoints-managing.md).

## Creación de registros DNS
<a name="iot-custom-endpoints-configurable-custom-dns"></a>

Después de registrar la cadena de certificados de servidor y crear la configuración de dominio, cree un registro DNS para que el dominio personalizado apunte a un dominio de AWS IoT . Este registro debe apuntar a un AWS IoT punto final de este tipo`iot:Data-ATS`. Puede obtener su punto final mediante la [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API. 

El siguiente AWS CLI comando muestra cómo obtener el punto final.

```
aws iot describe-endpoint --endpoint-type iot:Data-ATS
```

Una vez que obtengas tu `iot:Data-ATS` punto de conexión, crea un `CNAME` registro desde tu dominio personalizado hasta este AWS IoT punto de conexión. Si crea varios dominios personalizados en el mismo dominio Cuenta de AWS, asígneles un alias a este mismo `iot:Data-ATS` punto final.

## Resolución de problemas
<a name="iot-custom-endpoints-configurable-troubleshoot"></a>

Si tiene problemas para conectar los dispositivos a un dominio personalizado, asegúrese de que AWS IoT Core haya aceptado y aplicado su certificado de servidor. Puede comprobar si AWS IoT Core ha aceptado su certificado mediante la AWS IoT Core consola o el AWS CLI.

Para usar la AWS IoT Core consola, vaya a la página de **configuraciones del dominio** y seleccione el nombre de la configuración del dominio. En la sección **Detalles del certificado del servidor**, compruebe el estado y los detalles del estado. Si el certificado no es válido, reemplácelo en ACM por un certificado que cumpla los [requisitos de certificados](#certificate-requirements) enumerados en la sección anterior. Si el certificado tiene el mismo ARN, lo AWS IoT Core recogerá y lo aplicará automáticamente.

Para comprobar el estado del certificado mediante el AWS CLI, llame a la [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)API y especifique el nombre de configuración de su dominio.

**nota**  
Si su certificado no es válido, AWS IoT Core seguirá emitiendo el último certificado válido.

Puede comprobar qué certificado se está sirviendo en su punto de conexión mediante el siguiente comando openssl.

`openssl s_client -connect custom-domain-name:8883 -showcerts -servername custom-domain-name`

# Administración de configuraciones de dominio
<a name="iot-custom-endpoints-managing"></a>

En este tema se describen las operaciones clave para administrar los recursos de configuración de su dominio. También puede administrar los ciclos de vida de las configuraciones existentes mediante lo siguiente APIs: [ListDomainConfigurations](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDomainConfigurations.html), [DescribeDomainConfiguration[UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html), y. [DeleteDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteDomainConfiguration.html)

**Topics**
+ [Visualización de configuraciones de dominio](#iot-custom-endpoints-managing-view)
+ [Actualización de configuraciones de dominio](#iot-custom-endpoints-managing-update)
+ [Eliminación de configuraciones de dominio](#iot-custom-endpoints-managing-delete)
+ [Certificados de rotación en dominios personalizados](#iot-custom-endpoints-managing-certificates)

## Visualización de configuraciones de dominio
<a name="iot-custom-endpoints-managing-view"></a>

Para obtener una lista paginada de todas las configuraciones de dominio que tiene Cuenta de AWS, utilice la API. [ListDomainConfigurations](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDomainConfigurations.html) Puedes ver los detalles de una configuración de dominio concreta mediante la [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)API. Esta API toma un único parámetro `domainConfigurationName` y devuelve los detalles de la configuración especificada.

**Ejemplo**

## Actualización de configuraciones de dominio
<a name="iot-custom-endpoints-managing-update"></a>

Para actualizar el estado o el autorizador personalizado de la configuración de tu dominio, usa la [UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)API. Puede establecer el estado en `ENABLED` o `DISABLED`. Si deshabilita la configuración del dominio, los dispositivos conectados a ese dominio recibirán un error de autenticación. Actualmente no puede actualizar el certificado de servidor en la configuración de su dominio. Para cambiar el certificado de una configuración de dominio, debe eliminarlo y volver a crearlo.

**Ejemplo**

## Eliminación de configuraciones de dominio
<a name="iot-custom-endpoints-managing-delete"></a>

Antes de eliminar una configuración de dominio, usa la [UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)API para establecer el estado en. `DISABLED` Esto le ayuda a evitar que se elimine el punto de conexión por error. Tras inhabilitar la configuración del dominio, elimínala mediante la [DeleteDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteDomainConfiguration.html)API. Debes mantener los dominios AWS gestionados en `DISABLED` estado durante 7 días antes de poder eliminarlos. Puede establecer el estado `DISABLED` para los dominios personalizados y, a continuación, eliminarlos inmediatamente.

**Ejemplo**

Tras eliminar una configuración de dominio, ya AWS IoT Core no se publica el certificado de servidor asociado a ese dominio personalizado.

## Certificados de rotación en dominios personalizados
<a name="iot-custom-endpoints-managing-certificates"></a>

Es posible que deba reemplazar periódicamente el certificado de servidor por un certificado actualizado. La velocidad a la que lo haga dependerá del período de validez del certificado. Si ha generado el certificado de servidor mediante AWS Certificate Manager (ACM), puede configurar el certificado para que se renueve automáticamente. Cuando ACM renueva el certificado, recoge AWS IoT Core automáticamente el nuevo certificado. No tiene que realizar ninguna acción adicional. Si ha importado el certificado de servidor desde un origen diferente, puede rotarlo volviéndolo a importar a ACM. Para obtener información sobre la reimportación de certificados, consulte [Volver a importar un certificado](https://docs.aws.amazon.com/acm/latest/userguide/import-reimport.html).

**nota**  
AWS IoT Core solo recoge las actualizaciones de los certificados en las siguientes condiciones.  
El nuevo certificado tiene el mismo ARN que el anterior.
El nuevo certificado tiene el mismo algoritmo de firma, nombre común o nombre alternativo del asunto que el anterior.

# Configuración de los ajustes de TLS en las configuraciones de dominio
<a name="iot-endpoints-tls-config"></a>

AWS IoT Core proporciona [políticas de seguridad predefinidas](transport-security.md#tls-policy-table) para que pueda personalizar la configuración de seguridad de la capa de transporte (TLS) para TLS [1.2 y TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) [1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) en las configuraciones de dominio. Una política de seguridad es una combinación de protocolos TLS y sus cifrados que determina los protocolos y cifrados que se admiten durante las negociaciones de TLS entre un cliente y un servidor. Con las políticas de seguridad compatibles, puede administrar la configuración de TLS de sus dispositivos con mayor flexibilidad, aplicar la mayoría de las medidas de up-to-date seguridad al conectar nuevos dispositivos y mantener una configuración de TLS uniforme para los dispositivos existentes.

La siguiente tabla describe las políticas de seguridad, sus versiones TLS y las regiones admitidas:


****  

| Nombre de política de seguridad | Compatible Regiones de AWS | 
| --- | --- | 
| TSecurityPolítica de Io\$1 \$11\$13\$12022\$110 TLS13 | Todos Regiones de AWS | 
| TSecurityPolítica de Io\$1 \$11\$12\$12022\$110 TLS13 | Todos Regiones de AWS | 
| TSecurityPolítica de Io\$1 \$11\$12\$12022\$110 TLS12 | Todos Regiones de AWS | 
| TSecurityPolítica de Io\$1 \$11\$10\$12016\$101 TLS12 | ap-east-1, ap-northeast-2, ap-south-1, ap-southeast-2, ca-central-1, cn-north-1, cn-northwest-1, eu-north-1, eu-west-2, eu-west-3, me-south-1, sa-east-1, us-east-2, us-west-1 | 
| TSecurityPolítica de Io\$1 TLS12 \$11\$10\$12015\$101 | ap-northeast-1, ap-southeast-1, eu-central-1, eu-west-1, us-east-1, us-west-2 | 

Los nombres de las políticas de seguridad AWS IoT Core incluyen información sobre la versión según el año y el mes en que se publicaron. Si crea una nueva configuración de dominio, la política de seguridad se establecerá de forma predeterminada en `IoTSecurityPolicy_TLS13_1_2_2022_10`. Para obtener una tabla completa de políticas de seguridad con detalles sobre los protocolos, los puertos TCP y los cifrados, consulte [Políticas de seguridad](transport-security.md#tls-policy-table). AWS IoT Core no admite políticas de seguridad personalizadas. Para obtener más información, consulte [Seguridad del transporte en AWS IoT Core](transport-security.md).

Para configurar los ajustes de TLS en las configuraciones de dominio, puede usar la AWS IoT consola o el AWS CLI. 

**Topics**
+ [Configuración de los ajustes de TLS en las configuraciones de dominio (consola)](#custom-tls-console)
+ [Configuración de los ajustes de TLS en las configuraciones de dominio (CLI)](#custom-tls-cli)

## Configuración de los ajustes de TLS en las configuraciones de dominio (consola)
<a name="custom-tls-console"></a>

**Para configurar los ajustes de TLS mediante la consola AWS IoT**

1. Inicie sesión en la [AWS IoT consola Consola de administración de AWS](https://console.aws.amazon.com/iot/home) y ábrala.

1. Para configurar los ajustes de TLS al crear una nueva configuración de dominio, siga estos pasos.

   1. En el panel de navegación izquierdo, selecciona **Configuraciones de dominio** y, a continuación, selecciona **Crear configuración de dominio**.

   1. En la página **Crear configuración de dominio**, en la sección **Configuración de dominio personalizada: *(opcional)***, elige una política de seguridad en **Seleccionar política de seguridad**.

   1. Siga el widget y complete el resto de los pasos. Seleccione **Crear configuración de dominio**.

1. Para actualizar la configuración de TLS en una configuración de dominio existente, siga estos pasos.

   1. En el panel de navegación izquierdo, elija **Configuraciones de dominio** y, a continuación, elija una configuración de dominio.

   1. En la página **Detalles de configuración del dominio**, elija **Editar**. A continuación, en la sección **Configuración de dominio personalizada: *(opcional)***, en **Seleccionar política de seguridad**, elija una política de seguridad.

   1. Seleccione **Actualizar la configuración del dominio**.

Para obtener más información, consulte [Crear una configuración de dominio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html#iot-custom-endpoints-configurable-custom-domain-config) y [Administrar configuraciones de dominio](iot-custom-endpoints-managing.md).

## Configuración de los ajustes de TLS en las configuraciones de dominio (CLI)
<a name="custom-tls-cli"></a>

Puede utilizar los comandos de la CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html) y [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html) para configurar los ajustes de TLS en las configuraciones de dominio.

1. Para especificar la configuración de TLS mediante el comando de la CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/create-domain-configuration.html):

   ```
   aws iot create-domain-configuration \
       --domain-configuration-name domainConfigurationName \
       --tls-config securityPolicy=IoTSecurityPolicy_TLS13_1_2_2022_10
   ```

   El resultado de este comando puede tener un aspecto similar al siguiente. 

   ```
   {
   "domainConfigurationName": "test",
   "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/test/34ga9"
   }
   ```

   Si crea una nueva configuración de dominio sin especificar la política de seguridad, el valor predeterminado será: `IoTSecurityPolicy_TLS13_1_2_2022_10`.

1. Para describir la configuración de TLS mediante el comando de la CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html):

   ```
   aws iot describe-domain-configuration \
       --domain-configuration-name domainConfigurationName
   ```

   Este comando puede devolver los detalles de configuración del dominio que incluyen los ajustes de TLS, como los siguientes:

   ```
   {
    "tlsConfig": {
    "securityPolicy": "IoTSecurityPolicy_TLS13_1_2_2022_10"
    }, 
    "domainConfigurationStatus": "ENABLED", 
    "serviceType": "DATA", 
    "domainType": "AWS_MANAGED", 
    "domainName": "d1234567890abcdefghij-ats.iot.us-west-2.amazonaws.com",
    "serverCertificates": [], 
    "lastStatusChangeDate": 1678750928.997, 
    "domainConfigurationName": "test", 
    "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/test/34ga9"
   }
   ```

1. Para actualizar la configuración de TLS mediante el comando de la CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html):

   ```
   aws iot update-domain-configuration \
       --domain-configuration-name domainConfigurationName \
       --tls-config securityPolicy=IoTSecurityPolicy_TLS13_1_2_2022_10
   ```

   El resultado de este comando puede tener un aspecto similar al siguiente.

   ```
   {
   "domainConfigurationName": "test",
   "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/test/34ga9"
   }
   ```

1. Para actualizar la configuración de TLS de su punto de conexión ATS, ejecute el comando de la CLI [https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html](https://docs.aws.amazon.com//cli/latest/reference/iot/update-domain-configuration.html). El nombre de la configuración de dominio de su punto de conexión ATS es `iot:Data-ATS`.

   ```
   aws iot update-domain-configuration \
       --domain-configuration-name "iot:Data-ATS" \
       --tls-config securityPolicy=IoTSecurityPolicy_TLS13_1_2_2022_10
   ```

   El resultado del comando puede tener un aspecto similar al siguiente:

   ```
   {
   "domainConfigurationName": "iot:Data-ATS",
   "domainConfigurationArn": "arn:aws:iot:us-west-2:123456789012:domainconfiguration/iot:Data-ATS"
   }
   ```

Para obtener más información consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html) y [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html) en la *Referencia de la API de AWS *.

# Configuración del certificado de servidor para la asociación de OCSP
<a name="iot-custom-endpoints-cert-config"></a>

AWS IoT Core admite el grapado [OCSP (Online Certificate Status Protocol)](https://www.rfc-editor.org/rfc/rfc6960.html) para certificados de servidor, también conocido como grapado OCSP de certificados de servidor o grapado OCSP. Es un mecanismo de seguridad que se utiliza para comprobar el estado de revocación del certificado de servidor mediante un protocolo de enlace de seguridad de la capa de transporte (TLS). El grapado OCSP AWS IoT Core le permite añadir un nivel adicional de verificación a la validez del certificado de servidor de su dominio personalizado.

Puede habilitar el grapado OCSP del certificado de servidor AWS IoT Core para comprobar la validez del certificado consultando periódicamente al respondedor OCSP. La configuración de la asociación de OCSP forma parte del proceso de creación o actualización de una configuración de dominio con un dominio personalizado. La asociación de OCSP comprueba continuamente el estado de revocación en el certificado del servidor. Esto ayuda a comprobar que los clientes que se conectan a sus dominios personalizados ya no confíen en los certificados que hayan sido revocados por la CA. Para obtener más información, consulte [Habilitar el certificado OCSP del servidor en AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-manage).

La asociación de OCSP de los certificados de servidor permite comprobar el estado de la revocación en tiempo real, reduce la latencia asociada a la comprobación del estado de la revocación y mejora la privacidad y la fiabilidad de las conexiones seguras. Para obtener más información sobre las ventajas de utilizar la asociación de OCSP, consulte [Ventajas de utilizar la asociación de OCSP en comparación con las comprobaciones de OCSP del cliente](#iot-custom-endpoints-ocsp-stapling-benefits).

**nota**  
Esta función no está disponible en. AWS GovCloud (US) Regions

**Topics**
+ [¿Qué es el OCSP?](#iot-custom-endpoints-cert-config-ocsp-what-is)
+ [Funcionamiento de la asociación de OCSP](#iot-custom-endpoints-cert-config-ocsp-stapling-what-is)
+ [Habilitar el certificado OCSP del servidor en AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-manage)
+ [Configurar el certificado de servidor OCSP para puntos finales privados en AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-private-endpoint)
+ [Notas importantes sobre el uso del certificado de servidor (OCSP): grapado AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-notes)
+ [Solución de problemas al grapar el certificado de servidor OCSP AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-troubleshooting)

## ¿Qué es el OCSP?
<a name="iot-custom-endpoints-cert-config-ocsp-what-is"></a>

El Protocolo de estado de certificado en línea (OCSP, por sus siglas en inglés) ayuda a proporcionar el estado de revocación de un certificado de servidor para un protocolo de enlace de seguridad de la capa de transporte (TLS).

### Conceptos clave
<a name="iot-custom-endpoints-cert-config-ocsp-concepts"></a>

Los siguientes conceptos clave proporcionan detalles sobre el Protocolo de estado de certificado en línea (OCSP).

**OCSP**

El [OCSP](https://www.rfc-editor.org/rfc/rfc6960.html) se utiliza para comprobar el estado de revocación del certificado durante el protocolo de enlace de seguridad de la capa de transporte (TLS). El OCSP permite validar los certificados en tiempo real. De este modo, se confirma que el certificado no se ha revocado ni ha caducado desde que se emitió. El OCSP también es más escalable en comparación con las listas de revocación de certificados tradicionales ()CRLs. Las respuestas de OCSP son más pequeñas y se pueden generar de manera eficiente, lo que las hace más adecuadas para infraestructuras de clave privada a gran escala (). PKIs

**Respondedor de OCSP**

Un respondedor de OCSP (también conocido como servidor de OCSP) recibe y responde a las solicitudes de OCSP de los clientes que quieren verificar el estado de revocación de los certificados.

**OCSP del cliente**

 En el OCSP del cliente, este utiliza el OCSP para ponerse en contacto con un respondedor de OCSP y comprobar el estado de revocación del certificado durante el establecimiento de comunicación de TLS.

**OCSP del servidor**

En el OCSP del servidor (también conocido como asociación de OCSP), el servidor está activado (y no el cliente) para realizar la solicitud al respondedor de OCSP. El servidor asocia la respuesta de OCSP al certificado y la devuelve al cliente durante el protocolo de enlace TLS.

### Diagramas del OSCP
<a name="iot-custom-endpoints-cert-config-ocsp-diagram"></a>

En el siguiente diagrama se muestra cómo funcionan el OCSP del cliente y el OCSP del servidor.

![\[Diagramas de OCSP del cliente o del servidor\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/custom-domain-ocsp-uml.png)


**OCSP del cliente**

1. El cliente envía un mensaje `ClientHello` para iniciar el protocolo de enlace TLS con el servidor.

1. El servidor recibe el mensaje y responde con un mensaje `ServerHello`. El servidor también envía el certificado del servidor al cliente.

1. El cliente valida el certificado del servidor y extrae un URI de OCSP.

1. El cliente envía una solicitud de verificación de revocación del certificado al respondedor de OCSP.

1. El respondedor de OCSP envía una respuesta de OCSP.

1. El cliente valida el estado del certificado a partir de la respuesta de OCSP.

1. El protocolo de enlace TLS se completa.

**OCSP del servidor**

1. El cliente envía un mensaje `ClientHello` para iniciar el protocolo de enlace TLS con el servidor.

1. El servidor recibe el mensaje y obtiene la última respuesta de OCSP almacenada en caché. Si falta la respuesta en caché o ha caducado, el servidor llamará al respondedor de OCSP para obtener el estado del certificado.

1. El respondedor de OCSP envía una respuesta de OCSP al servidor.

1. El servidor envía un mensaje `ServerHello`. El servidor también envía el certificado de servidor y el estado del certificado al cliente.

1. El cliente valida el estado del certificado de OCSP.

1. El protocolo de enlace TLS se completa.

## Funcionamiento de la asociación de OCSP
<a name="iot-custom-endpoints-cert-config-ocsp-stapling-what-is"></a>

La asociación de OCSP se utiliza durante el establecimiento de comunicación de TLS entre el cliente y el servidor para comprobar el estado de revocación del certificado del servidor. El servidor realiza la solicitud de OCSP al respondedor de OCSP y asocia las respuestas del OCSP a los certificados devueltos al cliente. Al hacer que el servidor haga la solicitud al respondedor de OCSP, las respuestas se pueden almacenar en caché y, a continuación, se pueden utilizar varias veces para muchos clientes.

### Cómo funciona el grapado OCSP en AWS IoT Core
<a name="iot-custom-endpoints-ocsp-stapling-iot-core"></a>

El siguiente diagrama muestra cómo funciona la asociación de OCSP del servidor en AWS IoT Core.

![\[Este diagrama muestra cómo funciona el grapado OCSP del lado del servidor. AWS IoT Core\]](http://docs.aws.amazon.com/es_es/iot/latest/developerguide/images/custom-domain-ocsp-core-uml.png)


1. El dispositivo debe estar registrado en dominios personalizados con la asociación de OCSP activada.

1. AWS IoT Core llama al respondedor OCSP cada hora para obtener el estado del certificado.

1. El respondedor de OCSP recibe la solicitud, envía la última respuesta de OCSP y almacena la respuesta de OCSP en caché. 

1. El dispositivo envía un `ClientHello` mensaje para iniciar el protocolo de enlace TLS. AWS IoT Core

1. AWS IoT Core obtiene la última respuesta de OCSP de la memoria caché del servidor, que responde con una respuesta de OCSP del certificado.

1. El servidor envía un mensaje `ServerHello` al dispositivo. El servidor también envía el certificado de servidor y el estado del certificado al cliente.

1. El dispositivo valida el estado del certificado de OCSP.

1. El protocolo de enlace TLS se completa.

### Ventajas de utilizar la asociación de OCSP en comparación con las comprobaciones de OCSP del cliente
<a name="iot-custom-endpoints-ocsp-stapling-benefits"></a>

A continuación se resumen algunas de las ventajas de utilizar la asociación de OCSP de certificados de servidor:

**Mejora de la privacidad**

Sin la asociación de OCSP, el dispositivo del cliente puede exponer la información a los respondedores de OCSP externos, lo que podría comprometer la privacidad del usuario. La asociación de OCSP mitiga este problema al hacer que el servidor obtenga la respuesta de OCSP y la entregue directamente al cliente.

**Mejora de la fiabilidad**

La asociación de OCSP puede mejorar la fiabilidad de las conexiones seguras porque reduce el riesgo de interrupciones del servidor OCSP. Cuando se asocian las respuestas de OCSP, el servidor incluye la respuesta más reciente en el certificado. Esto permite a los clientes acceder al estado de revocación incluso si el respondedor de OCSP no está disponible temporalmente. La asociación de OCSP ayuda a mitigar estos problemas, ya que el servidor recupera las respuestas de OCSP de forma periódica e incluye las respuestas en caché en el establecimiento de comunicación de TLS. Esto reduce la confianza en la disponibilidad en tiempo real de los respondedores de OCSP.

**Reducción de la carga del servidor**

La asociación de OCSP reduce la carga de responder a las solicitudes de OCSP de los respondedores de OCSP al servidor. Esto puede ayudarle a distribuir la carga de manera más uniforme, lo que hace que el proceso de validación de certificados sea más eficiente y escalable.

**Reducción de la latencia**

La asociación de OCSP reduce la latencia asociada a la comprobación del estado de revocación de un certificado durante el protocolo de enlace TLS. En lugar de que el cliente tenga que consultar un servidor OCSP distinto, el servidor envía la solicitud y asocia la respuesta de OCSP al certificado del servidor durante el protocolo de enlace.

## Habilitar el certificado OCSP del servidor en AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-manage"></a>

Para habilitar el engrapado OCSP del certificado de servidor AWS IoT Core, cree una configuración de dominio para un dominio personalizado o actualice una configuración de dominio personalizada existente. Para obtener más información general sobre cómo crear una configuración de dominio con un dominio personalizado, consulte [Creación y configuración de dominios administrados por el cliente](iot-custom-endpoints-configurable-custom.md).

Siga las instrucciones siguientes para habilitar el grapado del servidor OCSP mediante o. Consola de administración de AWS AWS CLI

### Consola
<a name="iot-custom-endpoints-cert-config-ocsp-manage-console"></a>

**Para habilitar el grapado OCSP de certificados de servidor mediante la consola: AWS IoT**

1. En el menú de navegación, seleccione **Configuración** y, a continuación, elija **Crear configuración de dominio** o seleccione una configuración de dominio existente para un dominio personalizado.

1. Si en el paso anterior opta por crear una nueva configuración de dominio, aparecerá la página **Crear configuración de dominio**. En la sección **Propiedades de configuración de dominio**, seleccione **Dominio personalizado**. Introduzca la información para crear una configuración de dominio.

   Si decide actualizar una configuración de dominio existente para un dominio personalizado, verá la página **Detalles de configuración del dominio**. Elija **Edit (Edición de)**.

1. Para activar la asociación de servidores OCSP, seleccione **Habilitar el grapado OCSP del certificado del servidor** en la subsección **Configuraciones de certificados de servidor**.

1. Seleccione **Crear configuración de dominio** o **Actualizar la configuración del dominio**.

### AWS CLI
<a name="iot-custom-endpoints-cert-config-ocsp-manage-cli"></a>

**Para activar la asociación de OCSP de certificado de servidor mediante la AWS CLI:**

1. Si crea una nueva configuración de dominio para un dominio personalizado, el comando para activar la asociación del servidor OCSP puede tener el siguiente aspecto:

   ```
   aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true|false"
   ```

1. Si actualiza una configuración de dominio existente para un dominio personalizado, el comando para activar la asociación del servidor OCSP puede tener el siguiente aspecto:

   ```
   aws iot update-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true|false"
   ```

Para obtener más información, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)y en la referencia [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)de la AWS IoT API.

## Configurar el certificado de servidor OCSP para puntos finales privados en AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint"></a>

OCSP para puntos de enlace privados le permite utilizar sus recursos OCSP privados dentro de su Amazon Virtual Private Cloud (Amazon VPC) para las operaciones. AWS IoT Core El proceso implica configurar una función de Lambda que actúa como un respondedor de OCSP. La función Lambda puede usar sus recursos privados de OCSP para crear las respuestas de OCSP que utilizará. AWS IoT Core 

### Función de Lambda
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-lambda"></a>

Antes de configurar el OCSP del servidor para un punto de conexión privado, cree una función de Lambda que actúe como un respondedor del Protocolo de Verificación de Certificados en Línea (OCSP), compatible con el proceso de RFC (solicitud de comentarios) 6960 y que admita respuestas de OCSP básicas. La función de Lambda acepta una codificación en base64 de la solicitud de OCSP en el formato de reglas de codificación distinguidas (DER). La respuesta de la función de Lambda también es una respuesta de OCSP codificada en base64 en formato DER. El tamaño de la respuesta no debe superar los 4 kilobytes (KiB). La función Lambda debe estar en la misma configuración del dominio Cuenta de AWS y Región de AWS igual que ella. En el siguiente ejemplo se utilizan funciones de Lambda.

#### Ejemplo de función de Lambda
<a name="ocsp-lambda-example"></a>

------
#### [ JavaScript ]

```
import * as pkijs from 'pkijs';
console.log('Loading function');
 
export const handler = async (event, context) => {
    const requestBytes = decodeBase64(event);
    const ocspRequest = pkijs.OCSPRequest.fromBER(requestBytes);
 
    console.log("Here is a better look at the OCSP request");
    console.log(ocspRequest.toJSON());
 
    const ocspResponse = getOcspResponse();
    
    console.log("Here is a better look at the OCSP response");
    console.log(ocspResponse.toJSON());
 
   const responseBytes = ocspResponse.toSchema().toBER();
   return encodeBase64(responseBytes);
};
 
function getOcspResponse() {
    const responseString = "MIIC/woBAKCCAvgwggL0BgkrBgEFBQcwAQEEggLlMIIC4TCByqFkMGIxJzAlBgNVBAoMHlJpY2hhcmQncyBEaXNjb3VudCBMYW1iZGEgT0NTUDEZMBcGA1UEAwwQcm91bmRhYm91dE5hdGlvbjEPMA0GA1UEBwwGQ2FybWVsMQswCQYDVQQGEwJJThgPMjAyNDA0MjMxODUzMjVaMFEwTzA6MAkGBSsOAwIaBQAEFD2L7Ol/6ieNMaJbwRbxFWFweXGPBBSzSThwzTc3/p5w7WOtPjp3otNtVgIBAYAAGA8yMDI0MDQyMzE4NTMyNVowDQYJKoZIhvcNAQELBQADggIBAJFRyjDAHfazNejo704Ra3FOsGq/+s82R1spDarr3k7Pzkod9jJhwsZ2YgushlS4Npfe4lHCdwFyZR75WXrW55aXFddy03KLz01ZLNYyxkleW3f5dgrUcRU3PMW9TU2gZ0VOV8L5pmxKBoBRFt6EKtyh4CbiuqkTpLdLIMZmTyanhl5GVyU5MBHdbH8YWZoT/DEBiyS7ZsyhKo6igWU/SY7YMSKgwBvFsqSDcOa/hRYQkxWKWJ19gcz8CIkWN7NvfIxCs6VrAdzEJwmE7y3v+jdfhxW9JmI4xStE4K0tAR9vVOOfKs7NvxXj7oc9pCSG60xl96kaEE6PaY1YsfNTsKQ7pyCJ0s7/2q+ieZ4AtNyzw1XBadPzPJNv6E0LvI24yQZqN5wACvtut5prMMRxAHbOy+abLZR58wloFSELtGJ7UD96LFv1GgtC5s+2QlzPc4bEEof7Lo1EISt3j2ibNch8LxhqTQ4ufrbhsMkpSOTFYEJVMJF6aKj/OGXBUUqgc0Jx6jjJXNQd+l5KCY9pQFeb/wVUYC6mYqZOkNNMMJxPbHHbFnqb68yO+g5BE9011N44YXoPVJYoXxBLFX+OpRu9cqPkT9/vlkKd+SYXQknwZ81agKzhf1HsBKabtJwNVMlBKaI8g5UGa7Bxi6ewH3ezdWiERRUK7F56OM53wto/";
    const responseBytes = decodeBase64(responseString);
    return pkijs.OCSPResponse.fromBER(responseBytes);
}
 
function decodeBase64(input) {
    const binaryString = atob(input);
 
    const byteArray = new Uint8Array(binaryString.length);
    for (var i = 0; i < binaryString.length; i++) {
        byteArray[i] = binaryString.charCodeAt(i);
    }
 
    return byteArray.buffer;
}
 
function encodeBase64(buffer) {
    var binary = '';
    const bytes = new Uint8Array( buffer );
    const len = bytes.byteLength;
 
    for (var i = 0; i < len; i++) {
        binary += String.fromCharCode( bytes[ i ] );
    }
 
    return btoa(binary);
}
```

------
#### [ Java ]

```
package com.example.ocsp.responder;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.LambdaLogger;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import org.bouncycastle.cert.ocsp.OCSPReq;
import org.bouncycastle.cert.ocsp.OCSPResp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Base64;
 
public class LambdaResponderApplication implements RequestHandler<String, String> {
    @Override
    public String handleRequest(final String input, final Context context) {
        LambdaLogger logger = context.getLogger();
        
        byte[] decodedInput = Base64.getDecoder().decode(input);
 
        OCSPReq req;
        try {
            req = new OCSPReq(decodedInput);
        } catch (IOException e) {
            logger.log("Got an IOException creating the OCSP request: " + e.getMessage());
            throw new RuntimeException(e);
        }
 
        try {
            OCSPResp response = businessLogic.getMyResponse();
            String toReturn = Base64.getEncoder().encodeToString(response.getEncoded());
            return toReturn;
        } catch (Exception e) {
            logger.log("Got an exception creating the response: " + e.getMessage());
            return "";
        }
    }
}
```

------

#### Autorizar la invocación AWS IoT de la función Lambda
<a name="grant-permission-ocsp-lambda"></a>

En el proceso de creación de la configuración del dominio con un respondedor OCSP de Lambda, debe conceder AWS IoT permiso para invocar la función Lambda una vez creada la función. Para conceder el permiso, puede utilizar el comando de la CLI [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html).

**Conceda permiso a su función Lambda mediante el AWS CLI**

1. Después de insertar sus valores, introduzca el siguiente comando. Tenga en cuenta que el valor `statement-id` debe ser único. Reemplace `Id-1234` por el valor exacto que tiene; de lo contrario, podría producirse un error `ResourceConflictException`.

   ```
   aws lambda add-permission  \
   --function-name "ocsp-function" \
   --principal "iot.amazonaws.com" \
   --action "lambda:InvokeFunction" \
   --statement-id "Id-1234" \
   --source-arn arn:aws:iot:us-east-1:123456789012:domainconfiguration/<domain-config-name>/*
   --source-account 123456789012
   ```

   La configuración del dominio de IoT ARNs seguirá el siguiente patrón. El sufijo generado por el servicio no se conocerá antes del momento de la creación, por lo que debe reemplazar el sufijo por un `*`. Puede actualizar el permiso una vez que se haya creado la configuración del dominio y se conozca el ARN exacto.

   `arn:aws:iot:use-east-1:123456789012:domainconfiguration/domain-config-name/service-generated-suffix`

1. Si el comando tiene éxito, devuelve una declaración de permiso, como la de este ejemplo. Puede continuar con la siguiente sección para configurar la asociación de OCSP para puntos de conexión privados.

   ```
   {
       "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:ocsp-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:iot:us-east-1:123456789012:domainconfiguration/domain-config-name/*\"}}}"
   }
   ```

   Si el comando no tiene éxito, devuelve un error, como en este ejemplo. Tendrá que revisar y corregir el error antes de continuar.

   ```
   An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer
   mission on resource: arn:aws:lambda:us-east-1:123456789012:function:ocsp-function
   ```

### Configuración de la asociación de OCSP del servidor para puntos de conexión privados
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoints"></a>

#### Consola
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-console"></a>

**Para configurar el grapado OCSP de certificados de servidor mediante la AWS IoT consola:**

1. En el menú de navegación, seleccione **Configuración** y, a continuación, elija **Crear configuración de dominio** o seleccione una configuración de dominio existente para un dominio personalizado.

1. Si en el paso anterior opta por crear una nueva configuración de dominio, aparecerá la página **Crear configuración de dominio**. En la sección **Propiedades de configuración de dominio**, seleccione **Dominio personalizado**. Introduzca la información para crear una configuración de dominio.

   Si decide actualizar una configuración de dominio existente para un dominio personalizado, verá la página **Detalles de configuración del dominio**. Elija **Edit (Edición de)**.

1. Para activar la asociación de servidores OCSP, seleccione **Habilitar el grapado OCSP del certificado del servidor** en la subsección **Configuraciones de certificados de servidor**.

1. Seleccione **Crear configuración de dominio** o **Actualizar la configuración del dominio**.

#### AWS CLI
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-cli"></a>

**Cómo configurar la asociación de OCSP del certificado de servidor mediante la AWS CLI:**

1. Si crea una nueva configuración de dominio para un dominio personalizado, el comando para configurar el OCSP del certificado de servidor para puntos de conexión privados puede tener el siguiente aspecto:

   ```
   aws iot create-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true, ocspAuthorizedResponderArn=arn:aws:acm:us-east-1:123456789012:certificate/certificate_ID, ocspLambdaArn=arn:aws:lambda:us-east-1:123456789012:function:my-function"
   ```

1. Si actualiza una configuración de dominio existente para un dominio personalizado, el comando para configurar el OCSP del certificado de servidor para puntos de conexión privados puede tener el siguiente aspecto:

   ```
   aws iot update-domain-configuration --domain-configuration-name "myDomainConfigurationName" \
           --server-certificate-arns arn:aws:iot:us-east-1:123456789012:cert/f8c1e5480266caef0fdb1bf97dc1c82d7ba2d3e2642c5f25f5ba364fc6b79ba3 \
           --server-certificate-config "enableOCSPCheck=true, ocspAuthorizedResponderArn=arn:aws:acm:us-east-1:123456789012:certificate/certificate_ID, ocspLambdaArn=arn:aws:lambda:us-east-1:123456789012:function:my-function"
   ```

**enableOCSPCheck**  
Se trata de un valor booleano que indica si la comprobación de asociación de OCSP del servidor está habilitada o no. Para habilitar la asociación de OCSP del certificado de servidor, este valor debe ser true (verdadero).

**ocspAuthorizedResponderArn**  
Se trata de un valor de cadena del nombre de recurso de Amazon (ARN) de un certificado X.509 almacenado en AWS Certificate Manager (ACM). Si se proporciona, AWS IoT Core utilizará este certificado para validar la firma de la respuesta OCSP recibida. Si no se proporciona, AWS IoT Core utilizará el certificado emisor para validar las respuestas. El certificado debe estar en la misma configuración Cuenta de AWS y Región de AWS en el dominio. Para obtener más información sobre cómo registrar el certificado de respondedor autorizado, consulte [Importar certificados a AWS Certificate Manager](https://docs.aws.amazon.com//acm/latest/userguide/import-certificate.html).

**ocspLambdaArn**  
Se trata de un valor de cadena del nombre de recurso de Amazon (ARN) de una función de Lambda que actúa como un respondedor del Protocolo de Verificación de Certificados en Línea (OCSP), compatible con el proceso de RFC (solicitud de comentarios) 6960 y que admita respuestas de OCSP básicas. La función de Lambda acepta una codificación en base64 de la solicitud de OCSP que se codifica con el formato DER. La respuesta de la función de Lambda también es una respuesta de OCSP codificada en base64 en formato DER. El tamaño de la respuesta no debe superar los 4 kilobytes (KiB). La función Lambda debe estar en la misma configuración del dominio Cuenta de AWS y Región de AWS igual que ella.

Para obtener más información, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)y [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)desde la referencia de la AWS IoT API.

## Notas importantes sobre el uso del certificado de servidor (OCSP): grapado AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-notes"></a>

Cuando utilice el certificado de servidor OCSP AWS IoT Core, tenga en cuenta lo siguiente:

1. AWS IoT Core solo admite los respondedores OCSP a los que se puede acceder a través de direcciones públicas. IPv4 

1. La función de grapado OCSP AWS IoT Core no admite respondedores autorizados. Todas las respuestas del OCSP deben estar firmadas por la CA que firmó el certificado y la CA debe formar parte de la cadena de certificados del dominio personalizado.

1. La función de grapado OCSP AWS IoT Core no admite dominios personalizados que se crean con certificados autofirmados.

1. AWS IoT Core llama a un respondedor OCSP cada hora y guarda la respuesta en caché. Si la llamada al respondedor falla, AWS IoT Core grabará la respuesta válida más reciente.

1. Si ya no `nextUpdateTime` es válido, AWS IoT Core eliminará la respuesta de la memoria caché y el protocolo de enlace TLS no incluirá los datos de respuesta del OCSP hasta la próxima llamada correcta al respondedor del OCSP. Esto puede ocurrir cuando la respuesta en caché caduca antes de que el servidor reciba una respuesta válida del respondedor de OCSP. El valor de `nextUpdateTime` sugiere que la respuesta de OCSP será válida hasta ese momento. Para obtener más información acerca de `nextUpdateTime`, consulte [Entradas de registro de OCSP de certificados de servidor](cwl-format.md#server-ocsp-logs).

1. A veces, AWS IoT Core no recibe la respuesta del OCSP o elimina la respuesta OCSP existente porque ha caducado. Si se producen situaciones como estas, AWS IoT Core seguirá utilizando el certificado de servidor proporcionado por el dominio personalizado sin la respuesta del OCSP.

1. El tamaño de la respuesta de OCSP no puede superar los 4 KiB.

## Solución de problemas al grapar el certificado de servidor OCSP AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-troubleshooting"></a>

AWS IoT Core Emite la `RetrieveOCSPStapleData.Success` métrica y las entradas de `RetrieveOCSPStapleData` registro a. CloudWatch La métrica y las entradas de registro pueden ayudar a detectar problemas relacionados con la recuperación de las respuestas del OCSP. Para obtener más información, consulte [Métricas de la asociación de OCSP de certificados de servidor](metrics_dimensions.md#server-ocsp-metrics) y [Entradas de registro de OCSP de certificados de servidor](cwl-format.md#server-ocsp-logs).