

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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

Os dispositivos se conectam AWS IoT e outros serviços por meio de AWS IoT Core. Por meio AWS IoT Core disso, os dispositivos enviam e recebem mensagens usando endpoints de dispositivos específicos da sua conta. Os [AWS IoT Dispositivo SDKs](#iot-connect-device-sdks) permitem comunicações de dispositivos usando os protocolos MQTT e WSS. Para obter mais informações sobre protocolos que os dispositivos podem usar, consulte [Protocolos de comunicação do dispositivo](protocols.md).

**O agente de mensagens**  
AWS IoT gerencia a comunicação do dispositivo por meio de um agente de mensagens. Dispositivos e clientes publicam mensagens no agente de mensagens e também assinam mensagens que o agente de mensagens publica. As mensagens são identificadas por um tópico definido pelo [*aplicativo*](topics.md). Quando o agente de mensagens recebe uma mensagem publicada por um dispositivo ou cliente, ele republica essa mensagem para os dispositivos e clientes que assinaram o tópico da mensagem. O agente de mensagens também encaminha mensagens para o mecanismo de AWS IoT [regras](iot-rules.md), que pode agir sobre o conteúdo da mensagem.

**AWS IoT segurança de mensagens**  
Conexões de dispositivos a serem AWS IoT usadas [Certificados do cliente X.509](x509-client-certs.md) e [AWS assinatura V4](https://docs.aws.amazon.com//general/latest/gr/signing_aws_api_requests.html) para autenticação. As comunicações do dispositivo são protegidas pelo TLS versão 1.3 e AWS IoT exigem que os dispositivos enviem a [extensão de Indicação de Nome do Servidor (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) quando se conectam. Para obter mais informações, consulte [Segurança de transporte em AWS IoT](transport-security.html).

## AWS IoT dados do dispositivo e endpoints de serviço
<a name="iot-connect-device-endpoints"></a>

**Importante**  
Você pode armazenar em cache ou armazenar os endpoints em seu dispositivo. Assim, você não precisará consultar a API `DescribeEndpoint` toda vez que um novo dispositivo for conectado. Os endpoints não mudarão depois de AWS IoT Core criá-los para sua conta.

Cada conta tem vários endpoints de dispositivo que são exclusivos da conta e são compatíveis com funções específicas de IoT. Os endpoints de dados do AWS IoT dispositivo oferecem suporte a um publish/subscribe protocolo projetado para as necessidades de comunicação dos dispositivos de IoT; no entanto, outros clientes, como aplicativos e serviços, também podem usar essa interface se o aplicativo exigir os recursos especializados que esses endpoints fornecem. Os endpoints de serviço do AWS IoT dispositivo oferecem suporte ao acesso centrado no dispositivo aos serviços de segurança e gerenciamento.

Para conhecer o endpoint de dados do dispositivo da sua conta, você pode encontrá-lo na página [https://console.aws.amazon.com//iot/home#/settings](https://console.aws.amazon.com//iot/home#/settings) do seu AWS IoT Core console.

Para conhecer o endpoint do dispositivo da sua conta para uma finalidade específica, incluindo o endpoint de dados do dispositivo, use o comando **describe-endpoint** da CLI mostrado aqui ou a API REST `DescribeEndpoint` e insira o valor do parâmetro `endpointType` na tabela a seguir.

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

Esse comando retorna um *iot-endpoint* no seguinte formato:`account-specific-prefix.iot.aws-region.amazonaws.com`.

Cada cliente tem um endpoint `iot:Data-ATS` e `iot:Data`. Cada endpoint usa um certificado X.509 para autenticar o cliente. É altamente recomendável que os clientes usem o tipo de endpoint `iot:Data-ATS` mais recente a fim de evitar problemas relacionados ao próximo cancelamento de confiança difundido pelas autoridades de certificação do Symantec. Fornecemos o `iot:Data` endpoint para dispositivos recuperarem dados de endpoints antigos que usam VeriSign certificados para compatibilidade com versões anteriores. Para obter mais informações, consulte [Autenticação do servidor](server-authentication.html).


**AWS IoT endpoints para dispositivos**  

|  Propósito do endpoint  |  Valor do `endpointType`  |  Description  | 
| --- | --- | --- | 
|  AWS IoT Core - Operações do plano de dados  |  `iot:Data-ATS`  |  Usado para enviar e receber dados dos componentes do agente de mensagens, da [sombra do dispositivo](iot-device-shadows.md) e do [mecanismo de regras](iot-rules.md) da AWS IoT. `iot:Data-ATS` retorna um endpoint de dados assinados pela ATS.  | 
| AWS IoT Core - Operações do plano de dados (legado) |  `iot:Data`  | iot:Dataretorna um endpoint de dados VeriSign assinado fornecido para compatibilidade com versões anteriores. O MQTT 5 não é compatível com endpoints Symantec (iot:Data). | 
|  AWS IoT Core acesso credencial  |  `iot:CredentialProvider`  |  Usado para trocar um certificado X.509 integrado do dispositivo por credenciais temporárias a fim de se conectar diretamente a outros serviços da AWS . Para obter mais informações sobre como se conectar a outros AWS serviços, consulte [Autorização de chamadas diretas para AWS serviços](authorizing-direct-aws.md).  | 
|  AWS IoT Device Management- operações de dados de trabalhos  |  `iot:Jobs`  |  Usado para permitir que dispositivos interajam com o serviço AWS IoT Jobs usando o [Jobs Device HTTPS APIs](jobs-mqtt-api.md). `iot:Jobs` IPv4 só pode ser usado para. Se você estiver usando endpoints de pilha dupla (IPv4 e IPv6), use o tipo de endpoint. `iot:Data-ATS`  | 
|  AWS IoT Operações do Device Advisor  |  `iot:DeviceAdvisor`  |  Um tipo de endpoint de teste usado para testar dispositivos com o Device Advisor. Para obter mais informações, consulte [Device Advisor](device-advisor.md).  | 
|  AWS IoT Core data beta (pré-visualização)  |  `iot:Data-Beta`  |  Um tipo de endpoint reservado para versões beta. Para obter mais informações sobre seu uso atual, consulte [Configurações do domínio](iot-custom-endpoints-configurable.md).  | 

Você também pode usar seu próprio nome de domínio totalmente qualificado (FQDN), como*example.com*, e o certificado de servidor associado para conectar dispositivos usando. AWS IoT [Configurações do domínio](iot-custom-endpoints-configurable.md)

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

O AWS IoT dispositivo SDKs ajuda você a conectar seus dispositivos de IoT AWS IoT Core e eles são compatíveis com os protocolos MQTT e MQTT sobre WSS.

O AWS IoT dispositivo é SDKs diferente do AWS SDKs porque SDKs suporta as AWS IoT necessidades de comunicação especializadas dos dispositivos de IoT, mas não oferece suporte a todos os serviços suportados pelo. AWS SDKs Os AWS IoT dispositivos SDKs são compatíveis com os AWS SDKs que oferecem suporte a todos os AWS serviços; no entanto, eles usam métodos de autenticação diferentes e se conectam a terminais diferentes, o que pode tornar o uso AWS SDKs impraticável em um dispositivo de IoT.

**Dispositivos móveis**  
Eles [AWS Mobilidade SDKs](iot-connect-service.md#iot-connect-mobile-sdks) suportam as comunicações do dispositivo MQTT APIs, alguns dos AWS IoT serviços e outros AWS serviços. APIs Se estiver desenvolvendo em um dispositivo móvel compatível, analise o SDK dele para ver se é a melhor opção para desenvolver sua solução de IoT.

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

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

O AWS IoT C\$1\$1 Device SDK permite que os desenvolvedores criem aplicativos conectados usando AWS e APIs dos AWS IoT Core serviços. Esse SDK foi especificamente projetado para dispositivos que não têm restrições de recursos e exigem recursos avançados, como enfileiramento de mensagens, suporte a vários threads e os mais recentes recursos de linguagem. Para mais informações, consulte:
+ [AWS IoT SDK do dispositivo C\$1\$1 v2 ativado GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)
+ [AWS IoT SDK do dispositivo C\$1\$1 v2 Readme](https://github.com/aws/aws-iot-device-sdk-cpp-v2#aws-iot-device-sdk-for-c-v2)
+ [AWS IoT Amostras do 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 Documentação da API C\$1\$1 v2 do Device SDK](https://aws.github.io/aws-iot-device-sdk-cpp-v2/)

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

**AWS IoT SDK de dispositivo para Python**

O AWS IoT Device SDK for Python possibilita que os desenvolvedores escrevam scripts em Python para usar seus dispositivos para acessar a plataforma por meio do MQTT ou AWS IoT do MQTT pelo protocolo Secure (WSS). WebSocket Ao conectar seus dispositivos aos AWS IoT Core serviços, os usuários podem trabalhar com segurança com o agente APIs de mensagens, as regras e o serviço Device Shadow que AWS IoT Core fornece e com outros AWS serviços AWS Lambda, como Amazon Kinesis, Amazon S3 e muito mais.
+ [AWS IoT SDK de dispositivo para Python v2 ativado 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 Exemplos de SDK de dispositivo 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 Documentação da API Device SDK para Python v2](https://aws.github.io/aws-iot-device-sdk-python-v2/)

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

**AWS IoT SDK do dispositivo para JavaScript**

O AWS IoT Device SDK for JavaScript possibilita que os desenvolvedores criem JavaScript aplicativos que os APIs acessem AWS IoT Core usando MQTT ou MQTT por meio do protocolo. WebSocket Ele pode ser usado em ambientes Node.js e aplicações de navegador. Para saber mais, consulte:
+ [AWS IoT SDK do dispositivo para JavaScript v2 ativado GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)
+ [AWS IoT SDK do dispositivo para Readme JavaScript v2](https://github.com/aws/aws-iot-device-sdk-js-v2#aws-iot-device-sdk-for-javascript-v2)
+ [AWS IoT SDK de dispositivo para amostras JavaScript v2](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 Documentação da API Device SDK for JavaScript v2](https://aws.github.io/aws-iot-device-sdk-js-v2/index.html)

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

**AWS IoT SDK de dispositivo para Java**

O AWS IoT Device SDK for Java possibilita que os desenvolvedores Java acessem o do por meio APIs do MQTT ou AWS IoT Core do MQTT pelo protocolo. WebSocket O SDK é compatível com o serviço de sombra do dispositivo. Você pode acessar as sombras usando métodos HTTP, inclusive GET, UPDATE e DELETE. O SDK também oferece suporte a um modelo simplificado de acesso a sombras, o que permite que os desenvolvedores troquem dados com as sombras usando os métodos getter e setter, sem necessidade de serializar ou desserializar nenhum documento JSON. Para saber mais, consulte:
+ [AWS IoT SDK de dispositivo para Java v2 ativado GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)
+ [AWS IoT SDK de dispositivo para Java v2 Readme](https://github.com/aws/aws-iot-device-sdk-java-v2#aws-iot-device-sdk-for-java-v2)
+ [AWS IoT Exemplos de SDK de dispositivo 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 Documentação da API Device SDK for Java v2](https://aws.github.io/aws-iot-device-sdk-java-v2/)

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

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

**Importante**  
Esse SDK é destinado ao uso por desenvolvedores de software incorporados experientes.

O AWS IoT Device SDK para C incorporado (C-SDK) é uma coleção de arquivos de origem C sob a licença de código aberto do MIT que podem ser usados em aplicativos incorporados para conectar com segurança dispositivos de IoT ao IoT Core. AWS Inclui as bibliotecas MQTT, JSON Parser e AWS IoT Device Shadow, entre outras. Ele é distribuído na forma de código-fonte e deve ser incorporado ao firmware do cliente juntamente com o código do aplicativo, outras bibliotecas e, opcionalmente, um RTOS (Sistema Operacional em Tempo Real). 

Geralmente, AWS IoT Device SDK para C incorporado é direcionado a dispositivos com recursos limitados que exigem um tempo de execução otimizado da linguagem C. Você pode usar o SDK em qualquer sistema operacional e hospedá-lo em qualquer tipo de processador (por exemplo, MCUs e MPUs). Se seu dispositivo tiver memória e recursos de processamento suficientes disponíveis, recomendamos que você use um dos outros AWS IoT dispositivos e dispositivos móveis SDKs, como o SDK do AWS IoT dispositivo para C\$1\$1, JavaScript Java ou Python.

Para saber mais, consulte:
+ [AWS IoT SDK de dispositivo para C incorporado em GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)
+ [AWS IoT SDK de dispositivo para Leiame C incorporado](https://github.com/aws/aws-iot-device-sdk-embedded-C#aws-iot-device-sdk-for-embedded-c)
+ [AWS IoT SDK de dispositivo para amostras C incorporadas](https://docs.aws.amazon.com/embedded-csdk/latest/lib-ref/docs/doxygen/output/html/demos_main.html)

------

# Protocolos de comunicação do dispositivo
<a name="protocols"></a><a name="iot-message-broker"></a>

AWS IoT Core suporta dispositivos e clientes que usam os protocolos MQTT e MQTT over WebSocket Secure (WSS) para publicar e assinar mensagens, e dispositivos e clientes que usam o protocolo HTTPS para publicar mensagens. Todos os protocolos suportam IPv4 IPv6 e. Esta seção descreve as diferentes opções de conexão para dispositivos e clientes.

## Versões do protocolo TLS
<a name="connection-protocol-tls"></a>

AWS IoT Core usa [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security) [versão 1.2](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) e [TLS versão 1.3](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) para criptografar todas as comunicações. Você pode configurar versões adicionais da política de TLS para seu endpoint [definindo as configurações de TLS nas configurações de domínio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-endpoints-tls-config.html). Ao conectar dispositivos a clientes AWS IoT Core, os clientes podem enviar a [extensão Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), que é necessária para recursos como [registro de várias contas](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), [endpoints configuráveis](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html), [domínios personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) e [endpoints da VPC](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html). Para obter mais informações, consulte [Segurança de transporte no AWS IoT](transport-security.html).

Os [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) oferecem suporte a MQTT e MQTT via WSS e aos requisitos de segurança das conexões do cliente. Recomendamos usar os [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) para conectar clientes à AWS IoT.

## Protocolos, mapeamentos de porta e autenticação
<a name="protocol-mapping"></a><a name="protocol-port-mapping"></a>

A forma como um dispositivo ou cliente se conecta ao agente de mensagens é configurável usando um [tipo de autenticação](#connection-protocol-auth-mode). Por padrão, ou quando nenhuma extensão SNI é enviada, o método de autenticação é baseado no protocolo de aplicativo, na porta e na extensão TLS de negociação de protocolo da camada de aplicativo (ALPN) que os dispositivos usam. A tabela a seguir lista a autenticação esperada com base na porta, porta e ALPN.


**Protocolos, autenticação e mapeamentos de porta**  

| Protocolo | Operações compatíveis | Autenticação | Porta | Nome do protocolo ALPN | 
| --- | --- | --- | --- | --- | 
|  Acabou o MQTT WebSocket  | Publicar/assinar | Signature versão 4 | 443 |  N/D  | 
|  Acabou o MQTT WebSocket  | Publicar/assinar | Autenticação personalizada | 443 |  N/D  | 
|  MQTT  | Publicar/assinar |  Certificado do cliente X.509  |  443†  |  `x-amzn-mqtt-ca`  | 
| MQTT | Publicar/assinar | Certificado do cliente X.509 | 8883 | N/D | 
|  MQTT  | Publicar/assinar |  Autenticação personalizada  |  443†  |  `mqtt`  | 
|  HTTPS  | Somente publicação |  Signature versão 4  |  443  |  N/D  | 
|  HTTPS  | Somente publicação |  Certificado do cliente X.509  |  443†  |  `x-amzn-http-ca`  | 
| HTTPS | Somente publicação | Certificado do cliente X.509 | 8443 | N/D | 
| HTTPS | Somente publicação | Autenticação personalizada | 443 | N/D | 

**Application Layer Protocol Negotiation (ALPN)**  
† Ao usar configurações de endpoint padrão, os clientes que se conectam na porta 443 com autenticação de certificado de cliente X.509 devem implementar a extensão TLS de [negociação de protocolo de camada de aplicativo (ALPN)](https://tools.ietf.org/html/rfc7301) e usar o [nome do protocolo ALPN listado no ALPN](https://tools.ietf.org/html/rfc7301#section-3.1) enviado pelo cliente como parte da mensagem ProtocolNameList . `ClientHello`  
[Na porta 443, o endpoint [IoT:Data-ATS](iot-connect-devices.md#iot-connect-device-endpoint-table) suporta ALPN x-amzn-http-ca HTTP, mas o endpoint IoT:Jobs não.](iot-connect-devices.md#iot-connect-device-endpoint-table)  
Na porta 8443 HTTPS e na porta 443 MQTT com ALPN x-amzn-mqtt-ca, a [autenticação personalizada não pode ser usada](custom-authentication.md).

Os clientes se conectam aos endpoints Conta da AWS de seus dispositivos. Consulte [AWS IoT dados do dispositivo e endpoints de serviço](iot-connect-devices.md#iot-connect-device-endpoints) para ver informações sobre como encontrar os endpoints do dispositivo da sua conta.

**nota**  
AWS SDKs não exigem o URL inteiro. Eles exigem apenas o nome do host do endpoint, como a [`pubsub.py`amostra do AWS IoT Device SDK for Python on](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py#L100). GitHub Transmitir o URL inteiro conforme fornecido na tabela a seguir pode gerar um erro, como nome de host inválido.


**Conectando-se a AWS IoT Core**  

|  Protocolo  |  Endpoint ou URL  | 
| --- | --- | 
|  MQTT  |  `iot-endpoint`  | 
|  MQTT via WSS  |  `wss://iot-endpoint/mqtt`  | 
|  HTTPS  |  `https://iot-endpoint/topics`  | 

## Escolher um protocolo de aplicativo para a comunicação do dispositivo
<a name="protocol-selection"></a>

Para a maioria das comunicações de dispositivos de IoT por meio dos endpoints do dispositivo, convém usar os protocolos Secure MQTT ou MQTT over WebSocket Secure (WSS); no entanto, os endpoints do dispositivo também oferecem suporte a HTTPS.

A tabela a seguir compara como AWS IoT Core usa os dois protocolos de alto nível (MQTT e HTTPS) para comunicação com dispositivos.


**AWS IoT protocolos de dispositivos (MQTT e HTTPS) side-by-side**  

|  Recurso  |  [MQTT](mqtt.md)  |  [HTTPS](http.md)  | 
| --- | --- | --- | 
|  Suporte para publicação/assinatura  |  Publicação e assinatura  |  Somente publicação  | 
|  Compatibilidade com o SDK  |  [AWS O dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) suporta os protocolos MQTT e WSS  |  Não há suporte para SDK, mas você pode usar métodos específicos de linguagem para fazer solicitações HTTPS  | 
|  Suporte à qualidade de serviço  |  [Níveis 0 e 1 de QoS do MQTT](mqtt.md#mqtt-qos)  | A QoS é compatível enviando um parâmetro de string de consulta ?qos=qos em que o valor pode ser 0 ou 1. Você pode adicionar essa string de consulta para publicar uma mensagem com o valor de QoS desejado. | 
| Pode receber mensagens perdidas enquanto o dispositivo estava off-line | Sim | Não | 
|  Suporte a campo de `clientId`  |  Sim  |  Não  | 
|  Detecção de desconexão do dispositivo  |  Sim  |  Não  | 
|  Comunicações seguras  |  Sim. Consulte [Protocolos, mapeamentos de porta e autenticação](#protocol-mapping)  |  Sim. Consulte [Protocolos, mapeamentos de porta e autenticação](#protocol-mapping)  | 
|  Definições de tópico  |  Aplicativo definido  |  Aplicativo definido  | 
|  Formato dos dados de mensagem  |  Aplicativo definido  |  Aplicativo definido  | 
| Sobrecarga do protocolo | Menor | Mais alto | 
| Consumo de energia | Menor | Mais alto | 

## Escolher um tipo de autenticação para a comunicação do seu dispositivo
<a name="connection-protocol-auth-mode"></a>

Você pode configurar o tipo de autenticação para seu endpoint de IoT usando endpoints configuráveis. Como alternativa, use a configuração padrão e determine como seus dispositivos são autenticados com a combinação de protocolo de aplicativo, porta e extensão ALPN TLS. O tipo de autenticação escolhido determina como seus dispositivos serão autenticados ao se conectarem AWS IoT Core. Existem cinco tipos de autenticação: 

**certificado X.509**

Autentique dispositivos usando [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html), que são AWS IoT Core validados para autenticar o dispositivo. Esse tipo de autenticação funciona com os protocolos Secure MQTT (MQTT over TLS) e HTTPS.

**Certificado X.509 com autorizador personalizado**

Autentique dispositivos usando [certificados de cliente X.509](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html) e execute ações adicionais de autenticação usando um [autorizador personalizado](https://docs.aws.amazon.com//iot/latest/developerguide/config-custom-auth.html), que receberá informações do certificado de cliente X.509. Esse tipo de autenticação funciona com os protocolos Secure MQTT (MQTT over TLS) e HTTPS. Esse tipo de autenticação só é possível usando endpoints configuráveis com autenticação personalizada X.509. Não há opção ALPN.

**AWS Signature versão 4 (SigV4)**

Autentique dispositivos usando o Cognito ou seu serviço de backend, oferecendo suporte à federação social e corporativa. Esse tipo de autenticação funciona com os protocolos MQTT over WebSocket Secure (WSS) e HTTPS.

**Autorizador personalizado**

Autentique dispositivos configurando uma função do Lambda para processar as informações de autenticação personalizadas enviadas para o AWS IoT Core. Esse tipo de autenticação funciona com os protocolos Secure MQTT (MQTT over TLS), HTTPS e MQTT over WebSocket Secure (WSS).

**Padrão**

Autentique dispositivos com base na extensão de negociação de protocolo da camada de and/or aplicativo de porta (ALPN) que os dispositivos usam. Não há suporte para algumas opções adicionais de autenticação. Para obter mais informações, consulte [Protocolos, mapeamentos de porta e autenticação](#protocol-mapping).

A tabela abaixo mostra todas as combinações compatíveis de tipos de autenticação e protocolos de aplicativos.


**Combinações com suporte de tipos de autenticação e protocolos de aplicativo**  

| Tipo de autenticação | Secure MQTT (MQTT over TLS) | MQTT via WebSocket Secure (WSS) | HTTPS | Padrão | 
| --- | --- | --- | --- | --- | 
| certificado X.509 | ✓ |  | ✓ |  | 
| Certificado X.509 com autorizador personalizado | ✓ |  | ✓ |  | 
| AWS Signature versão 4 (SigV4) |  | ✓ | ✓ |  | 
| Autorizador personalizado | ✓ | ✓ | ✓ |  | 
| Padrão |  |  |  | ✓ | 

## Limites de duração da conexão
<a name="connection-duration"></a>

Não é garantido que as conexões HTTPS durem mais do que o tempo necessário para receber e responder às solicitações.

A duração da conexão MQTT depende do atributo de autenticação usado. A tabela a seguir lista a duração máxima da conexão em condições ideais para cada atributo.


**Duração da conexão MQTT por atributo de autenticação**  

|  Recurso  |  Duração máxima \$1  | 
| --- | --- | 
|  Certificado do cliente X.509  |  1 a 2 semanas  | 
|  Autenticação personalizada  |  1 a 2 semanas  | 
|  Signature versão 4  |  Até 24 horas  | 

\$1 Não garantido

Com certificados X.509 e autenticação personalizada, a duração da conexão não tem um limite rígido, mas pode ser de apenas alguns minutos. Interrupções de conexão podem ocorrer por vários motivos. A lista a seguir contém alguns dos motivos mais comuns.
+ Interrupções na disponibilidade de Wi-Fi
+ Interrupções na conexão do provedor de serviços de Internet (ISP)
+ Patches de serviço
+ Implantações de serviços
+ Autoescalabilidade do serviço
+ Host de serviço indisponível
+ Problemas e atualizações do balanceador de carga
+ Erros no lado do cliente,

Seus dispositivos devem implementar estratégias para detectar desconexões e reconectar-se. Para obter mais informações sobre eventos de desconexão e orientações sobre como lidar com eles, consulte [Eventos de conexão/desconexão](life-cycle-events.md#connect-disconnect) em [Eventos de ciclo de vida](life-cycle-events.md).

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

O [MQTT](http://mqtt.org/) (Message Queuing Telemetry Transport) é um protocolo de mensagens leve e amplamente adotado, projetado para dispositivos restritos. O suporte a AWS IoT Core para MQTT é baseado na [especificação MQTT v3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) e na [especificação MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), com algumas diferenças, conforme documentado em [AWS IoT diferenças das especificações do MQTT](#mqtt-differences). Como a versão mais recente do padrão, o MQTT 5 apresenta vários recursos principais que tornam um sistema baseado em MQTT mais robusto, incluindo novos aprimoramentos de escalabilidade, relatório de erros aprimorado com respostas de código de motivo, temporizadores de expiração de mensagens e sessões e cabeçalhos de mensagens de usuário personalizados. Para obter mais informações sobre os recursos compatíveis com o MQTT 5, consulte Recursos [compatíveis com o MQTT 5](#mqtt5). AWS IoT Core AWS IoT Core também suporta comunicação entre versões MQTT (MQTT 3 e MQTT 5). Um publicador do MQTT 3 pode enviar uma mensagem do MQTT 3 para um assinante do MQTT 5 que receberá uma mensagem de publicação do MQTT 5 e vice-versa.

 AWS IoT Core *suporta conexões de dispositivos que usam o protocolo MQTT e o protocolo MQTT over WSS e que são identificadas por um ID de cliente.* O [AWS IoT Dispositivo SDKs](iot-connect-devices.md#iot-connect-device-sdks) dá suporte a ambos os protocolos e são as formas recomendadas de conectar dispositivos a AWS IoT Core. O AWS IoT dispositivo SDKs suporta as funções necessárias para que dispositivos e clientes se conectem e acessem AWS IoT os serviços. O dispositivo SDKs suporta os protocolos de autenticação exigidos pelos AWS IoT serviços e os requisitos de ID de conexão exigidos pelos protocolos MQTT e MQTT over WSS. Para obter informações sobre como se conectar ao AWS IoT uso do AWS dispositivo SDKs e links para exemplos AWS IoT nos idiomas suportados, consulte[Conectando-se ao MQTT usando o dispositivo AWS IoT SDKs](#mqtt-sdk). Para obter mais informações sobre métodos de autenticação e os mapeamentos de porta para mensagens MQTT, consulte [Protocolos, mapeamentos de porta e autenticação](protocols.md#protocol-mapping).

Embora seja recomendável usar o AWS IoT dispositivo SDKs para se conectar AWS IoT, eles não são obrigatórios. No entanto SDKs, se você não usar o AWS IoT dispositivo, deverá fornecer a segurança necessária de conexão e comunicação. Os clientes devem enviar a [extensão TLS de Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1) na solicitação de conexão. As tentativas de conexão que não incluem o SNI são recusadas. Para obter mais informações, consulte [Segurança de transporte em AWS IoT](transport-security.html). Clientes que usam usuários e AWS credenciais do IAM para autenticar clientes devem fornecer a autenticação correta do [Signature versão 4](https://docs.aws.amazon.com//general/latest/gr/signature-version-4.html).

Depois que seus clientes estiverem conectados, você poderá monitorar e gerenciar suas conexões de clientes MQTT usando APIs. Para obter mais informações, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect).

**Topics**
+ [Conectando-se ao MQTT usando o dispositivo AWS IoT SDKs](#mqtt-sdk)
+ [Opções de Qualidade de serviço (QoS) do MQTT](#mqtt-qos)
+ [Sessões persistentes do MQTT](#mqtt-persistent-sessions)
+ [Mensagens retidas do MQTT](#mqtt-retain)
+ [Mensagens de Último testamento e Testamento (LWT, Last Will and Testament) do MQTT](#mqtt-lwt)
+ [Uso do ConnectAttributes](#connect-attribute)
+ [Recursos compatíveis com o MQTT 5](#mqtt5)
+ [MQTT 5 propriedades](#mqtt5-properties)
+ [Códigos de motivo do MQTT](#mqtt5-reason-codes)
+ [AWS IoT diferenças das especificações do MQTT](#mqtt-differences)
+ [Gerenciar conexões do MQTT](#mqtt-client-disconnect)

## Conectando-se ao MQTT usando o dispositivo AWS IoT SDKs
<a name="mqtt-sdk"></a>

Esta seção contém links para o AWS IoT dispositivo SDKs e para o código-fonte de programas de amostra que ilustram como conectar um dispositivo a. AWS IoT Os aplicativos de amostra vinculados aqui mostram como se conectar AWS IoT usando o protocolo MQTT e o MQTT pelo WSS.

**nota**  
O AWS IoT dispositivo lançou SDKs um cliente MQTT 5.

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

**Usando o SDK de dispositivos AWS IoT C\$1\$1 para conectar dispositivos**
+  [Código-fonte de um aplicativo de amostra que apresenta um exemplo de conexão MQTT em 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 ativado GitHub](https://github.com/aws/aws-iot-device-sdk-cpp-v2)

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

**Usando o AWS IoT Device SDK para Python para conectar dispositivos**
+  [Código-fonte de um aplicativo de amostra que apresenta um exemplo de conexão MQTT em Python](https://github.com/aws/aws-iot-device-sdk-python-v2/blob/master/samples/pubsub.py) 
+ [AWS IoT SDK de dispositivo v2 para Python em GitHub](https://github.com/aws/aws-iot-device-sdk-python-v2)

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

**Usando o AWS IoT Device SDK para JavaScript conectar dispositivos**
+  [Código-fonte de um aplicativo de amostra que mostra um exemplo de conexão MQTT em JavaScript](https://github.com/aws/aws-iot-device-sdk-js-v2/blob/master/samples/node/pub_sub/index.ts) 
+ [AWS IoT SDK do dispositivo para JavaScript v2 ativado GitHub](https://github.com/aws/aws-iot-device-sdk-js-v2)

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

**Usando o AWS IoT Device SDK for Java para conectar dispositivos**

**nota**  
O AWS IoT Device SDK for Java v2 agora oferece suporte ao desenvolvimento para Android. Para obter mais informações, consulte [SDK de dispositivos AWS IoT para Android](https://github.com/aws/aws-iot-device-sdk-java-v2/blob/main/documents/ANDROID.md).
+  [Código-fonte de um aplicativo de amostra que apresenta um exemplo de conexão MQTT em 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 ativado GitHub](https://github.com/aws/aws-iot-device-sdk-java-v2)

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

**Usando o AWS IoT Device SDK for Embedded C para conectar dispositivos**

**Importante**  
Esse SDK é destinado ao uso por desenvolvedores experientes de software incorporado.
+  [Código-fonte de um aplicativo de amostra que apresenta um exemplo de conexão MQTT em 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 incorporado em GitHub](https://github.com/aws/aws-iot-device-sdk-embedded-C)

------

## Opções de Qualidade de serviço (QoS) do MQTT
<a name="mqtt-qos"></a>

AWS IoT e o AWS IoT dispositivo SDKs suporta os níveis de [Qualidade de Serviço (QoS) `0` do MQTT](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349263) e. `1` O protocolo MQTT define um terceiro nível de QoS, `2` nível, AWS IoT mas não o suporta. Apenas o protocolo MQTT dá suporte ao atributo de QoS. HTTPS dá suporte a QoS passando um parâmetro de string de consulta `?qos=qos` em que o valor pode ser 0 ou 1.

Essa tabela descreve como cada nível de QoS afeta as mensagens publicadas para e pelo agente de mensagens. 


|  Com um nível de QoS de...  |  A mensagem é…  |  Comentários  | 
| --- | --- | --- | 
|  QoS nível 0  |  Enviado zero ou mais vezes  |  Esse nível deve ser usado para mensagens enviadas por links de comunicação confiáveis ou que podem ser perdidas sem problemas.  | 
|  QoS nível 1  |  Enviado pelo menos uma vez e, em seguida, de modo repetido até que uma resposta `PUBACK` seja recebida  |  A mensagem não é considerada completa até que o remetente receba uma resposta `PUBACK` indicando a entrega bem-sucedida.  | 

## Sessões persistentes do MQTT
<a name="mqtt-persistent-sessions"></a>

As sessões persistentes armazenam as assinaturas e mensagens de um cliente, com uma Qualidade de Serviço (QoS) de 1, que não foram reconhecidas pelo cliente. Quando o dispositivo se reconecta a uma sessão persistente, a sessão é retomada, as assinaturas são restabelecidas e as mensagens assinadas não confirmadas que são recebidas e armazenadas antes da reconexão são enviadas ao cliente.

O processamento das mensagens armazenadas é registrado em CloudWatch métricas e CloudWatch registros. Para obter informações sobre as entradas gravadas em CloudWatch e CloudWatch Logs, consulte [Métricas do agente de mensagens](metrics_dimensions.md#message-broker-metrics) [Entrada de log em fila](cwl-format.md#log-mb-queued) e.

### Criar uma sessão persistente
<a name="mqtt-persistent-sessions-create"></a>

No MQTT 3, você cria uma sessão persistente do MQTT enviando uma mensagem `CONNECT` e definindo o sinalizador `cleanSession` como `0`. Se nenhuma sessão existir para o cliente enviar a mensagem `CONNECT`, uma nova sessão persistente será criada. Se já existir uma sessão para o cliente, o cliente retomará a sessão existente. Para criar uma sessão limpa, você envia uma mensagem `CONNECT` e define o sinalizador `cleanSession` como `1`, e o broker não armazenará nenhum estado da sessão quando o cliente se desconectar.

No MQTT 5, você lida com sessões persistentes definindo o sinalizador `Clean Start` e `Session Expiry Interval`. O Clean Start controla o início da sessão de conexão e o final da sessão anterior. Quando você define `Clean Start` =`1`, uma nova sessão é criada e uma sessão anterior é encerrada, se existir. Quando você define `Clean Start` =`0`, a sessão de conexão retoma uma sessão anterior, se ela existir. O intervalo de expiração da sessão controla o final da sessão de conexão. O intervalo de expiração da sessão especifica o tempo, em segundos (número inteiro de 4 bytes), em que uma sessão persistirá após a desconexão. Configuração `Session Expiry interval` = `0` faz com que a sessão seja encerrada imediatamente após a desconexão. Se o intervalo de expiração da sessão não for especificado na mensagem CONNECT, o padrão será 0.


**Início limpo e expiração da sessão do MQTT 5**  

| Valor da propriedade | Description | 
| --- | --- | 
| Clean Start= 1 | Cria uma sessão e encerra uma sessão anterior, se houver. | 
| Clean Start= 0 | Retoma uma sessão se existir uma sessão anterior. | 
| Session Expiry Interval> 0 | Persistir uma sessão. | 
| Session Expiry interval= 0 | Não persistir uma sessão. | 

No MQTT 5, se você define `Clean Start` = `1` e `Session Expiry Interval` =`0`, isso equivale a uma sessão limpa do MQTT 3. Se você define `Clean Start` = `0` e `Session Expiry Interval`> `0`, isso equivale a uma sessão persistente do MQTT 3.

**nota**  
Não há suporte para as sessões persistentes da versão MQTT cruzada (MQTT 3 e MQTT 5). Uma sessão persistente do MQTT 3 não pode ser retomada como uma sessão do MQTT 5 e vice-versa. 

### Operações durante uma sessão persistente
<a name="mqtt-persistent-sessions-operation"></a>

Os clientes usam o atributo `sessionPresent` na mensagem de conexão confirmada (`CONNACK`) para determinar se uma sessão persistente está presente. Se `sessionPresent` for `1`, uma sessão persistente estará presente e todas as mensagens armazenadas para o cliente serão entregues ao cliente após o cliente receber a `CONNACK`, conforme descrito em [Tráfego de mensagens após a reconexão com uma sessão persistente](#persistent-session-reconnect). Se `sessionPresent` for `1`, o cliente não precisará se inscrever novamente. Porém, se `sessionPresent` for `0`, nenhuma sessão persistente estará presente, e o cliente deverá se inscrever novamente nos filtros de tópico.

Depois que o cliente ingressa em uma sessão persistente, ele pode publicar mensagens e assinar filtros de tópico sem quaisquer sinalizadores adicionais em cada operação.

### Tráfego de mensagens após a reconexão com uma sessão persistente
<a name="persistent-session-reconnect"></a>

Uma sessão persistente representa uma conexão contínua entre um cliente e um agente de mensagens MQTT. Quando um cliente se conecta ao agente de mensagens usando uma sessão persistente, o agente de mensagens salva todas as inscrições que o cliente faz durante a conexão. Quando o cliente se desconecta, o agente de mensagens armazena mensagens de QoS não confirmadas e novas mensagens de QoS 1 publicadas em tópicos nos quais o cliente está inscrito. As mensagens são armazenadas conforme o limite da conta. As mensagens que excedem o limite serão descartadas. Para obter mais informações sobre os limites de mensagem persistente, consulte [endpoints e cotas do AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Quando o cliente se conecta novamente à sua sessão persistente, todas as inscrições são restabelecidas e todas as mensagens armazenadas são enviadas para o cliente com uma taxa máxima de 10 mensagens por segundo. No MQTT 5, se uma QoS 1 de saída com o intervalo de expiração da mensagem expirar quando um cliente estiver offline, depois que a conexão for retomada, o cliente não receberá a mensagem expirada.

Após a reconexão, as mensagens armazenadas são enviadas ao cliente, a uma taxa limitada a 10 mensagens armazenadas por segundo, junto com qualquer tráfego de mensagens atual até que o limite [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) seja atingido. Como a taxa de entrega das mensagens armazenadas é limitada, serão necessários vários segundos para entregar todas as mensagens armazenadas se uma sessão tiver mais de 10 mensagens armazenadas para entregar após a reconexão.

Para assinantes compartilhados, as mensagens serão colocadas na fila se pelo menos um assinante de um grupo usar uma sessão persistente e nenhum assinante estiver on-line para receber a mensagem de QoS 1. A retirada de mensagens da fila é realizado em uma velocidade máxima de vinte mensagens por segundo por assinante ativo em um grupo. Para acessar mais informações, consulte [Enfileiramento de mensagens de assinaturas compartilhadas](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt5-shared-subscription-queuing).

### Encerrar uma sessão persistente
<a name="ending-a-persistent-session"></a>

As sessões persistentes podem terminar das seguintes maneiras:
+ O tempo de expiração persistente da sessão expira. O cronômetro persistente de expiração da sessão começa quando o agente de mensagens detecta que um cliente se desconectou, seja pela desconexão do cliente ou pelo tempo limite da conexão. 
+ O cliente envia uma mensagem `CONNECT` que define o sinalizador `cleanSession` como `1`.
+ Você desconecta manualmente o cliente e limpa a sessão usando a API `DeleteConnection`. Para obter mais informações, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect).

No MQTT 3, o valor padrão do tempo de expiração das sessões persistentes é de uma hora, e isso se aplica a todas as sessões na conta.

No MQTT 5, você pode definir o intervalo de expiração da sessão para cada sessão nos pacotes CONNECT e DISCONNECT. 

Para o intervalo de expiração da sessão no pacote DISCONNECT: 
+ Se a sessão atual tiver um intervalo de expiração de sessão de 0, você não poderá definir o intervalo de expiração da sessão como maior que 0 no pacote DISCONNECT.
+ Se a sessão atual tiver um intervalo de expiração de sessão maior que 0 e você definir o intervalo de expiração da sessão como 0 no pacote DISCONNECT, a sessão será encerrada em DISCONNECT.
+ Caso contrário, o intervalo de expiração da sessão no pacote DISCONNECT atualizará o intervalo de expiração da sessão atual.

**nota**  
As mensagens armazenadas que aguardam para serem enviadas ao cliente quando a sessão termina são descartadas; porém, elas ainda são cobradas conforme a taxa de mensagens padrão, mesmo que não tenham sido enviadas. Para obter mais informações sobre os preços das mensagens, consulte [Preços do AWS IoT Core](https://aws.amazon.com/iot-core/pricing). Você pode configurar o intervalo de tempo de expiração.

### Reconexão após a expiração de uma sessão persistente
<a name="reconnect-a-persistent-session"></a>

Se um cliente não se reconectar à sessão persistente antes que ela expire, a sessão terminará e as mensagens armazenadas serão descartadas. Quando um cliente se reconecta depois que a sessão expira com um sinalizador `cleanSession` para `0`, o serviço cria uma nova sessão persistente. As assinaturas ou mensagens da sessão anterior não estão disponíveis para esta sessão porque foram descartadas quando a sessão anterior expirou.

### Cobranças persistentes de mensagens de sessão
<a name="persistent-session-message-charges"></a>

As mensagens são cobradas de você Conta da AWS quando o agente de mensagens envia uma mensagem para um cliente ou para uma sessão persistente offline. Quando um dispositivo offline com uma sessão persistente se reconecta e retoma a sessão, as mensagens armazenadas são entregues ao dispositivo e cobradas novamente em sua conta. Para obter mais informações sobre a definição de preço de mensagem, consulte [Preços do AWS IoT Core – Mensagens](https://aws.amazon.com/iot-core/pricing/#Messaging).

O tempo de expiração padrão da sessão persistente de uma hora pode ser aumentado usando o processo padrão de aumento de limite. Observe que aumentar o tempo de expiração da sessão pode aumentar suas cobranças de mensagens, pois o tempo adicional pode permitir que mais mensagens sejam armazenadas no dispositivo off-line e essas mensagens adicionais seriam cobradas em sua conta conforme a taxa de mensagens padrão. O tempo de expiração da sessão é aproximado e uma sessão pode persistir por até 30 minutos a mais do que o limite da conta; porém, uma sessão não será menor que o limite da conta. Para obter mais informações sobre limites de sessão, consulte [AWS Service Quotas](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits).

## Mensagens retidas do MQTT
<a name="mqtt-retain"></a>

AWS IoT Core suporta a `RETAIN` bandeira descrita no protocolo MQTT. Quando um cliente define o `RETAIN` sinalizador em uma mensagem MQTT que ele publica, AWS IoT Core salva a mensagem. Em seguida, ele pode ser enviado para novos assinantes, recuperado chamando a operação [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html) e visualizado no [console do AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages).

**Exemplos de uso de mensagens retidas do MQTT**
+ 

**Como uma mensagem de configuração inicial**  
As mensagens retidas do MQTT são enviadas a um cliente depois que o cliente se inscreve em um tópico. Se você quiser que todos os clientes que assinam um tópico recebam a mensagem retida do MQTT logo após a assinatura, publique uma mensagem de configuração com o sinalizador `RETAIN` definido. Os clientes assinantes também recebem atualizações dessa configuração sempre que uma nova mensagem de configuração é publicada.
+ 

**Como uma última mensagem de estado conhecida**  
Os dispositivos podem definir o sinalizador `RETAIN` nas mensagens do estado atual para que o AWS IoT Core as salve. Quando os aplicativos se conectam ou se reconectam, eles podem se inscrever nesse tópico e obter o último estado relatado logo após se inscreverem no tópico da mensagem retida. Dessa forma, eles podem evitar ter que esperar até a próxima mensagem do dispositivo para ver o estado atual.

**Topics**
+ [Tarefas comuns com mensagens retidas pelo MQTT em AWS IoT Core](#mqtt-retain-using)
+ [Faturamento e mensagens retidas](#mqtt-retain-billing)
+ [Comparar mensagens retidas do MQTT e sessões persistentes do MQTT](#mqtt-retain-persist)
+ [O MQTT reteve mensagens e AWS IoT sombras do dispositivo](#mqtt-retain-shadow)

### Tarefas comuns com mensagens retidas pelo MQTT em AWS IoT Core
<a name="mqtt-retain-using"></a>

AWS IoT Core salva mensagens MQTT com o `RETAIN` sinalizador definido. Essas *mensagens retidas* são enviadas a todos os clientes que se inscreveram no tópico, como uma mensagem MQTT normal, e também são armazenadas para serem enviadas aos novos assinantes do tópico.

As mensagens retidas pelo MQTT exigem ações políticas específicas para autorizar os clientes a acessá-las. Para obter exemplos de uso de políticas de mensagens retidas, consulte [Exemplos de políticas de mensagens retidas](retained-message-policy-examples.md).

Esta seção descreve operações comuns que envolvem mensagens retidas.
+ 

**Criar uma mensagem retida**  
O cliente determina se uma mensagem é retida quando publica uma mensagem MQTT. Os clientes podem definir o sinalizador `RETAIN` ao publicar uma mensagem usando um [SDK de dispositivo](iot-sdks.md). Aplicações e serviços podem definir o sinalizador `RETAIN` quando usam a [ação `Publish`](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) para publicar uma mensagem do MQTT.

  Apenas uma mensagem por nome de tópico é retida. Uma nova mensagem com o sinalizador RETAIN definido publicada em um tópico substitui qualquer mensagem retida que tenha sido enviada ao tópico antes. 
**nota**  
Você não pode publicar em um [tópico reservado](reserved-topics.md) com o sinalizador `RETAIN` definido.
+ 

**Assinar um tópico de mensagem retida**  
Os clientes assinam os tópicos de mensagens retidos como fariam com qualquer outro tópico de mensagem do MQTT. As mensagens retidas recebidas ao assinar um tópico desse tipo têm o sinalizador `RETAIN` definido. 

  As mensagens retidas são excluídas AWS IoT Core quando um cliente publica uma mensagem retida com uma carga útil de mensagem de 0 bytes no tópico da mensagem retida. Os clientes que se inscreveram no tópico da mensagem retida também receberão a mensagem de 0 byte.

  Inscrever-se em um filtro de tópico curinga que inclui um tópico de mensagem retida permite que o cliente receba mensagens subsequentes publicadas no tópico da mensagem retida, mas não entrega a mensagem retida após a assinatura.
**nota**  
Para receber uma mensagem retida após a assinatura, o filtro de tópicos na solicitação de assinatura deve corresponder exatamente ao tópico da mensagem retida.

  As mensagens retidas recebidas ao assinar um tópico desse tipo têm o sinalizador `RETAIN` definido. As mensagens retidas que são recebidas por um cliente assinante após a assinatura não têm.
+ 

**Recuperar uma mensagem retida**  
As mensagens retidas são entregues de modo automático aos clientes quando eles se inscrevem no tópico com a mensagem retida. Para que um cliente receba a mensagem retida após a assinatura, ele deve assinar o nome exato do tópico da mensagem retida. Inscrever-se em um filtro de tópico curinga que inclui um tópico de mensagem retida permite que o cliente receba mensagens subsequentes publicadas no tópico da mensagem retida, mas não entrega a mensagem retida após a assinatura.

  Serviços e aplicativos podem listar e recuperar mensagens retidas chamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) e [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html).

  Um cliente não é impedido de publicar mensagens em um tópico de mensagem retida *sem* definir o sinalizador `RETAIN`. Isso pode causar resultados inesperados, como a mensagem retida não corresponder à mensagem recebida ao se inscrever no tópico.

  Com o MQTT 5, se uma mensagem retida tiver o intervalo de expiração da mensagem definido e a mensagem retida expirar, um novo assinante que assine esse tópico não receberá a mensagem retida após a assinatura bem-sucedida.
+ 

**Listando tópicos de mensagens retidas**  
[Você pode listar as mensagens retidas chamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_ListRetainedMessages.html) e as mensagens retidas podem ser visualizadas no console do AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages). 
+ 

**Obter detalhes da mensagem retida**  
Você pode obter detalhes das mensagens retidas chamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html) e elas podem ser visualizadas no [console do AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages).
+ 

**Reter de uma mensagem de Testamento**  
As mensagens do MQTT de [http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) criadas quando um dispositivo se conecta podem ser retidas definindo o sinalizador `Will Retain` no campo `Connect Flag bits`.
+ 

**Excluir uma mensagem retida**  
Dispositivos, aplicações e serviços podem excluir uma mensagem retida publicando uma mensagem com o sinalizador `RETAIN` definido e uma carga útil vazia (0 byte) no nome do tópico da mensagem retida a ser excluída. Essas mensagens excluem a mensagem retida de AWS IoT Core, são enviadas aos clientes com uma assinatura do tópico, mas não são retidas por. AWS IoT Core

  As mensagens retidas também podem ser excluídas interativamente acessando a mensagem retida no [console do AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages). As mensagens retidas excluídas usando o [console do AWS IoT](https://console.aws.amazon.com//iot/home#/retainedMessages) também enviam uma mensagem de 0 byte aos clientes que se inscreveram no tópico da mensagem retida.

  As mensagens retidas não podem ser restauradas após serem excluídas. Um cliente precisaria publicar uma nova mensagem retida para substituir a mensagem excluída.
+ 

**Depuração e solução de problemas de mensagens retidas**  
O [console do AWS IoT](https://console.aws.amazon.com//iot/home#) fornece várias ferramentas para ajudá-lo a solucionar problemas de mensagens retidas:
  + 

**A página **[Mensagens retidas](https://console.aws.amazon.com//iot/home#/retainedMessages)****  
A página **Mensagens retidas** no console do AWS IoT fornece uma lista paginada das mensagens retidas armazenadas pela sua Conta na região atual. Nesta página, você pode:
    + Veja os detalhes de cada mensagem retida, como a carga útil da mensagem, o QoS e a hora em que ela foi recebida.
    + Atualize o conteúdo de uma mensagem retida.
    + Exclua uma mensagem retida.
  + 

**O **[cliente de teste MQTT](https://console.aws.amazon.com//iot/home#/test)****  
A página do **cliente de teste do MQTT** no console do AWS IoT pode se inscrever e publicar nos tópicos do MQTT. A opção de publicação permite que você defina o sinalizador RETAIN nas mensagens que você publica para simular como seus dispositivos podem se comportar. Também é possível usar o cliente de teste do MQTT para monitorar mensagens de clientes conectados gerenciados pela interface de conexões de clientes. Para acessar mais informações sobre o gerenciamento de configurações de clientes, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect).

  Alguns resultados inesperados podem ser o resultado desses aspectos de como as mensagens retidas são implementadas em AWS IoT Core.
  + 

**Limites de mensagens retidas**  
Quando uma conta armazena o número máximo de mensagens retidas, AWS IoT Core retorna uma resposta limitada às mensagens publicadas com RETAIN definido e cargas superiores a 0 bytes até que algumas mensagens retidas sejam excluídas e a contagem de mensagens retidas fique abaixo do limite.
  + 

**Ordem de entrega de mensagens retidas**  
A sequência da mensagem retida e da entrega da mensagem assinada não é garantida.

### Faturamento e mensagens retidas
<a name="mqtt-retain-billing"></a>

A publicação de mensagens com o sinalizador `RETAIN` definido por um cliente, usando o console da AWS IoT ou chamando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) gera cobranças adicionais de mensagens descritas em [Preços do AWS IoT Core : mensagens](https://aws.amazon.com//iot-core/pricing/#Messaging).

A recuperação de mensagens retidas por um cliente, usando o AWS IoT console ou ligando [https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_GetRetainedMessage.html)gera cobranças de mensagens, além das cobranças normais de uso da API. As cobranças adicionais estão descritas em [AWS IoT Core Preços – Mensagens](https://aws.amazon.com//iot-core/pricing/#Messaging).

As mensagens de [http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/errata01/os/mqtt-v3.1.1-errata01-os-complete.html#_Will_Flag) do MQTT publicadas quando um dispositivo se desconecta inesperadamente geram cobranças de mensagens descritas em [AWS IoT Core Preços - Mensagens](https://aws.amazon.com//iot-core/pricing/#Messaging).

Para obter mais informações sobre custos de mensagens, consulte [Preços do AWS IoT Core – Mensagens](https://aws.amazon.com//iot-core/pricing/#Messaging).

### Comparar mensagens retidas do MQTT e sessões persistentes do MQTT
<a name="mqtt-retain-persist"></a>

Mensagens retidas e sessões persistentes são recursos padrão do MQTT que possibilitam que os dispositivos recebam mensagens publicadas enquanto eles estavam off-line. As mensagens retidas podem ser publicadas de sessões persistentes. Esta seção descreve os principais aspectos desses recursos e como eles funcionam juntos.


|    |  Mensagens retidas  |  Sessões persistentes  | 
| --- | --- | --- | 
|  **Recursos principais**  |  As mensagens retidas podem ser usadas para configurar ou notificar grandes grupos de dispositivos após a conexão. As mensagens retidas também podem ser usadas quando você deseja que os dispositivos recebam apenas a última mensagem publicada em um tópico após uma reconexão.  |  As sessões persistentes são úteis para dispositivos que têm conectividade intermitente e podem perder várias mensagens importantes. Os dispositivos podem se conectar a uma sessão persistente para receber mensagens enviadas enquanto estão off-line.  | 
|  **Exemplos**  |  As mensagens retidas podem fornecer aos dispositivos informações de configuração sobre seu ambiente quando eles ficam on-line. A configuração inicial pode incluir uma lista de outros tópicos de mensagens nos quais ele deve se inscrever ou informações sobre como ele deve configurar seu fuso horário local.  |  Dispositivos que se conectam por uma rede celular com conectividade intermitente podem usar sessões persistentes para evitar a perda de mensagens importantes enviadas enquanto um dispositivo está fora da cobertura da rede ou precisa desligar o rádio do celular.   | 
|  **Mensagens recebidas na assinatura inicial de um tópico**  |  Depois de assinar um tópico com uma mensagem retida, a mensagem retida mais recente é recebida.  |  Depois de assinar um tópico sem uma mensagem retida, nenhuma mensagem é recebida até que uma seja publicada no tópico.  | 
|  **Tópicos assinados após a reconexão**  |  Sem uma sessão persistente, o cliente deve se inscrever nos tópicos após a reconexão.  |  Os tópicos inscritos são restaurados após a reconexão.  | 
|  **Mensagens recebidas após a reconexão**  |  Depois de assinar um tópico com uma mensagem retida, a mensagem retida mais recente é recebida.   |  Todas as mensagens publicadas com uma QOS = 1 e assinadas com uma QOS =1 enquanto o dispositivo estava desconectado são enviadas após a reconexão do dispositivo.  | 
|  **Data/expiração da sessão**   |  No MQTT 3, as mensagens retidas não expiram. Elas são armazenados até serem substituídas ou excluídas. No MQTT 5, as mensagens retidas expiram após o intervalo de expiração da mensagem que você definiu. Para obter mais informações, consulte [Expiração da mensagem](#mqtt5).  |  As sessões persistentes expiram se o cliente não se reconectar dentro do tempo limite. Depois que uma sessão persistente expira, as assinaturas e mensagens salvas do cliente publicadas com uma QOS = 1 e assinadas com uma QOS = 1 enquanto o dispositivo estava desconectado são excluídas. As mensagens expiradas não serão entregues. Para obter mais informações sobre expirações de sessões persistentes, consulte [Sessões persistentes do MQTT](#mqtt-persistent-sessions).  | 

Para obter mais informações sobre sessões persistentes, consulte [Sessões persistentes do MQTT](#mqtt-persistent-sessions).

Com as mensagens retidas, o cliente de publicação determina se uma mensagem deve ser retida e entregue a um dispositivo após a conexão, independentemente de ter tido uma sessão anterior ou não. A escolha de armazenar uma mensagem é feita pelo publicador e a mensagem armazenada é entregue a todos os clientes atuais e futuros que usam assinaturas de QoS 0 ou QoS 1. As mensagens retidas mantêm apenas uma mensagem sobre um determinado tópico por vez.

Quando uma conta armazena o número máximo de mensagens retidas, AWS IoT Core retorna uma resposta limitada às mensagens publicadas com RETAIN definido e cargas superiores a 0 bytes até que algumas mensagens retidas sejam excluídas e a contagem de mensagens retidas fique abaixo do limite.

### O MQTT reteve mensagens e AWS IoT sombras do dispositivo
<a name="mqtt-retain-shadow"></a>

Tanto as mensagens retidas quanto as sombras do dispositivo retêm dados de um dispositivo, mas se comportam de maneira diferente e servem a propósitos diferentes. Esta seção descreve suas semelhanças e diferenças.


|    |  Mensagens retidas  |  Device Shadows  | 
| --- | --- | --- | 
|  **A carga útil da mensagem tem uma estrutura ou esquema predefinido**  | Conforme definido pela implementação. O MQTT não especifica uma estrutura ou esquema para sua carga de mensagens. |  AWS IoT suporta uma estrutura de dados específica.  | 
|  **A atualização da carga útil da mensagem gera mensagens de eventos**  | A publicação de uma mensagem retida envia a mensagem aos clientes inscritos, mas não gera mensagens de atualização adicionais. |  A atualização de uma Sombra do dispositivo produz [mensagens de atualização que descrevem a alteração](https://docs.aws.amazon.com//iot/latest/developerguide/device-shadow-mqtt.html#update-delta-pub-sub-topic).  | 
|  **As atualizações de mensagens são numeradas**  | As mensagens retidas não são numeradas automaticamente. | Os documentos de Sombra do dispositivo têm números de versão e carimbos de data e hora automáticos. | 
|  **A carga útil da mensagem é anexada a um recurso**  | As mensagens retidas não são anexadas a um recurso. |  Sombras do dispositivo são anexadas a um recurso de objeto.  | 
|  **Atualização de elementos individuais da carga útil da mensagem**  |  Elementos individuais da mensagem não podem ser alterados sem atualizar toda a carga útil da mensagem.  |  Elementos individuais de um documento de Sombra do dispositivo podem ser atualizados sem a necessidade de atualizar todo o documento de Sombra do dispositivo.  | 
|  **O cliente recebe dados da mensagem no momento da assinatura**  |  O cliente recebe automaticamente uma mensagem retida depois de assinar um tópico com uma mensagem retida.  |  Os clientes podem assinar as atualizações de Sombra do dispositivo, mas devem solicitar o estado atual deliberadamente.  | 
|  **Indexação e capacidade de pesquisa**  |  As mensagens retidas não são indexadas para pesquisa.  |  A indexação de frotas indexa dados de Sombra do dispositivo para pesquisa e agregação.  | 

## Mensagens de Último testamento e Testamento (LWT, Last Will and Testament) do MQTT
<a name="mqtt-lwt"></a>

Último testamento e Testamento (LWT, Last Will and Testament) é um atributo do MQTT. Com o LWT, os clientes podem especificar uma mensagem que o corretor publicará em um tópico definido pelo cliente e enviará a todos os clientes que se inscreveram no tópico quando ocorrer uma desconexão não iniciada. A mensagem que os clientes especificam é chamada de mensagem LWT ou Mensagem de testamento, e o tópico que os clientes definem é chamado de Tópico de testamento. Você pode especificar uma mensagem LWT quando um dispositivo se conecta ao agente. Essas mensagens podem ser retidas definindo o sinalizador `Will Retain` no campo `Connect Flag bits` durante a conexão. Por exemplo, se o sinalizador `Will Retain` estiver definido como `1`, uma mensagem de testamento será armazenada no corretor no tópico de testamento associado. Para obter mais informações, consulte [Mensagens de Will](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc479576982).

Ao gerenciar conexões de clientes, você pode controlar se as mensagens LWT são publicadas quando você desconecta um cliente. Para obter mais informações, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect).

O corretor armazenará as mensagens de testamento até que ocorra uma desconexão não iniciada. Quando isso acontecer, o corretor publicará as mensagens para todos os clientes que se inscreveram no Tópico de testamento para notificar a desconexão. Se o cliente se desconectar do agente com uma desconexão iniciada pelo cliente usando a mensagem MQTT DISCONNECT, o broker não publicará as mensagens LWT armazenadas. Em todos os outros casos, as mensagens LWT serão enviadas. Devido à natureza assíncrona do processamento de desconexão, não é garantido que as mensagens LWT sejam enviadas em ordem durante a reconexão. Recomendamos que você use [eventos de ciclo](life-cycle-events.md) de vida para melhorar a precisão da detecção do estado de conectividade, pois esses eventos fornecem atributos como registros de data e hora e números de versão para gerenciar eventos. out-of-order Para obter uma lista completa dos cenários de desconexão em que o agente enviará as mensagens LWT, confira [Eventos de conexão/desconexão](https://docs.aws.amazon.com//iot/latest/developerguide/life-cycle-events.html#connect-disconnect).

## Uso do ConnectAttributes
<a name="connect-attribute"></a>

O `ConnectAttributes` permite que você especifique quais atributos deseja usar na mensagem de conexão em suas políticas do IAM, como `PersistentConnect` e `LastWill`. Com o `ConnectAttributes`, você pode criar políticas que não dão aos dispositivos acesso a novos recursos por padrão, o que pode ser útil se um dispositivo for comprometido.

O `connectAttributes` oferece suporte aos seguintes recursos:

`PersistentConnect`  
Use o atributo `PersistentConnect` para salvar todas as assinaturas que o cliente faz durante a conexão quando a conexão entre o cliente e o corretor é interrompida.

`LastWill`  
Use o atributo `LastWill` para publicar uma mensagem no `LastWillTopic` quando um cliente se desconectar inesperadamente.

Por padrão, Sua política tem uma conexão não persistente e não há atributos passados para essa conexão. Você deve especificar uma conexão persistente em sua política do IAM se quiser ter uma.

Ao gerenciar conexões de clientes, você pode visualizar os atributos de conexão e a configuração da sessão para clientes conectados. Para obter mais informações, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect).

Para exemplos de `ConnectAttributes`, consulte [Exemplos da política de conexão](connect-policy.md).

## Recursos compatíveis com o MQTT 5
<a name="mqtt5"></a>

AWS IoT Core o suporte para o MQTT 5 é baseado na [especificação MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), com algumas diferenças, conforme documentado em. [AWS IoT diferenças das especificações do MQTT](#mqtt-differences)

**Topics**
+ [Assinaturas compartilhadas](#mqtt5-shared-subscription)
+ [Início limpo e expiração da sessão](#mqtt5-clean-start)
+ [Código de motivo em todos ACKs](#mqtt5-reason-code)
+ [Aliases de tópicos](#mqtt5-topic-alias)
+ [Validade da mensagem](#mqtt5-message-expiry)
+ [Outros recursos do MQTT 5](#mqtt5-other-features)

### Assinaturas compartilhadas
<a name="mqtt5-shared-subscription"></a>

AWS IoT Core suporta assinaturas compartilhadas para o MQTT 3.1.1 e o MQTT 5. As assinaturas compartilhadas permitem que vários clientes compartilhem uma assinatura de um tópico e somente um cliente receberá mensagens publicadas nesse tópico usando uma distribuição randomizada. As assinaturas compartilhadas podem efetivamente balancear a carga das mensagens do MQTT entre vários assinantes. Por exemplo, digamos que você tenha 1.000 dispositivos publicando no mesmo tópico e 10 aplicativos de backend processando essas mensagens. Nesse caso, as aplicações de backend podem assinar o mesmo tópico e cada um receberá mensagens publicadas aleatoriamente pelos dispositivos no tópico compartilhado. Isso é efetivamente “compartilhar” a carga dessas mensagens. As assinaturas compartilhadas também permitem uma melhor resiliência. Quando qualquer aplicativo de backend é desconectado, o agente distribui a carga para os assinantes restantes no grupo. Quando todos os assinantes se desconectam, as mensagens ficam na fila.

Os recursos de enfileiramento de mensagens estão disponíveis para assinaturas compartilhadas nas conexões MQTT 3.1.1 e MQTT 5 para melhorar a confiabilidade da entrega de mensagens.

Para usar assinaturas compartilhadas, os clientes assinam um [filtro de tópicos](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) de uma assinatura compartilhada da seguinte maneira:

```
$share/{ShareName}/{TopicFilter}
```
+ `$share` é uma string literal para indicar o filtro de tópicos de uma Assinatura Compartilhada, que deve começar com `$share`.
+ `{ShareName}` é uma cadeia de caracteres para especificar o nome compartilhado usado por um grupo de assinantes. O filtro de tópicos de uma assinatura compartilhada deve conter um `ShareName` e ser seguido pelo caractere `/`. O `{ShareName}` não deve incluir os seguintes caracteres:`/`, `+` ou `#`. O tamanho máximo de `{ShareName}` é de 128 caracteres UTF-8. 
+ O `{TopicFilter}` segue a mesma sintaxe que o [filtro de tópicos](https://docs.aws.amazon.com//iot/latest/developerguide/topics.html#topicfilters) de uma assinatura não compartilhada. O tamanho máximo de `{TopicFilter}` é de 256 caracteres UTF-8.
+ As duas barras obrigatórias (`/`) para `$share/{ShareName}/{TopicFilter}` não estão incluídas no limite de [Número máximo de barras no tópico e filtro de tópicos](https://console.aws.amazon.com/servicequotas/home/services/iotcore/quotas/L-AD5A8D4F). 

As assinaturas que têm o mesmo `{ShareName}/{TopicFilter}` pertencem ao mesmo grupo de assinaturas compartilhadas. Você pode criar vários grupos de assinaturas compartilhadas e não exceder o [limite de assinaturas compartilhadas por grupo](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits). Para obter mais informações, consulte [Endpoints e cotas do AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) na *Referência geral da AWS *.

As tabelas a seguir comparam assinaturas não compartilhadas e as assinaturas compartilhadas:


****  

| Assinatura | Description | Exemplos de filtro do tópico | 
| --- | --- | --- | 
| Assinaturas não compartilhadas | Cada cliente cria uma assinatura separada para receber as mensagens publicadas. Quando uma mensagem é publicada em um tópico, todos os assinantes desse tópico recebem uma cópia da mensagem. | <pre>sports/tennis<br />sports/#</pre> | 
| Assinaturas compartilhadas | Vários clientes podem compartilhar uma assinatura de um tópico e somente um cliente receberá mensagens publicadas nesse tópico em uma distribuição aleatória. |  <pre>$share/consumer/sports/tennis<br />$share/consumer/sports/#</pre>  | 


****  

| Fluxo de assinaturas não compartilhadas  | Fluxo de assinaturas compartilhadas | 
| --- | --- | 
|  ![\[Assinaturas regulares para MQTT 3 e MQTT 5 in. AWS IoT Core\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/mqtt_regular_subscription.gif)  |  ![\[Assinaturas compartilhadas para MQTT 3 e MQTT 5 em. AWS IoT Core\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/mqtt_shared_subscription.gif)  | 

**Observações importantes sobre o uso de assinaturas compartilhadas**
+ Se o grupo de assinantes compartilhado consistir em qualquer assinante de sessão persistente, quando todos os assinantes do grupo compartilhado estiverem desconectados ou se algum assinante violar o limite de solicitações de publicação por segundo por conexão, todas as mensagens de QoS 1 não confirmadas e mensagens de QoS 1 não entregues publicadas em um grupo de assinatura compartilhado serão colocadas em fila. Para acessar mais informações, consulte [Enfileiramento de mensagens de assinaturas compartilhadas](#mqtt5-shared-subscription-message-queuing).
+ As mensagens de QoS 0 publicadas em um grupo de assinatura compartilhado serão descartadas em caso de falha.
+ As assinaturas compartilhadas não recebem [mensagens retidas](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-retain) ao assinar padrões de tópicos como parte de um grupo compartilhado de assinantes. As mensagens publicadas em tópicos com assinantes compartilhados e com o sinalizador `RETAIN` definido são entregues aos assinantes compartilhados como qualquer outra mensagem publicada.
+ Quando as assinaturas compartilhadas contêm caracteres curinga (\$1 ou \$1), pode haver várias assinaturas compartilhadas correspondentes a um tópico. Se isso acontecer, o agente de mensagens copiará a mensagem de publicação e a enviará a um cliente aleatório em cada assinatura compartilhada correspondente. O comportamento curinga das assinaturas compartilhadas pode ser explicado no diagrama a seguir.  
![\[Assinaturas compartilhadas com caracteres curinga em. AWS IoT Core\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/mqtt_shared_subscriptions_wildcard.gif)

  Neste exemplo, há três assinaturas compartilhadas correspondentes ao tópico de publicação do MQTT `sports/tennis`. O agente de mensagens copia a mensagem publicada e a envia para um cliente aleatório em cada grupo correspondente.

  O cliente 1 e o cliente 2 compartilham a assinatura: `$share/consumer1/sports/tennis`

  O cliente 3 e o cliente 4 compartilham a assinatura: `$share/consumer1/sports/#`

  O cliente 5 e o cliente 6 compartilham a assinatura: `$share/consumer2/sports/tennis`

Para acessar mais informações sobre limites de assinaturas compartilhadas, consulte [AWS IoT Core endpoints and quotas](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) na *Referência geral da AWS *. Para testar assinaturas compartilhadas usando o cliente AWS IoT MQTT no [AWS IoT console](https://console.aws.amazon.com/iot/home), consulte. [Testar assinaturas compartilhadas no cliente MQTT](view-mqtt-messages.md#view-mqtt-shared-subscriptions) Você também pode ver em quais tópicos os clientes conectados assinaram, incluindo assinaturas compartilhadas, usando os recursos de gerenciamento de conexão do cliente. Para obter mais informações, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect). Para obter mais informações sobre assinaturas compartilhadas, consulte [Assinaturas compartilhadas](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901250) da especificação 4.0. MQTTv5

#### Enfileiramento de mensagens de assinaturas compartilhadas
<a name="mqtt5-shared-subscription-message-queuing"></a>

Para aumentar a confiabilidade da entrega de mensagens, as assinaturas compartilhadas incluem recursos de enfileiramento de mensagens que armazenam mensagens quando não há assinantes on-line disponíveis. Quando um grupo de assinatura compartilhado contém pelo menos um membro com uma sessão persistente, o recurso de enfileiramento é habilitado para o grupo. Ao distribuir mensagens, os membros on-line são selecionados como destinatários. As mensagens de QoS 1 são colocadas na fila quando nenhum membro é encontrado on-line ou quando os assinantes excedem o limite [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). As mensagens em fila são entregues quando os membros existentes retomam suas sessões persistentes ou quando novos membros ingressam no grupo. As mensagens em fila são entregues em até vinte mensagens em fila por segundo por assinante do grupo ativo, junto com quaisquer outras mensagens entregues ao assinante de acordo com as assinaturas.

Por padrão, a retenção de mensagens em fila segue a cota [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). No entanto, se um intervalo de expiração de mensagens (MEI) for definido na mensagem de publicação de entrada, o MEI terá precedência. Quando o MEI está presente, ele determina o período de retenção da mensagem, independentemente do período de expiração da sessão persistente.

As taxas de fila de mensagens são limitadas de acordo com a cota [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), e o número de mensagens é limitado pela cota [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 visualizar e gerenciar suas cotas, acesse o console [Service Quotas](https://console.aws.amazon.com/servicequotas/home).

Você pode monitorar a fila CloudWatch pesquisando no `AWS/Usage` namespace ou pode usar o seguinte comando da CLI para `ApproximateQueueDepth` listar as métricas associadas à profundidade da fila de cada grupo de assinaturas compartilhadas. 

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

Quando esses limites são excedidos, somente as mensagens que já estavam na fila antes de atingir o limite são retidas. Novas mensagens recebidas que excederiam os limites são descartadas. O sistema não substitui mensagens antigas em fila por mensagens mais novas.

O enfileiramento de mensagens é registrado em CloudWatch métricas e CloudWatch registros. Para obter informações sobre as entradas gravadas em CloudWatch e CloudWatch Logs, consulte [Métricas do agente de mensagens](metrics_dimensions.md#message-broker-metrics) [Entrada de log em fila](cwl-format.md#log-mb-queued) e. Ainda ocorre cobrança pelas mensagens em fila de acordo com a taxa de mensagens padrão. Para obter mais informações sobre os preços das mensagens, consulte [Preços do AWS IoT Core](https://aws.amazon.com/iot-core/pricing).

**Ciclo de vida da sessão em um grupo de assinatura compartilhado**

Quando uma sessão limpa assina um grupo, ela se torna um membro on-line do grupo. Quando cancela a assinatura ou se desconecta, a sessão limpa sai do grupo.

Quando uma sessão persistente assina um grupo, ela se torna um membro on-line do grupo. Quando ela se desconecta, ainda permanece no grupo, mas se torna um membro offline do grupo. Quando ela se reconecta, se torna um membro on-line novamente. A sessão persistente deixa o grupo quando ela cancela explicitamente a assinatura ou quando expira após a desconexão.

### Início limpo e expiração da sessão
<a name="mqtt5-clean-start"></a>

Você pode usar o Clean Start e o Session Expiry para lidar com suas sessões persistentes com mais flexibilidade. Um sinalizador Clean Start indica se a sessão deve começar sem usar uma sessão existente. O intervalo de expiração da sessão indica por quanto tempo manter a sessão após uma desconexão. O intervalo de expiração da sessão pode ser modificado na desconexão. Para obter mais informações, consulte [Sessões persistentes do MQTT](#mqtt-persistent-sessions).

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

Você pode depurar ou processar mensagens de erro com mais facilidade usando os códigos de motivo. Os códigos de motivo são retornados pelo agente de mensagens com base no tipo de interação com o corretor (Assinar, Publicar, Confirmar). Para obter mais informações, consulte [Códigos de motivo do MQTT](#mqtt5-reason-codes). Para obter uma lista completa dos códigos de motivo do MQTT, consulte a especificação do [MQTT v5](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031).

### Aliases de tópicos
<a name="mqtt5-topic-alias"></a>

Você pode substituir o nome de um tópico por um alias de tópico, que é um número inteiro de dois bytes. O uso de aliases de tópicos pode otimizar a transmissão de nomes de tópicos para reduzir potencialmente os custos de dados em serviços de dados medidos. AWS IoT Core tem um limite padrão de 8 aliases de tópicos. Para obter mais informações, consulte [Endpoints e cotas do AWS IoT Core](https://docs.aws.amazon.com//general/latest/gr/iot-core.html) na *Referência geral da AWS *.

### Validade da mensagem
<a name="mqtt5-message-expiry"></a>

Você pode adicionar valores de expiração de mensagens às mensagens publicadas. Esses valores representam o intervalo de expiração da mensagem (MEI) em segundos. Se as mensagens não tiverem sido enviadas aos assinantes dentro desse intervalo, a mensagem expirará e será removida. Se você não definir o valor de expiração da mensagem, ela não expirará.

Na saída, o assinante receberá uma mensagem com o tempo restante no intervalo de expiração. Por exemplo, se uma mensagem de publicação de entrada tiver uma expiração de 30 segundos e for encaminhada para o assinante após 20 segundos, o campo de expiração da mensagem será atualizado para 10. É possível que a mensagem recebida pelo assinante tenha um MEI atualizado de 0. Isso porque, assim que o tempo restante for de 999 ms ou menos, ele será atualizado para 0.

Em AWS IoT Core, o MEI mínimo é 1. Se o intervalo for definido como 0 do lado do cliente, ele será ajustado para 1. O intervalo máximo de expiração da mensagem é 604800 (7 dias). Qualquer valor maior que isso será ajustado para o valor máximo.

Na comunicação entre versões, o comportamento da expiração da mensagem é decidido pela versão MQTT da mensagem de publicação de entrada. Por exemplo, uma mensagem com expiração de mensagem enviada por uma sessão conectada via MQTT5 pode expirar para dispositivos inscritos com sessões. MQTT3 A tabela abaixo mostra como a expiração de mensagens oferece suporte aos seguintes tipos de mensagens publicadas:


****  

| Publicar tipo de mensagem | Intervalo de expiração da mensagem | 
| --- | --- | 
| Publicação regular | Se um servidor não entregar a mensagem dentro do prazo especificado, a mensagem expirada será removida e o assinante não a receberá. Isso inclui situações como quando um dispositivo não está fazendo backup de suas mensagens do QoS 1.  | 
| Reter | Se uma mensagem retida expirar e um novo cliente se inscrever no tópico, o cliente não receberá a mensagem após a assinatura. | 
| Último testamento | O intervalo para as mensagens de último testamento começa depois que o cliente se desconecta e o servidor tenta entregar a mensagem de último testamento aos assinantes. | 
| Mensagens na fila | Se uma QoS 1 de saída com intervalo de expiração de mensagens expirar quando um cliente estiver offline, após a retomada da [sessão persistente](#mqtt-persistent-sessions), o cliente não receberá a mensagem expirada. | 

### Outros recursos do MQTT 5
<a name="mqtt5-other-features"></a>

**Desconexão do servidor**

Quando ocorre uma desconexão, o servidor pode enviar proativamente ao cliente um DISCONNECT para notificar o encerramento da conexão com um código de motivo para a desconexão.

**Resposta/solicitação**

Os editores podem solicitar que uma resposta seja enviada pelo destinatário para um tópico especificado pelo publicador no momento do recebimento.

**Tamanho máximo do pacote**

O cliente e o servidor podem especificar de modo independente o tamanho máximo do pacote ao qual eles dão suporte.

**Formato de carga útil e tipo de conteúdo**

Você pode especificar o formato da carga útil (binário, texto) e o tipo de conteúdo quando uma mensagem é publicada. Eles são encaminhados para o destinatário da mensagem.

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

As propriedades do MQTT 5 são adições importantes ao padrão MQTT para oferecer suporte aos novos recursos do MQTT 5, como a expiração da sessão e o padrão. Request/Response Em AWS IoT Core, você pode criar [regras](https://docs.aws.amazon.com//iot/latest/developerguide/republish-rule-action.html) que podem encaminhar as propriedades em mensagens de saída ou usar [HTTP Publish](https://docs.aws.amazon.com//iot/latest/apireference/API_iotdata_Publish.html) para publicar mensagens MQTT com algumas das novas propriedades.

A tabela a seguir lista todas as propriedades do MQTT 5 que AWS IoT Core suportam.


| Propriedade | Description | Tipo de entrada | Pacote | 
| --- | --- | --- | --- | 
| Indicador de formato da carga útil | Um valor booliano que indica se a carga útil está formatada como UTF-8. | Byte | PUBLICAR, CONECTAR | 
| Tipo de conteúdo | Uma string UTF-8 que descreve o conteúdo da carga útil. | String UTF-8 | PUBLICAR, CONECTAR | 
| Tópico de resposta | Uma string UTF-8 que descreve o tópico que o destinatário deve publicar como parte do fluxo solicitação-resposta. O tópico não deve conter caracteres curinga. | String UTF-8 | PUBLICAR, CONECTAR | 
| Dados de correlação | Os dados binários usados pelo remetente da mensagem de solicitação para identificar para qual solicitação é a mensagem de resposta. | Binário | PUBLICAR, CONECTAR | 
| Propriedades do usuário | Um par de strings UTF-8. Essa propriedade pode aparecer várias vezes em um pacote. Os destinatários receberão os pares de chave-valor na mesma ordem em que são enviados. | Par de strings UTF-8 | CONECTAR, PUBLICAR, Propriedades, ASSINAR, DESCONECTAR, REMOVER ASSINATURA | 
| Intervalo de expiração da mensagem | Um valor inteiro de 4 bytes que representa o intervalo de expiração da mensagem em segundos. Se ausente, a mensagem não expira. | inteiro de 4 bytes | PUBLICAR, CONECTAR | 
| Intervalo de expiração da sessão |  Um número inteiro de 4 bytes que representa o intervalo de expiração da sessão em segundos. AWS IoT Core suporta no máximo 7 dias, com um máximo padrão de uma hora. Se o valor definido exceder o máximo da sua conta, AWS IoT Core retornará o valor ajustado no CONNACK.  | inteiro de 4 bytes | CONECTAR, CONNACK, DESCONECTAR | 
| Identificador de cliente atribuído | Um ID de cliente aleatório gerado AWS IoT Core quando um ID de cliente não é especificado pelos dispositivos. O ID aleatório do cliente deve ser um novo identificador de cliente que não seja usado por nenhuma outra sessão atualmente gerenciada pelo corretor. | String UTF-8 | CONNACK | 
| Servidor Keep Alive | Um número inteiro de 2 bytes que representa o tempo de manutenção de atividade atribuído pelo servidor. O servidor desconectará o cliente se o cliente ficar inativo por mais do que o tempo de manutenção de atividade. | Inteiro de 2 bytes | CONNACK | 
| Solicitar informações sobre o problema | Um valor booliano que indica se a string do motivo ou as propriedades do usuário são enviadas no caso de falhas. | Byte | CONECTAR | 
| Máximo de recebimento | Um inteiro de 2 bytes que representa o número máximo de pacotes PUBLICAR QOS > 0 que podem ser enviados sem receber um PUBACK. | Inteiro de 2 bytes | CONNECT, CONNACK | 
| Tópico: máximo do alias | Esse valor indica o valor mais alto que será aceito como um alias de tópico. O padrão é 0. | Inteiro de 2 bytes | CONNECT, CONNACK | 
| QoS máximo | O valor máximo de QoS que AWS IoT Core suporta. O padrão é 1. O AWS IoT Core não comporta QoS 2. | Byte | CONNACK | 
| Reter disponível |  Um valor booleano que indica se o agente de AWS IoT Core mensagens suporta mensagens retidas. O padrão é um.  | Byte | CONNACK | 
| Tamanho máximo do pacote | O tamanho máximo do pacote que AWS IoT Core aceita e envia. Não pode exceder 128 KB. | inteiro de 4 bytes | CONNECT, CONNACK | 
| Assinatura de curinga disponível |  Um valor booleano que indica se o agente de AWS IoT Core mensagens oferece suporte à assinatura Wildcard Available. O padrão é um.  | Byte | CONNACK | 
| Identificador de assinatura disponível |  Um valor booleano que indica se o agente de AWS IoT Core mensagens oferece suporte ao Identificador de Assinatura Disponível. O padrão é 0.  | Byte | CONNACK | 

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

O MQTT 5 introduz relatórios de erros aprimorados com respostas de código de motivo. AWS IoT Core pode retornar códigos de motivo, incluindo, mas não se limitando aos seguintes, agrupados por pacotes. Para obter uma lista completa dos códigos de motivo com suporte no MQTT 5, confira [especificações do MQTT v5](https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901031).


**Códigos de motivo do CONNACK**  

| Valor | Hex | Nome do código de motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Bem-sucedida | A conexão é criptografada. | 
| 128 | 0x80 | Erro não especificado | O servidor não deseja revelar o motivo da falha, ou nenhum dos outros códigos de motivo se aplica. | 
| 133 | 0x85 | O identificador de cliente não é válido | O identificador do cliente é uma string válida, mas não é permitido pelo servidor. | 
| 134 | 0x86 | Nome de usuário ou senha incorretos | O servidor não aceita o nome de usuário ou a senha especificados pelo cliente. | 
| 135 | 0x87 | Não autorizado | O cliente não está autorizado a se conectar. | 
| 144 | 0x90 | Nome do tópico inválido | O nome do tópico do testamento está formado corretamente, mas não é aceito pelo servidor. | 
| 151 | 0x97 | Cota excedida | Um limite imposto administrativo ou de implementação foi excedido. | 
| 155 | 0x9B | Não há suporte ao QoS | O servidor não dá suporte a QoS definida na QoS do Testamento. | 


**Códigos de motivo PUBACK**  

| Valor | Hex | Nome do código de motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Bem-sucedida | A mensagem foi aceita. A publicação da mensagem de QoS 1 continua. | 
| 128 | 0x80 | Erro não especificado | O destinatário não aceita a publicação, mas não quer revelar o motivo ou ele não corresponde a um dos outros valores. | 
| 135 | 0x87 | Não autorizado | A ação PUBLICAR não é autorizada. | 
| 144 | 0x90 | Nome do tópico inválido | O nome do tópico não está mal formado, mas não é aceito pelo cliente ou servidor. | 
| 145 | 0x91 | Identificador de pacote em uso | O identificador do pacote já está em uso. Isso pode indicar uma incompatibilidade no estado da sessão entre o cliente e o servidor. | 
| 151 | 0x97 | Cota excedida | Um limite imposto administrativo ou de implementação foi excedido. | 


**Código do motivo da ação DESCONECTAR**  

| Valor | Hex | Nome do código de motivo | Description | 
| --- | --- | --- | --- | 
| 129 | 0x81 | Pacote malformado | O pacote recebido não está em conformidade com essa especificação. | 
| 130 | 0x82 | Erro de protocolo | Um pacote inesperado ou fora de ordem foi recebido. | 
| 135 | 0x87 | Não autorizado | A solicitação não está autorizada. | 
| 139 | 0x8B | Encerramento do servidor | O servidor está sendo desligado. | 
| 141 | 0x8D | Tempo limite do Keep Alive | A conexão está fechada porque nenhum pacote foi recebido por 1,5 veze o tempo de Keep Alive. | 
| 142 | 0x8E | Sessão retomada | Outra conexão usando o mesmo ClientID foi conectada, fazendo com que essa conexão seja fechada. | 
| 143 | 0x8F | Filtro de tópicos inválido | O filtro de tópicos está formado corretamente, mas não é aceito pelo servidor. | 
| 144 | 0x90 | Nome do tópico inválido | O nome do tópico está formado corretamente, mas não é aceito por esse cliente ou servidor. | 
| 147 | 0x93 | Máximo de recebimento excedido | O cliente ou o servidor recebeu mais do que a publicação Máximo de recebimento para a qual não enviou PUBACK ou PUBCOMP. | 
| 148 | 0x94 | Aliases do tópico inválido | O cliente ou servidor recebeu um pacote PUBLICAR contendo um alias de tópico maior que o alias de tópico máximo enviado no pacote CONECTAR ou CONNACK. | 
| 151 | 0x97 | Cota excedida | Um limite imposto administrativo ou de implementação foi excedido. | 
| 152 | 0x98 | Ação administrativa | A conexão foi encerrada devido a uma ação administrativa. | 
| 155 | 0x9B | Não há suporte ao QoS | O cliente especificou uma QoS maior que a QoS especificada em uma QoS máxima no CONNACK. | 
| 161 | 0xA1 | Identificadores de assinatura sem suporte | O servidor não tem suporte para identificadores de assinatura; a assinatura não é aceita. | 


**Códigos de motivo SUBACK**  

| Valor | Hex | Nome do código de motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | QoS concedida 0 | A assinatura é aceita e a QoS máxima enviada será QoS 0. Pode ser uma QoS menor do que a solicitada. | 
| 1 | 0x01 | QoS concedida 1 | A assinatura é aceita e a QoS máxima enviada será QoS 1. Pode ser uma QoS menor do que a solicitada. | 
| 128 | 0x80 | Erro não especificado | A assinatura não é aceita e o Servidor não deseja revelar o motivo ou nenhum dos outros Códigos de Motivo se aplica. | 
| 135 | 0x87 | Não autorizado | O Cliente não está autorizado a fazer essa assinatura. | 
| 143 | 0x8F | Filtro de tópicos inválido | O Filtro de tópicos está formado corretamente, mas não é permitido para este Cliente. | 
| 145 | 0x91 | Identificador de pacote em uso | O identificador do pacote já está em uso. | 
| 151 | 0x97 | Cota excedida | Um limite imposto administrativo ou de implementação foi excedido. | 


**Códigos de motivo UNSUBACK**  

| Valor | Hex | Nome do código de motivo | Description | 
| --- | --- | --- | --- | 
| 0 | 0x00 | Bem-sucedida | A assinatura é excluída. | 
| 128 | 0x80 | Erro não especificado | Não foi possível concluir a assinatura e o Servidor não deseja revelar o motivo ou nenhum dos outros Códigos de Motivo se aplica. | 
| 143 | 0x8F | Filtro de tópicos inválido | O Filtro de tópicos está formado corretamente, mas não é permitido para este Cliente. | 
| 145 | 0x91 | Identificador de pacote em uso | O identificador do pacote já está em uso. | 

## AWS IoT diferenças das especificações do MQTT
<a name="mqtt-differences"></a>

A implementação do agente de mensagens é baseada na [especificação MQTT v3.1.1](http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html) e na [Especificação MQTT v5.0](http://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html), mas difere das especificações das seguintes maneiras:
+ AWS IoT não suporta os seguintes pacotes para o MQTT 3: PUBREC, PUBREL e PUBCOMP.
+ AWS IoT não suporta os seguintes pacotes para o MQTT 5: PUBREC, PUBREL, PUBCOMP e AUTH.
+ AWS IoT não suporta o redirecionamento do servidor MQTT 5.
+ AWS IoT suporta somente os níveis 0 e 1 de qualidade de serviço (QoS) do MQTT. AWS IoT não suporta publicação ou assinatura com QoS nível 2. Quando o nível 2 da QoS é solicitado, o agente de mensagens do não envia um PUBACK ou SUBACK.
+ Em AWS IoT, assinar um tópico com QoS nível 0 significa que uma mensagem é entregue zero ou mais vezes. Uma mensagem pode ser entregue mais de uma vez. As mensagens entregues mais de uma vez podem ser enviadas com outro ID de pacote. Nesses casos, o sinalizador DUP não é definido.
+ Ao responder a uma solicitação de conexão, o agente de mensagens envia uma mensagem CONNACK. Essa mensagem contém um sinalizador para indicar se a conexão está retomando uma sessão anterior.
+ Antes de enviar pacotes de controle adicionais ou uma solicitação de desconexão, o cliente deve esperar que a mensagem CONNACK seja recebida em seu dispositivo pelo agente de mensagens AWS IoT .
+ Quando um cliente se inscreve em um tópico, pode haver uma demora entre o momento em que o operador envia uma mensagem SUBACK e o momento em que o cliente começa a receber novas mensagens correspondentes.
+ Quando um cliente usa o caractere curinga `#` no filtro de tópicos para assinar um tópico, há correspondência de todas as sequências de caracteres em e abaixo de seu nível na hierarquia de tópicos. Porém, o tópico principal não corresponde. Por exemplo, uma assinatura do tópico `sensor/#` recebe mensagens publicadas para os tópicos `sensor/`, `sensor/temperature`, `sensor/temperature/room1`, mas não as mensagens publicadas para `sensor`. Para obter mais informações sobre curingas, consulte [Filtros de nomes de tópicos](topics.md#topicfilters).
+ O agente de mensagens usa o ID do cliente para identificar cada cliente. O ID do cliente é transmitido do cliente para o agente de mensagens como parte da carga útil do MQTT. Dois clientes com o mesmo ID de cliente não podem ser conectados simultaneamente ao agente de mensagens. Quando um cliente se conecta ao agente de mensagens usando um ID que outro cliente está usando, a nova conexão do cliente é aceita e o cliente conectado anteriormente é desconectado. Você também pode desconectar manualmente os clientes usando o. APIs Para obter mais informações, consulte [Gerenciar conexões do MQTT](#mqtt-client-disconnect).
+ Em raras ocasiões, o agente de mensagens pode reenviar a mesma mensagem lógica PUBLICAR com um ID de pacote diferente.
+ A assinatura de filtros de tópicos que contêm um caractere curinga não pode receber mensagens retidas. Para receber uma mensagem retida, a solicitação de assinatura deve conter um filtro de tópico que corresponda exatamente ao tópico da mensagem retida.
+ O agente de mensagens não garante a ordem em que as mensagens e o ACK são recebidos.
+ AWS IoT podem ter limites diferentes das especificações. Para obter mais informações, consulte [agente de mensagens AWS IoT Core e limites e cotas do protocolo](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits) no *Guia de referência do AWS IoT *.
+ Não há suporte para o sinalizador MQTT DUP.

## Gerenciar conexões do MQTT
<a name="mqtt-client-disconnect"></a>

AWS IoT Core fornece ajuda APIs para gerenciar conexões MQTT, incluindo a capacidade de desconectar clientes e gerenciar suas sessões. Esses recursos oferecem mais controle sobre sua frota de AWS IoT clientes e ajudam na solução de problemas de conexão.

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

Use a `DeleteConnection` API para desconectar dispositivos MQTT AWS IoT Core especificando seu cliente. IDs Quando você desconecta um cliente, AWS IoT Core desconecta o cliente do agente de mensagens e, opcionalmente, pode limpar o estado da sessão e suprimir a AWS IoT Core mensagem Last Will and Testament (LWT).

Quando você chama a `DeleteConnection` API, AWS IoT Core executa várias ações para garantir uma desconexão limpa. AWS IoT Core primeiro envia uma mensagem de desconexão do MQTT ao cliente para encerrar a sessão do MQTT. Em seguida, o serviço fecha o TCP/TLS soquete subjacente.

O agente de mensagens envia um pacote `DISCONNECT` ao dispositivo e publica um [evento de ciclo de vida](life-cycle-events.md) com o motivo da desconexão `API_INITIATED_DISCONNECT`. Isso ajuda a identificar quando uma desconexão foi iniciada por meio da API e não pelo cliente ou devido a problemas de rede. Você pode monitorar esses eventos para fins de visibilidade, solução de problemas e auditoria. Por exemplo, você pode usar AWS IoT regras para processar esses eventos para rastrear quando e por que os clientes foram desconectados.

Se você definir o `cleanSession` parâmetro como`true`, AWS IoT Core remove o estado da sessão do cliente, incluindo todas as assinaturas e mensagens em fila. Se você limpar uma sessão, a sessão persistente será encerrada. Se o cliente tiver uma sessão persistente e o parâmetro `preventWillMessage` estiver definido como `false`, o serviço enviará a mensagem LWT, se disponível, o que é útil durante as operações de manutenção planejadas.

Quando você chama a API `DeleteConnection`, o processo de desconexão começa imediatamente, mas o momento exato em que o cliente reconhece a desconexão pode variar com base nas condições da rede e na implementação do cliente. A maioria dos clientes detectará a desconexão em alguns segundos, mas, em alguns casos, com conectividade de rede inadequada, pode levar mais tempo para que o cliente reconheça que foi desconectado.

**nota**  
Ao forçar a desconexão, o cliente precisa se autenticar e reautorizar com um novo estado de sessão. A chamada de API em si não impede a reconexão dos clientes. Se isso for desejado, além disso, a credencial ou a política do cliente deverão ser modificadas antes de emitir a chamada de API `DeleteConnection`.

Para obter mais informações sobre preços, consulte [Preços do AWS IoT Core](https://aws.amazon.com/iot-core/pricing/).

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

A API `DeleteConnection` é útil para gerenciar clientes que apresentam comportamento problemático ou consomem recursos excessivos. Ao forçar a desconexão, você pode garantir que os clientes restabeleçam suas conexões com autenticação e autorização adequadas, o que pode ajudar a resolver problemas de consumo de recursos.

Os cenários de redirecionamento de clientes também se beneficiam dessa API. Quando você precisa redirecionar clientes para endpoints diferentes ou Regiões da AWS pode desconectá-los programaticamente e fazer com que eles se reconectem a um endpoint diferente AWS IoT Core alterando as configurações de DNS. Essa API pode ajudar a resolver conexões bloqueadas ou eliminar estados de sessão problemáticos que podem estar impedindo a operação normal.

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

A API `DeleteConnection` aceita os seguintes parâmetros:

clientId (obrigatório)  
O identificador exclusivo do cliente do MQTT a ser desconectado. Isso é especificado no caminho do URL. O ID do cliente não pode começar com cifrão (\$1).  
O cliente MQTT IDs pode conter caracteres que não são válidos em solicitações HTTP. Ao usar a API `DeleteConnection`, você deve codificar em URL (codificação percentual) quaisquer caracteres no ID do cliente que sejam válidos no MQTT, mas não em HTTP. Isso inclui caracteres especiais, como espaços, barras (/) e caracteres UTF-8. Por exemplo, um espaço se torna %20, uma barra invertida se torna %2F e o caractere UTF-8 ü se torna %C3%BC. A codificação adequada garante que o cliente IDs MQTT seja transmitido corretamente na chamada de API baseada em HTTP.

cleanSession (opcional)  
Especifica se o estado da sessão do cliente deve ser removido ao se desconectar. Defina como `true` para excluir todas as informações da sessão, incluindo assinaturas e mensagens em fila. Defina como `false` para preservar o estado da sessão. Por padrão, isso é definido como `false` (preserva o estado da sessão). Para sessões limpas, esse parâmetro será ignorado.

preventWillMessage (opcional)  
Controla se a mensagem AWS IoT Core Last Will and Testament (LWT) é enviada se estiver disponível após a desconexão. Defina como `true` para evitar o envio da mensagem LWT. Defina como `false` para permitir o envio. Por padrão, isso é definido como `false` (envia o LWT, se disponível).

#### Sintaxe da API
<a name="delete-connection-syntax"></a>

A API `DeleteConnection` usa o seguinte formato de solicitação HTTP:

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

Exemplo de solicitações:

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

Solicitações bem-sucedidas exibem HTTP 200 OK sem corpo de resposta.

**nota**  
O nome do serviço usado pelo [AWS Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) para assinar solicitações é: *iotdevicegateway*. Você pode encontrar o endpoint usando o comando `aws iot describe-endpoint --endpoint-type iot:Data-ATS`.

#### Permissões obrigatórias
<a name="delete-connection-permissions"></a>

Para usar a API `DeleteConnection`, é necessário ter a seguinte permissão do IAM:

```
iot:DeleteConnection
```

Você pode definir essa permissão para um cliente específico IDs usando políticas baseadas em recursos. Por exemplo:

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

#### Considerações importantes
<a name="delete-connection-considerations"></a>

Clientes desconectados podem tentar se reconectar imediatamente, a menos que você tenha implementado uma lógica adicional para evitar a reconexão. A operação de desconexão apenas encerra a conexão atual e não impede que uma conexão se estabeleça novamente. Se você precisar evitar a reconexão, pense em implementar a lógica do lado do cliente ou desabilitar a credencial de um dispositivo.

Os limites de taxa se aplicam à API como parte da limitação de taxa padrão da AWS IoT Core API. Ao planejar operações de desconexão em massa, leve em conta esses limites e implemente a lógica de nova tentativa e as estratégias de agrupamento em lote apropriadas para evitar o controle de utilização. Para saber mais, consulte [Endpoints e cotas do AWS IoT Core](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits).

#### Respostas de erro
<a name="delete-connection-errors"></a>

A API `DeleteConnection` pode exibir as seguintes respostas de erro:

InvalidRequestException  
A solicitação não é válida. Isso poderá ocorrer se o formato do ID do cliente for inválido, contiver um prefixo de cifrão (\$1) ou se os parâmetros necessários estiverem ausentes.

ResourceNotFoundException  
O ID do cliente especificado não existe ou não está conectado no momento e não tem uma sessão persistente.

UnauthorizedException  
Você não tem autorização para executar esta operação. Garanta que você tenha as permissões `iot:DeleteConnection` necessárias.

ForbiddenException  
O chamador não está autorizado a fazer a solicitação. Isso pode ocorrer devido a permissões insuficientes do IAM ou restrições de políticas baseadas em recursos.

ThrottlingException  
A taxa excede o limite. Reduza a frequência de suas chamadas de API e implemente a lógica de nova tentativa apropriada com recuo exponencial.

InternalFailureException  
Ocorreu um erro inesperado. Tente fazer a solicitação novamente após um breve atraso.

ServiceUnavailableException  
O serviço está temporariamente indisponível. Tente fazer a solicitação novamente após um breve atraso.

# Publicação HTTPS
<a name="http"></a>

Os clientes podem publicar mensagens fazendo solicitações para a API REST usando os protocolos HTTP 1.0 ou 1.1. Para os mapeamentos de porta e autenticação usados por solicitações HTTP, consulte [Protocolos, mapeamentos de porta e autenticação](protocols.md#protocol-mapping).

**nota**  
O HTTPS é compatível com um valor de `clientId` como o MQTT. O `clientId` está disponível ao usar o MQTT, mas não está disponível ao usar HTTPS.

## URL da mensagem HTTPS
<a name="httpurl"></a>

Dispositivos e clientes publicam suas mensagens fazendo solicitações POST para um endpoint específico do cliente e um URL específico do tópico:

```
https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
```
+  *IoT\$1data\$1endpoint*é o [endpoint de dados do AWS IoT dispositivo](iot-connect-devices.md#iot-connect-device-endpoints). Você pode encontrar o endpoint no AWS IoT console na página de detalhes da coisa ou no cliente usando o AWS CLI comando: 

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

   O endpoint deve ser algo parecido com isto: `a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com` 
+ *url\$1encoded\$1topic\$1name*é o [nome completo do tópico](topics.md#topicnames) da mensagem que está sendo enviada.

## Exemplos de código de mensagem HTTPS
<a name="codeexample"></a>

Estes são alguns exemplos de como enviar uma mensagem HTTPS à 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 ]

Você pode usar o [curl](https://curl.haxx.se) de um cliente ou dispositivo para enviar uma mensagem para a AWS IoT.

**Para usar o curl para enviar uma mensagem de um dispositivo AWS IoT cliente**

1. Verifique a versão do **curl**.

   1. No cliente, execute esse comando em um prompt de comando.

      **curl --help**

      No texto de ajuda, procure as opções de TLS. Você deve ver a opção `--tlsv1.2`.

   1. Se você vir a opção `--tlsv1.2`, continue.

   1. Se você não vir a opção `--tlsv1.2` ou receber um erro `command not found`, pode ser necessário atualizar ou instalar o curl no cliente ou instalar o `openssl` antes de continuar.

1. Instale os certificados no cliente.

   Copie os arquivos de certificado que você criou quando registrou seu cliente (coisa) no AWS IoT console. Verifique se você tem esses três arquivos de certificado no cliente antes de continuar.
   + O arquivo de certificado CA (*Amazon-root-CA-1.pem* neste exemplo).
   + O arquivo de certificado do cliente (*device.pem.crt* neste exemplo).
   + O arquivo de chave privada do cliente (*private.pem.key* neste exemplo).

1. Crie a linha de comando **curl**, substituindo os valores substituíveis pelos da sua conta e do 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*  
O nome e o caminho do arquivo, se necessário, do certificado CA para verificar o peer.  
--certificado *device.pem.crt*  
O nome e o caminho do arquivo de certificado do cliente, se necessário.  
--chave *private.pem.key*  
O nome e o caminho do arquivo de chave privada do cliente, se necessário.  
--solicitação POST  
O tipo de solicitação HTTP (nesse caso, POST).  
--dados "” *\$1 \$1"message\$1": \$1"Hello, world\$1" \$1*  
Os dados de HTTP POST que você deseja publicar. Nesse caso, é uma string JSON, com as aspas internas escapadas com o caractere de barra invertida (\$1).  
“https: *IoT\$1data\$1endpoint* //:8443/topics/? *topic* qos = 1"  
A URL do endpoint de dados do AWS IoT dispositivo do seu cliente, seguida pela porta HTTPS`:8443`, seguida pela palavra-chave `/topics/` e pelo nome do tópico`topic`, nesse caso. Especifique a qualidade do serviço como o parâmetro de consulta, `?qos=1`.

1. Abra o cliente de teste MQTT no AWS IoT console.

   Siga as instruções [Exibir mensagens MQTT com o cliente AWS IoT MQTT](view-mqtt-messages.md) e configure o console para assinar mensagens com o nome do tópico *topic* usado em seu **curl** comando ou use o filtro de tópico curinga de`#`.

1. Teste o comando.

   Ao monitorar o tópico no cliente de teste do console do AWS IoT , acesse o cliente e emita a linha de comando curl criada na etapa 3. Você deve ver as mensagens do cliente no console.

------

# Tópicos do MQTT
<a name="topics"></a>

Os tópicos do MQTT identificam AWS IoT mensagens. AWS IoT os clientes identificam as mensagens que publicam dando nomes de tópicos às mensagens. Os clientes identificam as mensagens que desejam assinar (receber) registrando um filtro de tópico com o AWS IoT Core. O agente de mensagens usa nomes de tópicos e filtros de tópicos para rotear mensagens de clientes de publicação a clientes assinatura.

O agente de mensagens usa tópicos para identificar mensagens enviadas usando MQTT e HTTP para o [URL da mensagem HTTPS](http.md#httpurl).

Embora AWS IoT ofereça suporte a alguns [tópicos reservados do sistema](reserved-topics.md), a maioria dos tópicos do MQTT é criada e gerenciada por você, o designer do sistema. AWS IoT usa tópicos para identificar mensagens recebidas de clientes de publicação e selecionar mensagens para enviar aos clientes assinantes, conforme descrito nas seções a seguir. Antes de criar um namespace de tópico para seu sistema, revise as características dos tópicos MQTT para criar a hierarquia de nomes de tópicos que funciona melhor para seu sistema de IoT.

## Nomes de tópicos
<a name="topicnames"></a>

Os nomes de tópicos e os filtros de tópicos são strings codificadas em UTF-8. Eles podem representar uma hierarquia de informações usando o caractere barra (/) para separar os níveis da hierarquia. Por exemplo, o nome deste tópico pode se referir a um sensor de temperatura no compartimento 1:
+ `sensor/temperature/room1`

Neste exemplo, também pode haver outros tipos de sensores em outros compartimentos com nomes de tópicos, como:
+ `sensor/temperature/room2`
+ `sensor/humidity/room1`
+ `sensor/humidity/room2`

**nota**  
Ao considerar os nomes de tópicos para as mensagens no sistema, lembre-se de que:  
Os nomes de tópicos e os filtros de tópico diferenciam letras maiúsculas de minúsculas.
Os nomes de tópicos não devem conter informações de identificação pessoal.
Os nomes de tópicos que começam com \$1 são [tópicos reservados](reserved-topics.md) para serem usados somente pelo AWS IoT Core.
AWS IoT Core não consigo enviar ou receber mensagens entre Conta da AWS s ou regiões.

Para obter mais informações sobre como criar seus nomes de tópicos e namespace, consulte nosso whitepaper, [Projetando tópicos em 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 exemplos de como os aplicativos podem publicar e assinar mensagens, comece com [Introdução aos AWS IoT Core tutoriais](iot-gs.md) e [AWS IoT Device SDKs, Mobile SDKs e AWS IoT Device Client](iot-sdks.md).

**Importante**  
O namespace do tópico é limitado a uma região Conta da AWS e. Por exemplo, o `sensor/temp/room1` tópico usado por um Conta da AWS em uma região é diferente do `sensor/temp/room1` tópico usado pela mesma AWS conta em outra região ou usado por qualquer outra Conta da AWS em qualquer região.

## Tópico ARN
<a name="topicnames-arn"></a>

Todos os tópicos ARNs (Amazon Resource Names) têm o seguinte formato:

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

Por exemplo, `arn:aws:iot:us-west-2:123EXAMPLE456:topic/application/topic/device/sensor` é um ARN para o tópico ` application/topic/device/sensor`.

## Filtros de nomes de tópicos
<a name="topicfilters"></a>

Os clientes assinantes registram filtros de tópico no agente de mensagens a fim de especificar os tópicos que o agente de mensagens deve enviar a eles. Um filtro de nome de tópico pode corresponder a apenas um tópico ou incluir caracteres curinga para permitir a assinatura de vários nomes de tópico simultaneamente.

Os clientes de publicação não podem usar caracteres curinga nos nomes de tópicos que publicam. 

A tabela a seguir lista os caracteres curinga que podem ser usados em um filtro de tópico. 


**Curingas de tópicos**  

| Caractere curinga | Correspondências | Observações | 
| --- | --- | --- | 
| \$1 | Todas as strings de caracteres em e abaixo de seu nível na hierarquia de tópicos. |  Deve ser o último caractere no filtro de tópico.  Deve ser o único caractere no nível da hierarquia de tópicos. Pode ser usado em um filtro de tópico que também contém o caractere curinga \$1.  | 
| \$1 | Qualquer string no nível que contém o caractere. |  Deve ser o único caractere no nível da hierarquia de tópicos. Pode ser usado em vários níveis de um filtro de tópico.  | 

Exemplos de uso de curingas com o nome de tópico do sensor anterior:
+ Uma assinatura de `sensor/#` recebe mensagens publicadas em `sensor/`, `sensor/temperature`, `sensor/temperature/room1`, mas não mensagens publicadas em `sensor`. 
+ Uma assinatura de `sensor/+/room1` recebe mensagens publicadas em `sensor/temperature/room1` e `sensor/humidity/room1`, mas não mensagens enviadas para `sensor/temperature/room2` ou `sensor/humidity/room2`.

### ARN do filtro do tópico
<a name="topicfilters-arn"></a>

Todos os filtros de tópicos ARNs (Amazon Resource Names) têm o seguinte formato:

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

Por exemplo, `arn:aws:iot:us-west-2:123EXAMPLE456:topicfilter/application/topic/+/sensor` é um ARN para o filtro de tópicos` application/topic/+/sensor`.

# Carga útil da mensagem do MQTT
<a name="topicdata"></a>

A carga útil da mensagem enviada em suas mensagens do MQTT não é especificada por AWS IoT, a menos que seja para uma das. [Tópicos reservados](reserved-topics.md) Para acomodar as necessidades do seu aplicativo, recomendamos que você defina a carga útil da mensagem para seus tópicos dentro das restrições das [AWS IoT Core Service Quotas para protocolos](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#iot-protocol-limits). 

Usar um formato JSON para sua carga de mensagens permite que o mecanismo de AWS IoT regras analise suas mensagens e aplique consultas SQL a elas. Se seu aplicativo não precisar do mecanismo de regras para aplicar consultas SQL às cargas úteis de mensagens, você poderá usar qualquer formato de dados que seu aplicativo exija. Para obter informações sobre limitações e caracteres reservados em um documento JSON usado em consultas SQL, consulte [Extensões JSON](iot-sql-json.md). 

Para obter mais informações sobre como criar seus tópicos do MQTT e suas cargas de mensagens correspondentes, consulte [Como criar tópicos do 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).

Se o limite de tamanho de uma mensagem exceder as service quotas, isso resultará em um `CLIENT_ERROR` motivo `PAYLOAD_LIMIT_EXCEEDED` e é exibida a mensagem “A carga útil da mensagem excede o limite de tamanho para o tipo de mensagem”. Para obter mais informações sobre o limite de tamanho de mensagens, consulte [AWS IoT Core limites e cotas do agente de mensagens](https://docs.aws.amazon.com//general/latest/gr/iot-core.html#message-broker-limits.html).

# Tópicos reservados
<a name="reserved-topics"></a>

Os tópicos que começam com um cifrão (\$1) são reservados para uso por AWS IoT. É possível assinar e publicar nesses tópicos reservados conforme permitido. No entanto, não é possível criar tópicos que comecem com um cifrão. Operações de publicação ou assinatura sem suporte em tópicos reservados podem resultar no encerramento de uma conexão.

## Tópicos de modelos de ativos
<a name="reserved-topics-other"></a>


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1 aws/sitewise/asset -models/ /assets/ /properties/ *assetModelId* *assetId* *propertyId*  |  Assinar  |  AWS IoT SiteWise publica notificações de propriedades de ativos neste tópico. Para obter mais informações, consulte [Interagindo com outros AWS serviços](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/interact-with-other-services.html) no *Guia do AWS IoT SiteWise usuário*.  | 

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

Essas mensagens oferecem suporte a buffers de resposta no formato Concise Binary Object Representation (CBOR) e em JavaScript Object Notation (JSON), dependendo do tópico. *payload-format* AWS IoT Device Defender os tópicos suportam somente a publicação em MQTT.


| *payload-format* | Tipo de dados do formato de resposta | 
| --- | --- | 
| cbor | Representação Concisa de Objetos Binários (CBOR) | 
| json | JavaScript Notação de objeto (JSON) | 

Para obter mais informações, consulte [Enviar métricas de dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).


| Tópico | Operações permitidas | Description | 
| --- | --- | --- | 
|  *thingName*\$1aws/things/ /defender/metrics/ *payload-format*  |  Publicar  |  AWS IoT Device Defender agentes publicam métricas para esse tópico. Para obter mais informações, consulte [Enviar métricas de 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*  |  Assinar  |  AWS IoT publica neste tópico depois que um AWS IoT Device Defender agente publica uma mensagem bem-sucedida em *thingName* \$1aws/things/ /defender/metrics/. *payload-format* Para obter mais informações, consulte [Enviar métricas de dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).   | 
|  \$1aws/things/ /defender/metrics/ /rejeitado *thingName* *payload-format*  |  Assinar  |  AWS IoT publica neste tópico depois que um AWS IoT Device Defender agente publica uma mensagem malsucedida em \$1aws/things/ /defender/metrics/. *thingName* *payload-format* Para obter mais informações, consulte [Enviar métricas de dispositivos](https://docs.aws.amazon.com/iot-device-defender/latest/devguide/detect-device-side-metrics.html#DetectMetricsMessages).   | 

## AWS IoT Core Tópicos de localização do dispositivo
<a name="reserved-topics-device-location"></a>

AWS IoT Core A localização do dispositivo pode resolver os dados de medição do seu dispositivo e fornecer uma localização estimada dos seus dispositivos de IoT. Os dados de medição do dispositivo podem incluir GNSS, Wi-Fi, celular e endereço IP. AWS IoT Core Em seguida, a localização do dispositivo escolhe o tipo de medição que fornece a melhor precisão e resolve as informações de localização do dispositivo. Para obter mais informações, consulte [AWS IoT Core Localização do dispositivo](device-location.md) e [Resolvendo a localização do dispositivo usando a localização do AWS IoT Core dispositivo (tópicos do MQTT)](device-location-reserved-topics.md).


| Tópico | Operações permitidas | Description | 
| --- | --- | --- | 
|  \$1 aws/device\$1location/ /get\$1position\$1estimate *customer\$1device\$1id*  |  Publicar  |  Um dispositivo publica este tópico para que os dados brutos de medição digitalizados sejam resolvidos pela localização AWS IoT Core do dispositivo.  | 
|  \$1 aws/device\$1location/ /get\$1position\$1estimate/accepted *customer\$1device\$1id*  |  Assinar  |  AWS IoT Core A localização do dispositivo é publicada neste tópico depois de resolver a localização do dispositivo com êxito.  | 
|  \$1 aws/device\$1location/ /get\$1position\$1estimate/rejeitado *customer\$1device\$1id*  |  Assinar  |  AWS IoT Core A localização do dispositivo é publicada neste tópico quando não é possível resolver a localização do dispositivo com êxito devido a erros 4xx.  | 

## Tópicos de eventos
<a name="reserved-topics-event"></a>

As mensagens de evento são publicadas quando determinados eventos acontecem. Por exemplo, os eventos são gerados pelo registro quando as objetos são adicionadas, atualizadas ou excluídas. A tabela mostra os vários AWS IoT eventos e seus tópicos reservados.


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1aws/events/certificates/registered/*caCertificateId*  |  Assinar  |  AWS IoT publica essa mensagem ao registrar AWS IoT automaticamente um certificado e quando um cliente apresenta um certificado com o `PENDING_ACTIVATION` status. Para obter mais informações, consulte [Configurar a primeira conexão feita por um cliente para registro automático](auto-register-device-cert.md#configure-auto-reg-first-connect).  | 
|  \$1aws/events/job/*jobID*/cancelado  |  Assinar  | AWS IoT publica essa mensagem quando um trabalho é cancelado. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/job/jobID/cancelamento\$1em\$1andamento |  Assinar  | AWS IoT publica essa mensagem quando um cancelamento de trabalho está em andamento. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
|  \$1aws/events/job/*jobID*/concluído  |  Assinar  | AWS IoT publica essa mensagem quando um trabalho é concluído. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/job/jobID/excluído |  Assinar  | AWS IoT publica essa mensagem quando um trabalho é excluído. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/job/jobID/deletion\$1in\$1progress |  Assinar  | AWS IoT publica essa mensagem quando a exclusão de um trabalho está em andamento. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/cancelado |  Assinar  | AWS IoT publica essa mensagem quando a execução de um trabalho é cancelada. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/excluído |  Assinar  | AWS IoT publica essa mensagem quando uma execução de trabalho é excluída. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/falhou |  Assinar  | AWS IoT publica essa mensagem quando a execução de um trabalho falha. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/rejeitado |  Assinar  | AWS IoT publica essa mensagem quando a execução de um trabalho é rejeitada. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/removido |  Assinar  | AWS IoT publica essa mensagem quando a execução de um trabalho é removida. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/foi bem sucedido |  Assinar  | AWS IoT publica essa mensagem quando a execução de um trabalho é bem-sucedida. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
| \$1aws/events/jobExecution/jobID/timed\$1out |  Assinar  | AWS IoT publica essa mensagem quando a execução de um trabalho atinge o tempo limite. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md). | 
|  \$1aws/events/presence/connected/*clientId*  |  Assinar  |  AWS IoT publica neste tópico quando um cliente MQTT com o ID do cliente especificado se conecta a. AWS IoT Para obter mais informações, consulte [Eventos de conexão/desconexão](life-cycle-events.md#connect-disconnect).  | 
|  \$1aws/events/presence/disconnected/*clientId*  |  Assinar  |  AWS IoT publica neste tópico quando um cliente MQTT com a ID de cliente especificada se desconecta a. AWS IoT Para obter mais informações, consulte [Eventos de conexão/desconexão](life-cycle-events.md#connect-disconnect).   | 
|  \$1aws/events/subscriptions/subscribed/*clientId*  |  Assinar  |  AWS IoT publica neste tópico quando um cliente MQTT com o ID de cliente especificado se inscreve em um tópico do MQTT. Para obter mais informações, consulte [Eventos de assinatura/cancelamento de assinatura](life-cycle-events.md#subscribe-unsubscribe-events).  | 
|  \$1aws/events/subscriptions/unsubscribed/*clientId*  |  Assinar  |  AWS IoT publica neste tópico quando um cliente MQTT com o ID de cliente especificado cancela a assinatura de um tópico MQTT. Para obter mais informações, consulte [Eventos de assinatura/cancelamento de assinatura](life-cycle-events.md#subscribe-unsubscribe-events).  | 
|  \$1aws/events/thing/*thingName*/criado  |  Assinar  |  AWS IoT publica neste tópico quando a *thingName* coisa é criada. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thing/*thingName*/atualizado  |  Assinar  |  AWS IoT publica neste tópico quando a *thingName* coisa é atualizada. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thing/*thingName*/excluído  |  Assinar  |  AWS IoT publica neste tópico quando a *thingName* coisa é excluída. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroup/*thingGroupName*/criado  |  Assinar  |  AWS IoT publica neste tópico quando um grupo de coisas *thingGroupName* é criado. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroup/*thingGroupName*/atualizado  |  Assinar  |  AWS IoT publica neste tópico quando o grupo de coisas *thingGroupName* é atualizado. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroup/*thingGroupName*/excluído  |  Assinar  |  AWS IoT publica neste tópico quando um grupo de coisas *thingGroupName* é excluído. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingType/*thingTypeName*/criado  |  Assinar  |  AWS IoT publica neste tópico quando o tipo de *thingTypeName* coisa é criado. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingType/*thingTypeName*/atualizado  |  Assinar  |  AWS IoT publica neste tópico quando o tipo de *thingTypeName* coisa é atualizado. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingType/*thingTypeName*/excluído  |  Assinar  |  AWS IoT publica neste tópico quando o tipo de *thingTypeName* coisa é excluído. Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingTypeAssociation/thing/*thingName*/*thingTypeName*  |  Assinar  |  AWS IoT publica neste tópico quando algo *thingName* está associado ou desassociado do tipo de coisa. *thingTypeName* Para obter mais informações, consulte [Eventos de registro](registry-events.md).  | 
|  \$1aws/events/thingGroupMembership/thingGroup/*thingGroupName*/thing/ /adicionado *thingName*  |  Assinar  |   AWS IoT publica neste tópico quando algo *thingName* é adicionado ao grupo *thingGroupName* de coisas. Para obter mais informações, consulte [Eventos de registro](registry-events.md).   | 
|  \$1aws/events/thingGroupMembership/thingGroup/*thingGroupName*/thing/ /removido *thingName*  |  Assinar  |   AWS IoT publica neste tópico quando algo *thingName* é removido do grupo *thingGroupName* de coisas. Para obter mais informações, consulte [Eventos de registro](registry-events.md).   | 
|   \$1aws/events/thingGroupHierarchy/thingGroup//*parentThingGroupName*childThingGroup/*childThingGroupName*/adicionado  |  Assinar  |   AWS IoT publica neste tópico quando um grupo de coisas *childThingGroupName* é adicionado ao grupo *parentThingGroupName* de coisas. Para obter mais informações, consulte [Eventos de registro](registry-events.md).   | 
|   \$1aws/events/thingGroupHierarchy/thingGroup//*parentThingGroupName*childThingGroup/*childThingGroupName*/removido  |  Assinar  |   AWS IoT publica neste tópico quando o grupo de coisas *childThingGroupName* é removido do grupo *parentThingGroupName* de coisas. Para obter mais informações, consulte [Eventos de registro](registry-events.md).   | 

## Tópicos de provisionamento de frota
<a name="reserved-topics-fleet"></a>

**nota**  
As operações do cliente anotadas como **Receber** nesta tabela indicam tópicos que AWS IoT são publicados diretamente no cliente que os solicitou, independentemente de o cliente ter se inscrito no tópico ou não. Os clientes devem esperar receber essas mensagens de resposta mesmo que não sejam assinantes delas. Essas mensagens de resposta não passam pelo agente de mensagens e não podem ser assinadas por outros clientes ou regras.

Essas mensagens oferecem suporte a buffers de resposta no formato Concise Binary Object Representation (CBOR) e em JavaScript Object Notation (JSON), dependendo do tópico. *payload-format*


| *payload-format* | Tipo de dados do formato de resposta | 
| --- | --- | 
| cbor | Representação Concisa de Objetos Binários (CBOR) | 
| json | JavaScript Notação de objeto (JSON) | 

Para obter mais informações, consulte [API MQTT de provisionamento de dispositivos](fleet-provision-api.md).


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1aws/certificates/create/*payload-format*  |  Publicar  |  Publique nesse tópico para criar um certificado usando uma solicitação de assinatura de certificado (CSR).  | 
|  \$1aws/certificates/create/*payload-format*/aceito  |  Assine, receba  |  AWS IoT publica neste tópico após uma chamada bem-sucedida para \$1aws/certificates/create/*payload-format*.  | 
|  \$1aws/certificates/create/*payload-format*/rejeitado  |  Assine, receba  |  AWS IoT publica neste tópico após uma chamada malsucedida para \$1aws/certificates/create/. *payload-format*  | 
|  \$1 aws/certificates/create -de-csr/ *payload-format*  |  Publicar  |  Publica nesse tópico para criar um certificado a partir de uma CSR.  | 
|  \$1 aws/certificates/create *payload-format* -from-csr/ /aceito  |  Assine, receba  |  AWS IoT publica neste tópico uma chamada bem-sucedida para \$1 aws/certificates/create *payload-format* -from-csr/.  | 
|  \$1 aws/certificates/create *payload-format* -from-csr/ /rejeitado  | Assine, receba |  AWS IoT publica neste tópico uma chamada malsucedida para \$1 aws/certificates/create -from-csr/. *payload-format*  | 
|  \$1aws/provisioning-templates/ /provision/ *templateName* *payload-format*  |  Publicar  |  Publique nesse tópico para registrar um objeto.  | 
|  \$1aws/provisioning-templates/ /provision/ /accepted *templateName* *payload-format*  | Assine, receba |  AWS IoT publica neste tópico após uma chamada bem-sucedida para *templateName* \$1aws/provisioning-templates/ /provision/. *payload-format*  | 
|  \$1aws/provisioning-templates/ /provision/ /rejeitado *templateName* *payload-format*  |  Assine, receba  |  AWS IoT publica neste tópico após uma chamada malsucedida para *templateName* \$1aws/provisioning-templates/ /provision/. *payload-format*  | 

## Tópicos de trabalhos
<a name="reserved-topics-job"></a>

**nota**  
As operações do cliente anotadas como **Receber** nesta tabela indicam tópicos que AWS IoT são publicados diretamente no cliente que os solicitou, independentemente de o cliente ter se inscrito no tópico ou não. Os clientes devem esperar receber essas mensagens de resposta mesmo que não sejam assinantes delas.  
Essas mensagens de resposta não passam pelo agente de mensagens e não podem ser assinadas por outros clientes ou regras. Para assinar mensagens relacionadas a atividades de trabalhos, use os tópicos `notify` e `notify-next`.  
Ao assinar os tópicos de tarefas e `jobExecution` eventos de sua solução de monitoramento de frota, você deve primeiro habilitar os eventos de [tarefas e execução de tarefas para receber quaisquer eventos](iot-events.md) no lado da nuvem.  
Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1 *thingName* aws/things/ /jobs/get  |  Publicar  |  Os dispositivos publicam uma mensagem neste tópico para fazer uma solicitação `GetPendingJobExecutions`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1 aws/coisas//*thingName*jobs/get/accepted  |  Assine, receba  |  Os dispositivos se inscrevem nesse tópico para receber respostas bem-sucedidas de uma solicitação `GetPendingJobExecutions`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).   | 
|  \$1 aws/coisas//*thingName*jobs/get/rejected  |  Assine, receba  |  Os dispositivos assinam este tópico para receber uma resposta quando uma solicitação `GetPendingJobExecutions` é rejeitada. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  *thingName*\$1aws/things/ /jobs/start-next  |  Publicar  |  Os dispositivos publicam uma mensagem neste tópico para fazer uma solicitação `StartNextPendingJobExecution`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1 aws/coisas//*thingName*jobs/start-next/accepted  |  Assine, receba  |  Os dispositivos assinam este tópico para receber respostas bem-sucedidas para uma solicitação `StartNextPendingJobExecution`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1 aws/coisas//*thingName*jobs/start-next/rejected  |  Assine, receba  |  Os dispositivos assinam este tópico para receber uma resposta quando uma solicitação `StartNextPendingJobExecution` é rejeitada. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ /get *thingName* *jobId*  |  Publicar  |  Os dispositivos publicam uma mensagem neste tópico para fazer uma solicitação `DescribeJobExecution`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ /get/accepted *thingName* *jobId*  |  Assine, receba  |  Os dispositivos assinam este tópico para receber respostas bem-sucedidas para uma solicitação `DescribeJobExecution`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ /get/rejeitado *thingName* *jobId*  |  Assine, receba  |  Os dispositivos assinam este tópico para receber uma resposta quando uma solicitação `DescribeJobExecution` é rejeitada. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ /update *thingName* *jobId*  |  Publicar  |  Os dispositivos publicam uma mensagem neste tópico para fazer uma solicitação `UpdateJobExecution`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1aws/things/ /jobs/ /update/accepted *thingName* *jobId*  |  Assine, receba  |  Os dispositivos assinam este tópico para receber respostas de êxito de uma solicitação `UpdateJobExecution`. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  Observação Somente o dispositivo que publica em \$1aws/things/ *thingName* /jobs/ *jobId* /update recebe mensagens sobre esse tópico.   | 
|  \$1aws/things/ /jobs/ /update/rejeitado *thingName* *jobId*  |  Assine, receba  |  Os dispositivos assinam este tópico para receber uma resposta quando uma solicitação `UpdateJobExecution` é rejeitada. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  Observação Somente o dispositivo que publica em \$1aws/things/ *thingName* /jobs/ *jobId* /update recebe mensagens sobre esse tópico.   | 
|  *thingName*\$1aws/things/ /jobs/notify  |  Assine, receba  |  Os dispositivos assinam este tópico para receber notificações quando uma execução de tarefa é adicionada à lista de execuções pendentes de um objeto ou removida dela. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  *thingName*\$1aws/things/ /jobs/notify-next  |  Assine, receba  |  Os dispositivos assinam este tópico para receber notificações quando a próxima execução de tarefa pendente para o objeto é alterada. Para obter mais informações, consulte [Operações da API MQTT do dispositivo de trabalhos](jobs-mqtt-api.md).  | 
|  \$1aws/events/job/*jobId*/concluído  |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando uma tarefa é concluída. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/cancelado  |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando uma tarefa é cancelada. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/excluído   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando uma tarefa é excluída. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/cancelamento\$1em\$1andamento   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando o cancelamento de uma tarefa começa. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).  | 
|  \$1aws/events/job/*jobId*/deletion\$1in\$1progress   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando a exclusão de tarefa começa. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/foi bem sucedido   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando a execução da tarefa é bem-sucedida. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/falhou   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando uma execução de tarefa falha. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/rejeitado   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando uma execução de tarefa é rejeitada. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/cancelado   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando a execução de uma tarefa é cancelada. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/timed\$1out   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando a execução de uma tarefa atinge o tempo limite. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/removido   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando a execução de uma tarefa é removida. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 
|  \$1aws/events/jobExecution/*jobId*/excluído   |  Assinar  |  O serviço Tarefas publica um evento neste tópico quando a execução de uma tarefa é excluída. Para obter mais informações, consulte [Eventos de trabalho](events-jobs.md).   | 

## Tópicos de comandos
<a name="reserved-topics-commands"></a>

**nota**  
As operações do cliente anotadas como **Receber** nesta tabela indicam tópicos que AWS IoT são publicados diretamente no cliente que os solicitou, independentemente de o cliente ter se inscrito no tópico ou não. Os clientes devem esperar receber essas mensagens de resposta mesmo que não sejam assinantes delas.  
Essas mensagens de resposta não passam pelo agente de mensagens e não podem ser assinadas por outros clientes ou regras.


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1aws/commands///executions/ /request/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/commands///executions/ /request *<devices>* *<DeviceID>* *<ExecutionId>*  |  Assine, receba  |  Os dispositivos recebem uma mensagem sobre esse tópico quando é feita uma solicitação para iniciar uma execução de comando no console ou usando a API `StartCommandExecution`. Nesse caso, *<devices>* podem ser coisas de IoT ou clientes MQTT e *<DeviceID>* podem ser o nome da coisa de IoT ou o ID do cliente MQTT.  | 
|  \$1aws/commands///executions/ /response/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>*  |  Publicar  |  Os dispositivos usam a API `UpdateCommandExecution` do MQTT para publicar uma mensagem nesse tópico sobre a execução do comando. A mensagem é publicada como uma resposta à solicitação para iniciar uma execução de comando no console ou usando a API `StartCommandExecution`. A mensagem publicada usará JSON ou CBOR como o. *<PayloadFormat>*  | 
|  \$1aws/commands///executions/ /response/accepted/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/commands///executions/ /response/accepted *<devices>* *<DeviceID>* *<ExecutionId>*  |  Assine, receba  |  Se o serviço de nuvem tiver processado com êxito o resultado da execução do comando, o AWS IoT Device Management publicará uma resposta no tópico /accepted.  | 
|  \$1aws/commands///executions/ /response/rejected/ *<devices>* *<DeviceID>* *<ExecutionId>* *<PayloadFormat>* \$1aws/commands///executions/ /response/rejeitado *<devices>* *<DeviceID>* *<ExecutionId>*  |  Publicar  |  Se o serviço de nuvem não conseguir processar o resultado da execução do comando, o AWS IoT Device Management publicará uma resposta no tópico /rejected.  | 

## Tópicos de regras
<a name="reserved-topics-rule"></a>


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1 aws/rules/ *ruleName*  |  Publicar  |  Um dispositivo ou um aplicativo faz publicações nesse tópico para acionar regras diretamente. Para obter mais informações, consulte [Reduzir custos do sistema de mensagens com Ingestão básica](iot-basic-ingest.md).   | 

## Proteger tópicos de túneis
<a name="reserved-topics-secure"></a>


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  *thing-name*\$1aws/things/ /tunnels/notify  |  Assinar  |   AWS IoT publica essa mensagem para que um agente de IoT inicie um proxy local no dispositivo remoto. Para obter mais informações, consulte [Snippet de atendente de IoT](configure-remote-device.md#agent-snippet).   | 

## Tópicos de sombra
<a name="reserved-topics-shadow"></a>

Os tópicos desta seção são usados por sombras nomeadas e sem nome. Os tópicos usados por cada uma diferem apenas no prefixo do tópico. Esta tabela mostra o prefixo do tópico usado em cada tipo de sombra.


| Valor do *ShadowTopicPrefix* | Tipo de sombra | 
| --- | --- | 
| thingName\$1aws/things/ /shadow | Sombra sem nome (clássica) | 
| \$1aws/things/ /shadow/name/ thingName shadowName | Sombra nomeada | 

Para criar um tópico completo, selecione o *ShadowTopicPrefix* tipo de sombra ao qual você deseja se referir, substitua *thingName* e, se aplicável,*shadowName*, pelos valores correspondentes e, em seguida, anexe-o ao esboço do tópico, conforme mostrado na tabela a seguir. Lembre-se de que os tópicos diferenciam maiúsculas de minúsculas.


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  *ShadowTopicPrefix*/excluir  |  Publicar/assinar  |  Um dispositivo ou um aplicativo faz publicações nesse tópico para excluir uma sombra. Para obter mais informações, consulte [/delete](device-shadow-mqtt.md#delete-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/excluir/aceito  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando uma sombra é excluída. Para obter mais informações, consulte [/delete/accepted](device-shadow-mqtt.md#delete-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/excluir/rejeitado  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando uma solicitação de exclusão de uma sombra é rejeitada. Para obter mais informações, consulte [/delete/rejected](device-shadow-mqtt.md#delete-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/obter  |  Publicar/assinar  |  Um aplicativo ou um objeto publica uma mensagem vazia nesse tópico para obter uma sombra. Para obter mais informações, consulte [Tópicos MQTT da Sombra do Dispositivo](device-shadow-mqtt.md).  | 
|  *ShadowTopicPrefix*/obter/aceito  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando uma solicitação para uma sombra é feita com êxito. Para obter mais informações, consulte [/get/accepted](device-shadow-mqtt.md#get-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/get/rejeitado  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando uma solicitação de sombra é rejeitada. Para obter mais informações, consulte [/get/rejected](device-shadow-mqtt.md#get-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/atualizar  |  Publicar/assinar  |  Umo objeto ou um aplicativo faz publicações nesse tópico para atualizar uma sombra. Para obter mais informações, consulte [/update](device-shadow-mqtt.md#update-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/aceito  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando uma atualização é feita com êxito em uma sombra. Para obter mais informações, consulte [/update/accepted](device-shadow-mqtt.md#update-accepted-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/rejeitado  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando a atualização de uma sombra é rejeitada. Para obter mais informações, consulte [/update/rejected](device-shadow-mqtt.md#update-rejected-pub-sub-topic).  | 
|  *ShadowTopicPrefix*/update/delta  |  Assinar  |  O serviço Sombra do dispositivo envia mensagens para esse tópico quando uma diferença é detectada entre as seções desejadas e relatadas de uma sombra. Para obter mais informações, consulte [/update/delta](device-shadow-mqtt.md#update-delta-pub-sub-topic).   | 
|  *ShadowTopicPrefix*/update/documents  |  Assinar  |  AWS IoT publica um documento de estado para esse tópico sempre que uma atualização na sombra for executada com êxito. Para obter mais informações, consulte [/update/documents](device-shadow-mqtt.md#update-documents-pub-sub-topic).   | 

## Tópicos de entrega de arquivos baseados em MQTT
<a name="reserved-topics-mqtt-based-file-delivery"></a>

**nota**  
As operações do cliente anotadas como **Receber** nesta tabela indicam tópicos que AWS IoT são publicados diretamente no cliente que os solicitou, independentemente de o cliente ter se inscrito no tópico ou não. Os clientes devem esperar receber essas mensagens de resposta mesmo que não sejam assinantes delas. Essas mensagens de resposta não passam pelo agente de mensagens e não podem ser assinadas por outros clientes ou regras.

Essas mensagens oferecem suporte a buffers de resposta no formato Concise Binary Object Representation (CBOR) e em JavaScript Object Notation (JSON), dependendo do tópico. *payload-format*


| *payload-format* | Tipo de dados do formato de resposta | 
| --- | --- | 
| cbor | Representação Concisa de Objetos Binários (CBOR) | 
| json | JavaScript Notação de objeto (JSON) | 


| Tópico | Operações do cliente permitidas | Description | 
| --- | --- | --- | 
|  \$1 aws/things/ /streams/ /data/ *ThingName* *StreamId* *payload-format*  |  Assine, receba  |  AWS A entrega de arquivos baseada em MQTT é publicada neste tópico se a solicitação "GetStream" de um dispositivo for aceita. A carga útil contém os dados do fluxo. Para obter mais informações, consulte [Usando a entrega de arquivos AWS IoT baseada em MQTT em dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1 aws/things/ /streams/ /get/ *ThingName* *StreamId* *payload-format*  |  Publicar  |  Um dispositivo publica neste tópico para realizar uma solicitação GetStream "”. Para obter mais informações, consulte [Usando a entrega de arquivos AWS IoT baseada em MQTT em dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /description/ *ThingName* *StreamId* *payload-format*  |  Assine, receba  |  AWS A entrega de arquivos baseada em MQTT é publicada neste tópico se a solicitação "DescribeStream" de um dispositivo for aceita. A carga útil contém a descrição do fluxo. Para obter mais informações, consulte [Usando a entrega de arquivos AWS IoT baseada em MQTT em dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1 aws/things/ /streams/ /describe/ *ThingName* *StreamId* *payload-format*  |  Publicar  |  Um dispositivo publica neste tópico para realizar uma solicitação DescribeStream "”. Para obter mais informações, consulte [Usando a entrega de arquivos AWS IoT baseada em MQTT em dispositivos](mqtt-based-file-delivery-in-devices.md).   | 
|  \$1aws/things/ /streams/ /rejeted/ *ThingName* *StreamId* *payload-format*  |  Assine, receba  |  AWS A entrega de arquivos baseada em MQTT é publicada neste tópico se uma solicitação "DescribeStream" ou "GetStream" de um dispositivo for rejeitada. Para obter mais informações, consulte [Usando a entrega de arquivos AWS IoT baseada em MQTT em dispositivos](mqtt-based-file-delivery-in-devices.md).   | 

## ARN de tópicos reservados
<a name="reserved-topicnames-arn"></a>

Todos os tópicos reservados ARNs (Amazon Resource Names) têm o seguinte formato:

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

Por exemplo, `arn:aws:iot:us-west-2:123EXAMPLE456:topic/$aws/things/thingName/jobs/get/accepted` é um ARN para o tópico reservado `$aws/things/thingName/jobs/get/accepted`.

# Configurações do domínio
<a name="iot-custom-endpoints-configurable"></a>

Em AWS IoT Core, você pode usar configurações de domínio para configurar e gerenciar os comportamentos dos seus endpoints de dados. Com as configurações de domínio, você pode gerar vários endpoints de AWS IoT Core dados, personalizá-los com seus próprios nomes de domínio totalmente qualificados (FQDN) e certificados de servidor associados, além de associar um autorizador personalizado. Para obter mais informações, consulte [Autenticação e autorização personalizadas](custom-authentication.md).

**nota**  
Esse recurso não está disponível em AWS GovCloud (US) Regiões da AWS.

**Topics**
+ [O que é a configuração de um domínio?](iot-domain-configuration-what-is.md)
+ [Criação e configuração de domínios AWS gerenciados](iot-custom-endpoints-configurable-aws.md)
+ [Criar e configurar domínios gerenciados do cliente](iot-custom-endpoints-configurable-custom.md)
+ [Gerenciar configurações de domínio](iot-custom-endpoints-managing.md)
+ [Definir configurações de TLS nas configurações de domínio](iot-endpoints-tls-config.md)
+ [Configuração de certificado de servidor para grampeamento de OCSP](iot-custom-endpoints-cert-config.md)

# O que é a configuração de um domínio?
<a name="iot-domain-configuration-what-is"></a>

Em AWS IoT Core, uma configuração de domínio se refere à instalação e configuração de um domínio (domínio gerenciado ou domínio AWS gerenciado pelo cliente) para seus endpoints de AWS IoT Core dados. AWS IoT Core também fornece um endpoint padrão para sua AWS conta (`iot:Data-ATS`) para os dispositivos se AWS IoT Core comunicarem.

**Topics**
+ [Casos de uso](#iot-custom-endpoints-configurable-use-cases)
+ [Principais conceitos](#iot-domain-configuration-key-concepts)
+ [Observações importantes](#iot-custom-endpoints-configurable-notes)

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

É possível usar configurações de domínio para simplificar tarefas, como a seguinte:
+ Migre dispositivos para o. AWS IoT Core
+ Suporte a frotas de dispositivos heterogêneos mantendo configurações de domínio separadas para tipos de dispositivos separados.
+ Mantenha a identidade da marca (por exemplo, por meio do nome de domínio) enquanto migra a infraestrutura de aplicativos para o. AWS IoT Core

## Principais conceitos
<a name="iot-domain-configuration-key-concepts"></a>

Os conceitos a seguir dão detalhes das configurações de domínio e de conceitos relacionados.
+ **Configuração do domínio**

  A instalação e configuração de um domínio para seus AWS IoT Core endpoints.
+ **Domínio de endpoint padrão**

  O domínio que AWS IoT fornece o endpoint padrão, como`iot:Data-ATS`. Para encontrar o endpoint padrão, execute o comando [describe-endpoint](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-endpoint.html) ou CLI. [describe-domain-configuration](https://docs.aws.amazon.com//cli/latest/reference/iot/describe-domain-configuration.html) Como alternativa, acesse o console do AWS IoT Core e escolha **Configurações de domínio** em **Conectar** no painel de navegação à esquerda. O endpoint padrão é listado com o nome `iot:Data-ATS`.
+ **AWS domínio gerenciado**

  O domínio que AWS será gerenciado. Escolher um domínio AWS gerenciado significa que seus dispositivos se conectarão usando um endpoint de dados fornecido pela AWS. AWS gerenciará o domínio e os certificados.
+ **Domínio gerenciado pelo cliente**

  O domínio que você gerenciará. Também conhecido como domínio personalizado. Escolher um domínio gerenciado pelo cliente significa que seus dispositivos serão conectados usando um endpoint de dados de domínio personalizado. Você gerenciará o domínio e os certificados. O domínio gerenciado pelo cliente permite que você personalize o endpoint de URLs acordo com suas necessidades. Por exemplo, você pode usar um nome de domínio personalizado (`your-domain-name.com`) ou aplicar políticas de acesso específicas.
+ **Tipo de autenticação**

  O tipo de autenticação escolhido para autenticar seus dispositivos ao se conectar ao AWS IoT Core. Ao criar uma configuração de domínio, é necessário especificar um tipo de autenticação. Para obter mais informações, consulte [Escolher um tipo de autenticação para a comunicação do seu dispositivo](protocols.md#connection-protocol-auth-mode).
+ **Protocolo de aplicativo**

  Os protocolos da camada de aplicação que seus dispositivos usam ao se conectar ao AWS IoT Core. Ao criar uma configuração de domínio, é necessário especificar um protocolo de aplicativo. Para obter mais informações, consulte [Escolher um protocolo de aplicativo para a comunicação do dispositivo](protocols.md#protocol-selection).

## Observações importantes
<a name="iot-custom-endpoints-configurable-notes"></a>

AWS IoT Core usa a [extensão TLS de indicação de nome do servidor (SNI)](https://www.rfc-editor.org/rfc/rfc3546) para aplicar configurações de domínio. [Ao conectar dispositivos a AWS IoT Core, os clientes podem enviar a [extensão Server Name Indication (SNI)](https://tools.ietf.org/html/rfc3546#section-3.1), que é necessária para recursos como [registro de várias contas](https://docs.aws.amazon.com//iot/latest/developerguide/x509-client-certs.html#multiple-account-cert), endpoints [configuráveis, [domínios personalizados](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html) e endpoints](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable.html) VPC.](https://docs.aws.amazon.com//iot/latest/developerguide/IoTCore-VPC.html) Eles também devem enviar um nome de servidor idêntico ao nome de domínio especificado na configuração do domínio. Para testar esse serviço, use a versão v2 do [AWS IoT dispositivo SDKs](https://github.com/aws) em GitHub.

Se você criar vários endpoints de dados no seu Conta da AWS, eles compartilharão AWS IoT Core recursos como tópicos do MQTT, sombras de dispositivos e regras.

Quando você fornece os certificados do servidor para configuração de domínio AWS IoT Core personalizada, os certificados têm no máximo quatro nomes de domínio. Para saber mais, consulte [Endpoints e cotas do AWS IoT Core](https://docs.aws.amazon.com/general/latest/gr/iot-core.html#security-limits).

# Criação e configuração de domínios AWS gerenciados
<a name="iot-custom-endpoints-configurable-aws"></a>

Você cria um endpoint configurável em um domínio AWS gerenciado usando a [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html)API. Uma configuração de domínio para um domínio AWS gerenciado consiste no seguinte:
+ `domainConfigurationName`

  Um nome definido pelo usuário que identifica a configuração do domínio e o valor deve ser exclusivo para você. Região da AWS Não é possível usar nomes de configuração de domínio que comecem com `IoT:` porque eles são reservados para endpoints padrão.
+ `defaultAuthorizerName` (opcional)

  O nome do autorizador personalizado que deve ser usado no endpoint.
+ `allowAuthorizerOverride` (opcional)

  Um valor booliano que especifica se os dispositivos podem substituir o autorizador padrão especificando outro autorizador no cabeçalho HTTP da solicitação. Esse valor será exigido se um valor para `defaultAuthorizerName` for especificado.
+ `serviceType` (opcional)

  O tipo de serviço que o endpoint fornece. AWS IoT Core suporta apenas o tipo `DATA` de serviço. Ao especificar `DATA`, o AWS IoT Core retornará um endpoint com um tipo de endpoint de `iot:Data-ATS`. Você não pode criar um endpoint configurável `iot:Data` (VeriSign).
+ `TlsConfig` (opcional)

  Um objeto que especifica a configuração TLS para um domínio. Para obter mais informações, consulte [Definir configurações de TLS nas configurações de domínio](iot-endpoints-tls-config.md).

O AWS CLI comando de exemplo a seguir cria uma configuração de domínio para um `Data` endpoint.

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

A saída do comando pode ser semelhante à seguinte.

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

# Criar e configurar domínios gerenciados do cliente
<a name="iot-custom-endpoints-configurable-custom"></a>

As configurações de domínio permitem especificar um nome de domínio totalmente qualificado (FQDN) para conectar-se ao AWS IoT Core. Há muitos benefícios em usar domínios gerenciados pelo cliente (também conhecidos como domínios personalizados): você pode expor seu próprio domínio ou o domínio da sua empresa aos clientes para fins de marca; você pode facilmente alterar seu próprio domínio para apontar para um novo corretor; você pode oferecer suporte à multilocação para atender clientes com domínios diferentes dentro do mesmo Conta da AWS; e você pode gerenciar os detalhes dos seus próprios certificados de servidor, como a autoridade de certificação raiz (CA) usada para assinar o certificado, o algoritmo de assinatura, a profundidade da cadeia de certificados e o ciclo de vida do certificado.

O fluxo de trabalho para definir uma configuração de domínio com um domínio personalizado consiste nos três estágios a seguir.

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

1. [Criar uma configuração de domínio](#iot-custom-endpoints-configurable-custom-domain-config)

1. [Criar registros DNS](#iot-custom-endpoints-configurable-custom-dns)

## Registrando certificados de servidor no gerenciador AWS de certificados
<a name="iot-custom-endpoints-configurable-custom-register-certificate"></a>

Antes de criar uma configuração de domínio com um domínio personalizado, é necessário registrar a cadeia de certificados do servidor no [AWS Certificate Manager (ACM)](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html). É possível usar os seguintes três tipos de certificados de servidor.
+ [Certificados públicos gerados pelo ACM](#iot-custom-endpoints-configurable-custom-register-certificate-acm)
+ [Certificados externos assinados por uma CA pública](#iot-custom-endpoints-configurable-custom-register-certificate-pubext)
+ [Certificados externos assinados por uma CA privada](#iot-custom-endpoints-configurable-custom-register-certificate-privext)

**nota**  
AWS IoT Core considera que um certificado é assinado por uma CA pública se estiver incluído no pacote [ca confiável da Mozilla](https://hg.mozilla.org/mozilla-central/raw-file/tip/security/nss/lib/ckfw/builtins/certdata.txt?raw=1).

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

Consulte [Pré-requisitos para importar certificados](/acm/latest/userguide/import-certificate-prerequisites.html) para obter os requisitos de importação de certificados para o ACM. Além desses requisitos, o AWS IoT Core adiciona os seguintes requisitos.
+ O certificado de entidade final deve incluir a extensão **Extended Key Usage** x509 v3 com um valor de **serverAuth** (Autenticação de servidor Web TLS). Se você solicitar o certificado do ACM, essa extensão será adicionada automaticamente.
+ A profundidade máxima da cadeia de certificados é de 5 certificados.
+ O tamanho máximo da cadeia de certificados é de 16 KB.
+ Os algoritmos criptográficos e os tamanhos de chave compatíveis incluem RSA de 2048 bits (RSA\$12048) e ECDSA de 256 bits (EC\$1Prime256v1).

### Usar um certificado para vários domínios
<a name="one-certificate-for-multiple-domains"></a>

Se você planeja usar um certificado para abranger vários subdomínios, use um domínio curinga no campo nome comum (CN) ou Nomes alternativos do assunto (SAN). Por exemplo, use **\$1.iot.example.com** para abranger dev.iot.example.com, qa.iot.example.com e prod.iot.example.com. Cada FQDN exige sua própria configuração de domínio, mas mais de uma configuração de domínio pode usar o mesmo valor curinga. O CN ou o SAN devem abranger o FQDN que você deseja usar como domínio personalizado. Se SANs estiverem presentes, o CN é ignorado e uma SAN deve cobrir o FQDN que você deseja usar como domínio personalizado. Essa abrangência pode ser uma correspondência exata ou uma correspondência curinga. Depois que um certificado curinga é validado e registrado em uma conta, outras contas na região são impedidas de criar domínios personalizados que se sobreponham ao certificado.

As seções a seguir descrevem como obter cada tipo de certificado. Cada recurso de certificado requer um nome do recurso da Amazon (ARN) registrado no ACM usado ao criar a configuração do domínio.

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

Você pode gerar um certificado público para seu domínio personalizado usando a [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API. Ao gerar um certificado dessa maneira, o ACM valida a sua propriedade do domínio personalizado. Para obter mais informações, consulte [Solicitar um certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html) no *Guia do usuário do AWS Certificate Manager *.

### Certificados externos assinados por uma CA pública
<a name="iot-custom-endpoints-configurable-custom-register-certificate-pubext"></a>

Se você já tem um certificado de servidor assinado por uma CA pública (uma CA incluída no pacote ca confiável da Mozilla), você pode importar a cadeia de certificados diretamente para o ACM usando a API. [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html) Para saber mais sobre essa tarefa, sobre os pré-requisitos e sobre as exigências de formato do certificado, consulte [Importar certificados](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html).

### Certificados externos assinados por uma CA privada
<a name="iot-custom-endpoints-configurable-custom-register-certificate-privext"></a>

Se você já tiver um certificado de servidor assinado por uma CA privada ou autoassinado, será possível usar o certificado para criar a configuração de domínio, mas também será necessário criar um certificado público adicional no ACM para validar a propriedade do seu domínio. Para fazer isso, registre sua cadeia de certificados de servidor no ACM usando a [ImportCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_ImportCertificate.html)API. Para saber mais sobre essa tarefa, sobre os pré-requisitos e sobre as exigências de formato do certificado, consulte [Importar certificados](https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html). 

### Criar um certificado de validação
<a name="iot-custom-endpoints-configurable-create-validation-certificate"></a>

Depois de importar seu certificado para o ACM, gere um certificado público para seu domínio personalizado usando a [RequestCertificate](https://docs.aws.amazon.com/acm/latest/APIReference/API_RequestCertificate.html)API. Ao gerar um certificado dessa maneira, o ACM valida a sua propriedade do domínio personalizado. Para obter mais informações, consulte [Solicitar um certificado público](https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-request-public.html). Ao criar a configuração de domínio, utilize esse certificado público como certificado de validação.

## Criar uma configuração de domínio
<a name="iot-custom-endpoints-configurable-custom-domain-config"></a>

Você cria um endpoint configurável em um domínio personalizado usando a [CreateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_CreateDomainConfiguration.html)API. Uma configuração de domínio para um domínio personalizado consiste no seguinte:
+ `domainConfigurationName`

  Um nome definido pelo usuário que identifica a configuração de domínio. Os nomes da configuração de domínio que começam com `IoT:` são reservados para endpoints padrão e não podem ser usados. Além disso, esse valor deve ser exclusivo para você Região da AWS. 
+ `domainName`

  O FQDN ao qual seus dispositivos usam para se conectar. AWS IoT Core AWS IoT Core aproveita a extensão TLS de indicação de nome do servidor (SNI) para aplicar configurações de domínio. Os dispositivos devem usar essa extensão ao conectar e transmitir um nome de servidor idêntico ao nome de domínio especificado na configuração de domínio.
+ `serverCertificateArns`

  O ARN da cadeia de certificados do servidor que você registrou no ACM. AWS IoT Core atualmente oferece suporte a apenas um certificado de servidor. 
+ `validationCertificateArn`

  O ARN do certificado público gerado no ACM para validar a propriedade do domínio personalizado. Esse argumento não será necessário se você usar um certificado de servidor gerado pelo ACM ou assinado publicamente. 
+ `defaultAuthorizerName (optional)`

  O nome do autorizador personalizado que deve ser usado no endpoint.
+ `allowAuthorizerOverride`

  Um valor booliano que especifica se os dispositivos podem substituir o autorizador padrão especificando outro autorizador no cabeçalho HTTP da solicitação. Esse valor será exigido se um valor para `defaultAuthorizerName` for especificado. 
+ `serviceType`

  AWS IoT Core atualmente suporta somente o tipo `DATA` de serviço. Quando você especifica`DATA`, AWS IoT retorna um endpoint com um tipo de endpoint de. `iot:Data-ATS` 
+ `TlsConfig` (opcional)

  Um objeto que especifica a configuração TLS para um domínio. Para obter mais informações, consulte [Definir configurações de TLS nas configurações de domínio](iot-endpoints-tls-config.md).
+ `serverCertificateConfig` (opcional)

  Um objeto que especifica a configuração de certificado de servidor para um domínio. Para obter mais informações, consulte [Configuração de certificado de servidor para grampeamento de OCSP](iot-custom-endpoints-cert-config.md).

O AWS CLI comando a seguir cria uma configuração de domínio 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**  
Depois de criar sua configuração de domínio, pode levar até 60 minutos até que seus certificados AWS IoT Core de servidor personalizados sejam entregues.

Para obter mais informações, consulte [Gerenciar configurações de domínio](iot-custom-endpoints-managing.md).

## Criar registros DNS
<a name="iot-custom-endpoints-configurable-custom-dns"></a>

Depois de registrar sua cadeia de certificados e criar sua configuração de domínio, crie um registro de DNS para que o domínio personalizado aponte para um domínio da AWS IoT . Esse registro deve apontar para um AWS IoT ponto final do tipo`iot:Data-ATS`. Você pode obter seu endpoint usando a [DescribeEndpoint](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeEndpoint.html)API. 

O AWS CLI comando a seguir mostra como obter seu endpoint.

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

Depois de obter seu `iot:Data-ATS` endpoint, crie um `CNAME` registro do seu domínio personalizado para esse AWS IoT endpoint. Se você criar vários domínios personalizados no mesmo Conta da AWS, atribua um alias a esse mesmo `iot:Data-ATS` endpoint.

## Solução de problemas
<a name="iot-custom-endpoints-configurable-troubleshoot"></a>

Se você tiver problemas para conectar dispositivos a um domínio personalizado, verifique se ele AWS IoT Core aceitou e aplicou seu certificado de servidor. Você pode verificar AWS IoT Core se aceitou seu certificado usando o AWS IoT Core console ou AWS CLI o.

Para usar o AWS IoT Core console, navegue até a página **Configurações do domínio** e selecione o nome da configuração do domínio. Na seção **Detalhes do certificado do servidor**, verifique o status e os detalhes do status. Se o certificado for inválido, substitua-o no ACM por um certificado que atenda aos [requisitos de certificado](#certificate-requirements) listados na seção anterior. Se o certificado tiver o mesmo ARN, ele AWS IoT Core será retirado e aplicado automaticamente.

Para verificar o status do certificado usando o AWS CLI, chame a [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)API e especifique seu nome de configuração de domínio.

**nota**  
Se seu certificado for inválido, AWS IoT Core continuará a fornecer o último certificado válido.

Você pode verificar qual certificado está sendo fornecido em seu endpoint usando o seguinte comando openssl.

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

# Gerenciar configurações de domínio
<a name="iot-custom-endpoints-managing"></a>

Este tópico aborda as principais operações para você gerenciar seus recursos de configuração de domínio. Você também pode gerenciar os ciclos de vida das configurações existentes usando o seguinte APIs: [ListDomainConfigurations](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDomainConfigurations.html),, e. [DescribeDomainConfiguration[UpdateDomainConfiguration[DeleteDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteDomainConfiguration.html)](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)

**Topics**
+ [Visualizar configurações de domínio](#iot-custom-endpoints-managing-view)
+ [Atualizar configurações de domínio](#iot-custom-endpoints-managing-update)
+ [Excluir configurações de domínio](#iot-custom-endpoints-managing-delete)
+ [Renovação de certificados em domínios personalizados](#iot-custom-endpoints-managing-certificates)

## Visualizar configurações de domínio
<a name="iot-custom-endpoints-managing-view"></a>

Para retornar uma lista paginada de todas as configurações de domínio em seu Conta da AWS, use a API. [ListDomainConfigurations](https://docs.aws.amazon.com/iot/latest/apireference/API_ListDomainConfigurations.html) Você pode ver os detalhes de uma configuração de domínio específica usando a [DescribeDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeDomainConfiguration.html)API. Essa API usa um único parâmetro `domainConfigurationName` e retorna os detalhes da configuração especificada.

**Exemplo**

## Atualizar configurações de domínio
<a name="iot-custom-endpoints-managing-update"></a>

Para atualizar o status ou o autorizador personalizado da configuração do seu domínio, use a [UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)API. É possível definir o status como `ENABLED` ou `DISABLED`. Se você desativar a configuração de domínio, os dispositivos conectados a esse domínio receberão um erro de autenticação. No momento, não é possível atualizar o certificado de servidor da configuração de domínio. Para alterar o certificado de uma configuração de domínio, é necessário excluí-la e recriá-la.

**Exemplo**

## Excluir configurações de domínio
<a name="iot-custom-endpoints-managing-delete"></a>

Antes de excluir uma configuração de domínio, use a [UpdateDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_UpdateDomainConfiguration.html)API para definir o status como`DISABLED`. Isso ajuda a evitar a exclusão acidental do endpoint. Depois de desativar a configuração do domínio, exclua-a usando a [DeleteDomainConfiguration](https://docs.aws.amazon.com/iot/latest/apireference/API_DeleteDomainConfiguration.html)API. Você deve colocar os domínios AWS gerenciados em `DISABLED` status por 7 dias antes de poder excluí-los. É possível colocar domínios personalizados no status `DISABLED` e depois excluí-los de uma só vez.

**Exemplo**

Depois de excluir uma configuração de domínio, o certificado do servidor associado a esse domínio personalizado AWS IoT Core não é mais exibido.

## Renovação de certificados em domínios personalizados
<a name="iot-custom-endpoints-managing-certificates"></a>

Talvez seja necessário substituir periodicamente o certificado do servidor por um atualizado. A taxa na qual você faz isso depende do período de validade do certificado. Se você gerou o certificado de servidor usando o AWS Certificate Manager (ACM), é possível configurar o certificado para ser renovado automaticamente. Quando o ACM renova seu certificado, pega AWS IoT Core automaticamente o novo certificado. Não é necessário realizar nenhuma ação adicional. Se você importou o certificado do servidor de uma origem diferente, poderá alterná-lo reimportando-o para o ACM. Para ver informações sobre a reimportação de certificados, consulte [Reimportar um certificado](https://docs.aws.amazon.com/acm/latest/userguide/import-reimport.html).

**nota**  
AWS IoT Core só coleta atualizações de certificados sob as seguintes condições.  
O novo certificado tem o mesmo ARN do antigo.
O novo certificado tem o mesmo algoritmo de assinatura, nome comum ou nome alternativo do assunto que o antigo.

# Definir configurações de TLS nas configurações de domínio
<a name="iot-endpoints-tls-config"></a>

AWS IoT Core fornece [políticas de segurança predefinidas](transport-security.md#tls-policy-table) para você personalizar suas configurações de Transport Layer Security (TLS) para TLS [1.2 e [TLS](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.3) 1.3 nas](https://en.wikipedia.org/wiki/Transport_Layer_Security#TLS_1.2) configurações de domínio. Uma política de segurança é uma combinação de protocolos TLS e suas cifras que determinam os protocolos e cifras compatíveis durante as negociações de TLS entre um cliente e um servidor. Com as políticas de segurança suportadas, você pode gerenciar as configurações de TLS de seus dispositivos com mais flexibilidade, aplicar o máximo de medidas de up-to-date segurança ao conectar novos dispositivos e manter configurações TLS consistentes para dispositivos existentes.

A tabela a seguir descreve as políticas de segurança, suas versões de TLS e as regiões compatíveis:


****  

| Nome da política de segurança | Suportado Regiões da AWS | 
| --- | --- | 
| TSecurityPolítica de IP\$1 \$11\$13\$12022\$110 TLS13 | Tudo Regiões da AWS | 
| TSecurityPolítica de IO\$1 \$11\$12\$12022\$110 TLS13 | Tudo Regiões da AWS | 
| TSecurityPolítica de IO\$1 \$11\$12\$12022\$110 TLS12 | Tudo Regiões da 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 \$11\$10\$12015\$101 TLS12 | ap-northeast-1, ap-southeast-1, eu-central-1, eu-west-1, us-east-1, us-west-2 | 

Os nomes das políticas de segurança AWS IoT Core incluem informações de versão com base no ano e mês em que foram lançadas. Se você criar uma nova configuração de domínio, a política de segurança assumirá `IoTSecurityPolicy_TLS13_1_2_2022_10` como padrão. [Para obter uma tabela completa de políticas de segurança com detalhes de protocolos, portas TCP e cifras, consulte Políticas de segurança.](transport-security.md#tls-policy-table) AWS IoT Core não oferece suporte a políticas de segurança personalizadas. Para obter mais informações, consulte [Segurança de transporte em AWS IoT Core](transport-security.md).

Para definir as configurações de TLS nas configurações de domínio, você pode usar o AWS IoT console ou o. AWS CLI

**Topics**
+ [Definir as configurações de TLS nas configurações de domínio (console)](#custom-tls-console)
+ [Definir as configurações de TLS nas configurações de domínio (CLI)](#custom-tls-cli)

## Definir as configurações de TLS nas configurações de domínio (console)
<a name="custom-tls-console"></a>

**Para definir as configurações de TLS usando o console AWS IoT**

1. Faça login no Console de gerenciamento da AWS e abra o [AWS IoT console](https://console.aws.amazon.com/iot/home).

1. Para definir as configurações de TLS ao criar uma nova configuração de domínio, siga estas etapas.

   1. No painel de navegação esquerdo, escolha **Configurações de domínio** e, em seguida, escolha **Criar configuração de domínio**.

   1. Na página **Criar configuração de domínio**, na seção **Configurações de domínio personalizado - *opcional***, escolha uma política de segurança em **Selecionar política de segurança**.

   1. Siga o widget e conclua o restante das etapas. Selecione **Criar configuração de domínio**.

1. Para atualizar as configurações de TLS em uma configuração de domínio existente, siga estas etapas.

   1. No painel de navegação esquerdo, escolha **Configurações de domínio** e, em seguida, escolha uma configuração de domínio.

   1. Na página de **Detalhes da configuração do domínio**, escolha **Editar**. Em seguida, na seção **Configurações de domínio personalizado - *opcional***, em **Selecionar política de segurança**, escolha uma política de segurança.

   1. Selecione **Atualizar configuração de domínio**.

Para obter mais informações, consulte [Criar uma configuração de domínio](https://docs.aws.amazon.com//iot/latest/developerguide/iot-custom-endpoints-configurable-custom.html#iot-custom-endpoints-configurable-custom-domain-config) e [Gerenciar configurações de domínio](iot-custom-endpoints-managing.md).

## Definir as configurações de TLS nas configurações de domínio (CLI)
<a name="custom-tls-cli"></a>

É possível usar os comandos 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) e [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 definir suas configurações de TLS em configurações de domínio.

1. Para especificar as configurações de TLS usando o comando 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
   ```

   A saída desse comando pode ser semelhante à seguinte: 

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

   Se você criar uma nova configuração de domínio sem especificar a política de segurança, o valor será definido por padrão como: `IoTSecurityPolicy_TLS13_1_2_2022_10`.

1. Para descrever as configurações de TLS usando o comando 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
   ```

   Esse comando pode retornar os detalhes da configuração do domínio que incluem as configurações de TLS, como as seguintes:

   ```
   {
    "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 atualizar as configurações de TLS usando o comando 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
   ```

   A saída desse comando pode ser semelhante à seguinte:

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

1. Para atualizar as configurações de TLS do endpoint do ATS, execute o comando 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). O nome de configuração do domínio para o endpoint do ATS é `iot:Data-ATS`.

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

   A saída do comando pode ser semelhante à seguinte:

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

Para obter mais informações, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html) e [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html) na *Referência da API do AWS *.

# Configuração de certificado de servidor para grampeamento de OCSP
<a name="iot-custom-endpoints-cert-config"></a>

AWS IoT Core suporta grampeamento [OCSP (Online Certificate Status Protocol)](https://www.rfc-editor.org/rfc/rfc6960.html) para certificado de servidor, também conhecido como grampeamento OCSP de certificado de servidor ou grampeamento OCSP. É um mecanismo de segurança usado para verificar o status de revogação no certificado do servidor em um handshake de Transport Layer Security (TLS). O grampeamento OCSP AWS IoT Core permite que você adicione uma camada adicional de verificação à validade do certificado do servidor do seu domínio personalizado.

Você pode ativar o grampeamento OCSP do certificado do servidor AWS IoT Core para verificar a validade do certificado consultando o respondente OCSP periodicamente. A configuração de grampeamento de OCSP faz parte do processo para criar ou atualizar uma configuração de domínio com um domínio personalizado. O grampeamento de OCSP verifica continuamente o status de revogação no certificado do servidor. Isso ajuda a verificar se os certificados que foram revogados pela CA não são mais confiáveis para os clientes que se conectam aos seus domínios personalizados. Para obter mais informações, consulte [Habilitando o certificado de servidor OCSP em AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-manage).

O grampeamento de OCSP do certificado de servidor fornece verificação do status da revogação em tempo real, reduz a latência associada à verificação do status da revogação e melhora a privacidade e a confiabilidade das conexões seguras. Para obter mais informações sobre os benefícios de usar o grampeamento de OCSP, consulte [Benefícios de usar o grampeamento OCSP em comparação com as verificações OCSP do lado do cliente](#iot-custom-endpoints-ocsp-stapling-benefits).

**nota**  
Esse recurso não está disponível em AWS GovCloud (US) Regions.

**Topics**
+ [O que é o OCSP?](#iot-custom-endpoints-cert-config-ocsp-what-is)
+ [Como funciona o grampeamento de OCSP](#iot-custom-endpoints-cert-config-ocsp-stapling-what-is)
+ [Habilitando o certificado de servidor OCSP em AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-manage)
+ [Configurando o certificado de servidor OCSP para endpoints privados em AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-private-endpoint)
+ [Notas importantes sobre o uso do grampeamento OCSP do certificado de servidor em AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-notes)
+ [Solucionando problemas de grampeamento do certificado OCSP do servidor AWS IoT Core](#iot-custom-endpoints-cert-config-ocsp-troubleshooting)

## O que é o OCSP?
<a name="iot-custom-endpoints-cert-config-ocsp-what-is"></a>

O Protocolo de status de certificado online (OCSP) ajuda a fornecer o status de revogação de um certificado de servidor para um handshake Transport Layer Security (TLS).

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

Os conceitos-chave a seguir fornecem detalhes sobre o protocolo de status de certificados online (OCSP).

**OCSP**

O [OCSP](https://www.rfc-editor.org/rfc/rfc6960.html) é usado para verificar o status de revogação do certificado durante o handshake de Transport Layer Security (TLS). O OCSP permite a validação de certificados em tempo real. Isso confirma que o certificado não foi revogado nem expirou desde que foi emitido. O OCSP também é mais escalável em comparação com as tradicionais Listas de Revogação de Certificados (). CRLs As respostas OCSP são menores e podem ser geradas com eficiência, tornando-as mais adequadas para infraestruturas de chave privada de grande escala (). PKIs

**Respondente OCSP**

Um respondente OCSP (também conhecido como servidor OCSP) recebe e responde às solicitações OCSP de clientes que buscam verificar o status de revogação dos certificados.

**OCSP do lado do cliente**

 No OCSP do lado do cliente, o cliente usa o OCSP para contatar um respondente OCSP a fim de conferir o status de revogação do certificado durante o handshake de TLS.

**OCSP do lado do servidor**

No OCSP do lado do servidor (também conhecido como grampeamento de OCSP), o servidor está habilitado (em vez do cliente) para fazer a solicitação ao respondente OCSP. O servidor grampeia a resposta OCSP ao certificado e a devolve ao cliente durante o handshake de TLS.

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

O diagrama a seguir ilustra como o OCSP do lado do cliente e o OCSP do lado do servidor funcionam.

![\[Diagramas OCSP do lado do cliente e OCSP do lado do servidor\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/custom-domain-ocsp-uml.png)


**OCSP do lado do cliente**

1. O cliente envia uma mensagem `ClientHello` para iniciar o handshake TLS com o servidor.

1. O servidor recebe a mensagem e responde com uma mensagem `ServerHello`. O servidor também envia o certificado do servidor para o cliente.

1. O cliente valida o certificado do servidor e extrai um URI OCSP dele.

1. O cliente envia uma solicitação de verificação de revogação de certificado para o respondente OCSP.

1. O respondente OCSP envia uma resposta OCSP.

1. O cliente valida o status do certificado com base na resposta do OCSP.

1. O handshake TLS é concluído.

**OCSP do lado do servidor**

1. O cliente envia uma mensagem `ClientHello` para iniciar o handshake TLS com o servidor.

1. O servidor recebe a mensagem e obtém a resposta OCSP em cache mais recente. Se a resposta em cache estiver ausente ou expirada, o servidor chamará o respondente OCSP para obter o status do certificado.

1. O respondente OCSP envia uma resposta OCSP ao servidor.

1. O servidor envia uma mensagem `ServerHello`. O servidor também envia o certificado do servidor e o status do certificado para o cliente.

1. O cliente valida o status do certificado OCSP.

1. O handshake TLS é concluído.

## Como funciona o grampeamento de OCSP
<a name="iot-custom-endpoints-cert-config-ocsp-stapling-what-is"></a>

O OCSP stapling é usado durante o handshake de TLS entre o cliente e o servidor para conferir o status de revogação do certificado do servidor. O servidor faz a solicitação OCSP ao respondente OCSP e grampeia as respostas OCSP aos certificados retornados ao cliente. Quando o servidor faz a solicitação ao respondente OCSP, as respostas podem ser armazenadas em cache e usadas várias vezes para muitos clientes.

### Como funciona o grampeamento OCSP em AWS IoT Core
<a name="iot-custom-endpoints-ocsp-stapling-iot-core"></a>

O diagrama a seguir mostra como o grampeamento de OCSP do lado do servidor funciona no AWS IoT Core.

![\[Este diagrama mostra como o grampeamento OCSP do lado do servidor funciona em. AWS IoT Core\]](http://docs.aws.amazon.com/pt_br/iot/latest/developerguide/images/custom-domain-ocsp-core-uml.png)


1. O dispositivo precisa ser registrado com os domínios personalizados com o grampeamento de OCSP ativado.

1. AWS IoT Core chama o respondente OCSP a cada hora para obter o status do certificado.

1. O respondente OCSP recebe a solicitação, envia a resposta OCSP mais recente e armazena a resposta OCSP em cache. 

1. O dispositivo envia uma `ClientHello` mensagem para iniciar o handshake TLS. AWS IoT Core

1. AWS IoT Core obtém a resposta OCSP mais recente do cache do servidor, que responde com uma resposta OCSP do certificado.

1. O servidor envia uma `ServerHello` mensagem para o dispositivo. O servidor também envia o certificado do servidor e o status do certificado para o cliente.

1. O dispositivo valida o status do certificado OCSP.

1. O handshake TLS é concluído.

### Benefícios de usar o grampeamento OCSP em comparação com as verificações OCSP do lado do cliente
<a name="iot-custom-endpoints-ocsp-stapling-benefits"></a>

Algumas vantagens de usar o OCSP stapling de certificado de servidor são as seguintes:

**Privacidade aprimorada**

Sem o grampeamento de OCSP, o dispositivo do cliente pode expor informações a respondedores OCSP de terceiros, potencialmente comprometendo a privacidade do usuário. O grampeamento de OCSP atenua esse problema fazendo com que o servidor obtenha a resposta OCSP e a entregue diretamente ao cliente.

**Confiabilidade aprimorada**

O grampeamento de OCSP pode melhorar a confiabilidade de conexões seguras porque reduz o risco de interrupções do servidor OCSP. Quando as respostas OCSP são grampeadas, o servidor inclui a resposta mais recente com o certificado. Isso é para que os clientes tenham acesso ao status de revogação, mesmo que o respondente OCSP esteja temporariamente indisponível. O OCSP stapling ajuda a atenuar esses problemas porque o servidor busca respostas OCSP periodicamente e as inclui em cache no handshake TLS. Isso reduz a dependência da disponibilidade em tempo real dos respondentes OCSP.

**Carga reduzida do servidor**

O grampeamento de OCSP alivia a carga de responder às solicitações OCSP dos respondentes OCSP para o servidor. Isso pode ajudar a distribuir a carga de maneira mais uniforme, tornando o processo de validação do certificado mais eficiente e escalável.

**Latência reduzida**

O grampeamento de OCSP reduz a latência associada à verificação do status de revogação de um certificado durante o handshake TLS. Em vez de o cliente precisar consultar um servidor OCSP separadamente, o servidor envia a solicitação e anexa a resposta OCSP ao certificado do servidor durante o handshake.

## Habilitando o certificado de servidor OCSP em AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-manage"></a>

Para habilitar o grampeamento OCSP do certificado de servidor AWS IoT Core, crie uma configuração de domínio para um domínio personalizado ou atualize uma configuração de domínio personalizado existente. Para obter informações gerais sobre como criar a configuração de um domínio com um domínio personalizado, consulte [Criar e configurar domínios gerenciados do cliente](iot-custom-endpoints-configurable-custom.md).

Use as instruções a seguir para habilitar o grampeamento do servidor OCSP usando ou. Console de gerenciamento da AWS AWS CLI

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

**Para habilitar o grampeamento OCSP do certificado do servidor usando o console: AWS IoT**

1. No menu de navegação, escolha **Configurações** e selecione **Criar configuração de domínio** ou escolha uma configuração de domínio existente para um domínio personalizado.

1. Se você optar por criar uma configuração de domínio na etapa anterior, verá a página **Criar configuração de domínio**. Na seção **Propriedades de configuração do domínio**, escolha **Domínio personalizado**. Insira as informações para criar a configuração de um domínio.

   Se você optar por atualizar uma configuração de domínio existente para um domínio personalizado, verá a página de **Detalhes da configuração do domínio**. Escolha **Editar**.

1. Para habilitar o grampeamento de servidor OCSP, escolha **Ativar grampeamento de OCSP do certificado do servidor** na subseção **Configurações do certificado do servidor**.

1. Escolha **Criar configuração de domínio** ou **Atualizar configuração de domínio**.

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

**Para habilitar o grampeamento de OCSP do certificado do servidor usando a AWS CLI:**

1. Se você criar uma nova configuração de domínio para um domínio personalizado, o comando para habilitar o grampeamento de servidor OCSP poderá ser assim:

   ```
   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. Se você atualizar uma configuração de domínio existente para um domínio personalizado, o comando para habilitar o grampeamento de servidor OCSP poderá ser assim:

   ```
   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 obter mais informações, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e a [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)partir da Referência AWS IoT da API.

## Configurando o certificado de servidor OCSP para endpoints privados em AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint"></a>

O OCSP para endpoints privados permite que você use seus recursos OCSP privados em sua Amazon Virtual Private Cloud (Amazon VPC) para operações. AWS IoT Core O processo envolve a configuração de uma função do Lambda que atue como um respondente OCSP. A função Lambda pode usar seus recursos OCSP privados para criar respostas OCSP que serão usadas. AWS IoT Core 

### Função do Lambda
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoint-lambda"></a>

Antes de configurar o servidor OCSP para um endpoint privado, crie uma função do Lambda que atue como um respondente OCSP compatível com RFC 6960, aceitando respostas OCSP básicas. A função do Lambda aceita uma codificação base64 da solicitação OCSP no formato DER. A resposta da função do Lambda também é uma resposta OCSP codificada em base64 no formato DER. O tamanho da resposta não deve exceder 4 kilobytes (KiB). A função Lambda deve estar na Região da AWS mesma Conta da AWS configuração do domínio. Os exemplos a seguir são de funções do Lambda.

#### Exemplo de funções do 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 "";
        }
    }
}
```

------

#### Autorizando AWS IoT a invocação da função Lambda
<a name="grant-permission-ocsp-lambda"></a>

No processo de criação da configuração do domínio com um respondente Lambda OCSP, você deve conceder AWS IoT permissão para invocar a função Lambda após a criação da função. Para conceder a permissão, você pode usar o comando da CLI [add-permission](https://docs.aws.amazon.com//cli/latest/reference/lambda/add-permission.html).

**Conceda permissão para sua função Lambda usando o AWS CLI**

1. Depois de inserir os valores, digite o seguinte comando. Observe que o valor `statement-id` deve ser exclusivo. Substitua `Id-1234` pelo valor exato que você tem, caso contrário, você poderá receber um erro de `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
   ```

   A configuração do domínio de IoT ARNs seguirá o seguinte padrão. O sufixo gerado pelo serviço não será conhecido antes do momento da criação, portanto, você deve substituí-lo por um `*`. Você pode atualizar a permissão depois que a configuração do domínio for criada e o ARN exato for conhecido.

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

1. Se o comando for executado com êxito, ele retornará uma declaração de permissão, como neste exemplo. Você pode prosseguir para a próxima seção para configurar o OCSP stapling para endpoints 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/*\"}}}"
   }
   ```

   Se o comando não for executado com êxito, ele retornará um erro, como neste exemplo. Será necessário verificar e corrigir o erro 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
   ```

### Configurar o OCSP stapling do servidor para endpoints privados
<a name="iot-custom-endpoints-cert-config-ocsp-private-endpoints"></a>

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

**Para configurar o grampeamento OCSP do certificado do servidor usando o console: AWS IoT**

1. No menu de navegação, escolha **Configurações** e selecione **Criar configuração de domínio** ou uma configuração de domínio existente para um domínio personalizado.

1. Se você optar por criar uma configuração de domínio na etapa anterior, verá a página **Criar configuração de domínio**. Na seção **Propriedades de configuração do domínio**, escolha **Domínio personalizado**. Insira as informações para criar a configuração de um domínio.

   Se você optar por atualizar uma configuração de domínio existente para um domínio personalizado, verá a página de **Detalhes da configuração do domínio**. Escolha **Editar**.

1. Para habilitar o grampeamento de servidor OCSP, escolha **Ativar grampeamento de OCSP do certificado do servidor** na subseção **Configurações do certificado do servidor**.

1. Escolha **Criar configuração de domínio** ou **Atualizar configuração de domínio**.

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

**Para configurar o OCSP stapling do certificado do servidor usando a AWS CLI:**

1. Se você criar uma configuração para um domínio personalizado, o comando para configurar o OCSP do certificado do servidor para endpoints privados poderá ser assim:

   ```
   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. Se você atualizar uma configuração de domínio existente para um domínio personalizado, o comando para configurar o OCSP do certificado do servidor para endpoints privados poderá ser assim:

   ```
   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**  
Esse é um valor booliano que indica se a verificação do OCSP stapling do servidor está habilitada ou não. Para habilitar o OCSP stapling do certificado do servidor, esse valor deve ser verdadeiro.

**ocspAuthorizedResponderArn**  
Esse é um valor de string do Amazon Resource Name (ARN) para um certificado X.509 armazenado em AWS Certificate Manager (ACM). Se fornecido, AWS IoT Core usará esse certificado para validar a assinatura da resposta OCSP recebida. Se não for fornecido, AWS IoT Core usará o certificado de emissão para validar as respostas. O certificado deve estar na mesma configuração Conta da AWS e na Região da AWS mesma configuração do domínio. Para ter mais informações sobre como registrar seu certificado de respondente autorizado, consulte [Importar certificados para o AWS Certificate Manager](https://docs.aws.amazon.com//acm/latest/userguide/import-certificate.html).

**ocspLambdaArn**  
Esse é um valor de string do nome do recurso da Amazon (ARN) para uma função do Lambda que atua como um respondente OCSP compatível com RFC 6960, aceitando respostas OCSP básicas. A função do Lambda aceita uma codificação base64 da solicitação OCSP, que é codificada usando o formato DER. A resposta da função do Lambda também é uma resposta OCSP codificada em base64 no formato DER. O tamanho da resposta não deve exceder 4 kilobytes (KiB). A função Lambda deve estar na Região da AWS mesma Conta da AWS configuração do domínio.

Para obter mais informações, consulte [CreateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_CreateDomainConfiguration.html)e a [UpdateDomainConfiguration](https://docs.aws.amazon.com//iot/latest/apireference/API_UpdateDomainConfiguration.html)partir da Referência AWS IoT da API.

## Notas importantes sobre o uso do grampeamento OCSP do certificado de servidor em AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-notes"></a>

Ao usar o certificado de servidor OCSP em AWS IoT Core, lembre-se do seguinte:

1. AWS IoT Core suporta somente os respondedores OCSP que podem ser acessados por endereços públicos. IPv4 

1. O recurso de grampeamento OCSP AWS IoT Core não oferece suporte a respondedores autorizados. Todas as respostas do OCSP devem ser assinadas pela CA que assinou o certificado, e a CA deve fazer parte da cadeia de certificados do domínio personalizado.

1. O recurso de grampeamento OCSP AWS IoT Core não oferece suporte a domínios personalizados criados usando certificados autoassinados.

1. AWS IoT Core chama um respondente OCSP a cada hora e armazena a resposta em cache. Se a chamada para o respondente falhar, AWS IoT Core grampeará a resposta válida mais recente.

1. Se não `nextUpdateTime` for mais válido, AWS IoT Core removerá a resposta do cache e o handshake TLS não incluirá os dados da resposta OCSP até a próxima chamada bem-sucedida para o respondente OCSP. Isso pode acontecer quando a resposta em cache expira antes que o servidor receba uma resposta válida do respondente OCSP. O valor de `nextUpdateTime` sugere que a resposta do OCSP é válida até esse momento. Para saber mais sobre o `nextUpdateTime`, consulte [Entradas de log OCSP do certificado do servidor](cwl-format.md#server-ocsp-logs).

1. Às vezes, AWS IoT Core falha ao receber a resposta OCSP ou remove a resposta OCSP existente porque ela expirou. Se situações como essas acontecerem, AWS IoT Core continuará usando o certificado de servidor fornecido pelo domínio personalizado sem a resposta OCSP.

1. O tamanho da resposta OCSP não pode exceder 4 KiB.

## Solucionando problemas de grampeamento do certificado OCSP do servidor AWS IoT Core
<a name="iot-custom-endpoints-cert-config-ocsp-troubleshooting"></a>

AWS IoT Core emite a `RetrieveOCSPStapleData.Success` métrica e as entradas de `RetrieveOCSPStapleData` registro para CloudWatch. A métrica e as entradas de log podem ajudar a detectar problemas relacionados a recuperar respostas do OCSP. Para obter mais informações, consulte [Métricas de grampeamento de OCSP do certificado de servidor](metrics_dimensions.md#server-ocsp-metrics) e [Entradas de log OCSP do certificado do servidor](cwl-format.md#server-ocsp-logs).