

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 cliente aos dispositivos principais
<a name="connect-client-devices"></a>

Você pode configurar a *descoberta na nuvem* para conectar dispositivos cliente aos dispositivos principais. Quando você configura a descoberta na nuvem, os dispositivos cliente podem se conectar ao serviço de AWS IoT Greengrass nuvem para recuperar informações sobre os dispositivos principais aos quais eles podem se conectar. Em seguida, os dispositivos clientes podem tentar se conectar a cada dispositivo principal até que se conectem com sucesso.

Para usar a descoberta na nuvem, você deve fazer o seguinte:
+ Associe dispositivos clientes aos dispositivos principais aos quais eles podem se conectar.
+ Especifique os endpoints do agente MQTT nos quais os dispositivos cliente podem se conectar a cada dispositivo principal.
+ Implante componentes no dispositivo principal que permitam suporte a dispositivos clientes.

  Você também pode implantar componentes opcionais para fazer o seguinte:
  + Retransmita mensagens entre dispositivos cliente, componentes do Greengrass e AWS IoT Core o serviço de nuvem.
  + Gerencie automaticamente os endpoints do agente MQTT do dispositivo principal.
  + Gerencie as sombras do dispositivo cliente local e sincronize as sombras com o AWS IoT Core serviço de nuvem.

Você também deve revisar e atualizar a AWS IoT política do dispositivo principal para verificar se ele tem as permissões necessárias para conectar dispositivos clientes. Para obter mais informações, consulte [Requisitos](#connect-client-devices-requirements).

Depois de configurar a descoberta na nuvem, você pode testar as comunicações entre um dispositivo cliente e um dispositivo principal. Para obter mais informações, consulte [Testar a comunicação entre os dispositivos cliente](test-client-device-communications.md).

**Topics**
+ [Requisitos](#connect-client-devices-requirements)
+ [Componentes do Greengrass para suporte a dispositivos cliente](#cloud-discovery-components)
+ [Configurar a descoberta na nuvem (console)](#configure-cloud-discovery-console)
+ [Configurar a descoberta na nuvem (AWS CLI)](#configure-cloud-discovery-cli)
+ [Associar dispositivos cliente](associate-client-devices.md)
+ [Autenticar clientes enquanto estiver off-line](offline-authentication.md)
+ [Gerenciar endpoints do dispositivo principal do](manage-core-device-endpoints.md)
+ [Escolher um agente MQTT](choose-local-mqtt-broker.md)
+ [Conectando dispositivos cliente a um dispositivo AWS IoT Greengrass Core com um corretor MQTT](connecting-to-mqtt.md)
+ [Testar a comunicação entre os dispositivos cliente](test-client-device-communications.md)
+ [API de descoberta do Greengrass RESTful](greengrass-discover-api.md)

## Requisitos
<a name="connect-client-devices-requirements"></a>

Para conectar dispositivos cliente a um dispositivo principal, você deve ter o seguinte:
+ O dispositivo principal deve executar a versão 2.2.0 ou posterior do [núcleo do Greengrass](greengrass-nucleus-component.md).
+ A função de serviço do Greengrass associada AWS IoT Greengrass a você Conta da AWS na AWS região em que o dispositivo principal opera. Para obter mais informações, consulte [Configurar o perfil de serviço do Greengrass](#configure-service-role-requirement).
+ A AWS IoT política do dispositivo principal deve permitir as seguintes permissões:<a name="core-device-iot-policy-client-device-permissions"></a>
  + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
  + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
  + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
  + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Essa permissão é necessária para usar o [componente detector de IP](ip-detector-component.md), que reporta as informações de conectividade de rede do dispositivo principal ao serviço de AWS IoT Greengrass nuvem.
  + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Opcional) Essas permissões são necessárias para usar o [componente gerenciador de sombras](shadow-manager-component.md) para sincronizar as sombras do dispositivo cliente. AWS IoT Core Esse atributo requer o [núcleo do Greengrass](greengrass-nucleus-component.md) v2.6.0 ou posterior, o gerenciador de sombras v2.2.0 ou posterior e a [ponte MQTT](mqtt-bridge-component.md) v2.2.0 ou posterior.

  Para obter mais informações, consulte [Configure a política da AWS IoT coisa](#configure-iot-policy-requirement).
**nota**  
Se você usou a AWS IoT política padrão ao [instalar o software AWS IoT Greengrass Core](install-greengrass-core-v2.md), o dispositivo principal tem uma AWS IoT política que permite acesso a todas as AWS IoT Greengrass ações (`greengrass:*`).
+ AWS IoT coisas que você pode conectar como dispositivos clientes. Para obter mais informações, consulte [Criar recursos da AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html) no *Guia do desenvolvedor do AWS IoT Core *.
+ O dispositivo cliente deve se conectar usando um ID de cliente. Um ID de cliente é um nome de um objeto. Nenhum outro ID de cliente será aceito.
+ A AWS IoT política de cada dispositivo cliente deve permitir a `greengrass:Discover` permissão. Para obter mais informações, consulte [AWS IoT Política mínima para dispositivos clientes](device-auth.md#client-device-minimal-iot-policy).

**Topics**
+ [Configurar o perfil de serviço do Greengrass](#configure-service-role-requirement)
+ [Configure a política da AWS IoT coisa](#configure-iot-policy-requirement)

### Configurar o perfil de serviço do Greengrass
<a name="configure-service-role-requirement"></a>

<a name="greengrass-service-role-intro"></a>A função de serviço do Greengrass é uma função de serviço AWS Identity and Access Management (IAM) que AWS IoT Greengrass autoriza o acesso a recursos de AWS serviços em seu nome. Essa função possibilita verificar AWS IoT Greengrass a identidade dos dispositivos clientes e gerenciar as principais informações de conectividade do dispositivo.

Se você ainda não configurou a [função de serviço do Greengrass](greengrass-service-role.md) nesta região, você deve associar uma função de serviço do Greengrass AWS IoT Greengrass à sua Conta da AWS nesta região.

Ao usar a página **Configurar descoberta de dispositivos principais** no [AWS IoT Greengrass console](https://console.aws.amazon.com/greengrass), AWS IoT Greengrass configura a função de serviço do Greengrass para você. Caso contrário, você pode configurá-lo manualmente usando o [AWS IoT console](https://console.aws.amazon.com/iot) ou a AWS IoT Greengrass API.

Nesta seção, você verifica se o perfil de serviço do Greengrass está configurado. Se não estiver configurado, você cria uma nova função de serviço do Greengrass para se AWS IoT Greengrass associar à sua Conta da AWS nesta região.

#### Configurar o perfil de serviço do Greengrass (console)
<a name="configure-service-role-requirement-console"></a>

1. Verifique se a função de serviço do Greengrass está associada AWS IoT Greengrass à sua Conta da AWS nesta região. Faça o seguinte:

   1. <a name="open-iot-console"></a>Navegue até o [console do AWS IoT](https://console.aws.amazon.com/iot).

   1. No painel de navegação, selecione **Configurações**.

   1. Na seção **Perfil de serviço do Greengrass**, encontre **Perfil de serviço atual** para ver se um perfil de serviço do Greengrass está associado.

      Se você tiver um perfil de serviço do Greengrass associado, você atende a esse requisito para usar o componente detector de IP. Vá para [Configure a política da AWS IoT coisa](#configure-iot-policy-requirement).

1. Se a função de serviço do Greengrass não estiver associada AWS IoT Greengrass à sua Conta da AWS nesta região, crie uma função de serviço do Greengrass e associe-a. Faça o seguinte:

   1. Navegue até o [console do IAM](https://console.aws.amazon.com/iam).

   1. Escolha **Roles**.

   1. Selecione **Criar perfil**.

   1. Na página **Criar perfil**, faça o seguinte:

      1. Em **Tipo de entidade confiável**, escolha **AWS service (Serviço da AWS)**.

      1. Em **Caso de uso**, **Casos de uso para outros Serviços da AWS**, escolha **Greengrass**, selecione **Greengrass**. Essa opção especifica a adição AWS IoT Greengrass como uma entidade confiável que pode assumir essa função.

      1. Escolha **Próximo**.

      1. Em **Políticas de permissões**, selecione **AWSGreengrassResourceAccessRolePolicy** para anexar ao perfil.

      1. Escolha **Próximo**.

      1. Em **Nome do perfil**, insira um nome exclusivo para o perfil, como **Greengrass\$1ServiceRole**.

      1. Selecione **Criar perfil**.

   1. <a name="open-iot-console"></a>Navegue até o [console do AWS IoT](https://console.aws.amazon.com/iot).

   1. No painel de navegação, selecione **Configurações**.

   1. Na seção **Perfil de serviço do Greengrass**, escolha **Anexar perfil**.

   1. No modal **Atualizar perfil de serviço do Greengrass**, selecione o perfil do IAM que você criou e escolha **Anexar perfil**.

#### Configurar o perfil de serviço do Greengrass (AWS CLI)
<a name="configure-service-role-requirement-cli"></a>

1. Verifique se a função de serviço do Greengrass está associada AWS IoT Greengrass à sua Conta da AWS nesta região.

   ```
   aws greengrassv2 get-service-role-for-account
   ```

   Se o perfil de serviço do Greengrass estiver associado, a operação retornará uma resposta que contém informações sobre o perfil.

   Se você tiver um perfil de serviço do Greengrass associado, você atende a esse requisito para usar o componente detector de IP. Vá para [Configure a política da AWS IoT coisa](#configure-iot-policy-requirement).

1. Se a função de serviço do Greengrass não estiver associada AWS IoT Greengrass à sua Conta da AWS nesta região, crie uma função de serviço do Greengrass e associe-a. Faça o seguinte:

   1. <a name="create-greengrass-service-role-step-create-role"></a>Crie uma função com uma política de confiança que AWS IoT Greengrass permita assumir a função. Este exemplo cria uma função chamada `Greengrass_ServiceRole`, mas você pode usar um nome diferente. Recomendamos que você também inclua as chaves de contexto de condição global `aws:SourceArn` e `aws:SourceAccount` em sua política de confiança para ajudar a evitar o problema de segurança *confused deputy*. As chaves de contexto de condição restringem o acesso para permitir somente as solicitações provenientes da conta especificada e do espaço de trabalho do Greengrass. Para obter mais informações sobre o problema confused deputy, consulte [Prevenção contra o ataque do “substituto confuso” em todos os serviços](cross-service-confused-deputy-prevention.md).

------
#### [ Linux or Unix ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------
#### [ Windows Command Prompt (CMD) ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17		 	 	 \\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      ```

------
#### [ PowerShell ]

      ```
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "greengrass.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "ArnLike": {
                "aws:SourceArn": "arn:aws:greengrass:region:account-id:*"
              },
              "StringEquals": {
                "aws:SourceAccount": "account-id"
              }
            }
          }
        ]
      }'
      ```

------

   1. <a name="create-greengrass-service-role-step-copy-role-arn"></a>Copie o ARN da função dos metadados da função na saída. Você usará o ARN para associar a função à sua conta.

   1. <a name="create-greengrass-service-role-step-attach-policy"></a>Anexe a política do `AWSGreengrassResourceAccessRolePolicy` à função.

      ```
      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
      ```

   1. Associe a função de serviço do Greengrass com AWS IoT Greengrass for your. Conta da AWS*role-arn*Substitua pelo ARN da função de serviço.

      ```
      aws greengrassv2 associate-service-role-to-account --role-arn role-arn
      ```

      Se for bem-sucedida, a operação retornará um resultado semelhante ao seguinte exemplo.

      ```
      {
        "associatedAt": "timestamp"
      }
      ```

### Configure a política da AWS IoT coisa
<a name="configure-iot-policy-requirement"></a>

Os dispositivos principais usam certificados de dispositivo X.509 para autorizar conexões com a AWS. Você anexa políticas de AWS IoT aos certificados do dispositivo para definir as permissões para um dispositivo principal. Para obter mais informações, consulte [AWS IoT políticas para operações de plano de dados](device-auth.md#iot-policies) e [AWS IoT Política mínima para oferecer suporte aos dispositivos do cliente](device-auth.md#client-device-support-minimal-iot-policy).

Para conectar dispositivos cliente a um dispositivo principal, a AWS IoT política do dispositivo principal deve permitir as seguintes permissões:<a name="core-device-iot-policy-client-device-permissions"></a>
+ <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
+ <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
+ <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
+ <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Essa permissão é necessária para usar o [componente detector de IP](ip-detector-component.md), que reporta as informações de conectividade de rede do dispositivo principal ao serviço de AWS IoT Greengrass nuvem.
+ <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Opcional) Essas permissões são necessárias para usar o [componente gerenciador de sombras](shadow-manager-component.md) para sincronizar as sombras do dispositivo cliente. AWS IoT Core Esse atributo requer o [núcleo do Greengrass](greengrass-nucleus-component.md) v2.6.0 ou posterior, o gerenciador de sombras v2.2.0 ou posterior e a [ponte MQTT](mqtt-bridge-component.md) v2.2.0 ou posterior.

Nesta seção, você revisa as AWS IoT políticas do seu dispositivo principal e adiciona as permissões necessárias que estão faltando. Se você usou o [instalador de software AWS IoT Greengrass Core para provisionar recursos](quick-installation.md), seu dispositivo principal tem uma AWS IoT política que permite acesso a todas as AWS IoT Greengrass ações (`greengrass:*`). Nesse caso, você deve atualizar a AWS IoT política somente se planeja implantar o componente do gerenciador de sombras para sincronizar as sombras do dispositivo. AWS IoT Core Caso contrário, você pode pular esta seção.

#### Configurar a política da AWS IoT coisa (console)
<a name="configure-iot-policy-requirement-console"></a>

1. <a name="update-iot-policy-console-open-greengrass-console"></a>No menu de navegação do [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), selecione **Dispositivos principais**.

1. <a name="update-iot-policy-console-choose-core-device"></a>Na página **Dispositivos principais**, escolha o dispositivo principal a ser atualizado.

1. <a name="update-iot-policy-console-choose-core-device-thing"></a>Na página de detalhes do dispositivo principal, escolha o link para o **Objeto** do dispositivo principal. Esse link abre a página de detalhes do objeto no console da AWS IoT .

1. <a name="update-iot-policy-console-choose-thing-security"></a>Na página de detalhes do objeto, escolha **Certificados**.

1. <a name="update-iot-policy-console-choose-thing-certificate"></a>Na guia **Certificados**, escolha o certificado ativo do objeto.

1. <a name="update-iot-policy-console-choose-certificate-policies"></a>Na página de detalhes do certificado, escolha **Políticas**.

1. <a name="update-iot-policy-console-choose-policy"></a>Na guia **Políticas**, escolha a AWS IoT política a ser revisada e atualizada. É possível adicionar as permissões necessárias a toda política anexada ao certificado ativo do dispositivo principal.
**nota**  <a name="quick-installation-iot-policies-note"></a>
Se você usou o [instalador de software AWS IoT Greengrass Core para provisionar recursos](quick-installation.md), você tem duas AWS IoT políticas. Recomendamos que você escolha a política com o nome **GreengrassV2IoTThingPolicy**, se ela existir. Os dispositivos principais que você cria com o instalador rápido usam esse nome de política por padrão. Se você adicionar permissões a essa política, também estará concedendo essas permissões a outros dispositivos principais que usam essa política.

1. <a name="update-iot-policy-console-edit-policy"></a>Na visão geral da política, escolha **Editar versão ativa**.

1. Revise a política quanto às permissões necessárias e adicione as permissões necessárias que estiverem faltando.<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Essa permissão é necessária para usar o [componente detector de IP](ip-detector-component.md), que reporta as informações de conectividade de rede do dispositivo principal ao serviço de AWS IoT Greengrass nuvem.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Opcional) Essas permissões são necessárias para usar o [componente gerenciador de sombras](shadow-manager-component.md) para sincronizar as sombras do dispositivo cliente. AWS IoT Core Esse atributo requer o [núcleo do Greengrass](greengrass-nucleus-component.md) v2.6.0 ou posterior, o gerenciador de sombras v2.2.0 ou posterior e a [ponte MQTT](mqtt-bridge-component.md) v2.2.0 ou posterior.

1. (Opcional) Para permitir que o dispositivo principal sincronize sombras com AWS IoT Core, adicione a seguinte declaração à política. Se você planeja interagir com as sombras do dispositivo cliente, mas não sincronizá-las AWS IoT Core, pule esta etapa. *account-id*Substitua *region* e pela região que você usa e seu Conta da AWS número.
   + Esse exemplo de declaração permite o acesso às sombras do dispositivo de todos os objetos. Para seguir as práticas recomendadas de segurança, você pode restringir o acesso somente ao dispositivo principal e aos dispositivos cliente conectados a ele. Para obter mais informações, consulte [AWS IoT Política mínima para oferecer suporte aos dispositivos do cliente](device-auth.md#client-device-support-minimal-iot-policy).

   ```
   {
     "Effect": "Allow",
     "Action": [
       "iot:GetThingShadow",
       "iot:UpdateThingShadow",
       "iot:DeleteThingShadow"
     ],
     "Resource": [
       "arn:aws:iot:region:account-id:thing/*"
     ]
   }
   ```

   Depois de adicionar essa declaração, o documento de política será semelhante ao exemplo a seguir.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "iot:Connect",
           "iot:Publish",
           "iot:Subscribe",
           "iot:Receive",
           "greengrass:*"
         ],
         "Resource": "*"
       },
       {
         "Effect": "Allow",
         "Action": [
           "iot:GetThingShadow",
           "iot:UpdateThingShadow",
           "iot:DeleteThingShadow"
         ],
         "Resource": [
           "arn:aws:iot:us-east-1:123456789012:thing/*"
         ]
       }
     ]
   }
   ```

------

1. <a name="update-iot-policy-console-set-as-active-version"></a>Para definir uma nova versão da política como a versão ativa, em **Status da versão da política**, selecione **Definir a versão editada como a versão ativa desta política**.

1. <a name="update-iot-policy-console-save-policy"></a>Selecione **Salvar como nova versão**.

#### Configurar a política da AWS IoT coisa (AWS CLI)
<a name="configure-iot-policy-requirement-cli"></a>

1. <a name="update-iot-policy-cli-list-thing-principals"></a>Liste os princípios básicos do AWS IoT dispositivo principal. As entidades principais do objeto podem ser certificados de dispositivos X.509 ou outros identificadores. Execute o comando a seguir e *MyGreengrassCore* substitua pelo nome do dispositivo principal.

   ```
   aws iot list-thing-principals --thing-name MyGreengrassCore
   ```

   A operação retorna uma resposta que lista os princípios básicos do dispositivo principal.

   ```
   {
       "principals": [
           "arn:aws:iot:us-west-2:123456789012:cert/certificateId"
       ]
   }
   ```

1. <a name="update-iot-policy-cli-identify-active-certificate"></a>Identifique o certificado ativo do dispositivo principal. Execute o comando a seguir e *certificateId* substitua pelo ID de cada certificado da etapa anterior até encontrar o certificado ativo. O ID do certificado é a string hexadecimal no final do ARN do certificado. O argumento `--query` especifica a saída somente do status do certificado.

   ```
   aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'
   ```

   A operação retorna o status do certificado como uma string. Por exemplo, se o certificado estiver ativo, essa operação resulta `"ACTIVE"`.

1. <a name="update-iot-policy-cli-list-certificate-policies"></a>Liste as AWS IoT políticas anexadas ao certificado. Execute o comando a seguir e substitua o ARN do certificado pelo outro.

   ```
   aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId
   ```

   A operação retorna uma resposta que lista as AWS IoT políticas anexadas ao certificado.

   ```
   {
       "policies": [
           {
               "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias"
           },
           {
               "policyName": "GreengrassV2IoTThingPolicy",
               "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy"
           }
       ]
   }
   ```

1. <a name="update-iot-policy-cli-choose-policy"></a>Escolha a política a ser visualizada e atualizada.
**nota**  <a name="quick-installation-iot-policies-note"></a>
Se você usou o [instalador de software AWS IoT Greengrass Core para provisionar recursos](quick-installation.md), você tem duas AWS IoT políticas. Recomendamos que você escolha a política com o nome **GreengrassV2IoTThingPolicy**, se ela existir. Os dispositivos principais que você cria com o instalador rápido usam esse nome de política por padrão. Se você adicionar permissões a essa política, também estará concedendo essas permissões a outros dispositivos principais que usam essa política.

1. <a name="update-iot-policy-cli-get-policy-document"></a>Obtenha o documento da política. Execute o comando a seguir e *GreengrassV2IoTThingPolicy* substitua pelo nome da política.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy
   ```

   A operação retorna uma resposta contendo o documento da política e outras informações sobre a política. O documento de política é um objeto JSON serializado como uma string. 

   ```
   {
       "policyName": "GreengrassV2IoTThingPolicy",
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
                   \\"iot:Connect\\",\
                   \\"iot:Publish\\",\
                   \\"iot:Subscribe\\",\
                   \\"iot:Receive\\",\
                   \\"greengrass:*\\"\
   ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "defaultVersionId": "1",
       "creationDate": "2021-02-05T16:03:14.098000-08:00",
       "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00",
       "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f"
   }
   ```

1. <a name="update-iot-policy-cli-create-policy-document-file"></a>Use um conversor on-line ou outra ferramenta para converter a string do documento de política em um objeto JSON e, em seguida, salve-a em um arquivo chamado `iot-policy.json`.

   Por exemplo, se você tiver a ferramenta [jq](https://stedolan.github.io/jq/) instalada, poderá executar o comando a seguir para ter o documento de política, convertê-lo em um objeto JSON e salvá-lo como um objeto JSON.

   ```
   aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
   ```

1. Revise a política quanto às permissões necessárias e adicione as que estiverem faltando.

   <a name="nano-command-intro-existing-file"></a>Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para abrir o arquivo.

   ```
   nano iot-policy.json
   ```<a name="core-device-iot-policy-client-device-permissions"></a>
   + <a name="core-device-iot-policy-client-device-permissions-putcertificateauthorities"></a>`greengrass:PutCertificateAuthorities`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceidentity"></a>`greengrass:VerifyClientDeviceIdentity`
   + <a name="core-device-iot-policy-client-device-permissions-verifyclientdeviceiotcertificateassociation"></a>`greengrass:VerifyClientDeviceIoTCertificateAssociation`
   + <a name="core-device-iot-policy-client-device-permissions-getconnectivityinfo"></a>`greengrass:GetConnectivityInfo`
   + <a name="core-device-iot-policy-client-device-permissions-updateconnectivityinfo"></a>`greengrass:UpdateConnectivityInfo`— (Opcional) Essa permissão é necessária para usar o [componente detector de IP](ip-detector-component.md), que reporta as informações de conectividade de rede do dispositivo principal ao serviço de AWS IoT Greengrass nuvem.
   + <a name="core-device-iot-policy-client-device-permissions-shadows"></a>`iot:GetThingShadow`,`iot:UpdateThingShadow`, e `iot:DeleteThingShadow` — (Opcional) Essas permissões são necessárias para usar o [componente gerenciador de sombras](shadow-manager-component.md) para sincronizar as sombras do dispositivo cliente. AWS IoT Core Esse atributo requer o [núcleo do Greengrass](greengrass-nucleus-component.md) v2.6.0 ou posterior, o gerenciador de sombras v2.2.0 ou posterior e a [ponte MQTT](mqtt-bridge-component.md) v2.2.0 ou posterior.

1. <a name="update-iot-policy-cli-create-policy-version"></a>Salve as alterações como uma nova versão da política. Execute o comando a seguir e *GreengrassV2IoTThingPolicy* substitua pelo nome da política.

   ```
   aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default
   ```

   A operação retornará uma resposta semelhante ao seguinte exemplo, se for bem-sucedida.

   ```
   {
       "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
       "policyDocument": "{\
     \\"Version\\": \\"2012-10-17		 	 	 \\",\
     \\"Statement\\": [\
       {\
         \\"Effect\\": \\"Allow\\",\
         \\"Action\\": [\
   \\t\\t\\"iot:Connect\\",\
   \\t\\t\\"iot:Publish\\",\
   \\t\\t\\"iot:Subscribe\\",\
   \\t\\t\\"iot:Receive\\",\
   \\t\\t\\"greengrass:*\\"\
         ],\
         \\"Resource\\": \\"*\\"\
       }\
     ]\
   }",
       "policyVersionId": "2",
       "isDefaultVersion": true
   }
   ```

## Componentes do Greengrass para suporte a dispositivos cliente
<a name="cloud-discovery-components"></a>

**Importante**  <a name="client-device-support-nucleus-requirement"></a>
O dispositivo principal deve executar a versão 2.2.0 ou posterior do [núcleo do Greengrass](greengrass-nucleus-component.md) para dar suporte aos dispositivos cliente.

Para permitir que dispositivos cliente se conectem e se comuniquem com um dispositivo principal, implante os seguintes componentes do Greengrass no dispositivo principal:
+ <a name="client-device-component-overview-client-device-auth"></a>[Autenticação do dispositivo cliente](client-device-auth-component.md) (`aws.greengrass.clientdevices.Auth`)

  Implante o componente de autenticação do dispositivo cliente para autenticar dispositivos cliente e autorizar ações dele. Esse componente permite que suas AWS IoT coisas se conectem a um dispositivo principal.

  Esse componente requer algumas configurações para ser usado. É necessário especificar grupos de dispositivos cliente e as operações que cada grupo está autorizado a realizar, como se conectar e se comunicar pelo MQTT. Para obter mais informações, consulte a [configuração do componente de autenticação do dispositivo cliente](client-device-auth-component.md#client-device-auth-component-configuration).
+ <a name="client-device-component-overview-mqtt-broker-moquette"></a>[Agente MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md) (`aws.greengrass.clientdevices.mqtt.Moquette`)

  Implante o componente do agente Moquette MQTT para executar um agente MQTT leve. O agente Moquette MQTT é compatível com o MQTT 3.1.1 e inclui suporte local para QoS 0, QoS 1, QoS 2, mensagens retidas, mensagens de último testamento e assinaturas persistentes.

  Não é necessário configurar esse componente para usá-lo. No entanto, você pode configurar a porta na qual esse componente opera o agente MQTT. Por padrão, ele usa a porta 8883.
+ <a name="client-device-component-overview-mqtt-broker-emqx"></a>[Agente MQTT 5 (EMQX)](mqtt-broker-emqx-component.md) (`aws.greengrass.clientdevices.mqtt.EMQX`)
**nota**  
Para usar o agente MQTT 5 EMQX, você deve usar o [núcleo do Greengrass](greengrass-nucleus-component.md) v2.6.0 ou posterior e a autenticação do dispositivo cliente v2.2.0 ou posterior.

  Implante o componente do agente MQTT EMQX para usar os atributos do MQTT 5.0 na comunicação entre dispositivos cliente e o dispositivo principal. O agente MQTT EMQX é compatível com o MQTT 5.0 e inclui suporte para intervalos de expiração de sessões e mensagens, propriedades do usuário, assinaturas compartilhadas, aliases de tópicos e muito mais.

  Não é necessário configurar esse componente para usá-lo. No entanto, você pode configurar a porta na qual esse componente opera o agente MQTT. Por padrão, ele usa a porta 8883.
+ <a name="client-device-component-overview-mqtt-bridge"></a>[Ponte MQTT](mqtt-bridge-component.md) (`aws.greengrass.clientdevices.mqtt.Bridge`)

  (Opcional) Implante o componente de ponte MQTT para retransmitir mensagens entre dispositivos cliente (MQTT local), publicação/assinatura local e MQTT. AWS IoT Core Configure esse componente para sincronizar dispositivos cliente AWS IoT Core e interagir com dispositivos clientes a partir dos componentes do Greengrass.

  Esse componente requer configuração para ser usado. Você deve especificar os mapeamentos de tópicos em que esse componente retransmite mensagens. Para obter mais informações, consulte [Configuração do componente de ponte MQTT](mqtt-bridge-component.md#mqtt-bridge-component-configuration).
+ <a name="client-device-component-overview-ip-detector"></a>[Detector IP](ip-detector-component.md) (`aws.greengrass.clientdevices.IPDetector`)

  (Opcional) Implante o componente detector de IP para reportar automaticamente os endpoints do broker MQTT do dispositivo principal ao serviço de AWS IoT Greengrass nuvem. Não é possível usar esse componente se você tiver uma configuração de rede complexa, como quando um roteador encaminha a porta do agente MQTT para o dispositivo principal.

  Não é necessário configurar esse componente para usá-lo.
+ <a name="client-device-component-overview-shadow-manager"></a>[Gerenciador de sombras](shadow-manager-component.md) (`aws.greengrass.ShadowManager`)
**nota**  
Para gerenciar as sombras do dispositivo cliente, você deve usar o [núcleo do Greengrass](greengrass-nucleus-component.md) v2.6.0 ou posterior, o gerenciador de sombras v2.2.0 ou posterior e a [ponte MQTT](mqtt-bridge-component.md) v2.2.0 ou posterior.

  (Opcional) Implante o componente do gerenciador de sombras para gerenciar as sombras do dispositivo cliente no dispositivo principal. Os componentes do Greengrass podem obter, atualizar e excluir sombras do dispositivo cliente para interagir com eles. Você também pode configurar o componente do gerenciador de sombras para sincronizar as sombras do dispositivo cliente com o serviço de AWS IoT Core nuvem.

  Para usar esse componente com sombras do dispositivo cliente, você deve configurar o componente de ponte MQTT para retransmitir mensagens entre dispositivos cliente e o gerenciador de sombras, que usa publicação/assinatura local. De outra forma, esse componente não exige configuração para ser usado, mas exige configuração para sincronizar as sombras do dispositivo.

**nota**  <a name="note-deploy-one-mqtt-broker"></a>
Recomendamos que você implante somente um componente do agente MQTT. A [ponte MQTT](mqtt-bridge-component.md) e os componentes do [detector IP](ip-detector-component.md) funcionam com apenas um componente do agente MQTT por vez. Se você implantar vários componentes do agente MQTT, deverá configurá-los para usar portas diferentes.

## Configurar a descoberta na nuvem (console)
<a name="configure-cloud-discovery-console"></a>

Você pode usar o AWS IoT Greengrass console para associar dispositivos cliente, gerenciar endpoints do dispositivo principal e implantar componentes para habilitar o suporte ao dispositivo cliente. Para obter mais informações, consulte [Etapa 2: habilitar o suporte ao dispositivo cliente](client-devices-tutorial.md#enable-client-device-support).

## Configurar a descoberta na nuvem (AWS CLI)
<a name="configure-cloud-discovery-cli"></a>

Você pode usar o AWS Command Line Interface (AWS CLI) para associar dispositivos cliente, gerenciar endpoints principais do dispositivo e implantar componentes para habilitar o suporte ao dispositivo cliente. Para saber mais, consulte:
+ [Gerenciar associações de dispositivos cliente (AWS CLI)](associate-client-devices.md#manage-client-device-associations-cli)
+ [Gerenciar endpoints do dispositivo principal do](manage-core-device-endpoints.md)
+ [Componentes do dispositivo cliente fornecidos pela AWS](client-device-components.md)
+ [Criar implantações](create-deployments.md)

# Associar dispositivos cliente
<a name="associate-client-devices"></a>

Para usar a descoberta na nuvem, associe dispositivos cliente a um dispositivo principal para que eles possam descobrir o dispositivo principal. Em seguida, eles podem usar a [API de descoberta do Greengrass](greengrass-discover-api.md) para recuperar informações de conectividade e certificados para seus dispositivos principais associados.

Da mesma forma, desassocie os dispositivos cliente de um dispositivo principal para impedir que eles descubram o dispositivo principal.

**Topics**
+ [Gerenciar associações de dispositivos cliente (console)](#manage-client-device-associations-console)
+ [Gerenciar associações de dispositivos cliente (AWS CLI)](#manage-client-device-associations-cli)
+ [Gerenciar associações de dispositivos cliente (API)](#manage-client-device-associations-api)

## Gerenciar associações de dispositivos cliente (console)
<a name="manage-client-device-associations-console"></a>

Você pode usar o AWS IoT Greengrass console para visualizar, adicionar e excluir associações de dispositivos clientes.

**Como visualizar associações de dispositivos cliente para um dispositivo principal (console)**

1. <a name="navigate-greengrass-console"></a>Navegue até o [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Escolha **Dispositivos principais**.

1. Escolha o dispositivo principal a ser gerenciado.

1. Na página de detalhes do dispositivo principal, escolha a guia **Dispositivos clientes**.

1. Na seção **Dispositivos cliente associados**, você pode ver quais dispositivos cliente (AWS IoT coisas) estão associados ao dispositivo principal.

**Como associar dispositivos cliente ao dispositivo principal (console)**

1. <a name="navigate-greengrass-console"></a>Navegue até o [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Escolha **Dispositivos principais**.

1. Escolha o dispositivo principal a ser gerenciado.

1. Na página de detalhes do dispositivo principal, escolha a guia **Dispositivos clientes**.

1. Na seção **Dispositivos cliente associados**, escolha **Associar dispositivos cliente.**

1. No modal **Associar dispositivos cliente ao dispositivo principal**, faça o seguinte para cada dispositivo cliente a ser associado:

   1. Digite o nome da AWS IoT coisa a ser associada como dispositivo cliente.

   1. Escolha **Adicionar**.

1. Selecione **Associar **.

   Os dispositivos cliente que você associou agora podem usar a API de descoberta do Greengrass para descobrir esse dispositivo principal.

**Como desassociar dispositivos cliente de um dispositivo principal (console)**

1. <a name="navigate-greengrass-console"></a>Navegue até o [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Escolha **Dispositivos principais**.

1. Escolha o dispositivo principal a ser gerenciado.

1. Na página de detalhes do dispositivo principal, escolha a guia **Dispositivos clientes**.

1. Na seção **Dispositivos cliente associados**, escolha cada dispositivo cliente a ser desassociado.

1. Escolha **Desassociar**.

1. No modal de confirmação, escolha **Desassociar**.

   Os dispositivos cliente que você desassociou não podem mais usar a API de descoberta do Greengrass para descobrir esse dispositivo principal.

## Gerenciar associações de dispositivos cliente (AWS CLI)
<a name="manage-client-device-associations-cli"></a>

Você pode usar o AWS Command Line Interface (AWS CLI) para gerenciar associações de dispositivos clientes para um dispositivo principal.

**Como visualizar associações de dispositivos cliente para um dispositivo principal (AWS CLI)**
+ Use o seguinte comando: [list-client-devices-associated- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/list-client-devices-associated-with-core-device.html).

**Como associar dispositivos cliente ao dispositivo principal (AWS CLI)**
+ Use o seguinte comando: [batch-associate-client-device- with-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-associate-client-device-with-core-device.html).

**Como desassociar dispositivos cliente de um dispositivo principal (AWS CLI)**
+ Use o seguinte comando: [batch-disassociate-client-device- from-core-device](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/batch-disassociate-client-device-from-core-device.html).

## Gerenciar associações de dispositivos cliente (API)
<a name="manage-client-device-associations-api"></a>

Você pode usar a AWS API para gerenciar associações de dispositivos clientes para um dispositivo principal.

**Para visualizar associações de dispositivos clientes para um dispositivo principal (AWS API)**
+ Use a seguinte operação: [ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html).

**Para associar dispositivos cliente a um dispositivo principal (AWS API)**
+ Use a seguinte operação: [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html).

**Para dissociar dispositivos cliente de um dispositivo principal (AWS API)**
+ Use a seguinte operação: [BatchDisassociateClientDeviceFromCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchDisassociateClientDeviceFromCoreDevice.html).

# Autenticar clientes enquanto estiver off-line
<a name="offline-authentication"></a>

Com a *autenticação offline*, você pode configurar seu dispositivo AWS IoT Greengrass Core para que os dispositivos cliente possam se conectar a um dispositivo principal, mesmo quando o dispositivo principal não estiver conectado à nuvem. Quando você usa a autenticação off-line, seus dispositivos Greengrass podem continuar funcionando em um ambiente parcialmente off-line.

Para usar a autenticação off-line para um dispositivo cliente com uma conexão com a nuvem, você precisa do seguinte:
+ Um dispositivo AWS IoT Greengrass principal com o [Autenticação do dispositivo cliente](client-device-auth-component.md) componente implantado. É necessário usar a versão 2.3.0 ou superior para autenticação offline.
+ Uma conexão em nuvem para o dispositivo principal durante a conexão inicial dos dispositivos clientes.

## Armazenar credenciais de cliente
<a name="offline-auth-store-credentials"></a>

Quando um dispositivo cliente se conecta a um dispositivo principal pela primeira vez, o dispositivo principal chama o AWS IoT Greengrass serviço. Quando chamado, o Greengrass valida o registro do dispositivo cliente como uma coisa do AWS IoT . Também valida se o dispositivo tem um certificado válido. O dispositivo principal então armazena essas informações localmente.

Na próxima vez que o dispositivo se conectar, o dispositivo principal do Greengrass tentará validar o dispositivo cliente com o serviço. AWS IoT Greengrass Se não conseguir se conectar AWS IoT Greengrass, o dispositivo principal usa as informações do dispositivo armazenadas localmente para validar o dispositivo cliente.

É possível configurar por quanto tempo o dispositivo principal do Greengrass armazena credenciais. Você pode definir o tempo limite de um minuto para 2.147.483.647 minutos definindo a opção de configuração `clientDeviceTrustDurationMinutes` na [configuração do componente de autenticação do dispositivo cliente](https://docs.aws.amazon.com//greengrass/v2/developerguide/client-device-auth-component.html#client-device-auth-component-configuration). O padrão é um minuto, o que efetivamente desativa a autenticação offline. Ao definir esse tempo limite, recomendamos que você considere suas necessidades de segurança. Você também deve considerar por quanto tempo espera que os dispositivos principais funcionem enquanto estão desconectados da nuvem.

O dispositivo principal atualiza seu armazenamento de credenciais três vezes:

1. Quando um dispositivo se conecta ao dispositivo principal pela primeira vez.

1. Se o dispositivo principal estiver conectado à nuvem, quando um dispositivo cliente se reconectar ao dispositivo principal.

1. Se o dispositivo principal estiver conectado à nuvem, uma vez por dia para atualizar todo o armazenamento de credenciais.

Quando o dispositivo principal do Greengrass atualiza seu armazenamento de credenciais, ele usa a operação. [ ListClientDevicesAssociatedWithCoreDevice](https://docs.aws.amazon.com//greengrass/v2/APIReference/API_ListClientDevicesAssociatedWithCoreDevice.html) O Greengrass atualiza somente os dispositivos retornados por essa operação. Para associar um dispositivo cliente a um dispositivo principal, consulte [Associar dispositivos cliente](associate-client-devices.md).

Para usar a `ListClientDevicesAssociatedWithCoreDevice` operação, você deve adicionar permissão para a operação à função AWS Identity and Access Management (IAM) associada à Conta da AWS que é executada AWS IoT Greengrass. Para obter mais informações, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

# Gerenciar endpoints do dispositivo principal do
<a name="manage-core-device-endpoints"></a>

Ao usar a descoberta na nuvem, você armazena os endpoints do agente MQTT para dispositivos principais no serviço de AWS IoT Greengrass nuvem. Os dispositivos cliente se conectam AWS IoT Greengrass para recuperar esses endpoints e outras informações para seus dispositivos principais associados.

Para cada dispositivo principal, você pode gerenciar endpoints automática ou manualmente.
+ **Gerencie terminais automaticamente com detector de IP**

  É possível implantar o [componente detector de IP](ip-detector-component.md) para gerenciar automaticamente os endpoints do dispositivo principal se tiver uma configuração de rede não complexa, como quando os dispositivos cliente estão na mesma rede do dispositivo principal. Você não pode usar o componente detector de IP se o dispositivo principal estiver atrás de um roteador que encaminha a porta do agente MQTT para o dispositivo principal, por exemplo.

  O componente detector de IP também é útil se você implantar em grupos de coisas, porque ele gerencia os endpoints de todos os dispositivos principais do grupo de coisas. Para obter mais informações, consulte [Use o detector de IP para gerenciar automaticamente os endpoints](#use-ip-detector).
+ **Gerencie manualmente os endpoints**

  Se você não puder usar o componente detector de IP, deverá gerenciar manualmente os endpoints principais do dispositivo. É possível atualizar esses endpoints com o console da ou a API da. Para obter mais informações, consulte [Gerenciar endpoints manualmente](#manually-manage-endpoints).

**Topics**
+ [Use o detector de IP para gerenciar automaticamente os endpoints](#use-ip-detector)
+ [Gerenciar endpoints manualmente](#manually-manage-endpoints)

## Use o detector de IP para gerenciar automaticamente os endpoints
<a name="use-ip-detector"></a>

Se você tiver uma configuração de rede simples, como os dispositivos cliente na mesma rede do dispositivo principal, poderá implantar o [componente detector de IP](ip-detector-component.md) para fazer o seguinte:
+ Monitore as informações de conectividade de rede local do dispositivo principal do Greengrass. Essas informações incluem os endpoints de rede do dispositivo principal e a porta em que o agente MQTT opera.
+ Relate as informações de conectividade do dispositivo principal ao serviço de AWS IoT Greengrass nuvem.

O componente detector de IP substitui os endpoints que você define manualmente.

**Importante**  
A AWS IoT política do dispositivo principal deve permitir a `greengrass:UpdateConnectivityInfo` permissão para usar o componente detector de IP. Para obter mais informações, consulte [AWS IoT políticas para operações de plano de dados](device-auth.md#iot-policies) e [Configure a política da AWS IoT coisa](connect-client-devices.md#configure-iot-policy-requirement).

É possível executar uma das seguintes ações para implantar o componente detector de IP:
+ Usar a página **Configurar a descoberta** no console. Para obter mais informações, consulte [Configurar a descoberta na nuvem (console)](connect-client-devices.md#configure-cloud-discovery-console).
+ Criar e revisar as implantações para incluir o detector de IP. Você pode usar o console ou AWS CLI a AWS API para gerenciar implantações. Para obter mais informações, consulte [Criar implantações](create-deployments.md).

### Implantar o componente detector de IP (console)
<a name="deploy-ip-detector-console"></a>

1. No menu de navegação do [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass), selecione **Componentes**.

1. Na página **Componentes**, escolha a guia **Componentes públicos** e **aws.greengrass.clientdevices.IPDetector**.

1. Na página **aws.greengrass.clientdevices.IPDetector**, escolha **Implantar**.

1. <a name="deploy-component-choose-deployment-step"></a>Em **Adicionar à implantação**, escolha uma implantação existente para revisar ou opte por criar uma nova e, em seguida, escolha **Avançar**.

1. <a name="deploy-component-choose-target-step"></a>Se você criar uma nova implantação, escolha o dispositivo principal ou grupo de objetos de destino para ela. Na página **Especificar destino**, em **Destino de implantação**, escolha um dispositivo principal ou grupo de objetos e, depois, **Avançar**.

1. Na página **Selecionar componentes**, verifique se o componente **aws.greengrass.clientdevices.IPDetector** está selecionado e escolha **Avançar**.

1. Na página **Configurar componentes**, selecione **aws.greengrass.clientdevices.IPDetector** e faça o seguinte:

   1. Escolha **Configurar componente**.

   1. No modal **Configurar aws.greengrass.clientdevices.IPDetector**, em **Atualização de configuração**, em **Configuração para mesclar**, você pode inserir uma atualização de configuração para configurar o componente do detector de IP. É possível especificar uma das seguintes opções de configuração:
      + `defaultPort` (opcional): <a name="ip-detector-component-configuration-default-port-definition"></a>a porta do agente MQTT para relatar quando esse componente detecta endereços IP. É necessário especificar esse parâmetro se configurar o agente MQTT para usar uma porta diferente da porta padrão 8883. 
      + `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços de IPv4 loopback. Esses são endereços IP, como, por exemplo, `localhost`, em que um dispositivo pode se comunicar consigo mesmo. Use essa opção em ambientes de teste em que o dispositivo principal e o dispositivo cliente são executados no mesmo sistema. 
      + `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços IPv4 [locais de links](https://en.wikipedia.org/wiki/Link-local_address). Use essa opção se a rede do dispositivo principal não tiver o Protocolo de Configuração Dinâmica de Host (DHCP) ou endereços IP atribuídos estaticamente. 
      + `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços de IPv6 loopback. Esses são endereços IP, como, por exemplo, `localhost`, em que um dispositivo pode se comunicar consigo mesmo. Use essa opção em ambientes de teste em que o dispositivo principal e o dispositivo cliente são executados no mesmo sistema. É necessário definir `includeIPv4Addrs` como `false` e `includeIPv6Addrs` como `true` para usar essa opção. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.
      + `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços IPv6 [locais de links](https://en.wikipedia.org/wiki/Link-local_address). Use essa opção se a rede do dispositivo principal não tiver o Protocolo de Configuração Dinâmica de Host (DHCP) ou endereços IP atribuídos estaticamente. É necessário definir `includeIPv4Addrs` como `false` e `includeIPv6Addrs` como `true` para usar essa opção. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.
      + `includeIPv4Addrs` (opcional): <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>o padrão é definido como verdadeiro. Você pode ativar essa opção para publicar IPv4 endereços encontrados no dispositivo principal. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.
      + `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Opcional) Você pode ativar essa opção para publicar IPv6 endereços encontrados no dispositivo principal. Defina `includeIPv4Addrs` como `false` para usar essa opção. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.

      A atualização de configuração pode ser semelhante ao exemplo a seguir.

      ```
      {
        "defaultPort": "8883",
        "includeIPv4LoopbackAddrs": false,
        "includeIPv4LinkLocalAddrs": false
      }
      ```

   1. Escolha **Confirmar** para fechar o modal e, em seguida, escolha **Avançar**.

1. <a name="deploy-component-configure-advanced-settings-step"></a>Na página **Definir configurações avançadas**, mantenha as configurações padrão e escolha **Avançar**.

1. <a name="deploy-component-review-and-deploy-step"></a>Na página **Pré-visualizar**, escolha **Implantar**.

   A implantação pode levar até um minuto para ser concluída.

### Implantar o componente detector de IP (AWS CLI)
<a name="deploy-ip-detector-cli"></a>

Para implantar o componente detector de IP, crie um documento de implantação que inclua `aws.greengrass.clientdevices.IPDetector` no objeto `components` e especifique a atualização de configuração do componente. Siga as instruções em [Criar implantações](create-deployments.md) para criar uma nova implantação ou revisar uma existente.

É possível especificar qualquer uma das seguintes opções para configurar o componente detector de IP ao criar o documento de implantação:
+ `defaultPort` (opcional): <a name="ip-detector-component-configuration-default-port-definition"></a>a porta do agente MQTT para relatar quando esse componente detecta endereços IP. É necessário especificar esse parâmetro se configurar o agente MQTT para usar uma porta diferente da porta padrão 8883. 
+ `includeIPv4LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv4-loopback-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços de IPv4 loopback. Esses são endereços IP, como, por exemplo, `localhost`, em que um dispositivo pode se comunicar consigo mesmo. Use essa opção em ambientes de teste em que o dispositivo principal e o dispositivo cliente são executados no mesmo sistema. 
+ `includeIPv4LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv4-link-local-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços IPv4 [locais de links](https://en.wikipedia.org/wiki/Link-local_address). Use essa opção se a rede do dispositivo principal não tiver o Protocolo de Configuração Dinâmica de Host (DHCP) ou endereços IP atribuídos estaticamente. 
+ `includeIPv6LoopbackAddrs`— <a name="ip-detector-component-configuration-include-ipv6-loopback-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços de IPv6 loopback. Esses são endereços IP, como, por exemplo, `localhost`, em que um dispositivo pode se comunicar consigo mesmo. Use essa opção em ambientes de teste em que o dispositivo principal e o dispositivo cliente são executados no mesmo sistema. É necessário definir `includeIPv4Addrs` como `false` e `includeIPv6Addrs` como `true` para usar essa opção. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.
+ `includeIPv6LinkLocalAddrs`— <a name="ip-detector-component-configuration-include-ipv6-link-local-addrs-definition"></a>(Opcional) Você pode ativar essa opção para detectar e relatar endereços IPv6 [locais de links](https://en.wikipedia.org/wiki/Link-local_address). Use essa opção se a rede do dispositivo principal não tiver o Protocolo de Configuração Dinâmica de Host (DHCP) ou endereços IP atribuídos estaticamente. É necessário definir `includeIPv4Addrs` como `false` e `includeIPv6Addrs` como `true` para usar essa opção. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.
+ `includeIPv4Addrs` (opcional): <a name="ip-detector-component-configuration-include-ipv4-addrs-definition"></a>o padrão é definido como verdadeiro. Você pode ativar essa opção para publicar IPv4 endereços encontrados no dispositivo principal. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.
+ `includeIPv6Addrs`— <a name="ip-detector-component-configuration-include-ipv6-addrs-definition"></a>(Opcional) Você pode ativar essa opção para publicar IPv6 endereços encontrados no dispositivo principal. Defina `includeIPv4Addrs` como `false` para usar essa opção. É necessário ter o detector de IP versão 2.2.0 ou mais recente para usar essa opção.

O exemplo de documento de implantação parcial a seguir especifica o relatório da porta 8883 como a porta do agente MQTT.

```
{
  ...,
  "components": {
    ...,
    "aws.greengrass.clientdevices.IPDetector": {
      "componentVersion": "2.1.1",
      "configurationUpdate": {
        "merge": "{\"defaultPort\":\"8883\",}"
      }
    }
  }
}
```

## Gerenciar endpoints manualmente
<a name="manually-manage-endpoints"></a>

É possível gerenciar manualmente os endpoints do agente MQTT para os dispositivos principais.

Cada endpoint do agente MQTT tem as seguintes informações:

**Endpoint** (`HostAddress`)  
Um endereço IP ou endereço DNS em que os dispositivos clientes podem se conectar a um agente MQTT no dispositivo principal.

**Porta** (`PortNumber`)  
A porta em que o agente MQTT opera no dispositivo principal.  
É possível configurar essa porta no [componente de agente Moquette MQTT](mqtt-broker-moquette-component.md), cujo padrão é usar a porta 8883.

**Metadados** (`Metadata`)  
Metadados adicionais a serem fornecidos aos dispositivos clientes que se conectam a esse endpoint.

**Topics**
+ [Gerenciar endpoints (console)](#manually-manage-endpoints-console)
+ [Gerenciar endpoints (AWS CLI)](#manually-manage-endpoints-cli)
+ [Gerenciar endpoints (API)](#manually-manage-endpoints-api)

### Gerenciar endpoints (console)
<a name="manually-manage-endpoints-console"></a>

Você pode usar o AWS IoT Greengrass console para visualizar, atualizar e remover endpoints de um dispositivo principal.

**Para gerenciar endpoints para um dispositivo principal (console)**

1. <a name="navigate-greengrass-console"></a>Navegue até o [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

1. Escolha **Dispositivos principais**.

1. Escolha o dispositivo principal a ser gerenciado.

1. Na página de detalhes do dispositivo principal, escolha a guia **Dispositivos clientes**.

1. Na seção de **endpoints do agente MQTT**, você pode ver os endpoints do agente MQTT do dispositivo principal. Escolha **Gerenciar endpoints**.

1. No modal **Gerenciar endpoints**, adicione ou remova os endpoints do agente MQTT para o dispositivo principal.

1. Selecione **Atualizar**.

### Gerenciar endpoints (AWS CLI)
<a name="manually-manage-endpoints-cli"></a>

Você pode usar o AWS Command Line Interface (AWS CLI) para gerenciar endpoints de um dispositivo principal.

**nota**  
Como o suporte ao dispositivo cliente AWS IoT Greengrass V2 é compatível com versões anteriores AWS IoT Greengrass V1, você pode usar AWS IoT Greengrass V2 nossas operações de AWS IoT Greengrass V1 API para gerenciar os endpoints principais do dispositivo.

**Para obter endpoints para um dispositivo principal (AWS CLI)**
+ Use um dos comandos a seguir:
  + [greengrass v2: get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/get-connectivity-info.html)
  + [capim verde: get-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/get-connectivity-info.html)

**Para atualizar os endpoints de um dispositivo principal (AWS CLI)**
+ Use um dos comandos a seguir:
  + [greengrass v2: update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrassv2/update-connectivity-info.html)
  + [capim verde: update-connectivity-info](https://docs.aws.amazon.com/cli/latest/reference/greengrass/update-connectivity-info.html)

### Gerenciar endpoints (API)
<a name="manually-manage-endpoints-api"></a>

Você pode usar a AWS API para gerenciar endpoints para um dispositivo principal.

**nota**  
Como o suporte ao dispositivo cliente AWS IoT Greengrass V2 é compatível com versões anteriores AWS IoT Greengrass V1, você pode usar AWS IoT Greengrass V2 nossas operações de AWS IoT Greengrass V1 API para gerenciar os endpoints principais do dispositivo.

**Para obter endpoints para um dispositivo principal (AWS API)**
+ Use uma das seguintes operações:
  + [V2: GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_GetConnectivityInfo.html)
  + [V1: GetConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/getconnectivityinfo-get.html)

**Para atualizar os endpoints de um dispositivo principal (AWS API)**
+ Use uma das seguintes operações:
  + [V2: UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_UpdateConnectivityInfo.html)
  + [V1: UpdateConnectivityInfo](https://docs.aws.amazon.com/greengrass/v1/apireference/updateconnectivityinfo-put.html)

# Escolher um agente MQTT
<a name="choose-local-mqtt-broker"></a>

O AWS IoT Greengrass fornece opções para você escolher qual agente MQTT local executar nos dispositivos principais. Os dispositivos cliente se conectam ao agente MQTT que é executado em um dispositivo principal, então escolha um agente MQTT que seja compatível com os dispositivos cliente que deseja conectar.

**nota**  <a name="note-deploy-one-mqtt-broker"></a>
Recomendamos que você implante somente um componente do agente MQTT. A [ponte MQTT](mqtt-bridge-component.md) e os componentes do [detector IP](ip-detector-component.md) funcionam com apenas um componente do agente MQTT por vez. Se você implantar vários componentes do agente MQTT, deverá configurá-los para usar portas diferentes.

É possível escolher entre os seguintes agentes MQTT:
+ **[Agente MQTT 3.1.1 (Moquette)](mqtt-broker-moquette-component.md)** – `aws.greengrass.clientdevices.mqtt.Moquette`

  Escolha esta opção para um agente MQTT leve que seja compatível com o padrão MQTT 3.1.1. O agente MQTT do AWS IoT Core e o AWS IoT Device SDK também são compatíveis com o padrão MQTT 3.1.1, portanto, é possível usar esses recursos para criar uma aplicação que usa o MQTT 3.1.1 em seus dispositivos e na Nuvem AWS.
+ **[Agente MQTT 5 (EMQX)](mqtt-broker-emqx-component.md)** – `aws.greengrass.clientdevices.mqtt.EMQX`

  Escolha esta opção para usar os recursos do MQTT 5 na comunicação entre dispositivos principais e dispositivos cliente. Esse componente usa mais recursos do que o agente Moquette MQTT 3.1.1 e, nos dispositivos principais do Linux, ele requer o Docker.

  O MQTT 5 é compatível com versões anteriores do MQTT 3.1.1, então é possível conectar dispositivos cliente que usam o MQTT 3.1.1 a esse agente. Se você executar o agente Moquette MQTT 3.1.1, poderá substituí-lo pelo agente MQTT 5 EMQX, e os dispositivos cliente poderão continuar se conectando e operando normalmente.

  <a name="note-local-mqtt-broker-mqtt-5-features"></a>
+ **Implementar um agente personalizado**

  Escolha esta opção para criar um componente de agente local personalizado para se comunicar com os dispositivos cliente. É possível criar um agente local personalizado que usa um protocolo diferente do MQTT. O AWS IoT Greengrass fornece um SDK de componentes que pode ser usado para autenticar e autorizar dispositivos cliente. Para obter mais informações, consulte [Use o AWS IoT Device SDK para se comunicar com o núcleo do Greengrass, outros componentes e AWS IoT CoreComunique-se com o núcleo do Greengrass, outros componentes e AWS IoT Core](interprocess-communication.md) e [Autentique e autorize dispositivos cliente](ipc-client-device-auth.md).

# Conectando dispositivos cliente a um dispositivo AWS IoT Greengrass Core com um corretor MQTT
<a name="connecting-to-mqtt"></a>

Quando você usa um agente MQTT em seu dispositivo AWS IoT Greengrass Core, o dispositivo usa uma *autoridade de certificação (CA) de dispositivo principal* exclusiva do dispositivo para emitir um certificado ao agente para fazer conexões TLS mútuas com clientes. 

AWS IoT Greengrass gerará automaticamente uma CA do dispositivo principal ou você poderá fornecer a sua própria. A CA do dispositivo principal é registrada AWS IoT Greengrass quando o [Autenticação do dispositivo cliente](client-device-auth-component.md) componente é conectado. A CA do dispositivo principal gerada automaticamente é persistente, o dispositivo continuará a usar a mesma CA enquanto o componente de autenticação do dispositivo cliente estiver configurado.

Quando o agente MQTT é iniciado, ele solicita um certificado. O componente de autenticação do dispositivo cliente emite um certificado X.509 usando a CA do dispositivo principal. O certificado é rotacionado quando o agente é iniciado, quando o certificado expira ou quando as informações de conectividade, como o endereço IP, são alteradas. Para obter mais informações, consulte [Troca de certificado no agente MQTT local](device-auth.md#mqtt-certificate-expiration).

Para conectar um cliente ao agente MQTT, você precisa do seguinte:
+ O dispositivo cliente deve ter a CA do dispositivo AWS IoT Greengrass principal. Você pode ter essa CA por meio da descoberta na nuvem ou fornecendo a CA manualmente. Para obter mais informações, consulte [Como usar sua própria autoridade de certificação](#use-your-own-CA).
+ O nome de domínio totalmente qualificado (FQDN) ou endereço IP do dispositivo principal deve estar presente no certificado do agente emitido pela CA do dispositivo principal. Você garante isso usando o componente [Detector IP](ip-detector-component.md) ou configurando manualmente o endereço IP. Para obter mais informações, consulte [Gerenciar endpoints do dispositivo principal do](manage-core-device-endpoints.md).
+ O componente de autenticação do dispositivo do cliente deve dar permissão ao dispositivo do cliente para se conectar ao dispositivo principal do Greengrass. Para obter mais informações, consulte [Autenticação do dispositivo cliente](client-device-auth-component.md).

## Como usar sua própria autoridade de certificação
<a name="use-your-own-CA"></a>

Se seus dispositivos cliente não conseguirem acessar a nuvem para descobrir seu dispositivo principal, você poderá fornecer uma *autoridade de certificação (CA) do dispositivo principal*. Seu dispositivo principal do Greengrass usa a CA do dispositivo principal para emitir certificados para o agente MQTT. Depois de configurar o dispositivo principal e provisionar seu dispositivo cliente com a CA, seus dispositivos cliente podem se conectar ao endpoint e verificar o handshake TLS usando a CA do dispositivo principal (CA fornecida por você ou gerada automaticamente).

Para configurar o componente [Autenticação do dispositivo cliente](client-device-auth-component.md) para usar a CA do dispositivo principal, defina o parâmetro de configuração `certificateAuthority` ao implantar o componente. Forneça os detalhes a seguir durante a configuração:
+ A localização de um certificado de CA do dispositivo principal.
+ A chave privada do certificado de CA do dispositivo principal.
+ (Opcional) A cadeia de certificados para o certificado raiz se a CA do dispositivo principal for uma CA intermediária.

Se você fornecer uma CA de dispositivo principal, AWS IoT Greengrass registrará a CA na nuvem.

Você pode armazenar os certificados em um módulo de segurança de hardware ou no sistema de arquivos. O exemplo a seguir mostra uma configuração `certificateAuthority` para uma CA intermediária armazenada usando HSM/TPM. Observe que a cadeia de certificados só pode ser armazenada em disco.

```
  "certificateAuthority": {
      "certificateUri": "pkcs11:object=CustomerIntermediateCA;type=cert",
      "privateKeyUri": "pkcs11:object=CustomerIntermediateCA;type=private"
      "certificateChainUri": "file:///home/ec2-user/creds/certificateChain.pem",
    }
```

Neste exemplo, o parâmetro de configuração `certificateAuthority` configura o componente de autenticação do dispositivo cliente para usar uma CA intermediária do sistema de arquivos:

```
  "certificateAuthority": {
      "certificateUri": "file:///home/ec2-user/creds/intermediateCA.pem",
      "privateKeyUri": "file:///home/ec2-user/creds/intermediateCA.privateKey.pem",
      "certificateChainUri": "file:///home/ec2-user/creds/certificateChain.pem",
    }
```

Para conectar os dispositivos ao seu dispositivo AWS IoT Greengrass Core, faça o seguinte:

1. Crie uma autoridade de certificação (CA) intermediária para o dispositivo principal do Greengrass usando a CA raiz da sua organização. É recomendável usar uma CA intermediária como prática de segurança.

1. Forneça o certificado de CA intermediário, a chave privada e a cadeia de certificados à CA raiz para o dispositivo principal do Greengrass. Para obter mais informações, consulte [Autenticação do dispositivo cliente](client-device-auth-component.md). A CA intermediária se torna a CA do dispositivo principal do Greengrass, e o dispositivo registra a CA com. AWS IoT Greengrass

1. Registre o dispositivo cliente como uma AWS IoT coisa. Para obter mais informações, consulte [Criar um objeto](https://docs.aws.amazon.com/iot/latest/developerguide/create-iot-resources.html#create-aws-thing) no *Guia do desenvolvedor do AWS IoT Core *. Adicione a chave privada, chave pública, certificado do dispositivo e certificado de CA raiz ao dispositivo do cliente. A forma como você adiciona as informações depende do dispositivo e software.

Depois de configurar o dispositivo, você pode usar o certificado e a cadeia de chaves públicas para se conectar ao dispositivo principal do Greengrass. Seu software é responsável por encontrar os endpoints do dispositivo principal. Você pode definir o endpoint manualmente para o dispositivo principal. Para obter mais informações, consulte [Gerenciar endpoints manualmente](manage-core-device-endpoints.md#manually-manage-endpoints).

# Testar a comunicação entre os dispositivos cliente
<a name="test-client-device-communications"></a>

Os dispositivos cliente podem usar o AWS IoT Device SDK para descobrir, conectar e se comunicar com um dispositivo principal. Você pode usar o cliente de descoberta do Greengrass no AWS IoT Device SDK para usar a [API de descoberta do Greengrass](greengrass-discover-api.md), que retorna informações sobre os dispositivos principais aos quais um dispositivo cliente pode se conectar. A resposta da API inclui os endpoints do agente MQTT para conexão e os certificados que devem ser usados para verificar a identidade de cada dispositivo principal. Depois disso, o dispositivo cliente poderá testar cada endpoint até se conectar com êxito a um dispositivo principal.

Os dispositivos cliente podem descobrir somente os dispositivos principais aos quais você os associa. Antes de testar as comunicações entre um dispositivo cliente e um dispositivo principal, você deve associar um ao outro. Para obter mais informações, consulte [Associar dispositivos cliente](associate-client-devices.md).

A API de descoberta do Greengrass retorna os endpoints do agente MQTT do dispositivo principal que você especifica. É possível usar o [componente detector de IP](ip-detector-component.md) para gerenciar esses endpoints para você ou gerenciá-los manualmente para cada dispositivo núcleo. Para obter mais informações, consulte [Gerenciar endpoints do dispositivo principal do](manage-core-device-endpoints.md).

**nota**  
Para usar a API de descoberta do Greengrass, um dispositivo cliente deve ter a permissão `greengrass:Discover`. Para obter mais informações, consulte [AWS IoT Política mínima para dispositivos clientes](device-auth.md#client-device-minimal-iot-policy).

O AWS IoT Device SDK está disponível em várias linguagens de programação. Para obter mais informações, consulte [AWS IoT Dispositivo SDKs](https://docs.aws.amazon.com/iot/latest/developerguide/iot-sdks.html) no *Guia do AWS IoT Core desenvolvedor*.

**Topics**
+ [Testar a comunicação (Python)](#test-client-device-communications-python)
+ [Testar a comunicação (C\$1\$1)](#test-client-device-communications-cpp)
+ [Comunicações de teste (JavaScript)](#test-client-device-communications-javascript)
+ [Testar a comunicação (Java)](#test-client-device-communications-java)

## Testar a comunicação (Python)
<a name="test-client-device-communications-python"></a>

Nesta seção, você usa a amostra de descoberta do Greengrass no [AWS IoT Device SDK v2 para Python](https://github.com/aws/aws-iot-device-sdk-python-v2) para testar a comunicação entre um dispositivo cliente e um dispositivo principal.

**Importante**  
Para usar a AWS IoT Device SDK v2 para Python, um dispositivo deve executar o Python 3.6 ou posterior.

**Para testar as comunicações (AWS IoT Device SDK v2 para Python)**

1. <a name="download-iot-device-sdk-python-v2"></a>Baixe e instale a [AWS IoT Device SDK v2 para Python](https://github.com/aws/aws-iot-device-sdk-python-v2) AWS IoT na coisa para se conectar como um dispositivo cliente.

   No dispositivo cliente, faça o seguinte:

   1. Clone o repositório AWS IoT Device SDK v2 for Python para baixá-lo.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-python-v2.git
      ```

   1. Instale a AWS IoT Device SDK v2 para Python.

      ```
      python3 -m pip install --user ./aws-iot-device-sdk-python-v2
      ```

1. <a name="cd-iot-device-sdk-python-v2"></a>Mude para a pasta de amostras na AWS IoT Device SDK v2 para Python.

   ```
   cd aws-iot-device-sdk-python-v2/samples/greengrass
   ```

1. <a name="test-client-device-communications-application-intro"></a>Execute a aplicação de amostra de descoberta do Greengrass. Essa aplicação espera argumentos que especifiquem o nome do item do dispositivo cliente, o tópico e a mensagem MQTT que serão usados e os certificados que autenticam e protegem a conexão. O exemplo a seguir envia a mensagem “Hello World\$1” para o tópico `clients/MyClientDevice1/hello/world`.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Substitua pelo nome do item do dispositivo cliente.
   + *\$1/certs/AmazonRootCA1.pem*Substitua pelo caminho para o certificado CA raiz da Amazon no dispositivo cliente.
   + *\$1/certs/device.pem.crt*Substitua pelo caminho para o certificado do dispositivo no dispositivo cliente.
   + *\$1/certs/private.pem.key*Substitua pelo caminho para o arquivo de chave privada no dispositivo cliente.
   + *us-east-1*Substitua pela AWS região em que seu dispositivo cliente e dispositivo principal operam.

   ```
   python3 basic_discovery.py \\
     --thing_name MyClientDevice1 \\
     --topic 'clients/MyClientDevice1/hello/world' \\
     --message 'Hello World!' \\
     --ca_file ~/certs/AmazonRootCA1.pem \\
     --cert ~/certs/device.pem.crt \\
     --key ~/certs/private.pem.key \\
     --region us-east-1 \\
     --verbosity Warn
   ```

   <a name="test-client-device-communications-application-output-intro"></a>A aplicação de amostra de descoberta envia a mensagem dez vezes e se desconecta. Ela também assina o mesmo tópico em que publica as mensagens. Se a saída indicar que a aplicação recebeu mensagens MQTT no tópico, o dispositivo cliente poderá se comunicar com êxito com o dispositivo principal.

   ```
   Performing greengrass discovery...
   awsiot.greengrass_discovery.DiscoverResponse(gg_groups=[awsiot.greengrass_discovery.GGGroup(gg_group_id='greengrassV2-coreDevice-MyGreengrassCore', cores=[awsiot.greengrass_discovery.GGCore(thing_arn='arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore', connectivity=[awsiot.greengrass_discovery.ConnectivityInfo(id='203.0.113.0', host_address='203.0.113.0', metadata='', port=8883)])], certificate_authorities=['-----BEGIN CERTIFICATE-----\
   MIICiT...EXAMPLE=\
   -----END CERTIFICATE-----\
   '])])
   Trying core arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore at host 203.0.113.0 port 8883
   Connected!
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 0}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 0}'
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 1}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 1}'
   
   ...
   
   Published topic clients/MyClientDevice1/hello/world: {"message": "Hello World!", "sequence": 9}
   
   Publish received on topic clients/MyClientDevice1/hello/world
   b'{"message": "Hello World!", "sequence": 9}'
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Em vez disso, se a aplicação gerar um erro, consulte [Solução de problemas de descoberta do Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>Também é possível ver os logs do Greengrass no dispositivo principal para verificar se o dispositivo cliente se conecta e envia mensagens com êxito. Para obter mais informações, consulte [Monitore AWS IoT Greengrass logs](monitor-logs.md).

## Testar a comunicação (C\$1\$1)
<a name="test-client-device-communications-cpp"></a>

Nesta seção, você usa a amostra de descoberta do Greengrass no [AWS IoT Device SDK v2 para C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2) para testar a comunicação entre um dispositivo cliente e um dispositivo principal.

<a name="iot-device-sdk-cpp-v2-build-requirements-intro"></a>Para criar a AWS IoT Device SDK v2 para C\$1\$1, um dispositivo deve ter as seguintes ferramentas:<a name="iot-device-sdk-cpp-v2-build-requirements"></a>
+ C\$1\$1 11 ou posterior
+ CMake 3.1 ou posterior
+ Um dos seguintes compiladores:
  + GCC 4.8 ou posterior
  + Clang 3.9 ou posterior
  + MSVC 2015 ou posterior

**Para testar as comunicações (AWS IoT Device SDK v2 para C\$1\$1)**

1. Baixe e crie a [AWS IoT Device SDK versão 2 para C\$1\$1](https://github.com/aws/aws-iot-device-sdk-cpp-v2) para AWS IoT conectar como um dispositivo cliente.

   No dispositivo cliente, faça o seguinte:

   1. Crie uma pasta para o espaço de trabalho AWS IoT Device SDK v2 for C\$1\$1 e altere para ela.

      ```
      cd
      mkdir iot-device-sdk-cpp
      cd iot-device-sdk-cpp
      ```

   1. Clone o repositório AWS IoT Device SDK v2 para C\$1\$1 para baixá-lo. O sinalizador `--recursive` especifica para fazer download dos submódulos.

      ```
      git clone --recursive https://github.com/aws/aws-iot-device-sdk-cpp-v2.git
      ```

   1. Crie uma pasta para a saída de compilação AWS IoT Device SDK v2 for C\$1\$1 e altere-a para ela.

      ```
      mkdir aws-iot-device-sdk-cpp-v2-build
      cd aws-iot-device-sdk-cpp-v2-build
      ```

   1. Crie a AWS IoT Device SDK v2 para C\$1\$1.

      ```
      cmake -DCMAKE_INSTALL_PREFIX="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ../aws-iot-device-sdk-cpp-v2
      cmake --build . --target install
      ```

1. Crie o aplicativo de amostra Greengrass discovery na AWS IoT Device SDK v2 para C\$1\$1. Faça o seguinte:

   1. Mude para a pasta de amostra do Greengrass discovery na AWS IoT Device SDK v2 para C\$1\$1.

      ```
      cd ../aws-iot-device-sdk-cpp-v2/samples/greengrass/basic_discovery
      ```

   1. Crie uma pasta para a saída da compilação de amostra de descoberta do Greengrass e mude para ela.

      ```
      mkdir build
      cd build
      ```

   1. Crie a aplicação de amostra de descoberta do Greengrass.

      ```
      cmake -DCMAKE_PREFIX_PATH="~/iot-device-sdk-cpp" -DCMAKE_BUILD_TYPE="Release" ..
      cmake --build . --config "Release"
      ```

1. <a name="test-client-device-communications-application-scanner-intro"></a>Execute a aplicação de amostra de descoberta do Greengrass. Essa aplicação espera argumentos que especifiquem o nome do item do dispositivo cliente, o tópico MQTT que será usado e os certificados que autenticam e protegem a conexão. No exemplo a seguir, é feita a assinatura no tópico `clients/MyClientDevice1/hello/world` e a publicação de uma mensagem que você digita na linha de comando para o mesmo tópico.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Substitua pelo nome do item do dispositivo cliente.
   + *\$1/certs/AmazonRootCA1.pem*Substitua pelo caminho para o certificado CA raiz da Amazon no dispositivo cliente.
   + *\$1/certs/device.pem.crt*Substitua pelo caminho para o certificado do dispositivo no dispositivo cliente.
   + *\$1/certs/private.pem.key*Substitua pelo caminho para o arquivo de chave privada no dispositivo cliente.
   + *us-east-1*Substitua pela AWS região em que seu dispositivo cliente e dispositivo principal operam.

   ```
   ./basic-discovery \
     --thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --ca_file ~/certs/AmazonRootCA1.pem \
     --cert ~/certs/device.pem.crt \
     --key ~/certs/private.pem.key \
     --region us-east-1
   ```

   <a name="test-client-device-communications-application-scanner-output-intro"></a>A aplicação de amostra de descoberta assina o tópico e solicita que você digite uma mensagem para publicar. 

   ```
   Connecting to group greengrassV2-coreDevice-MyGreengrassCore with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883
   Connected to group greengrassV2-coreDevice-MyGreengrassCore, using connection to 203.0.113.0:8883
   Successfully subscribed to clients/MyClientDevice1/hello/world
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Em vez disso, se a aplicação gerar um erro, consulte [Solução de problemas de descoberta do Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Digite uma mensagem, como **Hello World\$1**.

   ```
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press enter. Enter 'exit' to exit this program.
   Hello World!
   ```

   <a name="test-client-device-communications-application-scanner-input-output"></a>Se a saída indicar que a aplicação recebeu a mensagem MQTT no tópico, o dispositivo cliente poderá se comunicar com êxito com o dispositivo principal.

   ```
   Operation on packetId 2 Succeeded
   Publish received on topic clients/MyClientDevice1/hello/world
   Message:
   Hello World!
   ```

   <a name="test-client-device-communications-application-view-core-logs"></a>Também é possível ver os logs do Greengrass no dispositivo principal para verificar se o dispositivo cliente se conecta e envia mensagens com êxito. Para obter mais informações, consulte [Monitore AWS IoT Greengrass logs](monitor-logs.md).

## Comunicações de teste (JavaScript)
<a name="test-client-device-communications-javascript"></a>

Nesta seção, você usa a amostra de descoberta do Greengrass na [AWS IoT Device SDK v2 JavaScript para](https://github.com/aws/aws-iot-device-sdk-js-v2) testar as comunicações entre um dispositivo cliente e um dispositivo principal. 

**Importante**  
Para usar a AWS IoT Device SDK v2 JavaScript, um dispositivo deve executar o Node v10.0 ou posterior.

**Para testar as comunicações (AWS IoT Device SDK v2 para JavaScript)**

1. Baixe e instale a [AWS IoT Device SDK v2 para JavaScript](https://github.com/aws/aws-iot-device-sdk-js-v2) que a AWS IoT coisa se conecte como um dispositivo cliente.

   No dispositivo cliente, faça o seguinte:

   1. Clone a AWS IoT Device SDK v2 do JavaScript repositório para baixá-la.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
      ```

   1. Instale a AWS IoT Device SDK v2 para JavaScript.

      ```
      cd aws-iot-device-sdk-js-v2
      npm install
      ```

1. Mude para a pasta de amostra do Greengrass discovery na AWS IoT Device SDK v2 para. JavaScript

   ```
   cd samples/node/greengrass/basic_discovery
   ```

1. Instale a aplicação de amostra de descoberta do Greengrass.

   ```
   npm install
   ```

1. <a name="test-client-device-communications-application-intro"></a>Execute a aplicação de amostra de descoberta do Greengrass. Essa aplicação espera argumentos que especifiquem o nome do item do dispositivo cliente, o tópico e a mensagem MQTT que serão usados e os certificados que autenticam e protegem a conexão. O exemplo a seguir envia a mensagem “Hello World\$1” para o tópico `clients/MyClientDevice1/hello/world`.<a name="test-client-device-communications-application-command-replace"></a>
   + *MyClientDevice1*Substitua pelo nome do item do dispositivo cliente.
   + *\$1/certs/AmazonRootCA1.pem*Substitua pelo caminho para o certificado CA raiz da Amazon no dispositivo cliente.
   + *\$1/certs/device.pem.crt*Substitua pelo caminho para o certificado do dispositivo no dispositivo cliente.
   + *\$1/certs/private.pem.key*Substitua pelo caminho para o arquivo de chave privada no dispositivo cliente.
   + *us-east-1*Substitua pela AWS região em que seu dispositivo cliente e dispositivo principal operam.

   ```
   node dist/index.js \
     --thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --message 'Hello World!' \
     --ca_file ~/certs/AmazonRootCA1.pem \
     --cert ~/certs/device.pem.crt \
     --key ~/certs/private.pem.key \
     --region us-east-1 \
     --verbose warn
   ```

   <a name="test-client-device-communications-application-output-intro"></a>A aplicação de amostra de descoberta envia a mensagem dez vezes e se desconecta. Ela também assina o mesmo tópico em que publica as mensagens. Se a saída indicar que a aplicação recebeu mensagens MQTT no tópico, o dispositivo cliente poderá se comunicar com êxito com o dispositivo principal.

   ```
   Discovery Response:
   {"gg_groups":[{"gg_group_id":"greengrassV2-coreDevice-MyGreengrassCore","cores":[{"thing_arn":"arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore","connectivity":[{"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}]}],"certificate_authorities":["-----BEGIN CERTIFICATE-----\nMIICiT...EXAMPLE=\n-----END CERTIFICATE-----\n"]}]}
   Trying endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}
   [WARN] [2021-06-12T00:46:45Z] [00007f90c0e8d700] [socket] - id=0x7f90b8018710 fd=26: setsockopt() for NO_SIGNAL failed with errno 92. If you are having SIGPIPE signals thrown, you may want to install a signal trap in your application layer.
   Connected to endpoint={"id":"203.0.113.0","host_address":"203.0.113.0","port":8883,"metadata":""}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":1}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":2}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":3}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":4}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":5}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":6}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":7}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":8}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":9}
   Publish received. topic:"clients/MyClientDevice1/hello/world" dup:false qos:0 retain:false
   {"message":"Hello World!","sequence":10}
   Complete!
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Em vez disso, se a aplicação gerar um erro, consulte [Solução de problemas de descoberta do Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

   <a name="test-client-device-communications-application-view-core-logs"></a>Também é possível ver os logs do Greengrass no dispositivo principal para verificar se o dispositivo cliente se conecta e envia mensagens com êxito. Para obter mais informações, consulte [Monitore AWS IoT Greengrass logs](monitor-logs.md).

## Testar a comunicação (Java)
<a name="test-client-device-communications-java"></a>

Nesta seção, você usa a amostra de descoberta do Greengrass no [AWS IoT Device SDK v2 para Java](https://github.com/aws/aws-iot-device-sdk-java-v2) para testar a comunicação entre um dispositivo cliente e um dispositivo principal.

**Importante**  
Para criar a AWS IoT Device SDK v2 para Java, um dispositivo deve ter as seguintes ferramentas:  
Java 8 ou posterior, com `JAVA_HOME` apontando para a pasta Java.
Apache Maven

**Para testar as comunicações (AWS IoT Device SDK v2 para Java)**

1. Baixe e crie a [AWS IoT Device SDK versão 2 para Java](https://github.com/aws/aws-iot-device-sdk-java-v2) para AWS IoT conectar-se como um dispositivo cliente.

   No dispositivo cliente, faça o seguinte:

   1. Clone o repositório AWS IoT Device SDK v2 for Java para baixá-lo.

      ```
      git clone https://github.com/aws/aws-iot-device-sdk-java-v2.git
      ```

   1. Mude para a pasta AWS IoT Device SDK v2 for Java.

   1. Crie a AWS IoT Device SDK v2 para Java.

      ```
      cd aws-iot-device-sdk-java-v2
      mvn versions:use-latest-versions -Dincludes="software.amazon.awssdk.crt*"
      mvn clean install
      ```

1. <a name="test-client-device-communications-application-scanner-intro"></a>Execute a aplicação de amostra de descoberta do Greengrass. Essa aplicação espera argumentos que especifiquem o nome do item do dispositivo cliente, o tópico MQTT que será usado e os certificados que autenticam e protegem a conexão. No exemplo a seguir, é feita a assinatura no tópico `clients/MyClientDevice1/hello/world` e a publicação de uma mensagem que você digita na linha de comando para o mesmo tópico.<a name="test-client-device-communications-application-command-replace"></a>
   + Substitua as duas instâncias *MyClientDevice1* de pelo nome do item do dispositivo cliente.
   + *\$1HOME/certs/AmazonRootCA1.pem*Substitua pelo caminho para o certificado CA raiz da Amazon no dispositivo cliente.
   + *\$1HOME/certs/device.pem.crt*Substitua pelo caminho para o certificado do dispositivo no dispositivo cliente.
   + *\$1HOME/certs/private.pem.key*Substitua pelo caminho para o arquivo de chave privada no dispositivo cliente.
   + *us-east-1*Substitua pelo Região da AWS local em que seu dispositivo cliente e o dispositivo principal operam.

   ```
   DISCOVERY_SAMPLE_ARGS="--thing_name MyClientDevice1 \
     --topic 'clients/MyClientDevice1/hello/world' \
     --ca_file $HOME/certs/AmazonRootCA1.pem \
     --cert $HOME/certs/device.pem.crt \
     --key $HOME/certs/private.pem.key \
     --region us-east-1"
   
   mvn exec:java -pl samples/Greengrass/Discovery \
     -Dexec.mainClass=greengrass.BasicDiscovery \
     -Dexec.args="$DISCOVERY_SAMPLE_ARGS"
   ```

   <a name="test-client-device-communications-application-scanner-output-intro"></a>A aplicação de amostra de descoberta assina o tópico e solicita que você digite uma mensagem para publicar. 

   ```
   Connecting to group ID greengrassV2-coreDevice-MyGreengrassCore, with thing arn arn:aws:iot:us-east-1:123456789012:thing/MyGreengrassCore, using endpoint 203.0.113.0:8883
   Started a clean session
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
   ```

   <a name="test-client-device-communications-application-troubleshooting"></a>Em vez disso, se a aplicação gerar um erro, consulte [Solução de problemas de descoberta do Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).

1. <a name="test-client-device-communications-application-scanner-input"></a>Digite uma mensagem, como **Hello World\$1**.

   ```
   Enter the message you want to publish to topic clients/MyClientDevice1/hello/world and press Enter. Type 'exit' or 'quit' to exit this program:
   Hello World!
   ```

   <a name="test-client-device-communications-application-scanner-input-output"></a>Se a saída indicar que a aplicação recebeu a mensagem MQTT no tópico, o dispositivo cliente poderá se comunicar com êxito com o dispositivo principal.

   ```
   Message received on topic clients/MyClientDevice1/hello/world: Hello World!
   ```

   <a name="test-client-device-communications-application-view-core-logs"></a>Também é possível ver os logs do Greengrass no dispositivo principal para verificar se o dispositivo cliente se conecta e envia mensagens com êxito. Para obter mais informações, consulte [Monitore AWS IoT Greengrass logs](monitor-logs.md).

# API de descoberta do Greengrass RESTful
<a name="greengrass-discover-api"></a>

AWS IoT Greengrass fornece a operação de `Discover` API que os dispositivos cliente podem usar para identificar os principais dispositivos do Greengrass aos quais eles podem se conectar. Os dispositivos cliente usam essa operação de plano de dados para recuperar as informações necessárias para se conectar aos dispositivos principais do Greengrass, onde você os [BatchAssociateClientDeviceWithCoreDevice](https://docs.aws.amazon.com/greengrass/v2/APIReference/API_BatchAssociateClientDeviceWithCoreDevice.html)associa à operação da API. Quando um dispositivo cliente fica on-line, ele pode se conectar ao serviço de AWS IoT Greengrass nuvem e usar a API de descoberta para encontrar:
+ O endereço IP e a porta de cada dispositivo principal do Greengrass associado.
+ O certificado de CA do dispositivo principal, que os dispositivos cliente podem usar para autenticar o dispositivo principal do Greengrass.

**nota**  
Os dispositivos cliente também podem usar o cliente de descoberta no AWS IoT Device SDK para descobrir informações de conectividade dos dispositivos principais do Greengrass. O cliente de descoberta usa a API de descoberta. Para saber mais, consulte:  
[Testar a comunicação entre os dispositivos cliente](test-client-device-communications.md)
[ RESTful API do Greengrass Discovery](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) no Guia do *AWS IoT Greengrass Version 1 desenvolvedor*.

Para usar esta operação de API, envie solicitações HTTP para a API de descoberta no endpoint do plano de dados do Greengrass. Este endpoint da API tem o seguinte formato.

```
https://greengrass-ats.iot.region.amazonaws.com:port/greengrass/discover/thing/thing-name
```

Para obter uma lista de endpoints compatíveis Regiões da AWS e de extremidade para a API de AWS IoT Greengrass descoberta, consulte [AWS IoT Greengrass V2 endpoints e cotas](https://docs.aws.amazon.com/general/latest/gr/greengrassv2.html) no. *Referência geral da AWS* Essa operação de API está disponível somente no endpoint do plano de dados do Greengrass. O endpoint do ambiente de gerenciamento que você usa para gerenciar componentes e implantações é diferente do endpoint do plano de dados.

**nota**  
A API de descoberta é a mesma para AWS IoT Greengrass V1 AWS IoT Greengrass V2 e. Se você tiver dispositivos cliente que se conectam a um AWS IoT Greengrass V1 núcleo, você pode conectá-los aos dispositivos AWS IoT Greengrass V2 principais sem alterar o código nos dispositivos cliente. Para obter mais informações, consulte a [ RESTful API Greengrass Discovery](https://docs.aws.amazon.com/greengrass/v1/developerguide/gg-discover-api.html) no Guia do *AWS IoT Greengrass Version 1 desenvolvedor*.

**Topics**
+ [Autenticação e autorização de descoberta](#greengrass-discover-auth)
+ [Solicitação](#greengrass-discover-request)
+ [Resposta](#greengrass-discover-response)
+ [Testar a API de descoberta com cURL](#greengrass-discover-test-request)

## Autenticação e autorização de descoberta
<a name="greengrass-discover-auth"></a>

Para usar a API de descoberta para recuperar informações de conectividade, um dispositivo cliente deve usar a autenticação mútua TLS com um certificado de cliente X.509 para se autenticar. Para obter mais informações, consulte [Certificados de cliente X.509](https://docs.aws.amazon.com/iot/latest/developerguide/x509-client-certs.html) no *Guia do desenvolvedor do AWS IoT Core *.

Um dispositivo cliente também deve ter permissão para realizar a ação `greengrass:Discover`. O exemplo de AWS IoT política a seguir permite que uma AWS IoT coisa chamada `MyClientDevice1` funcione `Discover` por si mesma.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "greengrass:Discover",
      "Resource": [
        "arn:aws:iot:us-west-2:123456789012:thing/MyClientDevice1"
      ]
    }
  ]
}
```

------

**Importante**  
<a name="thing-policy-variable-not-supported"></a>As [variáveis de política de objeto](https://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html) (`iot:Connection.Thing.*`) não são compatíveis em políticas de AWS IoT para dispositivos principais ou operações de plano de dados do Greengrass. Em vez disso, você pode usar um caractere curinga que corresponda a vários dispositivos com nomes semelhantes. Por exemplo, você pode especificar `MyGreengrassDevice*` para corresponder ao `MyGreengrassDevice1`, `MyGreengrassDevice2` e assim por diante. 

Para mais informações, consulte [Políticas de AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-policies.html) no *Guia do desenvolvedor do AWS IoT Core *.

## Solicitação
<a name="greengrass-discover-request"></a>

A solicitação contém os cabeçalhos HTTP padrão e é enviada ao endpoint de descoberta do Greengrass, conforme mostrado nos exemplos a seguir.

O número da porta depende se o dispositivo principal é configurado para enviar o tráfego HTTPS pela porta 8443 ou pela 443. Para obter mais informações, consulte [Conectar-se à porta 443 ou por meio de um proxy de rede](configure-greengrass-core-v2.md#configure-alpn-network-proxy).

**nota**  
Esses exemplos usam o endpoint do Amazon Trust Services (ATS), que funciona com os certificados de CA raiz do ATS recomendados. Os endpoints devem corresponder ao tipo de certificado da CA raiz.

Porta 8443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:8443/greengrass/discover/thing/thing-name
```

Porta 443  

```
HTTP GET https://greengrass-ats.iot.region.amazonaws.com:443/greengrass/discover/thing/thing-name
```
Os clientes que se conectam na porta 443 devem implementar a extensão TLS do [Application Layer Protocol Negotiation (ALPN)](https://tools.ietf.org/html/rfc7301) e passar `x-amzn-http-ca` como o `ProtocolName` no `ProtocolNameList`. Para obter mais informações, consulte [Protocolos](https://docs.aws.amazon.com/iot/latest/developerguide/protocols.html) no *Guia do desenvolvedor do AWS IoT *.

## Resposta
<a name="greengrass-discover-response"></a>

Em caso de sucesso, o cabeçalho da resposta inclui o código de status HTTP 200 e o corpo da resposta contém o documento de resposta de descoberta.

**nota**  
Como AWS IoT Greengrass V2 usa a mesma API de descoberta que AWS IoT Greengrass V1, a resposta organiza as informações de acordo com AWS IoT Greengrass V1 conceitos, como grupos do Greengrass. A resposta conterá uma lista de grupos do Greengrass. Em AWS IoT Greengrass V2, cada dispositivo principal está em seu próprio grupo, onde o grupo contém somente esse dispositivo principal e suas informações de conectividade.

### Exemplos de documentos de resposta de descoberta
<a name="greengrass-discover-response-examples"></a>

O documento a seguir mostra a resposta de um dispositivo cliente que está associado a um dispositivo principal do Greengrass. O dispositivo principal tem um endpoint e um certificado de CA.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

O documento a seguir mostra a resposta para um dispositivo cliente que está associado a dois dispositivos principais. Os dispositivos principais têm vários endpoints e vários certificados de CA de grupo.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-01-thing-name",
      "Cores": [
        {
          "thingArn": "core-device-01-thing-arn",
          "Connectivity": [
            {
              "id": "core-device-01-connection-id",
              "hostAddress": "core-device-01-address",
              "portNumber": core-device-01-port,
              "metadata": "core-device-01-connection-1-description"
            },
            {
              "id": "core-device-01-connection-id-2",
              "hostAddress": "core-device-01-address-2",
              "portNumber": core-device-01-port-2,
              "metadata": "core-device-01-connection-2-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    },
    {
      "GGGroupId": "greengrassV2-coreDevice-core-device-02-thing-name",
      "Cores": [
        {
          "thingArn":"core-device-02-thing-arn",
          "Connectivity" : [
            {
              "id": "core-device-02-connection-id",
              "hostAddress": "core-device-02-address",
              "portNumber": core-device-02-port,
              "metadata": "core-device-02-connection-1-description"
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----",
        "-----BEGIN CERTIFICATE-----cert-contents-----END CERTIFICATE-----"
      ]
    }
  ]
}
```

## Testar a API de descoberta com cURL
<a name="greengrass-discover-test-request"></a>

Se tiver o `cURL` instalado, você poderá testar a API de descoberta. O exemplo a seguir especifica os certificados de um dispositivo cliente para autenticar uma solicitação no endpoint da API de descoberta do Greengrass.

```
curl -i \
  --cert 1a23bc4d56.cert.pem \
  --key 1a23bc4d56.private.key \
  https://greengrass-ats.iot.us-west-2.amazonaws.com:8443/greengrass/discover/thing/MyClientDevice1
```

**nota**  
O argumento `-i` especifica a saída de cabeçalhos de resposta HTTP. Você pode usar essa opção para ajudar a identificar erros.

Se a solicitação for bem-sucedida, este comando emitirá uma resposta semelhante ao exemplo a seguir.

```
{
  "GGGroups": [
    {
      "GGGroupId": "greengrassV2-coreDevice-MyGreengrassCore",
      "Cores": [
        {
          "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
          "Connectivity": [
            {
              "Id": "AUTOIP_192.168.1.4_1",
              "HostAddress": "192.168.1.5",
              "PortNumber": 8883,
              "Metadata": ""
            }
          ]
        }
      ],
      "CAs": [
        "-----BEGIN CERTIFICATE-----\ncert-contents\n-----END CERTIFICATE-----\n"
      ]
    }
  ]
}
```

Se o comando gerar um erro, consulte [Solução de problemas de descoberta do Greengrass](troubleshooting-client-devices.md#greengrass-discovery-issues).