

Aviso de fim do suporte: em 7 de outubro de 2026, AWS o suporte para o. AWS IoT Greengrass Version 1 Depois de 7 de outubro de 2026, você não poderá mais acessar os AWS IoT Greengrass V1 recursos. Para obter mais informações, visite [Migrar de AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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 funções do Lambda no núcleo AWS IoT Greengrass
<a name="lambda-functions"></a>

AWS IoT Greengrass fornece um ambiente de execução Lambda em contêineres para o código definido pelo usuário no qual você cria. AWS Lambda Funções Lambda que são implantadas em um AWS IoT Greengrass núcleo executadas no tempo de execução Lambda local do núcleo. As funções do Lambda locais podem ser acionadas por eventos locais, mensagens da nuvem e outras fontes, o que oferece funcionalidade de computação local para dispositivos cliente. Por exemplo, você pode usar funções do Lambda do Greengrass para filtrar dados do dispositivo antes de transmitir os dados para a nuvem.

Para implantar uma função do Lambda para um núcleo, você adiciona a função a um grupo do Greengrass (referenciando a função do Lambda existente), define as configurações específicas de grupo da função e implanta o grupo. Se a função acessar AWS serviços, você também deverá adicionar todas as permissões necessárias à função de grupo do [Greengrass](group-role.md).

Você pode configurar parâmetros que determinam como as funções do Lambda são executadas, incluindo permissões, isolamento, limites de memória e muito mais. Para obter mais informações, consulte [Controlar a execução de funções do Lambda do Greengrass usando a configuração específica do grupo](lambda-group-config.md).

**nota**  
Essas configurações também possibilitam a execução AWS IoT Greengrass em um contêiner Docker. Para obter mais informações, consulte [Executando AWS IoT Greengrass em um contêiner Docker](run-gg-in-docker-container.md).

A tabela a seguir lista os [AWS Lambda tempos de execução](https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html) suportados e as versões do software AWS IoT Greengrass Core nas quais eles podem ser executados.


****  

| Linguagem ou plataforma | Versão do GGC | 
| --- | --- | 
| Python 3.8 | 1.11 | 
| Python 3.7 | 1.9 ou posterior | 
| Python 2.7 \$1 | 1.0 ou posterior | 
| Java 8 | 1.1 ou posterior | 
| Node.js 12.x \$1 | 1.10 ou posterior | 
| Node.js 8.10 \$1 | 1.9 ou posterior | 
| Node.js 6.10 \$1 | 1.1 ou posterior | 
| C, C\$1\$1 | 1.6 ou posterior | 

\$1 Você pode executar funções Lambda que usam esses tempos de execução em versões compatíveis do AWS IoT Greengrass, mas não pode criá-las no. AWS Lambda Se o runtime de seu dispositivo for diferente do runtime do Lambda AWS especificado para essa função, você poderá escolher seu próprio runtime usando `FunctionRuntimeOverride` no `FunctionDefintionVersion`. Para obter mais informações, consulte [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html). Para obter mais informações sobre os runtimes compatíveis, consulte a [Política de suporte do runtime](https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html) no *Guia do desenvolvedor do AWS Lambda *.

## SDKs para funções do Greengrass Lambda
<a name="lambda-sdks"></a>

AWS fornece três SDKs que podem ser usadas pelas funções do Greengrass Lambda executadas em um núcleo. AWS IoT Greengrass Eles SDKs estão contidos em pacotes diferentes, portanto, as funções podem usá-los simultaneamente. Para usar um SDK em uma função do Lambda do Greengrass, inclua-o no pacote de implantação da função do Lambda que você transfere por upload para o AWS Lambda.

**AWS IoT Greengrass SDK principal**  <a name="lambda-sdks-core"></a>
Habilita funções do Lambda locais para interagir com o núcleo para:  <a name="gg-core-sdk-functionality"></a>
+ Troque mensagens MQTT com AWS IoT Core.
+ Troque mensagens MQTT com conectores, dispositivos cliente e outras funções do Lambda no grupo do Greengrass.
+ Interaja com o serviço de shadow local.
+ Invoque outras funções locais do Lambda.
+ Acesse [recursos secretos](secrets.md).
+ Interaja com o [gerenciador de fluxo](stream-manager.md).
AWS IoT Greengrass fornece o SDK AWS IoT Greengrass principal nas seguintes linguagens e plataformas em GitHub.  <a name="gg-core-sdk-download-list"></a>
+ [AWS IoT Greengrass SDK principal para Java](https://github.com/aws/aws-greengrass-core-sdk-java/)
+ [AWS IoT Greengrass SDK principal para Node.js](https://github.com/aws/aws-greengrass-core-sdk-js/)
+ [AWS IoT Greengrass SDK principal para Python](https://github.com/aws/aws-greengrass-core-sdk-python/)
+ [AWS IoT Greengrass SDK principal para C](https://github.com/aws/aws-greengrass-core-sdk-c/)
Para incluir a dependência do AWS IoT Greengrass Core SDK no pacote de implantação da função Lambda:  

1. Baixe a linguagem ou a plataforma do pacote AWS IoT Greengrass Core SDK que corresponda ao tempo de execução da sua função Lambda.

1. Descompacte o pacote obtido por download para obter o SDK. O SDK é a pasta do `greengrasssdk`.

1. Inclua `greengrasssdk` no pacote de implantação da função do Lambda que contém seu código de função. Esse é o pacote para o qual você faz o upload AWS Lambda ao criar a função Lambda.
   
 **StreamManagerClient**  
Somente o seguinte AWS IoT Greengrass Core SDKs pode ser usado para operações [do gerenciador de stream](stream-manager.md):  <a name="streammanagerclient-sdk-versions"></a>
+ SDK do Java (v1.4.0 ou posterior)
+ SDK do Python (v1.5.0 ou posterior)
+ SDK do Node.js (v1.6.0 ou posterior)
Para usar o SDK AWS IoT Greengrass principal para Python para interagir com o gerenciador de streams, você deve instalar o Python 3.7 ou posterior. Você também deve instalar dependências para incluir em seus pacotes de implantação da função do Lambda em Python:  <a name="python-sdk-dependencies-stream-manager"></a>

1. Navegue até o diretório SDK que contém o arquivo `requirements.txt`. Esse arquivo lista as dependências.

1. Instale as dependências do SDK. Por exemplo, execute o seguinte comando `pip` para instalar as dependências no diretório atual:

   ```
   pip install --target . -r requirements.txt
   ```
   
**Instale o SDK AWS IoT Greengrass principal para Python no dispositivo principal**  
Se você estiver executando funções do Python Lambda, você também pode usar [https://pypi.org/project/pip/](https://pypi.org/project/pip/)para instalar o AWS IoT Greengrass SDK principal para Python no dispositivo principal. Em seguida, você poderá implantar suas funções sem incluir o SDK no pacote de implantação da função do Lambda. Para obter mais informações, consulte [greengrasssdk](https://pypi.org/project/greengrasssdk/).  
Esse suporte destina-se a núcleos com restrição de tamanho. Recomendamos que você inclua o SDK em seus pacotes de implantação de função do Lambda quando possível.  
 

**AWS IoT Greengrass SDK de Machine Learning**  <a name="lambda-sdks-ml"></a>
Permite que as funções locais do Lambda consumam modelos de machine learning (ML) implantados no núcleo do Greengrass como recursos de ML. As funções do Lambda podem usar o SDK para invocar e interagir com um serviço de inferência local implantado no núcleo como um conector. As funções do Lambda e os conectores de ML também podem usar o SDK para enviar dados ao conector de feedback de ML para fazer uploads e publicações. Para obter mais informações, incluindo exemplos de código que usam o SDK, consulte [Conector de classificação de imagem do ML](image-classification-connector.md), [Conector de detecção de objetos do ML](obj-detection-connector.md) e [Conector ML Feedback](ml-feedback-connector.md).  
A tabela a seguir lista os idiomas ou plataformas compatíveis com as versões do SDK e as versões do software AWS IoT Greengrass principal nas quais elas podem ser executadas.    
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/lambda-functions.html)
Para baixar as informações, consulte [AWS IoT Greengrass Software ML SDK](what-is-gg.md#gg-ml-sdk-download).

**AWS SDKs**  <a name="lambda-sdks-aws"></a>
Permite que as funções locais do Lambda façam chamadas diretas para AWS serviços, como Amazon S3, DynamoDB e. AWS IoT AWS IoT Greengrass Para usar um SDK do AWS em uma função do Lambda do Greengrass, você deverá incluí-lo no pacote de implantação. Ao usar o AWS SDK no mesmo pacote do SDK AWS IoT Greengrass principal, certifique-se de que suas funções do Lambda usem os namespaces corretos. As funções do Lambda do Greengrass não podem se comunicar com serviços em nuvem quando o núcleo está off-line.  
Faça o download AWS SDKs do [Getting Started Resource Center](https://aws.amazon.com/getting-started/tools-sdks/).

Para obter mais informações sobre como criar um pacote de implantação, consulte [Crie e empacote uma função do Lambda](create-lambda.md) no tutorial Conceitos básicos ou [Criar um pacote de implantação](https://docs.aws.amazon.com/lambda/latest/dg/deployment-package-v2.html) no *Guia do desenvolvedor do AWS Lambda *.

### Migrando funções do Lambda baseadas em nuvem
<a name="lambda-migrate-sdks"></a>

O SDK AWS IoT Greengrass principal segue o modelo de programação do AWS SDK, o que facilita a portabilidade de funções Lambda desenvolvidas para a nuvem para funções Lambda executadas em um núcleo. AWS IoT Greengrass 

Por exemplo, a função Python Lambda a seguir usa o AWS SDK para Python (Boto3) para publicar uma mensagem no tópico `some/topic` na nuvem:

```
import boto3

iot_client = boto3.client("iot-data")
response = iot_client.publish(
    topic="some/topic", qos=0, payload="Some payload".encode()
)
```

Para portar a função para um AWS IoT Greengrass núcleo, na `import` instrução e na `client` inicialização, altere o nome do `boto3` módulo para`greengrasssdk`, conforme mostrado no exemplo a seguir:

```
import greengrasssdk

iot_client = greengrasssdk.client("iot-data")
iot_client.publish(topic="some/topic", qos=0, payload="Some payload".encode())
```

**nota**  
O SDK AWS IoT Greengrass principal suporta o envio de mensagens MQTT somente com QoS = 0. Para obter mais informações, consulte [Enviar mensagem sobre a qualidade de serviço](gg-core.md#message-quality-of-service).

A semelhança entre os modelos de programação também possibilita que você desenvolva suas funções Lambda na nuvem e depois as AWS IoT Greengrass migre com o mínimo esforço. [Os executáveis do Lambda](#lambda-executables) não são executados na nuvem, então você não pode usar o AWS SDK para desenvolvê-los na nuvem antes da implantação.

## Referência de funções do Lambda por alias ou versão
<a name="lambda-versions-aliases"></a>

Os grupos do Greengrass podem fazer referência a uma função do Lambda por alias (recomendado) ou por versão. Usar um alias facilita o gerenciamento de atualizações de código porque você não precisa alterar a tabela de assinaturas nem a definição do grupo ao atualizar a função do código. Em vez disso, você pode simplesmente apontar o alias para a nova versão da função. Os aliases se tornam números de versão durante a implantação do grupo. Quando você usa aliases, a versão resolvida é atualizada para a versão para a qual o alias aponta no momento da implantação.

AWS IoT Greengrass **não oferece suporte a aliases Lambda para as versões \$1LATEST.** As versões **\$1LATEST** não estão vinculadas a versões de função imutável e publicada e podem ser alteradas a qualquer momento, que é a resposta ao princípio do AWS IoT Greengrass de imutabilidade da versão.

Uma prática comum para manter as funções do Lambda do Greengrass atualizadas com alterações feitas no código é usar um alias chamado **PRODUCTION** no grupo e nas assinaturas do Greengrass. Conforme você promove novas versões da função do Lambda para produção, aponte o alias para a versão estável mais recente e, em seguida, reimplante o grupo. Você também pode usar esse método a fim de reverter para uma versão anterior.

# Controlar a execução de funções do Lambda do Greengrass usando a configuração específica do grupo
<a name="lambda-group-config"></a>

AWS IoT Greengrass fornece gerenciamento baseado em nuvem das funções do Greengrass Lambda. Embora o código e as dependências de uma função Lambda sejam gerenciados usando AWS Lambda, você pode configurar como a função Lambda se comporta quando é executada em um grupo do Greengrass.

## Definições de configuração específicas do grupo
<a name="lambda-group-config-properties"></a>

AWS IoT Greengrass fornece as seguintes configurações específicas do grupo para as funções do Greengrass Lambda.

**Usuário e grupo do sistema**  <a name="lambda-access-identity"></a>
A identidade de acesso usada para executar cada função do Lambda. Por padrão, as funções do Lambda são executadas como [identidade de acesso padrão do grupo](#lambda-access-identity-groupsettings). Normalmente, essas são as contas do sistema do AWS IoT Greengrass sistema padrão (ggc\$1user ggc\$1group). Você pode alterar a configuração de permissões e escolher o ID de usuário e o ID de grupo que tem as permissões necessárias para executar a função do Lambda. Você pode substituir o UID e o GID ou apenas um, se deixar o outro campo em branco. Essa configuração oferece a você um controle mais detalhado sobre o acesso aos recursos do dispositivo. Recomendamos que você configure seu hardware do Greengrass com os limites de recursos apropriados, permissões de arquivo e cotas de disco para os usuários e grupos cujas permissões são usadas para executar funções do Lambda.  
Esse recurso está disponível para AWS IoT Greengrass Core v1.7 e versões posteriores.  
Convém evitar a execução das funções do Lambda como raiz, a menos que isso seja absolutamente necessário. Executar como root aumenta os seguintes riscos:  
+ O risco de alterações não intencionais, como excluir acidentalmente um arquivo essencial.
+ O risco para seus dados e dispositivos originário de indivíduos mal-intencionados.
+ O risco de fuga do contêiner quando os contêineres do Docker são executados com `--net=host` e `UID=EUID=0`.
Se você precisar executar como root, deverá atualizar a AWS IoT Greengrass configuração para habilitá-la. Para obter mais informações, consulte [Executar uma função do Lambda como raiz](#lambda-running-as-root).  
**ID do usuário do sistema (número)**  
O ID do usuário que tem as permissões necessárias para executar a função do Lambda. Essa configuração só estará disponível se você escolher executar como **Outro ID de usuário/ID de grupo**. Você pode usar o **getent passwd** comando em seu dispositivo AWS IoT Greengrass principal para pesquisar o ID de usuário que deseja usar para executar a função Lambda.  
Se você usar o mesmo UID para executar processos e a função do Lambda em um dispositivo de núcleo do Greengrass, sua função de grupo do Greengrass poderá conceder credenciais temporárias aos processos. Os processos podem usar as credenciais temporárias nas implantações do Greengrass no núcleo.  
**ID do grupo do sistema (número)**  
O ID do grupo que tem as permissões necessárias para executar a função do Lambda. Essa configuração só estará disponível se você optar por executar como **Outra ID/group ID de usuário**. Você pode usar o **getent group** comando no seu dispositivo AWS IoT Greengrass principal para pesquisar o ID do grupo que deseja usar para executar a função Lambda.

**Conteinerização da função do Lambda**  <a name="lambda-function-containerization"></a>
Selecione se a função do Lambda será executada com o conteinerização padrão para o grupo ou especifique a conteinerização que sempre deverá ser usada para essa função do Lambda.  
O modo de conteinerização de uma função do Lambda determina seu nível de isolamento.  
+ As funções do Lambda conteinerizadas são executadas no modo **Contêiner do Greengrass**. A função Lambda é executada em um ambiente de tempo de execução isolado (ou namespace) dentro do contêiner. AWS IoT Greengrass 
+ As funções do Lambda não conteinerizadas são executadas no modo **Sem contêiner**. As funções do Lambda são executadas como processo normal do Linux sem nenhum isolamento.
Esse recurso está disponível para AWS IoT Greengrass Core v1.7 e versões posteriores.  
Recomendamos executar funções do Lambda em um contêiner do Greengrass, a menos que o seu caso de uso exija que essas funções sejam executadas sem conteinerização do Greengrass. Quando as funções do Lambda são executadas em um contêiner do Greengrass, é possível anexar os recursos locais e de dispositivos, além de obter os benefícios de isolamento e maior segurança. Antes de alterar a conteinerização, consulte [Considerações ao escolher a conteinerização de função do Lambda](#lambda-containerization-considerations).  
Para executar sem habilitar o namespace e o cgroup do kernel do seu dispositivo, todas as funções do Lambda deverão ser executadas sem conteinerização. Você pode fazer isso facilmente ao configurar a conteinerização padrão para o grupo. Para mais informações, consulte [Definir a conteinerização padrão para funções do Lambda em um grupo](#lambda-containerization-groupsettings).

**Limite de memória**  
A alocação da memória para a função. O padrão é 16 MB.  
A configuração de limite de memória se torna indisponível quando você altera a função do Lambda para a execução sem conteinerização. As funções do Lambda que são executadas sem conteinerização não têm limite de memória. A configuração de limite de memória é descartada quando você altera a função do Lambda ou a configuração de conteinerização padrão do grupo para ser executada sem conteinerização.

**Timeout (Tempo limite)**  
O tempo até a função ou a solicitação ser encerrada. O padrão é 3 segundos.

**Pinned**  
O ciclo de vida da função do Lambda pode ser *sob demanda* ou de *longa duração*. O padrão é sob demanda.  
Uma função do Lambda sob demanda começa em um contêiner novo ou reutilizado quando invocada. As solicitações para a função podem ser processadas por qualquer contêiner disponível. Uma função Lambda de longa duração ou fixa *é iniciada* automaticamente após o AWS IoT Greengrass início e continua sendo executada em seu próprio contêiner (ou sandbox). Todas as solicitações para a função são processadas pelo mesmo contêiner. Para obter mais informações, consulte [Configuração do ciclo de vida das funções do Lambda do Greengrass](lambda-functions.md#lambda-lifecycle).

**Acesso de leitura ao diretório /sys**  
Se a função pode acessar a pasta /sys do host. Use-a quando a função tiver de ler informações do dispositivo de /sys. O padrão é falso.  
Essa configuração não estará disponível quando você executar uma função do Lambda sem conteinerização. O valor dessa configuração é descartado quando você altera a função do Lambda para a execução sem conteinerização.

**Tipo de codificação**  
O tipo de codificação esperada da carga de entrada para a função, JSON ou binário. O padrão é JSON.  
O suporte para o tipo de codificação binária está disponível a partir do AWS IoT Greengrass Core Software v1.5.0 e do AWS IoT Greengrass Core SDK v1.1.0. Aceitar dados de entrada binários pode ser útil para funções que interagem com dados do dispositivo, porque os recursos de hardware restritos de dispositivos normalmente dificultam ou impossibilitam a criação de um tipo de dados JSON.  
Os [executáveis do Lambda](lambda-functions.md#lambda-executables) só oferecem suporte ao tipo de codificação binária, não JSON.

**Argumentos do processo**  
Os argumentos de linha de comando são passados para a função do Lambda quando ela é executada.

**Variáveis de ambiente**  
Pares de chave/valor que podem passar dinamicamente configurações para código de função e bibliotecas. As variáveis de ambiente locais funcionam da mesma maneira que [variáveis de ambiente da função AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html), mas estão disponíveis no ambiente do núcleo.

**Resource access policies (Políticas de acesso ao recurso)**  
Uma lista de até 10 [recursos locais](access-local-resources.md), [recursos de segredos](secrets.md) e [recursos de machine learning](ml-inference.md) que a função do Lambda tem permissão para acessar, além da permissão `read-only` ou `read-write` correspondente. No console, esses recursos *afiliados* estão listados na página de configuração do grupo na guia **Recursos**.  
O [modo de conteinerização](#lambda-function-containerization) afeta o modo como as funções do Lambda podem acessar recursos locais de dispositivo e volume e recursos de machine learning.  
+ As funções do Lambda não conteinerizadas devem acessar os recursos locais de dispositivo e volume diretamente por meio do sistema de arquivos no dispositivo de núcleo.
+ Para permitir que funções do Lambda não conteinerizadas acessem recursos de machine learning no grupo do Greengrass, você deve definir o proprietário do recurso e as propriedades de permissões de acesso no recurso de machine learning. Para obter mais informações, consulte [Acesse os recursos de machine learning das funções do Lambda](access-ml-resources.md).

*Para obter informações sobre como usar a AWS IoT Greengrass API para definir configurações específicas do grupo para funções Lambda definidas pelo usuário, [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)consulte na Referência da *API [create-function-definition](https://docs.aws.amazon.com/cli/latest/reference/greengrass/create-function-definition.html)ou AWS IoT Greengrass Version 1 na* Referência de Comandos.AWS CLI * Para implantar funções do Lambda em um núcleo do Greengrass, crie uma versão de definição de função que contenha suas funções, crie uma versão de grupo que faça referência à versão de definição de função e outros componentes do grupo e [implante o grupo](deployments.md).

## Executar uma função do Lambda como raiz
<a name="lambda-running-as-root"></a>

Esse recurso está disponível para AWS IoT Greengrass Core v1.7 e versões posteriores.

Antes de executar uma ou mais funções do Lambda como root, você deve primeiro atualizar a AWS IoT Greengrass configuração para habilitar o suporte. O suporte para executar as funções do Lambda como raiz está desativado por padrão. A implantação falhará se você tentar implantar uma função Lambda e executá-la como root (UID e GID de 0) e não tiver atualizado a configuração. AWS IoT Greengrass Um erro como o seguinte aparece no log de tempo de execução (*greengrass\$1root*/ggc/var/log/system/runtime.log):

```
lambda(s)
[list of function arns] are configured to run as root while Greengrass is not configured to run lambdas with root permissions
```

**Importante**  
Convém evitar a execução das funções do Lambda como raiz, a menos que isso seja absolutamente necessário. Executar como root aumenta os seguintes riscos:  
O risco de alterações não intencionais, como excluir acidentalmente um arquivo essencial.
O risco para seus dados e dispositivos originário de indivíduos mal-intencionados.
O risco de fuga do contêiner quando os contêineres do Docker são executados com `--net=host` e `UID=EUID=0`.

**Para permitir que as funções do Lambda sejam executadas como raiz**

1. No seu AWS IoT Greengrass dispositivo, navegue até a pasta *greengrass-root* /config.
**nota**  
Por padrão, *greengrass-root* é o diretório /greengrass.

1. Atualize o arquivo config.json para adicionar `"allowFunctionsToRunAsRoot" : "yes"` ao campo `runtime`. Por exemplo:

   ```
   {
     "coreThing" : {
       ...
     },
     "runtime" : {
       ...
       "allowFunctionsToRunAsRoot" : "yes"
     },
     ...
   }
   ```

1. Use os seguintes comandos para reiniciar AWS IoT Greengrass:

   ```
   cd /greengrass/ggc/core
   sudo ./greengrassd restart
   ```

   Agora você pode definir o ID de usuário e o ID de grupo (UID/GID) de funções do Lambda como 0 para executar essa função do Lambda como raiz.

Você pode alterar o valor de `"allowFunctionsToRunAsRoot"` to `"no"` e reiniciar AWS IoT Greengrass se quiser impedir que as funções Lambda sejam executadas como root.

## Considerações ao escolher a conteinerização de função do Lambda
<a name="lambda-containerization-considerations"></a>

Esse recurso está disponível para AWS IoT Greengrass Core v1.7 e versões posteriores.

Por padrão, as funções Lambda são executadas dentro de um AWS IoT Greengrass contêiner. Esse contêiner fornece isolamento entre as funções e o host, fornecendo segurança adicional para o host e as funções no contêiner.

Recomendamos executar funções do Lambda em um contêiner do Greengrass, a menos que o seu caso de uso exija que essas funções sejam executadas sem conteinerização do Greengrass. Ao executar suas funções do Lambda em um contêiner do Greengrass, você terá mais controle sobre como restringir o acesso a recursos.

Aqui estão alguns exemplos de casos de uso para a execução sem conteinerização:
+ Você deseja executar AWS IoT Greengrass em um dispositivo que não suporte o modo de contêiner (por exemplo, porque você está usando uma distribuição Linux especial ou tem uma versão do kernel muito antiga).
+ Você deseja executar a função do Lambda em outro ambiente de contêiner com seu próprio OverlayFS, mas encontra conflitos de OverlayFS ao executar em um contêiner do Greengrass.
+ Você precisa de acesso a recursos locais com caminhos que não podem ser determinados no momento da implantação ou cujos caminhos podem mudar após a implantação, como alguns dispositivos conectáveis.
+ Você tem um aplicativo antigo que foi escrito como um processo e encontrou problemas ao executá-lo como uma função do Lambda em contêiner.


**Diferenças de conteinerização**  

| Conteinerização | Observações | 
| --- | --- | 
| Contêiner do Greengrass | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/lambda-group-config.html) | 
| Nenhum contêiner | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/greengrass/v1/developerguide/lambda-group-config.html) | 

**nota**  
A configuração padrão de conteinerização para o grupo do Greengrass não se aplica aos [conectores](connectors.md).

A alteração da conteinerização para uma função do Lambda pode causar problemas quando você a implantar. Se você tiver atribuído recursos locais à sua função do Lambda que não esteja mais disponível com suas novas configurações de conteinerização, a implantação falhará.
+ Quando você altera uma função do Lambda da execução em um contêiner do Greengrass para a execução sem conteinerização, os limites de memória para a função serão descartados. Você deve acessar o sistema de arquivos diretamente em vez de usar recursos locais anexados. Você deve remover todos os recursos anexados antes da implantação.
+ Quando você altera uma função do Lambda da execução sem conteinerização para execução em um contêiner, sua função do Lambda perde o acesso direto ao sistema de arquivos. Você deve definir um limite de memória para cada função ou aceitar o padrão de 16 MB. Você pode definir essas configurações para cada função do Lambda antes da implantação.<a name="change-containerization-lambda"></a>

**Para alterar as configurações de conteinerização para uma função do Lambda**

1. <a name="console-gg-groups"></a>No painel de navegação do AWS IoT console, em **Gerenciar**, expanda dispositivos **Greengrass** e **escolha Grupos (**V1).

1. <a name="lambda-choose-group"></a>Selecione o grupo que contém a função do Lambda, cujas configurações você deseja alterar.

1. <a name="lambda-choose-lambdas"></a>Selecione a guia **Funções do Lambda**.

1. <a name="lambda-edit-lambda"></a>Na função do Lambda que você deseja alterar, selecione as reticências (**…**) e então selecione **Editar configuração**.

1. Altere as configurações de conteinerização. Se você configurar a função do Lambda para executar um contêiner do Greengrass, também será necessário definir o **Limite de memória** e o **Acesso de leitura ao diretório /sys**.

1. <a name="lambda-save-changes"></a>Selecione **Salvar** e depois **Confirmar** para salvar as alterações na sua função do Lambda.

As alterações entram em vigor quando o grupo é implantado.

Você também pode usar o [CreateFunctionDefinition](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinition-post.html)e [CreateFunctionDefinitionVersion](https://docs.aws.amazon.com/greengrass/v1/apireference/createfunctiondefinitionversion-post.html)na *Referência da AWS IoT Greengrass API*. Se você estiver alterando a configuração de conteinerização, atualize os outros parâmetros também. Por exemplo, se você estiver executando a alteração de uma função do Lambda em um contêiner do Greengrass para executar sem conteinerização, limpe o parâmetro `MemorySize`.

### Determine os modos de isolamento compatíveis com o dispositivo do Greengrass
<a name="dependency-checker-tests-isolation"></a>

Você pode usar o verificador de AWS IoT Greengrass dependências para determinar quais modos de isolamento ( container/no contêiner Greengrass) são compatíveis com seu dispositivo Greengrass.

**Para executar o verificador de AWS IoT Greengrass dependências**

1. [Baixe e execute o verificador AWS IoT Greengrass de dependências do GitHub repositório.](https://github.com/aws-samples/aws-greengrass-samples)

   ```
   wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip
   unzip greengrass-dependency-checker-GGCv1.11.x.zip
   cd greengrass-dependency-checker-GGCv1.11.x
   sudo modprobe configs
   sudo ./check_ggc_dependencies | more
   ```

1. Se `more` for exibido, pressione a tecla Spacebar para exibir outra página de texto.

Para obter informações sobre o comando **modprobe**, execute **man modprobe** no terminal. 

## Definir a identidade de acesso padrão para as funções do Lambda em um grupo
<a name="lambda-access-identity-groupsettings"></a>

Esse recurso está disponível para o AWS IoT Greengrass Core v1.8 e versões posteriores.

Para obter mais controle sobre o acesso a recursos de dispositivo, você pode configurar a identidade de acesso padrão usada para executar as funções do Lambda no grupo. Essa configuração determina as permissões padrão para suas funções do Lambda quando elas são executadas no dispositivo de núcleo. Para substituir a configuração para funções individuais no grupo, você pode usar a propriedade **Run as (Executar como)** da função. Para obter mais informações, consulte [Executar como](#lambda-access-identity).

Essa configuração em nível de grupo também é usada para executar o software AWS IoT Greengrass Core subjacente. Ela consiste em funções do Lambda que gerenciam operações, como o roteamento de mensagens, a sincronização de sombra local e a detecção automática de endereço IP.

A identidade de acesso padrão pode ser configurada para ser executada como contas padrão do AWS IoT Greengrass sistema (ggc\$1user e ggc\$1group) ou usar as permissões de outro usuário ou grupo. Recomendamos que você configure seu hardware do Greengrass com os limites de recursos, permissões de arquivo e cotas de disco apropriados para qualquer usuário e grupo com permissões que são usadas para executar funções do Lambda definidas pelo usuário ou sistema.

**Para modificar a identidade de acesso padrão do seu AWS IoT Greengrass grupo**

1. <a name="console-gg-groups"></a>No painel de navegação do AWS IoT console, em **Gerenciar**, expanda dispositivos **Greengrass** e **escolha Grupos (**V1).

1. <a name="group-choose-group"></a>Selecione o grupo cujas configurações você deseja alterar.

1. Selecione a guia **Funções do Lambda** e, na seção **Ambiente de runtime da função do Lambda padrão**, selecione **Editar**.

1. Em **Editar o Ambiente de runtime da função do Lambda padrão**, em **Usuário e grupo do sistema padrão**, selecione **Outro ID do usuário/ID do grupo**.

   Quando você escolhe essa opção, os campos **ID do usuário do sistema (número)** e **ID do grupo do sistema (número)** são exibidos.

1. Insira um ID de usuário, ID de grupo ou ambos. Se você deixar um campo em branco, a respectiva conta do sistema do Greengrass (ggc\$1user ou ggc\$1group) será usada.
   + Para **ID do usuário do sistema (número)**, insira o ID do usuário que tem as permissões que você deseja usar por padrão para executar as funções do Lambda no grupo. Você pode usar o comando **getent passwd** em seu dispositivo AWS IoT Greengrass para pesquisar o ID do usuário.
   + Para **ID do grupo do sistema (número)**, insira o ID do grupo que tem as permissões que você deseja usar por padrão para executar as funções do Lambda no grupo. Você pode usar o comando **getent group** em seu dispositivo AWS IoT Greengrass para pesquisar o ID do grupo.
**Importante**  
Executar como usuário raiz aumenta os riscos para seus dados e dispositivo. Não execute como raiz (UID/GID = 0), a menos que sua empresa exija. Para obter mais informações, consulte [Executar uma função do Lambda como raiz](#lambda-running-as-root).

As alterações entram em vigor quando o grupo é implantado.

## Definir a conteinerização padrão para funções do Lambda em um grupo
<a name="lambda-containerization-groupsettings"></a>

Esse recurso está disponível para AWS IoT Greengrass Core v1.7 e versões posteriores.

A configuração de conteinerização para um grupo do Greengrass determina a conteinerização padrão para as funções do Lambda no grupo.
+ No modo de **contêiner Greengrass**, as funções Lambda são executadas em um ambiente de execução isolado dentro do AWS IoT Greengrass contêiner por padrão.
+ No modo **Sem contêiner**, as funções do Lambda são executadas como processos regulares do Linux por padrão.

É possível modificar as configurações do grupo para especificar a conteinerização padrão para funções do Lambda no grupo. Você poderá substituir essa configuração para uma ou mais funções do Lambda no grupo se quiser que as funções do Lambda sejam executadas com conteinerização diferente do padrão do grupo. Antes de alterar as configurações de conteinerização, consulte [Considerações ao escolher a conteinerização de função do Lambda](#lambda-containerization-considerations).

**Importante**  
Se você deseja alterar a conteinerização padrão para o grupo, mas tem uma ou mais funções que usam uma conteinerização diferente, altere as configurações para as funções do Lambda antes de alterar a configuração do grupo. Se você alterar a configuração de conteinerização do grupo primeiro, os valores das configurações **Memory limit (Limite de memória)** e **Read access to /sys directory (Acesso de leitura ao diretório /sys)** serão descartadas.

**Para modificar as configurações de conteinerização do seu grupo AWS IoT Greengrass**

1. <a name="console-gg-groups"></a>No painel de navegação do AWS IoT console, em **Gerenciar**, expanda dispositivos **Greengrass** e **escolha Grupos (**V1).

1. <a name="group-choose-group"></a>Selecione o grupo cujas configurações você deseja alterar.

1. Selecione a guia **Funções do Lambda**.

1. Em **Ambiente de runtime da função do Lambda padrão**, selecione **Editar**.

1. Na página **Editar Ambiente de runtime da função do Lambda padrão**, em **Conteinerização da função do Lambda padrão**, altere a configuração de conteinerização.

1. Selecione **Salvar**.

As alterações entram em vigor quando o grupo é implantado.

## Fluxos de comunicação para funções do Lambda do Greengrass
<a name="lambda-communication"></a>

As funções do Greengrass Lambda oferecem suporte a vários métodos de comunicação com outros membros do AWS IoT Greengrass grupo, serviços locais e serviços em nuvem (incluindo serviços). AWS 

### Comunicação usando mensagens MQTT
<a name="lambda-messages"></a>

As funções do Lambda podem enviar e receber mensagens MQTT usando um padrão de publicação/assinatura que é controlado por assinaturas.

Esse fluxo de comunicação permite que as funções do Lambda troquem mensagens com as seguintes entidades:
+ Dispositivos cliente no grupo.
+ Conectores no grupo.
+ Outras funções do Lambda no grupo.
+ AWS IoT.
+ Serviço Device Shadow local.

Uma assinatura define uma origem de mensagem, um destino de mensagem e um tópico (ou assunto) que é usado para rotear mensagens da origem para o destino. As mensagens publicadas em uma função do Lambda são passadas para o manipulador registrado da função. As assinaturas permitem mais segurança e oferecem interações previsíveis. Para obter mais informações, consulte [Assinaturas gerenciadas no fluxo de trabalho de mensagens MQTT](gg-sec.md#gg-msg-workflow).

**nota**  
Quando o núcleo está offline, as funções do Lambda do Greengrass podem trocar mensagens com dispositivos cliente, conectores, outras funções e sombras locais, mas as mensagens para o AWS IoT serão colocadas em fila. Para obter mais informações, consulte [Fila de mensagens MQTT para destinos de nuvem](gg-core.md#mqtt-message-queue).

### Outros fluxos de comunicação
<a name="lambda-other-communication"></a>
+ Para interagir com modelos de machine learning e recursos locais de dispositivo e volume em um dispositivo de núcleo, as funções do Lambda do Greengrass usam interfaces do sistema operacional específicas da plataforma. Por exemplo, você pode usar o método `open` no módulo [os](https://docs.python.org/2/library/os.html) em funções do Python. Para permitir que uma função acesse um recurso, a função deve ser *afiliada* ao recurso e receber a permissão `read-only` ou `read-write`. Para obter mais informações, incluindo a disponibilidade da versão AWS IoT Greengrass principal, consulte [Acesso aos recursos locais com funções e conectores do Lambda](access-local-resources.md) [Acessando os recursos de machine learning do código de função do Lambda](access-ml-resources.md#access-resource-function-code) e.
**nota**  
Se executar a função do Lambda sem conteinerização, você não poderá usar recursos locais de dispositivo e volume anexados e deverá acessar esses recursos diretamente.
+ As funções do Lambda podem usar o `Lambda` cliente no SDK AWS IoT Greengrass principal para invocar outras funções do Lambda no grupo Greengrass.
+ As funções Lambda podem usar o AWS SDK para se comunicar com os serviços. AWS Para obter mais informações, consulte [SDKs da AWS](#aws-sdk).
+ As funções do Lambda podem usar interfaces de terceiros para se comunicar com serviços em nuvem externos, semelhantes a funções do Lambda baseadas em nuvem.

**nota**  
As funções do Greengrass Lambda não conseguem se comunicar com AWS nem com outros serviços de nuvem quando o núcleo está off-line.

## Recuperar o tópico MQTT de entrada (ou assunto)
<a name="lambda-get-mqtt-topic"></a>

AWS IoT Greengrass usa assinaturas para controlar a troca de mensagens MQTT entre dispositivos clientes, funções Lambda e conectores em um grupo e com AWS IoT o serviço paralelo local. As assinaturas definem a origem de uma mensagem, o destino de uma mensagem e um tópico MQTT usado para rotear mensagens. Quando o destino é uma função do Lambda, o manipulador da função é invocado quando a origem publica uma mensagem. Para obter mais informações, consulte [Comunicação usando mensagens MQTT](#lambda-messages).

O exemplo a seguir mostra como uma função do Lambda pode obter o tópico de entrada do `context` que é passado para o manipulador. Ele faz isso acessando a `subject` chave da hierarquia de contexto (`context.client_context.custom['subject']`). O exemplo também analisa a mensagem de entrada do JSON e, em seguida, publica o tópico e a mensagem analisados.

**nota**  
Na AWS IoT Greengrass API, o tópico de uma [assinatura](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-subscription.html) é representado pela `subject` propriedade.

```
import greengrasssdk
import logging

client = greengrasssdk.client('iot-data')

OUTPUT_TOPIC = 'test/topic_results'

def get_input_topic(context):
    try:
        topic = context.client_context.custom['subject']
    except Exception as e:
        logging.error('Topic could not be parsed. ' + repr(e))
    return topic
    
def get_input_message(event):
    try:
        message = event['test-key']
    except Exception as e:
        logging.error('Message could not be parsed. ' + repr(e))
    return message

def function_handler(event, context):
    try:
        input_topic = get_input_topic(context)
        input_message = get_input_message(event)
        response = 'Invoked on topic "%s" with message "%s"' % (input_topic, input_message)
        logging.info(response)
    except Exception as e:
        logging.error(e)

    client.publish(topic=OUTPUT_TOPIC, payload=response)

    return
```

Para testar a função, adicione-a ao seu grupo usando as definições de configuração padrão. Em seguida, adicione as assinaturas a seguir e implante o grupo. Para instruções, consulte [Módulo 3 (parte 1): funções Lambda em AWS IoT Greengrass](module3-I.md).


****  

| Fonte | Destino | Filtro de tópicos | 
| --- | --- | --- | 
| IoT Cloud | Essa função | test/input\$1message | 
| Essa função | IoT Cloud | test/topic\$1results | 

Depois que a implantação for concluída, invoque a função.

1. No AWS IoT console, abra a página do **cliente de teste do MQTT**.

1. Inscreva-se no tópico `test/topic_results` selecionando a guia **Inscrever-se em um tópico**.

1. Publique uma mensagem no tópico `test/input_message` selecionando a guia **Publicar em um tópico**. Para este exemplo, você deve incluir a propriedade `test-key` na mensagem JSON.

   ```
   {
     "test-key": "Some string value"
   }
   ```

   Se for bem-sucedido, a função publicará o tópico de entrada e a string de mensagem para o tópico `test/topic_results`.

## Configuração do ciclo de vida das funções do Lambda do Greengrass
<a name="lambda-lifecycle"></a>

O ciclo de vida da função do Lambda do Greengrass determina quando uma função começa e como ela cria e usa contêineres. O ciclo de vida também determina como as variáveis e a lógica de pré-processamento que estão fora do manipulador da função são retidas.

AWS IoT Greengrass suporta ciclos de vida sob demanda (padrão) ou de longa duração:
+ As funções **sob demanda** começam quando são invocadas e param quando não há tarefas a serem executadas. Uma invocação da função cria um contêiner à parte (ou sandbox) para processar invocações, a menos que um contêiner existente esteja disponível para reutilização. Os dados enviados para a função podem ser obtidos por qualquer um dos contêineres.

  Várias invocações de uma função sob demanda podem ser executadas em paralelo.

  Variáveis e lógica de pré-processamento que estão definidas fora do manipulador de funções não são mantidas quando novos contêineres são criados.
+ Funções **de longa duração** (ou *fixadas*) são iniciadas automaticamente quando o AWS IoT Greengrass núcleo é iniciado e executado em um único contêiner. Todos os dados enviados para a função são obtidos pelo mesmo contêiner.

  Várias invocações serão enfileiradas até as invocações anteriores terem sido executadas.

  Variáveis e lógica de pré-processamento que estão definidas fora do manipulador de funções são mantidas para cada invocação do manipulador.

  As funções do Lambda de longa duração são úteis quando você precisa começar a trabalhar sem qualquer entrada inicial. Por exemplo, uma função de longa duração pode carregar e iniciar o processamento de um modelo ML para estar pronto quando a função começa a receber dados do dispositivo.
**nota**  
Lembre-se de que as funções de longa duração têm tempos limite associados a invocações do manipulador. Se quiser executar indefinidamente executando código, você deverá iniciá-lo fora do manipulador. Certifique-se de que não haja código de bloqueio fora do manipulador que possa evitar que a função conclua a inicialização.  
 Essas funções serão executadas, a menos que o núcleo seja interrompido (por exemplo, durante a implantação de um grupo ou a reinicialização de um dispositivo) ou a função inserirá um estado de erro (como um tempo limite do manipulador, exceção não capturada ou limite excedido de memória).

Para obter mais informações sobre a reutilização de contêineres, consulte [Entendendo a reutilização de contêineres AWS Lambda no](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/) blog de AWS computação.

## Executáveis do Lambda
<a name="lambda-executables"></a>

Esse recurso está disponível para AWS IoT Greengrass Core v1.6 e versões posteriores.

Um executável do Lambda é um tipo de função do Lambda do Greengrass que você pode usar para executar o código binário no ambiente básico. Ele permite executar a funcionalidade específica do dispositivo de maneira nativa e se beneficiar do espaço menor do código compilado. Os executáveis do Lambda podem ser invocados por eventos, invocar outras funções e acessar recursos locais.

Os executáveis do Lambda só oferecem suporte ao tipo de codificação binária (e não JSON), mas você pode gerenciá-los no grupo do Greengrass e implantá-los como outras funções do Lambda do Greengrass. No entanto, o processo de criar executáveis do Lambda é diferente de criar funções do Lambda no Python, Java e Node.js:
+ Você não pode usar o AWS Lambda console para criar (ou gerenciar) um executável Lambda. Você pode criar um executável Lambda somente usando a API. AWS Lambda 
+ Você carrega o código da função AWS Lambda como um executável compilado que inclui o [SDK AWS IoT Greengrass principal para C.](https://github.com/aws/aws-greengrass-core-sdk-c)
+ Você especifica o nome do executável como o manipulador de funções.

Os executáveis do Lambda devem implementar determinadas chamadas e padrões de programação no código de função. Por exemplo, o método `main` deve:
+ Chame `gg_global_init` para inicializar variáveis globais internas do Greengrass. Essa função deve ser chamada antes de criar qualquer thread e antes de chamar qualquer outra função AWS IoT Greengrass do Core SDK.
+ Chame `gg_runtime_start` para registrar o manipulador de funções com o runtime do Lambda do Greengrass. Essa função deve ser chamada durante a inicialização. Chamar essa função faz o thread atual ser usado pelo runtime. O parâmetro `GG_RT_OPT_ASYNC` opcional orienta essa função a não bloquear, mas, em vez disso, criar um novo thread para o runtime. Essa função usa um manipulador `SIGTERM`.

O trecho a seguir é o `main` método do exemplo de código [simple\$1handler.c](https://github.com/aws/aws-greengrass-core-sdk-c/blob/master/aws-greengrass-core-sdk-c-example/simple_handler.c) em. GitHub

```
int main() {
    gg_error err = GGE_SUCCESS;

    err = gg_global_init(0);
    if(err) {
        gg_log(GG_LOG_ERROR, "gg_global_init failed %d", err);
        goto cleanup;
    }

    gg_runtime_start(handler, 0);

cleanup:
    return -1;
}
```

Para obter mais informações sobre requisitos, restrições e outros detalhes de implementação, consulte [SDK do AWS IoT Greengrass Core para C](https://github.com/aws/aws-greengrass-core-sdk-c).

### Crie um executável do Lambda
<a name="create-lambda-executable"></a>

Depois de compilar seu código junto com o SDK, use a AWS Lambda API para criar uma função Lambda e fazer o upload do executável compilado.

**nota**  
A função deve ser compilado com um compilador C89 compatível.

O exemplo a seguir usa o comando da CLI [create-function](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-function.html) para criar um executável do Lambda. O comando especifica:
+ O nome do executável do manipulador. Ele deve ser o nome exato do executável compilado.
+ O caminho do arquivo `.zip` que contém o executável compilado.
+ `arn:aws:greengrass:::runtime/function/executable` do runtime. Este é o runtime de todos os executáveis do Lambda.

**nota**  
Para `role`, você pode especificar o ARN de qualquer função do Lambda de execução. O AWS IoT Greengrass não usa essa função, mas o parâmetro é obrigatório para a criação da função. Para obter informações sobre funções do Lambda de execução, consulte [Modelo de permissões do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html) no *Guia do desenvolvedor do AWS Lambda *.

```
aws lambda create-function \
--region aws-region \
--function-name function-name \
--handler executable-name \
--role role-arn \
--zip-file fileb://file-name.zip \
--runtime arn:aws:greengrass:::runtime/function/executable
```

Em seguida, use a AWS Lambda API para publicar uma versão e criar um alias.
+ Use [publish-version](https://docs.aws.amazon.com/cli/latest/reference/lambda/publish-version.html) para publicar uma versão da função.

  ```
  aws lambda publish-version \
  --function-name function-name \
  --region aws-region
  ```
+ Use [create-alias](https://docs.aws.amazon.com/cli/latest/reference/lambda/create-alias.html) para criar um alias que aponte para a versão recém-publicada. Recomendamos fazer referência a funções do Lambda por alias quando você as adiciona a um grupo do Greengrass.

  ```
  aws lambda create-alias \
  --function-name function-name \
  --name alias-name \
  --function-version version-number \
  --region aws-region
  ```

**nota**  
O AWS Lambda console não exibe executáveis Lambda. Para atualizar o código da função, você deve usar a AWS Lambda API.

Em seguida, adicione o executável do Lambda a um grupo do Greengrass, configure-o para aceitar dados de entrada binários nas configurações específicas do grupo e implantar o grupo. Você pode fazer isso no AWS IoT Greengrass console ou usando a AWS IoT Greengrass API.

# Executando AWS IoT Greengrass em um contêiner Docker
<a name="run-gg-in-docker-container"></a>

AWS IoT Greengrass pode ser configurado para ser executado em um contêiner [Docker](https://www.docker.com/).

Você pode baixar um Dockerfile por meio [da Amazon CloudFront](what-is-gg.md#gg-docker-download) que tenha o software AWS IoT Greengrass principal e as dependências instalados. Para modificar a imagem do Docker para executar em diferentes arquiteturas de plataforma ou reduzir o tamanho da imagem do Docker, consulte o arquivo `README` no download do pacote do Docker.

Para ajudar você a começar a experimentar AWS IoT Greengrass, AWS também fornece imagens pré-criadas do Docker que têm o software AWS IoT Greengrass principal e as dependências instalados. Faça download de uma imagem do [Docker Hub](https://hub.docker.com/r/amazon/aws-iot-greengrass) ou do [Amazon Elastic Container Registry](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) (Amazon ECR). Essas imagens pré-criadas usam imagens básicas do Amazon Linux 2 (x86\$164) e do Alpine Linux (x86\$164, ARMv7l ou). AArch64

**Importante**  
<a name="docker-images-end-of-maintenance"></a>Em 30 de junho de 2022, AWS IoT Greengrass encerrou a manutenção das imagens Docker AWS IoT Greengrass do software Core v1.x que são publicadas no Amazon Elastic Container Registry (Amazon ECR) e no Docker Hub. Você pode continuar baixando essas imagens do Docker do Amazon ECR e do Docker Hub até 30 de junho de 2023, ou seja, um ano após o término da manutenção. No entanto, as imagens do Docker do software AWS IoT Greengrass Core v1.x não recebem mais patches de segurança ou correções de erros após o término da manutenção em 30 de junho de 2022. Se você executa uma carga de trabalho de produção que depende dessas imagens do Docker, recomendamos que você crie suas próprias imagens do Docker usando os Dockerfiles fornecidos. AWS IoT Greengrass  Para obter mais informações, consulte [AWS IoT Greengrass Software Docker](what-is-gg.md#gg-docker-download).

Este tópico descreve como baixar a imagem do AWS IoT Greengrass Docker do Amazon ECR e executá-la em uma plataforma Windows, macOS ou Linux (x86\$164). O tópico inclui as etapas a seguir:

1. [Obtenha a imagem do AWS IoT Greengrass contêiner do Amazon ECR](#docker-pull-image)

1. [Criar e configurar o núcleo e o grupo do Greengrass](#docker-config-gg)

1. [Execute AWS IoT Greengrass localmente](#docker-run-gg)

1. [Configurar a conteinerização "Sem contêiner" para o grupo](#docker-no-container)

1. [Implantar funções do Lambda para o contêiner do Docker](#docker-add-lambdas)

1. [(Opcional) Implantar dispositivos cliente que interagem com o Greengrass no contêiner do Docker](#docker-add-devices)

Os seguintes recursos não são compatíveis quando você executa AWS IoT Greengrass em um contêiner Docker:<a name="docker-image-unsupported-features"></a>
+ [Conectores](connectors.md) executados no modo de **contêiner do Greengrass**. Para executar um conector em um contêiner do Docker, o conector deve ser executado no modo **Sem contêiner**. Para localizar conectores compatíveis com o modo **Sem contêiner** consulte [Conectores do Greengrass fornecidos pela AWS](connectors-list.md). Alguns desses conectores têm um parâmetro de modo de isolamento que você deve definir como **Sem contêiner**.
+ [Recursos de volume e dispositivo locais](access-local-resources.md). Suas funções do Lambda definidas pelo usuário executadas no contêiner do Docker devem acessar dispositivos e volumes diretamente no núcleo.

Esses recursos não são suportados quando o ambiente de execução do Lambda para o grupo Greengrass está definido como [Sem contêiner, o que é necessário para ser executado AWS IoT Greengrass em um contêiner](lambda-group-config.md#no-container-mode) Docker.

## Pré-requisitos
<a name="docker-image-prerequisites"></a>

Antes de começar este tutorial, você deve fazer o seguinte.<a name="docker-image-prereq-list"></a>
+ Você deve instalar o software e as versões a seguir em seu computador host com base na versão AWS Command Line Interface (AWS CLI) que você escolher.

------
#### [ AWS CLI version 2 ]
  + [Docker](https://docs.docker.com/install/), versão 18.09 ou posterior. Versões anteriores também podem funcionar, mas recomendamos a versão 18.09 ou posterior.
  + AWS CLI versão 2.0.0 ou posterior.
    + Para instalar a AWS CLI versão 2, consulte [Instalando a AWS CLI versão 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html).
    + Para configurar o AWS CLI, consulte [Configurando o. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
**nota**  
Para atualizar para uma AWS CLI versão posterior 2 em um computador Windows, você deve repetir o processo de [instalação do MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html).

------
#### [ AWS CLI version 1 ]
  + [Docker](https://docs.docker.com/install/), versão 18.09 ou posterior. Versões anteriores também podem funcionar, mas recomendamos a versão 18.09 ou posterior.
  + [Python](https://www.python.org/downloads/), versão 3.6 ou posterior.
  + [pip](https://pip.pypa.io/en/stable/installing) versão 18.1 ou posterior.
  + AWS CLI versão 1.17.10 ou posterior
    + Para instalar a AWS CLI versão 1, consulte [Instalando a AWS CLI versão 1](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html).
    + Para configurar o AWS CLI, consulte [Configurando o. AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)
    + Para atualizar para a versão mais recente da AWS CLI versão 1, execute o comando a seguir.

      ```
      pip install awscli --upgrade --user
      ```
**nota**  
Se você usa a [instalação MSI](https://docs.aws.amazon.com/cli/latest/userguide/install-windows.html#msi-on-windows) da AWS CLI versão 1 no Windows, esteja ciente do seguinte:  
Se a instalação da AWS CLI versão 1 falhar ao instalar o botocore, tente usar a instalação do [Python](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html#awscli-install-windows-pip) e do pip.
Para atualizar para uma AWS CLI versão posterior 1, você deve repetir o processo de instalação do MSI.

------
+ Para acessar os recursos do Amazon Elastic Container Registry (Amazon ECR), você deve conceder a seguinte permissão. 
  + O Amazon ECR exige que os usuários concedam a `ecr:GetAuthorizationToken` permissão por meio de uma política AWS Identity and Access Management (IAM) antes de poderem se autenticar em um registro e enviar ou extrair imagens de um repositório do Amazon ECR. Para obter mais informações, consulte [Exemplos de políticas do repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-policy-examples.html) e [Acessando um repositório do Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-access-one-bucket) no *Guia do usuário do Amazon Elastic Container Registry*.

## Etapa 1: Obtenha a imagem do AWS IoT Greengrass contêiner do Amazon ECR
<a name="docker-pull-image"></a>

AWS fornece imagens do Docker que têm o software AWS IoT Greengrass Core instalado.

**Atenção**  <a name="docker-images-python-2.7-removal"></a>
A partir da versão 1.11.6 do software AWS IoT Greengrass Core, as imagens do Greengrass Docker não incluem mais o Python 2.7, porque o Python 2.7 chegou em 2020 e não recebe mais atualizações de segurança. end-of-life Se você optar por atualizar essas imagens do Docker, recomendamos verificar se seus aplicativos funcionam com as novas imagens do Docker antes de implantar as atualizações nos dispositivos de produção. Se você precisar do Python 2.7 para seu aplicativo que usa uma imagem do Docker do Greengrass, poderá modificar o Dockerfile do Greengrass para incluir o Python 2.7 em seu aplicativo.

Para ver as etapas que mostram como obter a imagem `latest` do Amazon ECR, selecione o seu sistema operacional:

### Extrair a imagem de contêiner (Linux)
<a name="docker-pull-image-linux"></a>

Execute os seguintes comandos no terminal do computador.

1. <a name="docker-get-login"></a>Faça login no AWS IoT Greengrass registro no Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Se for bem-sucedido, a saída imprimirá `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Recupere a imagem do AWS IoT Greengrass contêiner.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**nota**  
A `latest` imagem contém a versão estável mais recente do software AWS IoT Greengrass Core instalada em uma imagem base do Amazon Linux 2. Você também pode extrair outras imagens do repositório. Para encontrar todas as imagens disponíveis, verifique a página **Tags** no [Hub do Docker ](https://hub.docker.com/r/amazon/aws-iot-greengrass) ou use o comando **aws ecr list-images**. Por exemplo:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

1. Habilite as proteções symlink e hardlink. Se você estiver experimentando a execução AWS IoT Greengrass em um contêiner, poderá habilitar as configurações somente para a inicialização atual.
**nota**  
Talvez você precise usar **sudo** para executar esses comandos.
   + Para habilitar as configurações só para a inicialização atual:

     ```
     echo 1 > /proc/sys/fs/protected_hardlinks
     echo 1 > /proc/sys/fs/protected_symlinks
     ```
   + Para habilitar as configurações de modo que sejam mantidas nas reinicializações:

     ```
     echo '# AWS IoT Greengrass' >> /etc/sysctl.conf 
     echo 'fs.protected_hardlinks = 1' >> /etc/sysctl.conf 
     echo 'fs.protected_symlinks = 1' >> /etc/sysctl.conf
     
     sysctl -p
     ```

1. <a name="docker-linux-enable-ipv4"></a>Ative o encaminhamento de IPv4 rede, que é necessário para que a implantação AWS IoT Greengrass na nuvem e as comunicações MQTT funcionem no Linux. No arquivo `/etc/sysctl.conf`, defina `net.ipv4.ip_forward` como 1 e, em seguida, recarregue `sysctls`.

   ```
   sudo nano /etc/sysctl.conf
   # set this net.ipv4.ip_forward = 1
   sudo sysctl -p
   ```
**nota**  
Você pode usar o editor de sua selecione no lugar do nano.

### Extrair a imagem de contêiner (macOS)
<a name="docker-pull-image-mac"></a>

Execute os seguintes comandos no terminal do computador.

1. <a name="docker-get-login"></a>Faça login no AWS IoT Greengrass registro no Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Se for bem-sucedido, a saída imprimirá `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Recupere a imagem do AWS IoT Greengrass contêiner.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**nota**  
A `latest` imagem contém a versão estável mais recente do software AWS IoT Greengrass Core instalada em uma imagem base do Amazon Linux 2. Você também pode extrair outras imagens do repositório. Para encontrar todas as imagens disponíveis, verifique a página **Tags** no [Hub do Docker ](https://hub.docker.com/r/amazon/aws-iot-greengrass) ou use o comando **aws ecr list-images**. Por exemplo:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

### Extrair a imagem de contêiner (Windows)
<a name="docker-pull-image-windows"></a>

Execute os seguintes comandos em um prompt de comando. Antes de você poder usar comandos do Docker no Windows, o Docker Desktop deve estar em execução.

1. <a name="docker-get-login"></a>Faça login no AWS IoT Greengrass registro no Amazon ECR.

   ```
   aws ecr get-login-password --region  us-west-2 | docker login --username AWS --password-stdin https://216483018798.dkr.ecr.us-west-2.amazonaws.com
   ```

   Se for bem-sucedido, a saída imprimirá `Login Succeeded`.

1. <a name="docker-docker-pull"></a>Recupere a imagem do AWS IoT Greengrass contêiner.

   ```
   docker pull 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```
**nota**  
A `latest` imagem contém a versão estável mais recente do software AWS IoT Greengrass Core instalada em uma imagem base do Amazon Linux 2. Você também pode extrair outras imagens do repositório. Para encontrar todas as imagens disponíveis, verifique a página **Tags** no [Hub do Docker ](https://hub.docker.com/r/amazon/aws-iot-greengrass) ou use o comando **aws ecr list-images**. Por exemplo:  

   ```
   aws ecr list-images --region us-west-2 --registry-id 216483018798 --repository-name aws-iot-greengrass
   ```

## Etapa 2: Criar e configurar o núcleo e o grupo do Greengrass
<a name="docker-config-gg"></a>

A imagem do Docker tem o software AWS IoT Greengrass Core instalado, mas você deve criar um grupo e um núcleo do Greengrass. Isso inclui o download de certificados e do arquivo de configuração do núcleo.
+ Siga as etapas em [Módulo 2: Instalação do software AWS IoT Greengrass principal](module2.md). Ignore as etapas em que você baixa e executa o software AWS IoT Greengrass Core. O software do núcleo e suas dependências de runtime já estão configurados na imagem do Docker.

## Etapa 3: Executar AWS IoT Greengrass localmente
<a name="docker-run-gg"></a>

Depois que seu grupo estiver configurado, você estará pronto para configurar e iniciar o núcleo. Para ver as etapas que mostram como fazer isso, selecione o seu sistema operacional:

### Executar o Greengrass localmente (Linux)
<a name="docker-run-gg-linux"></a>

Execute os seguintes comandos no terminal do computador.

1. <a name="docker-create-certs-folder"></a>Crie uma pasta para os recursos de segurança do dispositivo e mova o certificado e as chaves para essa pasta. Execute os seguintes comandos. *path-to-security-files*Substitua pelo caminho para os recursos de segurança e *certificateId* substitua pela ID do certificado nos nomes dos arquivos.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Crie uma pasta para a configuração do dispositivo e mova o arquivo de configuração AWS IoT Greengrass principal para essa pasta. Execute os seguintes comandos. *path-to-config-file*Substitua pelo caminho para o arquivo de configuração.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a> AWS IoT Greengrass Inicie e monte os certificados e o arquivo de configuração no contêiner do Docker.

   Substitua `/tmp` pelo caminho onde você descompactou seus certificados e o arquivo de configuração.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   A saída deve ser semelhante a este exemplo:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Executar o Greengrass localmente (macOS)
<a name="docker-run-gg-mac"></a>

Execute os seguintes comandos no terminal do computador.

1. <a name="docker-create-certs-folder"></a>Crie uma pasta para os recursos de segurança do dispositivo e mova o certificado e as chaves para essa pasta. Execute os seguintes comandos. *path-to-security-files*Substitua pelo caminho para os recursos de segurança e *certificateId* substitua pela ID do certificado nos nomes dos arquivos.

   ```
   mkdir /tmp/certs
   mv path-to-security-files/certificateId-certificate.pem.crt /tmp/certs
   mv path-to-security-files/certificateId-public.pem.key /tmp/certs
   mv path-to-security-files/certificateId-private.pem.key /tmp/certs
   mv path-to-security-files/AmazonRootCA1.pem /tmp/certs
   ```

1. <a name="docker-create-config-folder"></a>Crie uma pasta para a configuração do dispositivo e mova o arquivo de configuração AWS IoT Greengrass principal para essa pasta. Execute os seguintes comandos. *path-to-config-file*Substitua pelo caminho para o arquivo de configuração.

   ```
   mkdir /tmp/config
   mv path-to-config-file/config.json /tmp/config
   ```

1. <a name="docker-docker-run"></a> AWS IoT Greengrass Inicie e monte os certificados e o arquivo de configuração no contêiner do Docker.

   Substitua `/tmp` pelo caminho onde você descompactou seus certificados e o arquivo de configuração.

   ```
   docker run --rm --init -it --name aws-iot-greengrass \
   --entrypoint /greengrass-entrypoint.sh \
   -v /tmp/certs:/greengrass/certs \
   -v /tmp/config:/greengrass/config \
   -p 8883:8883 \
   216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   A saída deve ser semelhante a este exemplo:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

### Executar o Greengrass localmente (Windows)
<a name="docker-run-gg-windows"></a>

1. Crie uma pasta para os recursos de segurança do dispositivo e mova o certificado e as chaves para essa pasta. Execute os seguintes comandos em um prompt de comando. *path-to-security-files*Substitua pelo caminho para os recursos de segurança e *certificateId* substitua pela ID do certificado nos nomes dos arquivos.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-certificate.pem.crt C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-public.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\certificateId-private.pem.key C:\Users\%USERNAME%\Downloads\certs
   move path-to-security-files\AmazonRootCA1.pem C:\Users\%USERNAME%\Downloads\certs
   ```

1. Crie uma pasta para a configuração do dispositivo e mova o arquivo de configuração AWS IoT Greengrass principal para essa pasta. Execute os seguintes comandos em um prompt de comando. *path-to-config-file*Substitua pelo caminho para o arquivo de configuração.

   ```
   mkdir C:\Users\%USERNAME%\Downloads\config
   move path-to-config-file\config.json C:\Users\%USERNAME%\Downloads\config
   ```

1.  AWS IoT Greengrass Inicie e monte os certificados e o arquivo de configuração no contêiner do Docker. Execute os seguintes comandos em seu prompt de comando.

   ```
   docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
   ```

   Quando o Docker solicitar que você compartilhe sua unidade `C:\` com o daemon do Docker, permita que ele salve o diretório `C:\` como bind mount dentro do contêiner do Docker. Para obter mais informações, consulte [Unidades compartilhadas](https://docs.docker.com/docker-for-windows/#shared-drives) na documentação do Docker. 

   A saída deve ser semelhante a este exemplo:

   ```
   Setting up greengrass daemon
   Validating hardlink/softlink protection
   Waiting for up to 30s for Daemon to start
   
   Greengrass successfully started with PID: 10
   ```

**nota**  
Se o contêiner não abrir o shell e sair imediatamente, você poderá depurar o problema fazendo uma montagem bind dos logs de runtime do ao iniciar a imagem. Para obter mais informações, consulte [Como manter os logs de runtime do Greengrass fora do contêiner do Docker](#debugging-docker-persist-logs).

## Etapa 4: Configurar a conteinerização "Sem contêiner" para o grupo do Greengrass
<a name="docker-no-container"></a>

Quando você executa AWS IoT Greengrass em um contêiner Docker, todas as funções do Lambda devem ser executadas sem conteinerização. Nesta etapa, você definirá a conteinerização padrão para o grupo como **No container (Nenhum contêiner)**. Você deve fazer isso antes de implantar o grupo pela primeira vez.

1. <a name="console-gg-groups"></a>No painel de navegação do AWS IoT console, em **Gerenciar**, expanda dispositivos **Greengrass** e **escolha Grupos (**V1).

1. <a name="group-choose-group"></a>Selecione o grupo cujas configurações você deseja alterar.

1. Selecione a guia **Funções do Lambda**.

1. Em ** Ambiente de runtime da função do Lambda padrão**, selecione **Editar**.

1. Em **Editar o ambiente padrão de runtime da função do Lambda**, em **Conteinerização padrão da função do Lambda**, altere as configurações de conteinerização.

1. Selecione **Salvar**.

As alterações entram em vigor quando o grupo é implantado.

Para obter mais informações, consulte [Definir a conteinerização padrão para funções do Lambda em um grupo](lambda-group-config.md#lambda-containerization-groupsettings).

**nota**  
Por padrão, as funções do Lambda usam a configuração de conteinerização do grupo. Se você substituir a configuração **Nenhum contêiner** de qualquer função do Lambda quando o AWS IoT Greengrass estiver em execução em um contêiner do Docker, a implantação falhará.

## Etapa 5: implantar funções Lambda no contêiner Docker AWS IoT Greengrass
<a name="docker-add-lambdas"></a>

Você pode implantar funções do Lam de longa duração para o contêiner do Docker do Greengrass.
+ Siga as etapas em [Módulo 3 (parte 1): funções Lambda em AWS IoT Greengrass](module3-I.md) para implantar uma função do Lambda de longa duração "Hello World" para o contêiner.

## Etapa 6: (opcional) implantar dispositivos cliente que interagem com o Greengrass em execução no contêiner do Docker
<a name="docker-add-devices"></a>

Você também pode implantar dispositivos cliente que interajam AWS IoT Greengrass quando estão sendo executados em um contêiner do Docker.
+ Siga as etapas em [Módulo 4: Interagindo com dispositivos clientes em um grupo AWS IoT Greengrass](module4.md) para implantar dispositivos cliente que se conectam ao núcleo e enviam mensagens MQTT.

## Interrompendo o AWS IoT Greengrass contêiner Docker
<a name="docker-stop"></a>

Para parar o contêiner do AWS IoT Greengrass Docker, pressione Ctrl\$1C no terminal ou no prompt de comando. Essa ação envia `SIGTERM` para o processo de daemon do Greengrass a fim de descartar esse processo e todos os processos do Lambda que foram iniciados pelo processo de daemon. O contêiner do Docker é inicializado com o processo `/dev/init` como PID 1, o que ajuda a eliminar quaisquer processos zumbis restantes. Para obter mais informações, consulte a [Referência de execução do Docker](https://docs.docker.com/engine/reference/commandline/run/#options).

## Solução de problemas AWS IoT Greengrass em um contêiner Docker
<a name="troubleshooting-docker-gg"></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.

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

**Solução:** este erro pode ocorrer ao executar o comando `aws ecr get-login-password`. Verifique se você instalou a versão 2 ou a versão 1 mais recente do AWS CLI . 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>

**Solução:** 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, execute:`pip install awscli --upgrade --user`). Se você estiver usando o Windows e tiver instalado a CLI usando o instalador MSI, repita o processo de instalação. Para obter informações, consulte [Instalar a AWS Command Line Interface no Microsoft Windows](https://docs.aws.amazon.com/cli/latest/userguide/awscli-install-windows.html) no *Guia do usuário do AWS Command Line Interface *.

### Aviso: IPv4 está desativado. As redes não funcionarão.
<a name="docker-troubleshooting-ipv4-disabled"></a>

**Solução:** você pode receber esse aviso ou uma mensagem semelhante ao executar AWS IoT Greengrass em um computador Linux. Ative o encaminhamento de IPv4 rede conforme descrito nesta [etapa](#docker-linux-enable-ipv4). AWS IoT Greengrass a implantação na nuvem e as comunicações MQTT não funcionam quando o IPv4 encaminhamento não está ativado. Para obter mais informações, consulte [Configurar parâmetros de kernel com namespace (sysctls) em runtime](https://docs.docker.com/engine/reference/commandline/run/#configure-namespaced-kernel-parameters-sysctls-at-runtime) na documentação do Docker.

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

**Solução:** esse erro ou uma mensagem `Firewall Detected` pode ser recebida 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/ <account-id><user-name>não 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*.

Para obter ajuda geral para AWS IoT Greengrass solução de problemas, consulte[Solução de problemas AWS IoT Greengrass](gg-troubleshooting.md).

### Depuração em um contêiner AWS IoT Greengrass Docker
<a name="debugging-docker-gg"></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.

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

Você pode executar o contêiner do AWS IoT Greengrass Docker após a montagem do diretório. `/greengrass/ggc/var/log` Os logs serão mantidos mesmo depois que o contêiner for encerrado ou removido.

**No Linux ou macOS**  
[Pare qualquer contêiner do Docker do Greengrass](#docker-stop) em execução no host e, em seguida, execute o comando a seguir em um terminal. Isso faz a montagem bind do diretório `log` do Greengrass e inicia a imagem do Docker.   
Substitua `/tmp` pelo caminho onde você descompactou seus certificados e o arquivo de configuração.  

```
docker run --rm --init -it --name aws-iot-greengrass \
      --entrypoint /greengrass-entrypoint.sh \
      -v /tmp/certs:/greengrass/certs \
      -v /tmp/config:/greengrass/config \
      -v /tmp/log:/greengrass/ggc/var/log \
      -p 8883:8883 \
      216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
Em seguida, você poderá verificar seus logs em `/tmp/log` no host para ver o que aconteceu enquanto o Greengrass estava em execução dentro do contêiner do Docker.

**No Windows**  
[Pare qualquer contêiner do Docker do Greengrass](#docker-stop) em execução no host e, em seguida, execute o comando a seguir em um prompt de comando. Isso faz a montagem bind do diretório `log` do Greengrass e inicia a imagem do Docker.  

```
cd C:\Users\%USERNAME%\Downloads
mkdir log
docker run --rm --init -it --name aws-iot-greengrass --entrypoint /greengrass-entrypoint.sh -v c:/Users/%USERNAME%/Downloads/certs:/greengrass/certs -v c:/Users/%USERNAME%/Downloads/config:/greengrass/config -v c:/Users/%USERNAME%/Downloads/log:/greengrass/ggc/var/log -p 8883:8883 216483018798.dkr.ecr.us-west-2.amazonaws.com/aws-iot-greengrass:latest
```
Em seguida, você poderá verificar seus logs em `C:/Users/%USERNAME%/Downloads/log` no host para ver o que aconteceu enquanto o Greengrass estava em execução dentro do contêiner do Docker.

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

Você pode anexar um shell interativo a um contêiner do AWS IoT Greengrass Docker em execução. Isso pode ajudar a investigar o estado do contêiner do Docker do Greengrass.

**No Linux ou macOS**  
Enquanto o contêiner do Docker do Greengrass estiver em execução, execute o comando a seguir em um terminal à parte.  

```
docker exec -it $(docker ps -a -q -f "name=aws-iot-greengrass") /bin/bash
```

**No Windows**  
Enquanto o contêiner do Docker do Greengrass estiver em execução, execute os comandos a seguir em um prompt de comando à parte.  

```
docker ps -a -q -f "name=aws-iot-greengrass"
```
*gg-container-id*Substitua pelo `container_id` resultado do comando anterior.  

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