

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á.

# Execute AWS IoT Greengrass o software Core em um contêiner Docker
<a name="run-greengrass-docker"></a>

AWS IoT Greengrass pode ser configurado para ser executado em um contêiner Docker. O Docker é uma plataforma que fornece as ferramentas para criar, executar, testar e implantar aplicações baseadas em contêineres do Linux. Ao executar uma imagem do AWS IoT Greengrass Docker, você pode escolher se deseja fornecer suas AWS credenciais ao contêiner do Docker e permitir que o instalador do software AWS IoT Greengrass Core provisione automaticamente os AWS recursos que um dispositivo principal do Greengrass requer para operar. Se você não quiser fornecer AWS credenciais, poderá provisionar AWS recursos manualmente e executar o software AWS IoT Greengrass Core no contêiner do Docker.

**Topics**
+ [Plataformas compatíveis e requisitos](#greengrass-docker-supported-platforms)
+ [Downloads de software:](#greengrass-docker-downloads)
+ [Escolha como provisionar AWS recursos](#greengrass-docker-resource-provisioning)
+ [Crie a AWS IoT Greengrass imagem a partir de um Dockerfile](build-greengrass-dockerfile.md)
+ [Execute AWS IoT Greengrass no Docker com provisionamento automático](run-greengrass-docker-automatic-provisioning.md)
+ [Execute AWS IoT Greengrass no Docker com provisionamento manual](run-greengrass-docker-manual-provisioning.md)
+ [Solução de problemas AWS IoT Greengrass em um contêiner Docker](docker-troubleshooting.md)

## Plataformas compatíveis e requisitos
<a name="greengrass-docker-supported-platforms"></a>

Os computadores host devem atender aos seguintes requisitos mínimos para instalar e executar o software AWS IoT Greengrass Core em um contêiner Docker:
+ <a name="docker-host-reqs"></a>Sistema operacional baseado em Linux com conexão à Internet.
+ <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/), versão 18.09 ou posterior.
+ <a name="docker-compose-reqs"></a>(Opcional) [Docker Compose](https://docs.docker.com/compose/install/) versão 1.22 ou posterior. O Docker Compose é necessário somente se você quiser usar a CLI do Docker Compose para executar suas imagens do Docker.

Para executar componentes da função do Lambda dentro do contêiner Docker, você deve configurar o contêiner para atender aos requisitos adicionais. Para obter mais informações, consulte [Requisitos da função do Lambda](setting-up.md#greengrass-v2-lambda-requirements).

### Execute componentes no modo de processo
<a name="docker-container-mode-limitation"></a>

AWS IoT Greengrass não suporta a execução de funções Lambda ou componentes AWS fornecidos pelo Lambda em um ambiente de tempo de execução isolado dentro do AWS IoT Greengrass contêiner Docker. Você deve executar esses componentes no modo de processo sem nenhum isolamento.

Ao configurar um componente da função do Lambda, defina o modo de isolamento como **Sem contêiner**. Para obter mais informações, consulte [Executar funções AWS Lambda.](run-lambda-functions.md). 

Ao implantar qualquer um dos componentes AWS fornecidos a seguir, atualize a configuração de cada componente para definir o `containerMode` parâmetro como. `NoContainer` Para obter mais informações sobre atualizações de configuração, consulte [Atualizar configurações do componente](update-component-configurations.md).
+ [CloudWatch métricas](cloudwatch-metrics-component.md)
+ [Device Defender](device-defender-component.md)
+ [Firehose](kinesis-firehose-component.md)
+ [Adaptador de protocolo Modbus-RTU](modbus-rtu-protocol-adapter-component.md)
+ [Amazon SNS](sns-component.md)

## AWS IoT Greengrass Downloads do software Docker
<a name="greengrass-docker-downloads"></a>

AWS IoT Greengrass fornece um Dockerfile para criar uma imagem de contêiner que tenha o software AWS IoT Greengrass principal e as dependências instaladas em uma imagem base do Amazon Linux 2 (x86\$164). Você pode modificar a imagem base no Dockerfile para ser executada AWS IoT Greengrass em uma arquitetura de plataforma diferente.

Baixe o pacote Dockerfile em. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker)

O Dockerfile usa uma versão mais antiga do Greengrass. Você deve atualizar o arquivo para usar a versão do Greengrass que deseja. Para obter informações sobre como criar a imagem do AWS IoT Greengrass contêiner a partir do Dockerfile, consulte. [Crie a imagem do AWS IoT Greengrass contêiner a partir de um Dockerfile](build-greengrass-dockerfile.md)

## Escolha como provisionar AWS recursos
<a name="greengrass-docker-resource-provisioning"></a>

Ao instalar o software AWS IoT Greengrass Core em um contêiner Docker, você pode escolher se deseja provisionar automaticamente os AWS recursos que um dispositivo principal do Greengrass requer para operar ou usar os recursos que você provisiona manualmente.
+ **Provisionamento automático de recursos — o instalador provisiona** a AWS IoT AWS IoT coisa, o grupo de coisas, a função do IAM e o alias da AWS IoT função quando você executa a imagem do AWS IoT Greengrass contêiner pela primeira vez. O instalador também pode implantar as ferramentas de desenvolvimento local no dispositivo principal, para que você possa usar o dispositivo para desenvolver e testar componentes de software personalizados. Para provisionar automaticamente esses recursos, você deve fornecer credenciais da AWS como variáveis de ambiente para a imagem do Docker.

  Para usar o provisionamento automático, você deve definir a variável de ambiente `PROVISION=true` do Docker e montar um arquivo de credencial para fornecer suas credenciais da AWS ao contêiner.
+ **Provisionamento manual de recursos** — se você não quiser fornecer AWS credenciais ao contêiner, poderá provisionar manualmente os AWS recursos antes de executar a imagem do contêiner. AWS IoT Greengrass Você deve criar um arquivo de configuração para fornecer informações sobre esses recursos ao instalador do software AWS IoT Greengrass Core dentro do contêiner Docker.

  Para usar o provisionamento manual, você deve definir a variável de ambiente `PROVISION=false` do Docker. O aprovisionamento manual é a opção padrão.

Para obter mais informações, consulte [Crie a imagem do AWS IoT Greengrass contêiner a partir de um Dockerfile](build-greengrass-dockerfile.md).

# Crie a imagem do AWS IoT Greengrass contêiner a partir de um Dockerfile
<a name="build-greengrass-dockerfile"></a>

AWS fornece um Dockerfile que você pode baixar e usar para executar o software AWS IoT Greengrass Core em um contêiner Docker. Os Dockerfiles contêm código-fonte para criar imagens de AWS IoT Greengrass contêineres. 

Antes de criar uma imagem de AWS IoT Greengrass contêiner, você deve configurar seu Dockerfile para selecionar a versão do software AWS IoT Greengrass Core que você deseja instalar. Também é possível configurar variáveis de ambiente para escolher como provisionar recursos durante a instalação e personalizar outras opções de instalação. Esta seção descreve como configurar e criar uma imagem do AWS IoT Greengrass Docker a partir de um Dockerfile. 



## Baixar o pacote do Dockerfile
<a name="download-dockerfile-package"></a>

Você pode baixar o pacote AWS IoT Greengrass Dockerfile em: GitHub

[Repositório Docker do AWS Greengrass](https://github.com/aws-greengrass/aws-greengrass-docker)

Depois de baixar o pacote, extraia o conteúdo para a pasta `download-directory/aws-greengrass-docker-nucleus-version` no seu computador. O Dockerfile usa uma versão mais antiga do Greengrass. Você deve atualizar o arquivo para usar a versão do Greengrass que deseja.

## Especifique a versão AWS IoT Greengrass do software principal
<a name="set-dockerfile-build-argument"></a>

Use o seguinte argumento de compilação no Dockerfile para especificar a versão do software AWS IoT Greengrass Core que você deseja usar na imagem do AWS IoT Greengrass Docker. Por padrão, o Dockerfile usa a versão mais recente do software AWS IoT Greengrass Core.

`GREENGRASS_RELEASE_VERSION`  
A versão do software AWS IoT Greengrass Core. Por padrão, o Dockerfile baixa a versão mais recente disponível do núcleo do Greengrass. Defina o valor para a versão do núcleo que deseja baixar.

## Definição de variáveis de ambiente
<a name="set-dockerfile-environment-variables"></a>

As variáveis de ambiente permitem que você personalize como o software AWS IoT Greengrass Core é instalado no contêiner Docker. Você pode definir variáveis de ambiente para sua imagem do AWS IoT Greengrass Docker de várias maneiras. 
+ Para usar as mesmas variáveis de ambiente para criar várias imagens, defina as variáveis de ambiente diretamente no Dockerfile.
+ Se você usa `docker run` para iniciar o contêiner, passe variáveis de ambiente como argumentos no comando ou defina variáveis de ambiente em um arquivo de variáveis de ambiente e, em seguida, passe o arquivo como argumento. Para obter mais informações sobre como configurar variáveis de ambiente no Docker, consulte as [variáveis de ambiente](https://docs.docker.com/engine/reference/commandline/run/#env) na documentação do Docker.
+ Se você usa `docker-compose up` para iniciar o contêiner, defina variáveis de ambiente em um arquivo de variáveis de ambiente e, em seguida, passe o arquivo como argumento. Para obter mais informações sobre como configurar variáveis de ambiente no Compose, consulte a [documentação do Docker](https://docs.docker.com/compose/environment-variables/).

Você pode configurar as seguintes variáveis de ambiente para a imagem do AWS IoT Greengrass Docker.

**nota**  
Não modifique a variável `TINI_KILL_PROCESS_GROUP` no Dockerfile. Essa variável permite o encaminhamento `SIGTERM` para todos PIDs no grupo PID para que o software AWS IoT Greengrass Core possa ser desligado corretamente quando o contêiner do Docker for interrompido.

`GGC_ROOT_PATH`  
(Opcional) O caminho para a pasta dentro do contêiner a ser usada como raiz do software AWS IoT Greengrass Core.  
Padrão: `/greengrass/v2`

`PROVISION`  
(Opcional) Determina se o AWS IoT Greengrass Core provisiona AWS recursos.   
+ Se você especificar`true`, o software AWS IoT Greengrass Core registra a imagem do contêiner como uma AWS IoT coisa e provisiona os AWS recursos que o dispositivo principal do Greengrass exige. O software AWS IoT Greengrass Core provisiona AWS IoT qualquer coisa, (opcional) qualquer grupo de AWS IoT coisas, uma função do IAM e um alias de AWS IoT função. Para obter mais informações, consulte [Execute AWS IoT Greengrass em um contêiner Docker com provisionamento automático de recursos](run-greengrass-docker-automatic-provisioning.md).
+ Se você especificar`false`, deverá criar um arquivo de configuração para fornecer ao instalador AWS IoT Greengrass principal que especifique o uso dos AWS recursos e certificados que você criou manualmente. Para obter mais informações, consulte [Execute AWS IoT Greengrass em um contêiner Docker com provisionamento manual de recursos](run-greengrass-docker-manual-provisioning.md).
Padrão: `false`

`AWS_REGION`  
(Opcional) O Região da AWS que o software AWS IoT Greengrass Core usa para recuperar ou criar AWS os recursos necessários.   
Padrão: `us-east-1`.

`THING_NAME`  
(Opcional) O nome da AWS IoT coisa que você registra como esse dispositivo principal. Se a coisa com esse nome não existir no seu Conta da AWS, o software AWS IoT Greengrass Core a cria.   
Especifique `PROVISION=true` para aplicar esse argumento.  
Padrão: `GreengrassV2IotThing_` mais um UUID aleatório.

`THING_GROUP_NAME`  
(Opcional) O nome do grupo ao AWS IoT qual você adiciona esse dispositivo principal é AWS IoT Se uma implantação for direcionada a esse grupo, esse e outros dispositivos principais desse grupo receberão essa implantação quando se conectarem AWS IoT Greengrass. Se o grupo de coisas com esse nome não existir no seu Conta da AWS, o software AWS IoT Greengrass Core o criará.  
Especifique `PROVISION=true` para aplicar esse argumento.

`TES_ROLE_NAME`  
(Opcional) O nome da função do IAM a ser usada para adquirir AWS credenciais que permitem que o dispositivo principal do Greengrass interaja com os AWS serviços. Se a função com esse nome não existir na sua Conta da AWS, o software AWS IoT Greengrass Core a criará com a `GreengrassV2TokenExchangeRoleAccess` política. Esse perfil não tem acesso aos buckets do S3 nos quais você hospeda artefatos de componentes. Portanto, adicione permissões aos buckets e objetos do S3 dos seus artefatos ao criar um componente. Para obter mais informações, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).  
Padrão: `GreengrassV2TokenExchangeRole`

`TES_ROLE_ALIAS_NAME`  
(Opcional) O nome do alias da AWS IoT função que aponta para a função do IAM que fornece AWS credenciais para o dispositivo principal do Greengrass. Se o alias de função com esse nome não existir no seu Conta da AWS, o software AWS IoT Greengrass Core o criará e o direcionará para a função do IAM que você especificar.  
Padrão: `GreengrassV2TokenExchangeRoleAlias`

`COMPONENT_DEFAULT_USER`  
(Opcional) O nome ou ID do usuário e do grupo do sistema que o software AWS IoT Greengrass Core usa para executar componentes. Especifique o usuário e o grupo, separados por dois pontos. O grupo é opcional. Por exemplo, é possível especificar **ggc\$1user:ggc\$1group** ou **ggc\$1user**.  
+ Se você executar como raiz, o padrão será o usuário e o grupo definidos pelo arquivo de configuração. Se o arquivo de configuração não definir um usuário e grupo, o padrão será `ggc_user:ggc_group`. Se `ggc_user` ou `ggc_group` não existirem, o software os criará.
+ Se você executa como usuário não root, o software AWS IoT Greengrass Core usa esse usuário para executar componentes.
+ Se você não especificar um grupo, o software AWS IoT Greengrass Core usa o grupo primário do usuário do sistema.
Para obter mais informações, consulte [Configurar o usuário que executa os componentes](configure-greengrass-core-v2.md#configure-component-user).

`DEPLOY_DEV_TOOLS`  
Define se o [componente CLI do Greengrass](greengrass-cli-component.md) deve ser baixado e implantado na imagem do contêiner. É possível usar a CLI do Greengrass para desenvolver e depurar componentes localmente.  
 <a name="local-dev-tools-production-environment-warning"></a>Recomendamos que você use este componente somente em ambientes de desenvolvimento, não em ambientes de produção. Este componente fornece acesso a informações e operações que você normalmente não precisará em um ambiente de produção. Siga o princípio do privilégio mínimo implantando este componente somente nos dispositivos principais em que você precisar dele. 
Padrão: `false`

`INIT_CONFIG`  
(Opcional) O caminho para o arquivo de configuração a ser usado para instalar o software AWS IoT Greengrass Core. Por exemplo, você pode usar essa opção para configurar novos dispositivos principais do Greengrass com uma configuração de núcleo específica ou para especificar recursos provisionados manualmente. Monte o arquivo de configuração no caminho especificado nesse argumento. 

`TRUSTED_PLUGIN`  
Este atributo está disponível para a versão 2.4.0 e posterior do [componente de núcleo do Greengrass](greengrass-nucleus-component.md).  
(Opcional) O caminho para um arquivo JAR a ser carregado como um plug-in confiável. Use esta opção para fornecer arquivos JAR do plug-in de provisionamento, como para instalação com [provisionamento de frota](fleet-provisioning.md) ou [provisionamento personalizado](custom-provisioning.md). 

`THING_POLICY_NAME`  
Este atributo está disponível para a versão 2.4.0 e posterior do [componente de núcleo do Greengrass](greengrass-nucleus-component.md).  
(Opcional) O nome da AWS IoT política a ser anexada ao certificado de AWS IoT coisas desse dispositivo principal. Se a AWS IoT política com esse nome não existir em sua, Conta da AWS o software AWS IoT Greengrass Core a criará.   
Especifique `PROVISION=true` para aplicar esse argumento.  
O software AWS IoT Greengrass Core cria uma AWS IoT política permissiva por padrão. Você pode restringir essa política ou criar uma política personalizada na qual você restringe as permissões para seu caso de uso. Para obter mais informações, consulte [AWS IoT Política mínima para dispositivos AWS IoT Greengrass V2 principais](device-auth.md#greengrass-core-minimal-iot-policy). 

## Especificar as dependências a serem instaladas
<a name="dockerfile-run-instruction"></a>

A instrução RUN no AWS IoT Greengrass Dockerfile prepara o ambiente do contêiner para executar o AWS IoT Greengrass instalador do software Core. É possível personalizar as dependências que são instaladas antes da execução do instalador do software de núcleo do AWS IoT Greengrass no contêiner do Docker. 

## Crie a AWS IoT Greengrass imagem
<a name="build-greengrass-docker-image"></a>

Use o AWS IoT Greengrass Dockerfile para criar uma imagem de AWS IoT Greengrass contêiner. É possível usar a CLI do Docker ou a CLI do Docker Compose para criar a imagem e iniciar o contêiner. Também é possível usar a CLI do Docker para criar a imagem e, em seguida, usar o Docker Compose para iniciar o contêiner a partir dessa imagem.

------
#### [ Docker ]

1. Na máquina host, execute o comando a seguir para alternar para o diretório que contém o Dockerfile configurado.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Execute o comando a seguir para criar a imagem do AWS IoT Greengrass contêiner a partir do Dockerfile.

   ```
   sudo docker build -t "platform/aws-iot-greengrass:nucleus-version" ./
   ```

------
#### [ Docker Compose ]

1. Na máquina host, execute o comando a seguir para alternar para o diretório que contém o Dockerfile e o arquivo do Compose.

   ```
   cd download-directory/aws-greengrass-docker-nucleus-version
   ```

1. Execute o comando a seguir para usar o arquivo Compose para criar a imagem do AWS IoT Greengrass contêiner.

   ```
   docker-compose -f docker-compose.yml build
   ```

------

Você criou com sucesso a imagem do AWS IoT Greengrass contêiner. A imagem do Docker tem o software AWS IoT Greengrass Core instalado. Agora você pode executar o software AWS IoT Greengrass Core em um contêiner Docker.

# Execute AWS IoT Greengrass em um contêiner Docker com provisionamento automático de recursos
<a name="run-greengrass-docker-automatic-provisioning"></a>

Este tutorial mostra como instalar e executar o software AWS IoT Greengrass Core em um contêiner Docker com AWS recursos provisionados automaticamente e ferramentas de desenvolvimento local. Você pode usar esse ambiente de desenvolvimento para explorar os AWS IoT Greengrass recursos em um contêiner do Docker. O software requer credenciais da AWS para provisionar esses recursos e implantar as ferramentas de desenvolvimento local.

Se você não puder fornecer AWS credenciais para o contêiner, poderá provisionar os AWS recursos que o dispositivo principal precisa para operar. Também é possível implantar as ferramentas de desenvolvimento em um dispositivo principal para usar como dispositivo de desenvolvimento. Isso permite que você forneça menos permissões ao dispositivo ao executar o contêiner. Para obter mais informações, consulte [Execute AWS IoT Greengrass em um contêiner Docker com provisionamento manual de recursos](run-greengrass-docker-manual-provisioning.md).



## Pré-requisitos
<a name="docker-automatic-provisioning-prereqs"></a>

Para concluir este tutorial, você precisará do seguinte:
+ Um Conta da AWS. Se você não tiver uma, consulte [Configurar um Conta da AWS](setting-up.md#set-up-aws-account). 
+ Um usuário AWS do IAM com permissões para provisionar os recursos do IAM AWS IoT e do IAM para um dispositivo principal do Greengrass. O instalador do software AWS IoT Greengrass Core usa suas AWS credenciais para provisionar automaticamente esses recursos. Para obter informações sobre a política mínima do IAM para provisionar recursos automaticamente, consulte [Política mínima de IAM para o instalador provisionar recursos](provision-minimal-iam-policy.md).
+ Uma imagem AWS IoT Greengrass do Docker. Você pode [criar uma imagem a partir do AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ O computador host em que você executa o contêiner do Docker deve atender aos seguintes requisitos:
  + <a name="docker-host-reqs"></a>Sistema operacional baseado em Linux com conexão à Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/), versão 18.09 ou posterior.
  + <a name="docker-compose-reqs"></a>(Opcional) [Docker Compose](https://docs.docker.com/compose/install/) versão 1.22 ou posterior. O Docker Compose é necessário somente se você quiser usar a CLI do Docker Compose para executar suas imagens do Docker.

## Configure suas AWS credenciais
<a name="configure-aws-credentials-for-docker"></a>

Nesta etapa, você cria um arquivo de credencial no computador host que contém suas credenciais de segurança da AWS . Ao executar a imagem do AWS IoT Greengrass Docker, você deve montar a pasta que contém esse arquivo de credencial `/root/.aws/` no contêiner do Docker. O AWS IoT Greengrass instalador usa essas credenciais para provisionar recursos no seu Conta da AWS. Para obter informações sobre a política mínima do IAM que o instalador exige para provisionar recursos automaticamente, consulte [Política mínima de IAM para o instalador provisionar recursos](provision-minimal-iam-policy.md).

1. Recupere um dos seguintes.
   + Credenciais de longo prazo para um usuário do IAM. Para obter informações sobre como recuperar credenciais de longo prazo, consulte [Gerenciar chaves de acesso para usuários do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) no *Guia do usuário do IAM*.
   + (Recomendado) Credenciais temporárias para uma função do IAM. Para obter informações sobre como recuperar credenciais temporárias, consulte [Usar credenciais temporárias com a AWS CLI](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#using-temp-creds-sdk-cli) no *Guia do usuário do IAM*.

1. Crie uma pasta onde você coloca seu arquivo de credencial.

   ```
   mkdir ./greengrass-v2-credentials
   ```

1. Utilize um editor de texto para criar um arquivo de configuração com o nome `credentials` na pasta `./greengrass-v2-credentials`.

   Por exemplo, você pode executar o seguinte comando para usar o GNU nano para criar o arquivo `credentials`. 

   ```
   nano ./greengrass-v2-credentials/credentials
   ```

1. Adicione suas AWS credenciais ao `credentials` arquivo no formato a seguir.

   ```
   [default]
   aws_access_key_id = AKIAIOSFODNN7EXAMPLE
   aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   aws_session_token = AQoEXAMPLEH4aoAH0gNCAPy...truncated...zrkuWJOgQs8IZZaIv2BXIa2R4Olgk
   ```

   Inclua `aws_session_token` somente para credenciais temporárias.

**Importante**  
Remova o arquivo de credencial do computador host depois de iniciar o AWS IoT Greengrass contêiner. Se você não remover o arquivo de credenciais, suas AWS credenciais permanecerão montadas dentro do contêiner. Para obter mais informações, consulte [Execute o software AWS IoT Greengrass principal em um contêiner](#run-greengrass-image-automatic-provisioning).

## Criar um arquivo de ambiente
<a name="create-env-file-automatic-provisioning"></a>

Este tutorial usa um arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner Docker. Você também pode usar [o argumento `-e` ou `--env`](https://docs.docker.com/engine/reference/commandline/run/#env) em seu comando `docker run` para definir variáveis de ambiente no contêiner do Docker ou definir as variáveis em [um bloco `environment`](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) no arquivo `docker-compose.yml`.

1. Use um editor de texto para criar um arquivo de ambiente chamado `.env`.

   Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o `.env` no diretório atual.

   ```
   nano .env
   ```

1. Copie o conteúdo a seguir para o arquivo.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=true
   THING_NAME=MyGreengrassCore
   THING_GROUP_NAME=MyGreengrassCoreGroup
   TES_ROLE_NAME=GreengrassV2TokenExchangeRole
   TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   ```

   Em seguida, substitua os valores a seguir:
   + `/greengrass/v2`. A pasta raiz do Greengrass que você deseja usar para instalação. Use a variável de ambiente `GGC_ROOT` para definir esse valor.
   + *region*. O Região da AWS local em que você criou os recursos.
   + *MyGreengrassCore*. O nome da AWS IoT coisa. Se o objeto não existir, o instalador o cria. O instalador baixa os certificados para autenticar a AWS IoT coisa. 
   + *MyGreengrassCoreGroup*. O nome do grupo de AWS IoT coisas. Se o grupo de objetos não existir, o instalador o cria e adiciona o objeto a ele. Se o grupo de objetos existir e tiver uma implantação ativa, o dispositivo principal baixará e executará o software especificado pela implantação.
   +  *GreengrassV2TokenExchangeRole*. Substitua pelo nome da função de troca de tokens do IAM que permite que o dispositivo principal do Greengrass obtenha credenciais temporárias AWS . Se a função não existir, o instalador a cria, cria e anexa uma política chamada *GreengrassV2TokenExchangeRole* Access. Para obter mais informações, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).
   + *GreengrassCoreTokenExchangeRoleAlias*. O alias da função de troca de tokens. Se o alias da função não existir, o instalador o cria e o direciona para a função de troca de tokens do IAM que você especifica. Para obter mais informações, consulte . 
**nota**  <a name="docker-local-dev-tools-production-environment-warning"></a>
É possível definir a variável de ambiente `DEPLOY_DEV_TOOLS` para `true` a fim de implantar o [componente CLI do Greengrass](greengrass-cli-component.md), que permite desenvolver componentes personalizados dentro do contêiner do Docker. <a name="local-dev-tools-production-environment-warning"></a>Recomendamos que você use este componente somente em ambientes de desenvolvimento, não em ambientes de produção. Este componente fornece acesso a informações e operações que você normalmente não precisará em um ambiente de produção. Siga o princípio do privilégio mínimo implantando este componente somente nos dispositivos principais em que você precisar dele. 

## Execute o software AWS IoT Greengrass principal em um contêiner
<a name="run-greengrass-image-automatic-provisioning"></a>

Este tutorial mostra como iniciar a imagem do Docker que você criou em um contêiner do Docker. Você pode usar a CLI do Docker ou a CLI do Docker Compose para AWS IoT Greengrass executar a imagem do software Core em um contêiner do Docker. 

------
#### [ Docker ]

1. Execute o comando a seguir para iniciar o contêiner do Docker. 

   ```
   docker run --rm --init -it --name docker-image \
    -v path/to/greengrass-v2-credentials:/root/.aws/:ro \
    --env-file .env \
    -p 8883 \
    your-container-image:version
   ```

   Esse exemplo de comando usa os seguintes argumentos para [docker run](https://docs.docker.com/engine/reference/commandline/run/):
   + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Limpa o contêiner quando ele sair.
   + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Usa um processo de inicialização no contêiner. 
**nota**  
O `--init` argumento é necessário para desligar o software AWS IoT Greengrass Core quando você interrompe o contêiner Docker.
   + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Opcional) Executa o contêiner do Docker em primeiro plano como um processo interativo. Em vez disso, você pode substituir isso pelo argumento `-d` para executar o contêiner do Docker no modo desanexado. Para obter mais informações, consulte [Detached vs foreground](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) na documentação do Docker.
   + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Executa um contêiner chamado `aws-iot-greengrass` 
   + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monta um volume no contêiner do Docker para disponibilizar o arquivo de configuração e os arquivos de certificado para AWS IoT Greengrass execução dentro do contêiner.
   + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Opcional) Especifica o arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner Docker. Esse argumento é necessário somente se você criou um [arquivo de ambiente](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) para definir variáveis de ambiente. Se você não criou um arquivo de ambiente, pode usar argumentos `--env` para definir variáveis de ambiente diretamente no comando de execução do Docker.
   + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Opcional) Publica a porta 8883 do contêiner na máquina host. Esse argumento é necessário se você quiser se conectar e se comunicar pelo MQTT porque o AWS IoT Greengrass usa a porta 8883 para tráfego MQTT. Para abrir outras portas, use argumentos `-p` adicionais.
**nota**  <a name="docker-run-cap-drop"></a>
Para executar seu contêiner do Docker com maior segurança, você pode usar os argumentos `--cap-drop` e `--cap-add` para habilitar seletivamente os recursos do Linux para seu contêiner. Para obter mais informações, consulte [Runtime privilege and Linux capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site de documentação do Docker.

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Remova as credenciais `./greengrass-v2-credentials` do dispositivo host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**Importante**  
Você está removendo essas credenciais porque elas fornecem amplas permissões que o dispositivo principal precisa somente durante a configuração. Se você não remover essas credenciais, os componentes do Greengrass e outros processos em execução no contêiner poderão acessá-las. Se você precisar fornecer AWS credenciais para um componente do Greengrass, use o serviço de troca de tokens. Para obter mais informações, consulte [Interaja com AWS os serviços](interact-with-aws-services.md).

------
#### [ Docker Compose ]

1. Use um editor de texto para criar um arquivo Compose do Docker chamado `docker-compose.yml`.

   Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o `docker-compose.yml` no diretório atual.

   ```
   nano docker-compose.yml
   ```
**nota**  
Você também pode baixar e usar a versão mais recente do arquivo Compose AWS fornecido em. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Adicione o conteúdo a seguir ao arquivo do Compose. O arquivo deve ser semelhante ao exemplo a seguir. *docker-image*Substitua pelo nome da sua imagem do Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       container_name: aws-iot-greengrass
       image: docker-image
       volumes:
         - ./greengrass-v2-credentials:/root/.aws/:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Neste exemplo, os seguintes parâmetros no arquivo do Compose são opcionais:
   + `ports`: publica a porta 8883 do contêiner na máquina host. Esse parâmetro é necessário se você quiser se conectar e se comunicar pelo MQTT porque AWS IoT Greengrass usa a porta 8883 para tráfego MQTT. 
   + `env_file`—Especifica o arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner Docker. Esse parâmetro é necessário somente se você criou um [arquivo de ambiente](run-greengrass-docker-manual-provisioning.md#create-env-file-manual-provisioning) para definir variáveis de ambiente. Se você não criou um arquivo de ambiente, pode usar o parâmetro [environment](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) para definir variáveis de ambiente diretamente em seu arquivo Compose.
**nota**  <a name="docker-compose-cap-drop"></a>
Para executar seu contêiner do Docker com maior segurança, você pode usar os argumentos `cap_drop` e `cap_add` em seu arquivo do Compose para habilitar seletivamente os recursos do Linux para seu contêiner. Para obter mais informações, consulte [Runtime privilege and Linux capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site de documentação do Docker.

1. Execute o comando a seguir para iniciar o contêiner do Docker.

   ```
   docker-compose -f docker-compose.yml up
   ```

1. <a name="docker-automatic-provisioning-remove-credentials-file"></a>Remova as credenciais `./greengrass-v2-credentials` do dispositivo host.

   ```
   rm -rf ./greengrass-v2-credentials
   ```
**Importante**  
Você está removendo essas credenciais porque elas fornecem amplas permissões que o dispositivo principal precisa somente durante a configuração. Se você não remover essas credenciais, os componentes do Greengrass e outros processos em execução no contêiner poderão acessá-las. Se você precisar fornecer AWS credenciais para um componente do Greengrass, use o serviço de troca de tokens. Para obter mais informações, consulte [Interaja com AWS os serviços](interact-with-aws-services.md).

------

## Próximas etapas
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass O software principal agora está sendo executado em um contêiner Docker. Execute o comando a seguir para recuperar o ID do contêiner em execução no momento.

```
docker ps
```

Em seguida, você pode executar o comando a seguir para acessar o contêiner e explorar o software AWS IoT Greengrass principal executado dentro do contêiner.

```
docker exec -it container-id /bin/bash
```

Para obter mais informações sobre a criação de um componente simples, consulte [Etapa 4: desenvolver e testar um componente no dispositivo](create-first-component.md) em [Tutorial: Conceitos básicos do AWS IoT Greengrass V2](getting-started.md).

**nota**  <a name="run-greengrass-commands-in-docker-note"></a>
Quando você usa `docker exec` para executar comandos dentro do contêiner do Docker, esses comandos não são registrados nos logs do Docker. Para registrar os comandos nos logs do Docker, anexe um shell interativo ao contêiner do Docker. Para obter mais informações, consulte [Anexar um shell interativo ao contêiner do Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

O arquivo de log AWS IoT Greengrass principal é chamado `greengrass.log` e está localizado em`/greengrass/v2/logs`. Os arquivos de log do componente também estão localizados no mesmo diretório. Para copiar logs do Greengrass para um diretório temporário no host, execute o seguinte comando:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Se você quiser manter os logs após a saída ou remoção de um contêiner, recomendamos que você vincule e monte somente o diretório `/greengrass/v2/logs` no diretório de logs temporários no host, em vez de montar todo o diretório Greengrass. Para obter mais informações, consulte [Manter os logs do Greengrass fora do contêiner do Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Para interromper a execução de um contêiner AWS IoT Greengrass Docker, execute `docker stop` ou`docker-compose -f docker-compose.yml stop`. Essa ação envia `SIGTERM` para o processo do Greengrass e encerra todos os processos associados que foram iniciados no contêiner. O contêiner do Docker é inicializado com o `docker-init` executável como processo PID 1, o que ajuda a eliminar quaisquer processos zumbis restantes. Para obter mais informações, consulte [Specify an init process](https://docs.docker.com/engine/reference/run/#specify-an-init-process) na documentação do Docker.

<a name="see-docker-troubleshooting"></a>Para obter informações sobre como solucionar problemas com a execução do AWS IoT Greengrass em um contêiner do Docker, consulte [Solução de problemas AWS IoT Greengrass em um contêiner Docker](docker-troubleshooting.md).

# Execute AWS IoT Greengrass em um contêiner Docker com provisionamento manual de recursos
<a name="run-greengrass-docker-manual-provisioning"></a>

Este tutorial mostra como instalar e executar o software AWS IoT Greengrass Core no contêiner Docker com recursos provisionados AWS manualmente.

**Topics**
+ [Pré-requisitos](#docker-manual-provisioning-prereqs)
+ [Recupere endpoints AWS IoT](#retrieve-iot-endpoints)
+ [Crie qualquer AWS IoT coisa](#create-iot-thing)
+ [Criar o certificado do objeto](#create-thing-certificate-mp)
+ [Criar um perfil de troca de token](#create-token-exchange-role)
+ [Baixar certificados para o dispositivo](#download-thing-certificates)
+ [Criar um arquivo de configuração](#create-docker-install-configuration-file)
+ [Criar um arquivo de ambiente](#create-env-file-manual-provisioning)
+ [Execute o software AWS IoT Greengrass principal em um contêiner](#run-greengrass-image-manual-provisioning)
+ [Próximas etapas](#run-greengrass-docker-next-steps)

## Pré-requisitos
<a name="docker-manual-provisioning-prereqs"></a>

Para concluir este tutorial, você precisará do seguinte:
+ Um Conta da AWS. Se você não tiver uma, consulte [Configurar um Conta da AWS](setting-up.md#set-up-aws-account). 
+ Uma imagem AWS IoT Greengrass do Docker. Você pode [criar uma imagem a partir do AWS IoT Greengrass Dockerfile](build-greengrass-dockerfile.md).
+ O computador host em que você executa o contêiner do Docker deve atender aos seguintes requisitos:
  + <a name="docker-host-reqs"></a>Sistema operacional baseado em Linux com conexão à Internet.
  + <a name="docker-engine-reqs"></a>[Docker Engine](https://docs.docker.com/engine/install/), versão 18.09 ou posterior.
  + <a name="docker-compose-reqs"></a>(Opcional) [Docker Compose](https://docs.docker.com/compose/install/) versão 1.22 ou posterior. O Docker Compose é necessário somente se você quiser usar a CLI do Docker Compose para executar suas imagens do Docker.

## Recupere endpoints AWS IoT
<a name="retrieve-iot-endpoints"></a>

Obtenha os AWS IoT endpoints para você Conta da AWS e salve-os para usar mais tarde. Seu dispositivo usa esses endpoints para se conectar à AWS IoT. Faça o seguinte:

1. Obtenha o endpoint de AWS IoT dados para você Conta da AWS.

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

   Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. Obtenha o endpoint AWS IoT de credenciais para seu. Conta da AWS

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## Crie qualquer AWS IoT coisa
<a name="create-iot-thing"></a>

AWS IoT *as coisas* representam dispositivos e entidades lógicas que se conectam AWS IoT a. Os principais dispositivos do Greengrass são AWS IoT coisas. Quando você registra um dispositivo como uma AWS IoT coisa, esse dispositivo pode usar um certificado digital para se autenticar AWS.

Nesta seção, você cria AWS IoT algo que representa seu dispositivo.

**Para criar qualquer AWS IoT coisa**

1. Crie qualquer AWS IoT coisa para o seu dispositivo. Execute o comando a seguir no computador de desenvolvimento.
   + *MyGreengrassCore*Substitua pelo nome da coisa a ser usada. Esse nome também é o nome do dispositivo principal do Greengrass.
**nota**  <a name="install-argument-thing-name-constraint"></a>
O nome do objeto não pode conter caracteres de dois pontos (`:`).

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. (Opcional) Adicione a AWS IoT coisa a um grupo de coisas novo ou existente. Use grupos de objetos para gerenciar frotas de dispositivos principais do Greengrass. Ao implantar componentes de software nos dispositivos, é possível segmentar dispositivos individuais ou grupos de dispositivos. É possível adicionar um dispositivo a um grupo de objetos com uma implantação ativa do Greengrass para implantar os componentes de software desse grupo de objetos no dispositivo. Faça o seguinte:

   1. (Opcional) Crie um grupo de AWS IoT coisas.
      + *MyGreengrassCoreGroup*Substitua pelo nome do grupo de coisas a ser criado.
**nota**  <a name="install-argument-thing-group-name-constraint"></a>
O nome do grupo de objetos não pode conter caracteres de dois pontos (`:`).

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. Adicione a AWS IoT coisa a um grupo de coisas.
      + *MyGreengrassCore*Substitua pelo nome da sua AWS IoT coisa.
      + *MyGreengrassCoreGroup*Substitua pelo nome do grupo de coisas.

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

## Criar o certificado do objeto
<a name="create-thing-certificate-mp"></a>

<a name="create-thing-certificate-intro-1"></a>Quando você registra um dispositivo como uma AWS IoT coisa, esse dispositivo pode usar um certificado digital para se autenticar AWS. Esse certificado permite que o dispositivo se comunique com AWS IoT AWS IoT Greengrass e.

<a name="create-thing-certificate-intro-2"></a>Nesta seção, você cria e baixa certificados que o dispositivo pode usar para se conectar com a AWS.<a name="create-thing-certificate-cloud-steps"></a>

**Para criar o certificado do objeto**

1. Crie uma pasta na qual você baixa os certificados da AWS IoT coisa.

   ```
   mkdir greengrass-v2-certs
   ```

1. Crie e baixe os certificados da AWS IoT coisa.

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   Salve o nome do recurso da Amazon (ARN) do certificado para usar na configuração do certificado posteriormente.

Em seguida, configure o certificado da coisa. Para obter mais informações, consulte [Configurar o certificado do objeto](manual-installation.md#configure-thing-certificate).

## Criar um perfil de troca de token
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Os dispositivos principais do Greengrass usam uma função de serviço do IAM, chamada função de *troca de tokens*, para autorizar chamadas para serviços. AWS O dispositivo usa o provedor de AWS IoT credenciais para obter AWS credenciais temporárias para essa função, o que permite que o dispositivo interaja AWS IoT, envie registros para o Amazon CloudWatch Logs e baixe artefatos de componentes personalizados do Amazon S3. Para obter mais informações, consulte [Autorize os dispositivos principais a interagir com os serviços AWS](device-service-role.md).

<a name="installation-create-token-exchange-role-alias-intro"></a>Você usa um *alias de AWS IoT função* para configurar a função de troca de tokens para os dispositivos principais do Greengrass. Os aliases de perfil permitem que você altere o perfil de troca de tokens de um dispositivo, mas mantenha a mesma configuração do dispositivo. Para mais informações, consulte [Autorizar de chamadas diretas para serviços da AWS](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html) no *Guia do desenvolvedor do AWS IoT Core *.

Nesta seção, você cria uma função do IAM de troca de tokens e um alias de AWS IoT função que aponta para a função. Se você já configurou um dispositivo principal do Greengrass, pode usar o perfil de troca de tokens e o alias de perfil em vez de criar novos. Em seguida, você configura o objeto da AWS IoT do dispositivo para usar esse perfil e alias.

**Para criar um perfil do IAM de troca de token**

1. <a name="create-token-exchange-role-create-iam-role"></a>Crie um perfil do IAM que seu dispositivo possa usar como um perfil de troca de tokens. Faça o seguinte:

   1. Crie um arquivo que contenha o documento de política de confiança exigido pelo perfil de troca de token.

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

      ```
      nano device-role-trust-policy.json
      ```

      Copie o seguinte JSON no arquivo.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. Crie o perfil de troca de token com o documento de política de confiança.
      + *GreengrassV2TokenExchangeRole*Substitua pelo nome da função do IAM a ser criada.

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. Crie um arquivo que contenha o documento de política de acesso exigido pelo perfil de troca de token.

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

      ```
      nano device-role-access-policy.json
      ```

      Copie o seguinte JSON no arquivo.

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**nota**  
Essa política de acesso não permite acesso a artefatos de componentes nos buckets do S3. Para implantar componentes personalizados que definem artefatos no Amazon S3, é preciso adicionar permissões ao perfil para permitir que seu dispositivo principal recupere artefatos de componentes. Para obter mais informações, consulte [Permitir acesso aos buckets do S3 para artefatos de componentes](device-service-role.md#device-service-role-access-s3-bucket).  
Se você ainda não tem um bucket do S3 para artefatos de componentes, é possível adicionar essas permissões depois de criar um bucket.

   1. Crie uma política do IAM a partir do documento de política.
      + *GreengrassV2TokenExchangeRoleAccess*Substitua pelo nome da política do IAM a ser criada.

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. Anexe a política do IAM ao perfil de troca de token.
      + Substitua *GreengrassV2TokenExchangeRole* pelo nome da perfil do IAM.
      + Substitua o ARN da política pelo ARN da política do IAM que você criou na etapa anterior.

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>Crie um alias de AWS IoT função que aponte para a função de troca de tokens.
   + *GreengrassCoreTokenExchangeRoleAlias*Substitua pelo nome do alias de função a ser criado.
   + Substitua o ARN do perfil pelo ARN do perfil do IAM que você criou na etapa anterior.

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**nota**  
Para criar um alias do perfil, é preciso ter permissão para passar o perfil do IAM de troca de token para a AWS IoT. Se você receber uma mensagem de erro ao tentar criar um alias de função, verifique se o AWS usuário tem essa permissão. Para obter mais informações, consulte [Conceder permissões a um usuário para passar uma função para um AWS serviço](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html) no *Guia do AWS Identity and Access Management usuário*.

1. Crie e anexe uma AWS IoT política que permita que seu dispositivo principal do Greengrass use o alias de função para assumir a função de troca de tokens. Se você já configurou um dispositivo principal do Greengrass, pode anexar sua AWS IoT política de alias de função em vez de criar uma nova. Faça o seguinte:

   1. (Opcional) Crie um arquivo que contenha o documento AWS IoT de política exigido pelo alias da função.

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

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      Copie o JSON a seguir no arquivo.
      + Substitua o ARN do recurso pelo ARN do alias da do perfil.

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. Crie uma AWS IoT política a partir do documento de política.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*Substitua pelo nome da AWS IoT política a ser criada.

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. Anexe a AWS IoT política ao certificado da AWS IoT coisa.
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*Substitua pelo nome da AWS IoT política de alias de função.
      + Substitua o ARN de destino pelo ARN do certificado do objeto da AWS IoT .

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

## Baixar certificados para o dispositivo
<a name="download-thing-certificates"></a>

Anteriormente, você baixou o certificado do dispositivo para o computador de desenvolvimento. Nesta secção, transfere o certificado da autoridade de certificação (CA) de raiz da Amazon. Em seguida, se você planeja executar o software AWS IoT Greengrass Core no Docker em um computador diferente do seu computador de desenvolvimento, copie os certificados para esse computador host. O software AWS IoT Greengrass Core usa esses certificados para se conectar ao serviço de AWS IoT nuvem.

**Para baixar certificados para o dispositivo**

1. No seu computador de desenvolvimento, baixe o certificado da autoridade de certificação raiz (CA) da Amazon. AWS IoT os certificados são associados ao certificado CA raiz da Amazon por padrão.

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

   ```
   sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

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

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
   ```

------

1. Se você planeja executar o software AWS IoT Greengrass Core no Docker em um dispositivo diferente do seu computador de desenvolvimento, copie os certificados para o computador host. Se o SSH e o SCP estiverem habilitados no computador de desenvolvimento e no computador host, será possível usar o comando `scp` no computador de desenvolvimento para transferir os certificados. *device-ip-address*Substitua pelo endereço IP do seu computador host.

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

## Criar um arquivo de configuração
<a name="create-docker-install-configuration-file"></a>

1. No computador host, crie uma pasta para colocar seu arquivo de configuração.

   ```
   mkdir ./greengrass-v2-config
   ```

1. Utilize um editor de texto para criar um arquivo de configuração com o nome `config.yaml` na pasta `./greengrass-v2-config`.

   Por exemplo, você pode executar o seguinte comando para usar o GNU nano para criar o `config.yaml`. 

   ```
   nano ./greengrass-v2-config/config.yaml
   ```

1. Copie o conteúdo YAML a seguir para o arquivo. Esse arquivo de configuração parcial especifica os parâmetros do sistema e os parâmetros do núcleo do Greengrass.

   ```
   ---
   system:
     certificateFilePath: "/tmp/certs/device.pem.crt"
     privateKeyPath: "/tmp/certs/private.pem.key"
     rootCaPath: "/tmp/certs/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "nucleus-version"
       configuration:
         awsRegion: "region"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"
   ```

   Em seguida, substitua os seguintes valores:
   + */tmp/certs*. O diretório no contêiner do Docker no qual você monta os certificados baixados ao iniciar o contêiner.
   + `/greengrass/v2`. A pasta raiz do Greengrass que você deseja usar para instalação. Use a variável de ambiente `GGC_ROOT` para definir esse valor.
   + *MyGreengrassCore*. O nome da AWS IoT coisa.
   + *nucleus-version*. A versão do software AWS IoT Greengrass Core a ser instalada. Esse valor deve corresponder à versão da imagem do Docker ou do Dockerfile que você baixou. Se você baixou a imagem do Docker do Greengrass com a tag `latest`, use ****docker inspect *image-id***** para ver a versão da imagem.
   + *region*. O Região da AWS local em que você criou seus AWS IoT recursos. Também é necessário especificar o mesmo valor para a variável de ambiente `AWS_REGION` em seu [arquivo de ambiente](#create-env-file-manual-provisioning).
   + *GreengrassCoreTokenExchangeRoleAlias*. O alias da função de troca de tokens.
   + *device-data-prefix*. O prefixo do seu endpoint AWS IoT de dados.
   + *device-credentials-prefix*. O prefixo do seu endpoint de AWS IoT credenciais.

## Criar um arquivo de ambiente
<a name="create-env-file-manual-provisioning"></a>

Este tutorial usa um arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner Docker. Você também pode usar [o argumento `-e` ou `--env`](https://docs.docker.com/engine/reference/commandline/run/#env) em seu comando `docker run` para definir variáveis de ambiente no contêiner do Docker ou definir as variáveis em [um bloco `environment`](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) no arquivo `docker-compose.yml`.

1. Use um editor de texto para criar um arquivo de ambiente chamado `.env`.

   Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o `.env` no diretório atual.

   ```
   nano .env
   ```

1. Copie o conteúdo a seguir para o arquivo.

   ```
   GGC_ROOT_PATH=/greengrass/v2
   AWS_REGION=region
   PROVISION=false
   COMPONENT_DEFAULT_USER=ggc_user:ggc_group
   INIT_CONFIG=/tmp/config/config.yaml
   ```

   Em seguida, substitua os valores a seguir:
   + `/greengrass/v2`. O caminho para a pasta raiz a ser usada para instalar o software AWS IoT Greengrass Core.
   + *region*. O Região da AWS local em que você criou seus AWS IoT recursos. Você deve especificar o mesmo valor para o parâmetro de configuração `awsRegion` em seu [arquivo de configuração](#create-docker-install-configuration-file).
   + */tmp/config/*. A pasta na qual você monta o arquivo de configuração ao iniciar o contêiner do Docker.
**nota**  <a name="docker-local-dev-tools-production-environment-warning"></a>
É possível definir a variável de ambiente `DEPLOY_DEV_TOOLS` para `true` a fim de implantar o [componente CLI do Greengrass](greengrass-cli-component.md), que permite desenvolver componentes personalizados dentro do contêiner do Docker. <a name="local-dev-tools-production-environment-warning"></a>Recomendamos que você use este componente somente em ambientes de desenvolvimento, não em ambientes de produção. Este componente fornece acesso a informações e operações que você normalmente não precisará em um ambiente de produção. Siga o princípio do privilégio mínimo implantando este componente somente nos dispositivos principais em que você precisar dele. 

## Execute o software AWS IoT Greengrass principal em um contêiner
<a name="run-greengrass-image-manual-provisioning"></a>

Este tutorial mostra como iniciar a imagem do Docker que você criou em um contêiner do Docker. Você pode usar a CLI do Docker ou a CLI do Docker Compose para AWS IoT Greengrass executar a imagem do software Core em um contêiner do Docker. 

------
#### [ Docker ]
+ Este tutorial mostra como iniciar a imagem do Docker que você criou em um contêiner do Docker. 

  ```
  docker run --rm --init -it --name docker-image \
   -v path/to/greengrass-v2-config:/tmp/config/:ro \
   -v path/to/greengrass-v2-certs:/tmp/certs:ro \ 
   --env-file .env \
   -p 8883 \
   your-container-image:version
  ```

  Esse exemplo de comando usa os seguintes argumentos para [docker run](https://docs.docker.com/engine/reference/commandline/run/):
  + <a name="docker-run-rm"></a>[https://docs.docker.com/engine/reference/run/#clean-up---rm](https://docs.docker.com/engine/reference/run/#clean-up---rm). Limpa o contêiner quando ele sair.
  + <a name="docker-run-init"></a>[https://docs.docker.com/engine/reference/run/#specify-an-init-process](https://docs.docker.com/engine/reference/run/#specify-an-init-process). Usa um processo de inicialização no contêiner. 
**nota**  
O `--init` argumento é necessário para desligar o software AWS IoT Greengrass Core quando você interrompe o contêiner Docker.
  + <a name="docker-run-it"></a>[https://docs.docker.com/engine/reference/run/#foreground](https://docs.docker.com/engine/reference/run/#foreground). (Opcional) Executa o contêiner do Docker em primeiro plano como um processo interativo. Em vez disso, você pode substituir isso pelo argumento `-d` para executar o contêiner do Docker no modo desanexado. Para obter mais informações, consulte [Detached vs foreground](https://docs.docker.com/engine/reference/run/#detached-vs-foreground) na documentação do Docker.
  + <a name="docker-run-name"></a>[https://docs.docker.com/engine/reference/run/#name---name](https://docs.docker.com/engine/reference/run/#name---name). Executa um contêiner chamado `aws-iot-greengrass` 
  + <a name="docker-run-v"></a>[https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/). Monta um volume no contêiner do Docker para disponibilizar o arquivo de configuração e os arquivos de certificado para AWS IoT Greengrass execução dentro do contêiner.
  + <a name="docker-run-env-file"></a>[https://docs.docker.com/engine/reference/commandline/run/#env](https://docs.docker.com/engine/reference/commandline/run/#env). (Opcional) Especifica o arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner Docker. Esse argumento é necessário somente se você criou um [arquivo de ambiente](#create-env-file-manual-provisioning) para definir variáveis de ambiente. Se você não criou um arquivo de ambiente, pode usar argumentos `--env` para definir variáveis de ambiente diretamente no comando de execução do Docker.
  + <a name="docker-run-p"></a>[https://docs.docker.com/engine/reference/commandline/run/#publish](https://docs.docker.com/engine/reference/commandline/run/#publish). (Opcional) Publica a porta 8883 do contêiner na máquina host. Esse argumento é necessário se você quiser se conectar e se comunicar pelo MQTT porque o AWS IoT Greengrass usa a porta 8883 para tráfego MQTT. Para abrir outras portas, use argumentos `-p` adicionais.
**nota**  <a name="docker-run-cap-drop"></a>
Para executar seu contêiner do Docker com maior segurança, você pode usar os argumentos `--cap-drop` e `--cap-add` para habilitar seletivamente os recursos do Linux para seu contêiner. Para obter mais informações, consulte [Runtime privilege and Linux capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site de documentação do Docker.

------
#### [ Docker Compose ]

1. Use um editor de texto para criar um arquivo Compose do Docker chamado `docker-compose.yml`.

   Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o `docker-compose.yml` no diretório atual.

   ```
   nano docker-compose.yml
   ```
**nota**  
Você também pode baixar e usar a versão mais recente do arquivo Compose AWS fornecido em. [GitHub](https://github.com/aws-greengrass/aws-greengrass-docker/releases/)

1. Adicione o conteúdo a seguir ao arquivo do Compose. O arquivo deve ser semelhante ao exemplo a seguir. *your-container-name:version*Substitua pelo nome da sua imagem do Docker. 

   ```
   version: '3.7'
    
   services:
     greengrass:
       init: true
       build:
         context: .
       container_name: aws-iot-greengrass
       image: your-container-name:version
       volumes:
         - /path/to/greengrass-v2-config:/tmp/config/:ro
         - /path/to/greengrass-v2-certs:/tmp/certs:ro 
       env_file: .env
       ports:
         - "8883:8883"
   ```<a name="docker-compose-optional-params"></a>

   Neste exemplo, os seguintes parâmetros no arquivo do Compose são opcionais:
   + `ports`: publica a porta 8883 do contêiner na máquina host. Esse parâmetro é necessário se você quiser se conectar e se comunicar pelo MQTT porque AWS IoT Greengrass usa a porta 8883 para tráfego MQTT. 
   + `env_file`—Especifica o arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner Docker. Esse parâmetro é necessário somente se você criou um [arquivo de ambiente](#create-env-file-manual-provisioning) para definir variáveis de ambiente. Se você não criou um arquivo de ambiente, pode usar o parâmetro [environment](https://docs.docker.com/compose/compose-file/compose-file-v3/#environment) para definir variáveis de ambiente diretamente em seu arquivo Compose.
**nota**  <a name="docker-compose-cap-drop"></a>
Para executar seu contêiner do Docker com maior segurança, você pode usar os argumentos `cap_drop` e `cap_add` em seu arquivo do Compose para habilitar seletivamente os recursos do Linux para seu contêiner. Para obter mais informações, consulte [Runtime privilege and Linux capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) no site de documentação do Docker.

1. Execute o seguinte comando para iniciar o contêiner.

   ```
   docker-compose -f docker-compose.yml up
   ```

------

## Próximas etapas
<a name="run-greengrass-docker-next-steps"></a>

<a name="run-greengrass-docker-success"></a>AWS IoT Greengrass O software principal agora está sendo executado em um contêiner Docker. Execute o comando a seguir para recuperar o ID do contêiner em execução no momento.

```
docker ps
```

Em seguida, você pode executar o comando a seguir para acessar o contêiner e explorar o software AWS IoT Greengrass principal executado dentro do contêiner.

```
docker exec -it container-id /bin/bash
```

Para obter mais informações sobre a criação de um componente simples, consulte [Etapa 4: desenvolver e testar um componente no dispositivo](create-first-component.md) em [Tutorial: Conceitos básicos do AWS IoT Greengrass V2](getting-started.md).

**nota**  <a name="run-greengrass-commands-in-docker-note"></a>
Quando você usa `docker exec` para executar comandos dentro do contêiner do Docker, esses comandos não são registrados nos logs do Docker. Para registrar os comandos nos logs do Docker, anexe um shell interativo ao contêiner do Docker. Para obter mais informações, consulte [Anexar um shell interativo ao contêiner do Docker](docker-troubleshooting.md#debugging-docker-attach-shell).

O arquivo de log AWS IoT Greengrass principal é chamado `greengrass.log` e está localizado em`/greengrass/v2/logs`. Os arquivos de log do componente também estão localizados no mesmo diretório. Para copiar logs do Greengrass para um diretório temporário no host, execute o seguinte comando:

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Se você quiser manter os logs após a saída ou remoção de um contêiner, recomendamos que você vincule e monte somente o diretório `/greengrass/v2/logs` no diretório de logs temporários no host, em vez de montar todo o diretório Greengrass. Para obter mais informações, consulte [Manter os logs do Greengrass fora do contêiner do Docker](docker-troubleshooting.md#debugging-docker-persist-logs).

<a name="greengrass-docker-stop"></a>Para interromper a execução de um contêiner AWS IoT Greengrass Docker, execute `docker stop` ou`docker-compose -f docker-compose.yml stop`. Essa ação envia `SIGTERM` para o processo do Greengrass e encerra todos os processos associados que foram iniciados no contêiner. O contêiner do Docker é inicializado com o `docker-init` executável como processo PID 1, o que ajuda a eliminar quaisquer processos zumbis restantes. Para obter mais informações, consulte [Specify an init process](https://docs.docker.com/engine/reference/run/#specify-an-init-process) na documentação do Docker.

<a name="see-docker-troubleshooting"></a>Para obter informações sobre como solucionar problemas com a execução do AWS IoT Greengrass em um contêiner do Docker, consulte [Solução de problemas AWS IoT Greengrass em um contêiner Docker](docker-troubleshooting.md).

# Solução de problemas AWS IoT Greengrass em um contêiner Docker
<a name="docker-troubleshooting"></a>

Use as informações a seguir para ajudá-lo a solucionar problemas com a execução AWS IoT Greengrass em um contêiner do Docker e para depurar problemas AWS IoT Greengrass no contêiner do Docker.

**Topics**
+ [Solução de problemas ao executar o contêiner do Docker](#troubleshooting-container-errors)
+ [Depuração em um contêiner AWS IoT Greengrass Docker](#debugging-greengrass-in-docker)

## Solução de problemas ao executar o contêiner do Docker
<a name="troubleshooting-container-errors"></a>

Use as informações a seguir para ajudar a solucionar problemas com a execução AWS IoT Greengrass em um contêiner do Docker.

**Topics**
+ [Erro: não é possível realizar um login interativo em um dispositivo não TTY](#docker-troubleshootin-ecr-get-login-password)
+ [Erro: Opções desconhecidas: - no-include-email](#docker-troubleshooting-cli-version)
+ [Erro: Um firewall está bloqueando o compartilhamento de arquivos entre janelas e os contêineres.](#docker-troubleshooting-firewall)
+ [Erro: ocorreu um erro (AccessDeniedException) ao chamar a GetAuthorizationToken operação: Usuário: arn:aws:iam: ::user/ <user-name>não *account-id* está autorizado a executar: ecr: on resource: \$1 GetAuthorizationToken](#docker-troubleshooting-ecr-perms)
+ [Erro: você atingiu seu limite de taxa de pull](#docker-troubleshooting-too-many-requests)

### Erro: não é possível realizar um login interativo em um dispositivo não TTY
<a name="docker-troubleshootin-ecr-get-login-password"></a>

Este erro pode ocorrer ao executar o comando `aws ecr get-login-password`. Verifique se você instalou a AWS CLI versão mais recente 2 ou a versão 1. Recomendamos que você use a AWS CLI versão 2. Para obter mais informações, consulte [Instalar a AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) no *Guia do usuário da AWS Command Line Interface *.

### Erro: Opções desconhecidas: - no-include-email
<a name="docker-troubleshooting-cli-version"></a>

Este erro pode ocorrer ao executar o comando `aws ecr get-login`. Verifique se você tem a AWS CLI versão mais recente instalada (por exemplo, Executar:`pip install awscli --upgrade --user`). Para obter mais informações, consulte [Instalando o AWS Command Line Interface no Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) no *Guia AWS Command Line Interface do Usuário*.

### Erro: Um firewall está bloqueando o compartilhamento de arquivos entre janelas e os contêineres.
<a name="docker-troubleshooting-firewall"></a>

Esse erro ou uma mensagem `Firewall Detected` podem ser recebidos ao executar o Docker em um computador Windows. Esse erro também poderá ocorrer se você estiver conectado em uma rede privada virtual (VPN), e as configurações de rede estiverem impedindo a montagem da unidade compartilhada. Nesse caso, desative a VPN e execute novamente o contêiner do Docker.

### Erro: ocorreu um erro (AccessDeniedException) ao chamar a GetAuthorizationToken operação: Usuário: arn:aws:iam: ::user/ <user-name>não *account-id* está autorizado a executar: ecr: on resource: \$1 GetAuthorizationToken
<a name="docker-troubleshooting-ecr-perms"></a>

É possível que você receba esse erro ao executar o comando `aws ecr get-login-password` se não tiver permissões suficientes para acessar um repositório do Amazon ECR. Para obter mais informações, consulte [Exemplos de políticas de repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) e [Como acessar um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html) no *Guia do usuário do Amazon ECR*.

### Erro: você atingiu seu limite de taxa de pull
<a name="docker-troubleshooting-too-many-requests"></a>

O Docker Hub limita o número de solicitações de pull que usuários anônimos e gratuitos do Docker Hub podem fazer. Se você exceder os limites de taxa para solicitações de pull de usuários anônimos ou gratuitos, você receberá um dos seguintes erros: 

  

```
ERROR: toomanyrequests: Too Many Requests.
```

  

```
You have reached your pull rate limit.
```

Para resolver esses erros, espere algumas horas antes de tentar outra solicitação de pull. Se você planeja enviar um grande número de solicitações de pull, consulte o [site do Docker Hub](https://www.docker.com/increase-rate-limits) para informações sobre limites de taxa e opções para autenticar e atualizar sua conta do Docker. 

## Depuração em um contêiner AWS IoT Greengrass Docker
<a name="debugging-greengrass-in-docker"></a>

Para depurar problemas com um contêiner do Docker, você pode manter os logs de runtime do Greengrass ou anexar um shell interativo ao contêiner do Docker.

### Manter os logs do Greengrass fora do contêiner do Docker
<a name="debugging-docker-persist-logs"></a>

Depois de parar um AWS IoT Greengrass contêiner, você pode usar o `docker cp ` comando a seguir para copiar os registros do Greengrass do contêiner Docker para um diretório de registros temporário. 

```
docker cp container-id:/greengrass/v2/logs /tmp/logs
```

Para manter os registros mesmo após a saída ou remoção de um contêiner, você deve executar o contêiner do AWS IoT Greengrass Docker após a montagem do diretório. `/greengrass/v2/logs` 

Para vincular e montar o `/greengrass/v2/logs` diretório, faça o seguinte ao executar um novo AWS IoT Greengrass contêiner do Docker.
+ Inclua `-v /tmp/logs:/greengrass/v2/logs:ro` no comando `docker run`.

  Modifique o bloco `volumes` no arquivo Compose para incluir a linha a seguir antes de executar o comando `docker-compose up`.

  ```
  volumes:
   - /tmp/logs:/greengrass/v2/logs:ro
  ```

Em seguida, você pode verificar seus registros `/tmp/logs` em seu host para ver os registros do Greengrass enquanto AWS IoT Greengrass está sendo executado dentro do contêiner do Docker.

Para informações sobre a execução de contêineres do Docker do Greengrass, consulte [Execute AWS IoT Greengrass no Docker com provisionamento manual](run-greengrass-docker-manual-provisioning.md) e [Execute AWS IoT Greengrass no Docker com provisionamento automático](run-greengrass-docker-automatic-provisioning.md)

### Anexar um shell interativo ao contêiner do Docker
<a name="debugging-docker-attach-shell"></a>

Quando você usa `docker exec` para executar comandos dentro do contêiner do Docker, esses comandos não são capturados nos logs do Docker. Registrar seus comandos nos logs do Docker ajuda a investigar o estado do contêiner do Docker do Greengrass. Execute um destes procedimentos:
+ Execute o seguinte comando em um terminal separado para conectar a entrada, a saída e o erro padrão do terminal ao contêiner em execução. Isso permite visualizar e controlar o contêiner do Docker a partir do terminal atual.

  ```
  docker attach container-id
  ```
+ Execute o comando a seguir em um terminal separado. Isso permite executar os comandos no modo interativo, mesmo que o contêiner não esteja conectado.

  ```
  docker exec -it container-id sh -c "command > /proc/1/fd/1"
  ```

Para AWS IoT Greengrass solução geral de problemas, consulte[Solução de problemas AWS IoT Greengrass V2](troubleshooting.md).