View a markdown version of this page

Implante aplicativos em contêineres em AWS IoT Greengrass V2 execução como um contêiner Docker - Recomendações da AWS

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

Implante aplicativos em contêineres em AWS IoT Greengrass V2 execução como um contêiner Docker

Salih Bakir, Giuseppe Di Bella e Gustav Svalander, da Amazon Web Services

Resumo

AWS IoT Greengrass Version 2, quando implantado como um contêiner Docker, não oferece suporte nativo à execução de contêineres de aplicativos Docker. Esse padrão mostra como criar uma imagem de contêiner personalizada com base na versão mais recente AWS IoT Greengrass V2 que habilita a funcionalidade Docker-in-Docker (DiND). Com o DiND, você pode executar aplicativos em contêineres dentro do ambiente. AWS IoT Greengrass V2

Você pode implantar esse padrão como uma solução independente ou integrá-lo a plataformas de orquestração de contêineres, como o Amazon ECS Anywhere. Em qualquer modelo de implantação, você mantém a AWS IoT Greengrass V2 funcionalidade completa, incluindo os recursos de processamento do AWS IoT SiteWise Edge, ao mesmo tempo em que permite implantações escaláveis baseadas em contêineres.

Pré-requisitos e limitações

Pré-requisitos

  • Um ativo Conta da AWS.

  • Para AWS IoT Greengrass Version 2 pré-requisitos gerais, consulte Pré-requisitos na documentação. AWS IoT Greengrass Version 2

  • Docker Engine, instalado e configurado no Linux, macOS ou Windows.

  • Docker Compose (se você usar a interface de linha de comando (CLI) do Docker Compose para executar imagens do Docker).

  • Um sistema operacional Linux.

  • Um hipervisor com um servidor host que oferece suporte à virtualização.

  • Requisitos do sistema:

    • 2 GB de RAM (mínimo)

    • 5 GB de espaço em disco disponível (mínimo)

    • Para o AWS IoT SiteWise Edge, uma CPU quad-core x86_64 com 16 GB de RAM e 50 GB de espaço em disco disponível. Para obter mais informações sobre processamento de AWS IoT SiteWise dados, consulte Requisitos do pacote de processamento de dados na AWS IoT SiteWise documentação.

Versões do produto

  • AWS IoT Greengrass Version 2 versão 2.5.3 ou posterior

  • Docker-in-Docker versão 1.0.0 ou posterior

  • Docker Compose versão 1.22 ou posterior

  • Docker Engine versão 20.10.12 ou posterior

Limitações

  • Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte AWS Services by Region. Para endpoints específicos, consulte Service endpoints and quotas e clique no link correspondente ao serviço desejado.

Arquitetura

Pilha de tecnologias de destino

  • Fontes de dados — dispositivos de IoT, sensores ou equipamentos industriais que geram dados para processamento

  • AWS IoT Greengrass V2— Funcionando como um contêiner Docker com D-in-D recursos, implantado em infraestruturas de ponta

  • Aplicativos em contêineres — aplicativos personalizados executados no AWS IoT Greengrass V2 ambiente como contêineres Docker aninhados

  • (Opcional) Amazon ECS Anywhere — orquestração de contêineres que gerencia a implantação do contêiner AWS IoT Greengrass V2

  • Outros Serviços da AWS — AWS IoT Core, AWS IoT SiteWise, e outros Serviços da AWS para processamento e gerenciamento de dados

Arquitetura de destino

O diagrama a seguir mostra um exemplo de arquitetura de implantação de destino que usa o Amazon ECS Anywhere, que é uma ferramenta de gerenciamento de contêineres.

Arquitetura de implantação usando o Amazon ECS Anywhere.

O diagrama mostra o seguinte fluxo de trabalho:

1: Armazenamento de imagens de contêineres — O Amazon ECR armazena as imagens de AWS IoT Greengrass contêineres e quaisquer contêineres de aplicativos personalizados necessários para o processamento de bordas.

2 e 3: Implantação de contêineres — O Amazon ECS Anywhere implanta a imagem AWS IoT Greengrass do contêiner do Amazon ECR no ponto de presença, gerenciando o ciclo de vida do contêiner e o processo de implantação.

4: Implantação de componentes — O AWS IoT Greengrass núcleo implantado implanta automaticamente seus componentes relevantes com base em sua configuração. Os componentes incluem o AWS IoT SiteWise Edge e outros componentes necessários de processamento de borda dentro do ambiente em contêineres.

5: Ingestão de dados — Depois de totalmente configurado, AWS IoT Greengrass começa a ingerir dados de telemetria e sensores de várias fontes de dados de IoT no ponto de borda.

6: Processamento de dados e integração na nuvem — O AWS IoT Greengrass núcleo conteinerizado processa os dados localmente usando seus componentes implantados (incluindo o AWS IoT SiteWise Edge para dados industriais). Em seguida, ele envia os dados processados aos Nuvem AWS serviços para análise e armazenamento adicionais.

Ferramentas

Serviços da AWS

  • O Amazon ECS Anywhere ajuda você a implantar, usar e gerenciar tarefas e serviços do Amazon ECS em sua própria infraestrutura.

  • O Amazon Elastic Compute Cloud (Amazon EC2) fornece capacidade de computação escalável no. Nuvem AWS Você poderá iniciar quantos servidores virtuais precisar e escalá-los na vertical rapidamente.

  • O Amazon Elastic Container Registry (Amazon ECR) é um serviço gerenciado de registro de imagens de contêineres seguro, escalável e confiável.

  • AWS IoT Greengrass é um serviço de nuvem e runtime de borda da Internet das Coisas (IoT) de código aberto que ajuda você a criar, implantar e gerenciar aplicações de IoT em seus dispositivos.

  • O AWS IoT SiteWise auxilia na coleta, na modelagem, na análise e na visualização de dados de equipamentos industriais em grande escala.

Outras ferramentas

  • O Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam a virtualização no nível do sistema operacional para fornecer software em contêineres.

  • O Docker Compose é uma ferramenta para definir e executar aplicações com diversos contêineres.

  • O Docker Engine é uma tecnologia de conteinerização de código aberto para criar e armazenar aplicativos.

Repositório de código

O código desse padrão está disponível no Docker-in-Docker repositório GitHub AWS IoT Greengrass v2.

Épicos

TarefaDescriptionHabilidades necessárias

Clone e navegue até o repositório.

Para clonar o repositório, use o seguinte comando:

git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git

Para navegar até o docker diretório, use o seguinte comando:

cd aws-iot-greengrass-v2-docker-in-docker/docker

DevOps engenheiro, AWS DevOps

Crie a imagem do Docker.

Para criar a imagem do Docker com a versão padrão (mais recente), execute o seguinte comando:

docker build -t x86_64/aws-iot-greengrass:latest .

Ou, para criar a imagem do Docker com uma versão específica, execute o seguinte comando:

docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .

Para verificar a compilação, execute o seguinte comando:

docker images | grep aws-iot-greengrass

 

AWS DevOps, DevOps engenheiro, desenvolvedor de aplicativos

(Opcional) Envie para o Amazon ECR.

  1. Para criar o repositório, execute o seguinte comando:

    aws ecr create-repository --repository-name aws-iot-greengrass-dind --region us-east-1

  2. Para autenticar, execute o seguinte comando:

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com

  3. Para marcar e enviar, execute os seguintes comandos:

    docker tag x86_64/aws-iot-greengrass:latest <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

    docker push <ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

Desenvolvedor de aplicativos, AWS DevOps, DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Selecione o método de autenticação.

Escolha uma das seguintes opções:

  • Opção 1 (recomendada): funções do IAM — Use se estiver executando na Amazon EC2, Amazon ECS ou Amazon EKS com funções adequadas do IAM. Nenhuma configuração adicional é necessária.

  • Opção 2: Variáveis de ambiente — Para teste e desenvolvimento.

  • Opção 3: Arquivo de credenciais — Não recomendado para produção.

  • Opção 4: env.cfg Arquivo legado.

Administrador da AWS

Configure o método de autenticação.

Para o método de autenticação selecionado, use as seguintes diretrizes de configuração:

  • Opção 2 (Variáveis de ambiente) — Preparar e AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY, opcionalmenteAWS_SESSION_TOKEN.

  • Opção 3 (Arquivo de credenciais) — Crie o diretório e o arquivo de credenciais:

    • (a) Execute o seguinte comando:

      mkdir -p ~/greengrass-v2-credentials

    • (b) Crie o seguinte arquivo em~/greengrass-v2-credentials/credentials:

      [default]

      aws_access_key_id=YourAccessKey

      aws_secret_access_key=YourSecretKey

    • (c) Proteja o arquivo da seguinte forma:

      chmod 600 ~/greengrass-v2-credentials/credentials

  • Opção 4 (env.cfg) — Crie o env.cfg arquivo no docker diretório da seguinte forma:

    GGC_ROOT_PATH=/greengrass/v2

    AWS_REGION=us-east-1

    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

Administrador da AWS
TarefaDescriptionHabilidades necessárias

Configure docker-compose.yml.

Atualize o docker-compose.yml arquivo com as variáveis de ambiente da seguinte forma:

  • Variáveis-chave: PROVISION, AWS_REGIONTHING_NAME,THING_GROUP_NAME,,TES_ROLE_NAME, TES_ROLE_ALIAS_NAME

  • Para obter credenciais por meio de variáveis de ambiente, descomente o seguinte:

    environment:

    - AWS_ACCESS_KEY_ID=YourKey

    - AWS_SECRET_ACCESS_KEY=YourSecret

  • Para o arquivo de credenciais, descomente o seguinte:

    volumes:

    - ~/greengrass-v2-credentials:/root/.aws/:ro

  • Para a persistência do registro, adicione o seguinte:

    volumes:

    - ./logs:/greengrass/v2/logs

DevOps engenheiro

Inicie e verifique o contêiner.

Para começar em primeiro plano, execute o seguinte comando:

docker-compose up --build

Ou, para começar em segundo plano, execute o seguinte comando:

docker-compose up --build -d

Para verificar o status, execute o seguinte comando:

docker-compose ps

Para monitorar os registros, execute o seguinte comando:

docker-compose logs -f

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Execute o contêiner com a CLI do Docker.

  • Para iniciar uma execução básica sem provisionamento, execute o seguinte comando:

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  • Para iniciar uma execução com variáveis de ambiente, execute o seguinte comando:

    docker run --init --privileged -it --name aws-iot-greengrass -e PROVISION=true -e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=YourKey -e AWS_SECRET_ACCESS_KEY=YourSecret -e THING_NAME=MyGreengrassCore -e THING_GROUP_NAME=MyGreengrassCoreGroup -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Para iniciar uma execução com um arquivo de credenciais, execute o seguinte comando:

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro -e PROVISION=true -e AWS_REGION=us-east-1 -e THING_NAME=MyGreengrassCore -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Para iniciar uma execução com um env.cfg arquivo, execute o seguinte comando:

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro --env-file env.cfg -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Para iniciar uma execução com registros persistentes, execute o seguinte comando:

    docker run --init --privileged -it --name aws-iot-greengrass -v \$(pwd)/logs:/greengrass/v2/logs x86_64/aws-iot-greengrass:latest

DevOps engenheiro

Verifique o contêiner.

  • Para verificar o status do contêiner, execute o seguinte comando:

    docker ps | grep aws-iot-greengrass

  • Para monitorar os registros, execute o seguinte comando:

    docker logs -f aws-iot-greengrass

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Implemente aplicativos.

  • Para implantar o contêiner do aplicativo, execute o seguinte comando:

    docker run -d --name my-app nginx:alpine

  • Para verificar a implantação, execute o seguinte comando:

    docker ps

  • Para acessar os registros, execute o seguinte comando:

    cd /greengrass/v2/logs && cat greengrass.log

Desenvolvedor de aplicativos

Acesse e teste Docker-in-Docker.

  1. Para abrir um shell no contêiner, execute o seguinte comando:

    docker exec -it aws-iot-greengrass sh

  2. Para verificar o Docker, execute os seguintes comandos:

    docker --version

    docker ps

  3. Para testar Docker-in-Docker, execute o seguinte comando:

    docker run --rm hello-world

DevOps engenheiro
TarefaDescriptionHabilidades necessárias

Configure o cluster Amazon ECS.

  • Para criar um cluster do Amazon ECS, execute o seguinte comando:

    aws ecs create-cluster --cluster-name greengrass-cluster --region us-east-1

  • Para criar a ativação do SSM, execute o seguinte comando:

    aws ssm create-activation --default-instance-name greengrass-edge --iam-role GreengrassECSAnywhereRole --registration-limit 10 --region us-east-1

  • Para instalar o SSM Agent em um dispositivo de borda, execute o seguinte comando:

    curl -o install.sh https://s3.amazonaws.com/aws-ssm-downloads/latest/linux_amd64/install.sh

    chmod +x install.sh

    ./install.sh activation-code activation-id us-east-1

Administrador da AWS

Implante a tarefa do Amazon ECS.

  • Crie greengrass-task-definition.json com a configuração da tarefaprivileged:true, incluindo containerDefinitions com variáveis de ambiente e montagens de volume para /var/lib/docker /greengrass/v2.Register uma tarefa. Execute este comando: .

    aws ecs register-task-definition --cli-input-json file://greengrass-task-definition.json

  • Para criar o serviço, execute o seguinte comando:

    aws ecs create-service --cluster greengrass-cluster --service-name greengrass-service --task-definition greengrass-dind --desired-count 1 --launch-type EXTERNAL --region us-east-1

  • Para verificar a implantação, execute o seguinte comando:

    aws ecs describe-services --cluster greengrass-cluster --services greengrass-service --region us-east-1

Administrador da AWS
TarefaDescriptionHabilidades necessárias

Pare o contêiner.

  • Para parar o contêiner usando o Docker Compose, execute os seguintes comandos:

    docker-compose stop

    docker-compose down

    docker-compose down -v

  • Para interromper o contêiner (remove volumes) usando a CLI do Docker, execute os seguintes comandos:

    docker stop aws-iot-greengrass

    docker rm aws-iot-greengrass

  • Para parar o contêiner usando a remoção forçada, execute o seguinte comando:

    docker rm -f aws-iot-greengrass

DevOps engenheiro

Solução de problemas

ProblemaSolução

O contêiner não inicia com erros de permissão.

  1. Para garantir que o contêiner seja executado com o --privileged sinalizador necessário Docker-in-Docker, execute o seguinte comando:

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  2. No docker-compose.yml arquivo, defina o seguinte:

    privileged: true

Atenção

--privilegedconcede privilégios estendidos ao contêiner.

O provisionamento falha com erros de credencial.

Para verificar se as credenciais estão configuradas corretamente, use as seguintes etapas:

  1. Verifique a função do IAM:

    aws sts get-caller-identity

  2. Verifique as variáveis de ambiente:

    docker exec -it aws-iot-greengrass sh -c 'echo \$AWS_ACCESS_KEY_ID'

  3. Verifique o arquivo de credenciais:

    docker exec -it aws-iot-greengrass sh -c 'cat /root/.aws/credentials'

Certifique-se de que as permissões do IAM incluam iot:CreateThing iot:CreatePolicyiot:AttachPolicy,iam:CreateRole,, iam:AttachRolePolicy e.

Não é possível conectar-se ao daemon do Docker dentro do contêiner.

  1. Verifique o status do daemon do Docker:

    docker exec -it aws-iot-greengrass sh -c 'ps aux | grep dockerd'

  2. Verifique se o soquete Docker existe:

    docker exec -it aws-iot-greengrass sh -c 'ls -la /var/run/docker.sock'

  3. Inicie manualmente, se necessário:

    docker exec -it aws-iot-greengrass sh -c 'dockerd > /var/log/docker.log 2>&1 &'

O contêiner fica sem espaço em disco.

  1. Verifique o espaço em disco:

    df -h

  2. Recursos do Clean Docker:

    docker system prune -a --volumes

  3. Remova artefatos antigos do Greengrass:

    docker exec -it aws-iot-greengrass sh -c 'rm -rf /greengrass/v2/work/*'

Garanta espaço mínimo em disco: 5 GB para operações básicas e 50 GB para o AWS IoT SiteWise Edge

Problemas de construção.

  1. Verifique se você está no docker diretório:

    cd docker && pwd

  2. Verifique se Dockerfile existe:

    ls -la Dockerfile

  3. Verifique se o Docker está instalado e em execução:

    docker --version && docker ps

Problemas de conectividade de rede.

  1. Teste a resolução do DNS:

    docker exec -it aws-iot-greengrass sh -c 'nslookup google.com'

  2. Teste a AWS conectividade:

    docker exec -it aws-iot-greengrass sh -c 'curl https://iot.us-east-1.amazonaws.com'

Verifique se o firewall permite tráfego de saída HTTPS (443) e MQTT (8883).

Os componentes do Greengrass falham na implantação.

  1. Verifique os registros do Greengrass:

    docker exec -it aws-iot-greengrass sh -c 'cat /greengrass/v2/logs/greengrass.log'

  2. Verifique a configuração da função TES:

    aws iot describe-role-alias --role-alias TES_ROLE_ALIAS_NAME

Verifique os registros específicos do componente no /greengrass/v2/logs/ diretório.

O contêiner sai imediatamente após o início.

  1. Verifique se há erros nos registros do contêiner:

    docker logs aws-iot-greengrass

  2. Execute com um shell interativo para depuração:

    docker run --init --privileged -it --entrypoint sh x86_64/aws-iot-greengrass:latest

Verifique se todas as variáveis de ambiente necessárias estão definidas corretamente sePROVISION=true. Certifique-se de que o --init sinalizador seja usado ao iniciar o contêiner.

Recursos relacionados

AWS recursos

Outros recursos

Mais informações

  • Para o processamento de dados do AWS IoT SiteWise Edge, o Docker deve estar disponível no AWS IoT Greengrass ambiente.

  • Para executar um contêiner aninhado, você deve executar o AWS IoT Greengrass contêiner com credenciais de nível de administrador.