AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, AWS IoT Greengrass V1 não lançaremos atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adiciona novos recursos significativos e suporte para plataformas adicionais.
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á.
Conector de implantação de aplicativo do Docker
O conector de implantação do aplicativo Greengrass Docker facilita a execução de suas imagens do Docker em um núcleo. AWS IoT Greengrass O conector usa o Compose do Docker para iniciar um aplicativo Docker de vários contêineres de um arquivo docker-compose.yml
. Especificamente, o conector executa comandos docker-compose
para gerenciar contêineres do Docker em um dispositivo de núcleo único. Para obter mais informações, consulte Visão geral do Compose do Docker
Depois de implantar o grupo do Greengrass, o conector extrai as imagens mais recentes e inicia os contêineres do Docker. Ele executa o docker-compose pull
e o comando docker-compose
up
. Depois, o conector publica o status do comando no tópico MQTT de saída. Ele também registra informações de status sobre a execução de contêineres do Docker. Isso possibilita que você monitore seus registros de aplicativos na Amazon CloudWatch. Para obter mais informações, consulte Monitoramento com logs do AWS IoT Greengrass. O conector também inicia contêineres do Docker sempre que o daemon do Greengrass é reiniciado. O número de contêineres do Docker que podem ser executados no núcleo depende do seu hardware.
Os contêineres do Docker são executados fora do domínio Greengrass no dispositivo de núcleo, portanto não podem acessar a IPC (Comunicação entre processos) do núcleo. No entanto, você pode configurar alguns canais de comunicação com componentes do Greengrass, como funções locais do Lambda. Para obter mais informações, consulte Comunicar-se com os contêineres do Docker.
Você pode usar o conector para cenários como hospedagem de um servidor web ou servidor MySQL em seu dispositivo de núcleo. Os serviços locais em seus aplicativos Docker podem se comunicar entre si, com outros processos no ambiente local e com serviços em nuvem. Por exemplo, você pode executar um servidor Web no núcleo que envia solicitações de funções do Lambda para um serviço da Web na nuvem.
Este conector é executado no modo de isolamento Sem contêiner para que você possa implantá-lo em um grupo do Greengrass que é executado sem a conteinerização do Greengrass.
Esse conector tem as seguintes versões.
Versão |
ARN |
---|---|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
Para obter informações sobre alterações de versão, consulte o Changelog.
Requisitos
Esse conector tem os seguintes requisitos:
-
AWS IoT Greengrass Software principal v1.10 ou posterior.
nota
Esse conector não é suportado em OpenWrt distribuições.
-
Python
, versão 3.7 ou 3.8, instalado no dispositivo de núcleo e adicionado à variável de ambiente PATH. nota
Para usar o Python 3.8, execute o comando a seguir para criar um symblink da pasta de instalação padrão do Python 3.7 para os binários instalados do Python 3.8.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Isso configura seu dispositivo para atender ao requisito Python para AWS IoT Greengrass.
-
O mínimo de 36 MB de RAM no núcleo do Greengrass para que o conector monitore contêineres do Docker em execução. O requisito total de memória depende do número de contêineres do Docker executados no núcleo.
-
Docker Engine
1.9.1 ou versão posterior instalado no núcleo do Greengrass. A versão 19.0.3 é a versão mais recente verificada para trabalhar com o conector. O executável
docker
deve estar no diretório/usr/bin
ou/usr/local/bin
.Importante
Recomendamos que você instale um armazenamento de credenciais para proteger as cópias locais das suas credenciais do Docker. Para obter mais informações, consulte Observações de segurança.
Para obter informações sobre como instalar o Docker nas distribuições do Amazon Linux, consulte Noções básicas do Docker para o Amazon ECS no Guia do desenvolvedor do Elastic Container da Amazon Service.
-
Compose do Docker
instalado no núcleo do Greengrass. O executável docker-compose
deve estar no diretório/usr/bin
ou/usr/local/bin
.As versões a seguir do Docker Compose são verificadas para trabalhar com o conector.
Versão do conector
Versão verificada do Docker Compose
7
1.25.4
6
1.25.4
5
1.25.4
4
1.25.4
3
1.25.4
2
1.25.1
1
1.24.1
-
Um único arquivo do Docker Compose (por exemplo,
docker-compose.yml
), armazenado no Amazon Simple Storage Service (Amazon S3). O formato deve ser compatível com a versão do Compose do Docker instalada no núcleo. Você deve testar o arquivo antes de usá-lo no núcleo. Se você editar o arquivo depois de implantar o grupo do Greengrass, será necessário reimplantar o grupo para atualizar sua cópia local no núcleo. -
Um usuário Linux com permissão para chamar o daemon do Docker local e gravar no diretório que armazena a cópia local do arquivo Compose. Para obter mais informações, consulte Configurar o usuário do Docker no núcleo.
-
A função de grupo do Greengrass configurada para permitir a ação
s3:GetObject
no bucket do S3 que contém o arquivo Compose. Essa permissão é exibida no exemplo de política do IAM a seguir.{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::
bucket-name
/*" } ] }nota
Se o bucket do S3 estiver habilitado para versionamento, a função deve ser configurada para permitir a ação
s3:GetObjectVersion
também. Para obter mais informações, consulte Usando versionamento no Guia do usuário do Amazon Simple Storage Service.Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).
-
Se o arquivo Docker Compose fizer referência a uma imagem do Docker armazenada no Amazon ECR, a função de grupo do Greengrass deverá estar configurada para permitir o seguinte:
-
As ações
ecr:GetDownloadUrlForLayer
eecr:BatchGetImage
em seus repositórios do Amazon ECR que contêm as imagens do Docker. -
A ação
ecr:GetAuthorizationToken
em seus recursos.
Os repositórios devem estar no mesmo conector Conta da AWS e no Região da AWS mesmo.
Importante
As permissões na função de grupo podem ser assumidas por todos os conectores e funções do Lambda no grupo do Greengrass. Para obter mais informações, consulte Observações de segurança.
Essas permissões são exibidas na política de exemplo a seguir.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:
region
:account-id
:repository/repository-name
" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }Para obter mais informações, consulte Exemplos de políticas do repositório do Amazon ECR no Guia do usuário do Amazon ECR.
Para o requisito de função de grupo, você deve configurar a função para conceder as permissões necessárias e certificar-se de que a função tenha sido adicionada ao grupo. Para ter mais informações, consulte Gerenciar a função de grupo do Greengrass (console) ou Gerenciar a função de grupo do Greengrass (CLI).
-
-
Se o arquivo Compose do Docker fizer referência a uma imagem do Docker do AWS Marketplace
, o conector também terá os seguintes requisitos: -
Você deve estar inscrito em produtos de AWS Marketplace contêiner. Para obter mais informações, consulte Encontrar e assinar produtos de contêiner no Guia de assinantes do AWS Marketplace .
-
AWS IoT Greengrass deve ser configurado para oferecer suporte a segredos locais, conforme descrito em Requisitos de segredos. O conector usa esse recurso apenas para recuperar seus segredos AWS Secrets Manager, não para armazená-los.
-
Você deve criar um segredo no Secrets Manager para cada AWS Marketplace registro que armazena uma imagem do Docker referenciada em seu arquivo Compose. Para obter mais informações, consulte Acessar imagens do Docker de repositórios privados.
-
-
Se o arquivo Compose do Docker fizer referência a uma imagem do Docker de repositórios privados em registros que não sejam o Amazon ECR, como o Hub do Docker, o conector também terá os seguintes requisitos:
-
AWS IoT Greengrass deve ser configurado para oferecer suporte a segredos locais, conforme descrito em Requisitos de segredos. O conector usa esse recurso apenas para recuperar seus segredos AWS Secrets Manager, não para armazená-los.
-
Você deve criar um segredo no Secrets Manager para cada repositório privado que armazena uma imagem do Docker referenciada no arquivo Compose. Para obter mais informações, consulte Acessar imagens do Docker de repositórios privados.
-
-
O daemon do Docker deve estar em execução quando você implantar um grupo do Greengrass que contenha esse conector.
Acessar imagens do Docker de repositórios privados
Se você usar credenciais para acessar suas imagens do Docker, será necessário permitir que o conector as acesse. A maneira de fazer isso dependerá de onde a imagem do Docker estiver localizada.
Para imagens do Docker armazenadas no Amazon ECR, você concede permissão para obter seu token de autorização na função de grupo do Greengrass. Para obter mais informações, consulte Requisitos.
Para imagens do Docker armazenadas em outros repositórios ou registros privados, você deve criar um segredo AWS Secrets Manager para armazenar suas informações de login. Isso inclui imagens do Docker nas quais você se inscreveu. AWS Marketplace Crie um segredo para cada repositório. Ao atualizar seus segredos no Secrets Manager, as alterações serão propagadas para o núcleo da próxima vez que você implantar o grupo.
nota
O Secrets Manager é um serviço que você pode usar para armazenar e gerenciar com segurança suas credenciais, chaves e outros segredos na Nuvem AWS. Para obter mais informações, consulte O que é AWS Secrets Manager? no Guia do AWS Secrets Manager usuário.
Cada segredo deve conter as seguintes chaves:
Chave |
Valor |
---|---|
|
O nome de usuário usado para acessar o repositório ou registro. |
|
A senha usada para acessar o repositório ou registro. |
|
O endpoint do registro. Isso deve corresponder ao URL de registro correspondente no arquivo Compose. |
nota
AWS IoT Greengrass Para permitir o acesso a um segredo por padrão, o nome do segredo deve começar com greengrass-. Caso contrário, sua função de serviço do Greengrass deverá conceder acesso. Para obter mais informações, consulte Permitir que o AWS IoT Greengrass obtenha valores de segredos.
- Para obter informações de login para imagens do Docker no AWS Marketplace
-
-
Obtenha sua senha para imagens do Docker AWS Marketplace usando o
aws ecr get-login-password
comando. Para obter mais informações, consulte get-login-password na Referência de comandos da AWS CLI .aws ecr get-login-password
-
Recupere o URL do registro para a imagem do Docker. Abra o site do AWS Marketplace e abra a página de lançamento do produto em contêiner. Em Imagens do contêiner, selecione Exibir detalhes da imagem do contêiner para localizar o nome do usuário e o URL do registro.
Use o nome de usuário, a senha e o URL do registro recuperados para criar um segredo para cada AWS Marketplace registro que armazena imagens do Docker referenciadas em seu arquivo Compose.
-
- Como criar segredos (console)
-
No AWS Secrets Manager console, escolha Outro tipo de segredos. Em Specify the key/value pairs to be stored for this secret (Especificar os pares de chave/valor a serem armazenados para este segredo), adicione as linhas para
username
,password
eregistryUrl
: Para obter mais informações, consulte Criar um segredo básico no Guia do usuário do AWS Secrets Manager . - Como criar segredos (CLI)
-
No AWS CLI, use o
create-secret
comando Secrets Manager, conforme mostrado no exemplo a seguir. Para obter mais informações, consulte create-secret na AWS CLI Command Reference.aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
Importante
Você é responsável por proteger o diretório DockerComposeFileDestinationPath
que armazena seu arquivo Compose do Docker e as credenciais para suas imagens do Docker de repositórios privados. Para obter mais informações, consulte Observações de segurança.
Parâmetros
Esse conector oferece os seguintes parâmetros:
Exemplo de criação de conector (AWS CLI)
O seguinte comando da CLI cria um ConnectorDefinition
com uma versão inicial que contém o conector de implantação do aplicativo do Docker do Greengrass.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "amzn-s3-demo-bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret1-hash
\",\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret2-hash
\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
nota
A função do Lambda nesse conector tem um ciclo de vida longo.
Dados de entrada
Este conector não requer nem aceita dados de entrada.
Dados de saída
Este conector publica o status do comando docker-compose up
como dados de saída.
- Filtro de tópico na assinatura
-
dockerapplicationdeploymentconnector/message/status
- Exemplo de resultado: sucesso
-
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"amzn-s3-demo-bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
- Exemplo de resultado: falha
-
{ "status":"fail", "error_message":"
description of error
", "error":"InvalidParameter" }O tipo de erro pode ser
InvalidParameter
ouInternalError
.
Configurar o usuário do Docker no núcleo do AWS IoT Greengrass
O conector de implantação do aplicativo do Docker do Greengrass é executado como o usuário especificado para o parâmetro DockerUserId
. Se você não especificar um valor, o conector será executado como ggc_user
, que é a identidade de acesso padrão do Greengrass.
Para permitir que o conector interaja com o daemon do Docker, o usuário do Docker deve pertencer ao grupo Linux do docker
no núcleo. O usuário do Docker também deve ter permissões de gravação no diretório DockerComposeFileDestinationPath
. Esse é o local em que o conector armazena o arquivo local docker-compose.yml
e as credenciais do Docker.
nota
-
Recomendamos que você crie um usuário Linux em vez de usar o padrão
ggc_user
. Caso contrário, qualquer função do Lambda no grupo do Greengrass poderá acessar o arquivo Compose e as credenciais do Docker. -
Convém evitar a execução como raiz, a menos que isso seja absolutamente necessário. Se você especificar o usuário raiz, é necessário permitir que as funções do Lambda sejam executadas como raiz no núcleo AWS IoT Greengrass . Para obter mais informações, consulte Executar uma função do Lambda como raiz.
-
Criar o usuário Você pode executar o comando
useradd
e incluir a opção-u
opcional para atribuir um UID. Por exemplo:sudo useradd -u
1234
user-name
-
Adicione o usuário ao grupo
docker
no núcleo. Por exemplo:sudo usermod -aG docker
user-name
Para obter mais informações, incluindo como criar o grupo
docker
, consulte Gerenciar Docker como usuário não raizna documentação do Docker. -
Conceda ao usuário permissão para gravação no diretório especificado para o parâmetro
DockerComposeFileDestinationPath
. Por exemplo:-
Para definir o usuário como proprietário do diretório. Este exemplo usa o UID da etapa 1.
chown
1234
docker-compose-file-destination-path
-
Conceda permissões de leitura e gravação ao proprietário.
chmod 700
docker-compose-file-destination-path
Para obter mais informações, consulte Como gerenciar permissões para arquivos e pastas no Linux
na documentação do Linux Foundation. -
Caso você não tenha atribuído um UID ao criar o usuário, ou ainda, caso tenha usado um usuário existente, execute o comando
id
para pesquisar o UID.id -u
user-name
Use o UID para configurar o parâmetro
DockerUserId
para o conector.
-
Informações de uso
Ao usar o conector de implantação do aplicativo do Docker do Greengrass, você deve estar ciente das seguintes informações de uso específicas da implementação.
-
Prefixo fixo para nomes de projeto. O conector prepõe o prefixo
greengrassdockerapplicationdeployment
para os nomes dos contêineres do Docker que inicia. O conector usa esse prefixo como o nome do projeto nos comandosdocker-compose
que executa. -
Comportamento de log. O conector grava informações de status e de solução de problemas em um arquivo de log. Você pode configurar AWS IoT Greengrass para enviar registros para o CloudWatch Logs e gravar registros localmente. Para obter mais informações, consulte Registro em log para conectores. Este é o caminho para o log local do conector:
/
greengrass-root
/ggc/var/log/user/region
/aws/DockerApplicationDeployment.logVocê deve ter permissões root para acessar logs locais.
-
Atualizando as imagens do Docker. O Docker armazena imagens em cache no dispositivo de núcleo. Se você atualizar uma imagem do Docker e quiser propagar a alteração para o dispositivo de núcleo, certifique-se de alterar a tag da imagem no arquivo Compose. As alterações entram em vigor após a implantação do grupo do Greengrass.
-
Tempo limite de 10 minutos para operações de limpeza. Quando o daemon do Greengrass é interrompido durante uma reinicialização, o comando
docker-compose down
é iniciado. Todos os contêineres do Docker têm duração máxima de 10 minutos após odocker-compose down
ser iniciado para executar uma operação de limpeza. Se a limpeza não for concluída em 10 minutos, você deverá limpar os contêineres restantes manualmente. Para obter mais informações, consulte docker rmna documentação da CLI do Docker. -
Executando comandos do Docker. Para solucionar problemas, você pode executar comandos do Docker em uma janela de terminal no dispositivo de núcleo. Por exemplo, execute o seguinte comando para visualizar os contêineres do Docker que foram iniciados pelo conector:
docker ps --filter name="greengrassdockerapplicationdeployment"
-
ID de recurso reservado. O conector usa o ID
DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_
para os recursos do Greengrass criados por ele no grupo do Greengrass. O recurso IDs deve ser exclusivo no grupo, portanto, não atribua uma ID de recurso que possa entrar em conflito com essa ID de recurso reservada.index
-
Modo off-line. Quando você define o parâmetro de configuração
DockerOfflineMode
comoTrue
, o conector do Docker pode operar no modo offline. Isso pode acontecer quando a implantação de um grupo do Greengrass é reiniciada enquanto o dispositivo principal está off-line e o conector não consegue estabelecer uma conexão com o Amazon S3 nem com o Amazon ECR para recuperar o arquivo do Docker Compose.Com o modo off-line ativado, o conector tenta baixar seu arquivo do Compose e executar comandos
docker login
como faria em uma reinicialização normal. Se essas tentativas falharem, o conector procurará um arquivo do Compose armazenado localmente na pasta especificada usando o parâmetroDockerComposeFileDestinationPath
. Se existir um arquivo do Compose local, o conector seguirá a sequência normal de comandosdocker-compose
e extrairá as imagens locais. Se o arquivo do Compose ou as imagens locais não estiverem presentes, o conector falhará. O comportamento dos parâmetrosForceDeploy
eStopContainersOnNewDeployment
permanece o mesmo no modo off-line.
Comunicar-se com os contêineres do Docker
AWS IoT Greengrass suporta os seguintes canais de comunicação entre os componentes do Greengrass e os contêineres Docker:
-
As funções Lambda do Greengrass podem usar REST APIs para se comunicar com processos em contêineres Docker. Você pode configurar um servidor em um contêiner do Docker que abre uma porta. As funções do Lambda podem se comunicar com o contêiner nessa porta.
-
Os processos em contêineres do Docker podem trocar mensagens MQTT por meio do atendente de mensagens local do Greengrass. Você pode configurar o contêiner Docker como um dispositivo cliente no grupo Greengrass e, em seguida, criar assinaturas para permitir que o contêiner se comunique com as funções do Greengrass Lambda, dispositivos cliente e outros conectores no grupo, ou com o serviço paralelo local. AWS IoT Para obter mais informações, consulte Configurar a comunicação MQTT com contêineres do Docker.
-
As funções do Lambda do Greengrass podem atualizar um arquivo compartilhado para passar informações para contêineres do Docker. Você pode usar o arquivo Compose para a vinculação-montagem do caminho do arquivo compartilhado para um contêiner do Docker.
Configurar a comunicação MQTT com contêineres do Docker
Você pode configurar um contêiner do Docker como dispositivo cliente do Greengrass e adicioná-lo a um grupo do Greengrass. Em seguida, você pode criar assinaturas que permitem a comunicação MQTT entre o contêiner do Docker e os componentes do Greengrass ou a AWS IoT. No procedimento a seguir, você cria uma assinatura que permite que o dispositivo de contêiner do Docker receba mensagens de atualização de shadow do serviço de shadow local. Você pode seguir esse padrão para criar outras assinaturas.
nota
Esse procedimento supõe que você já criou um grupo do Greengrass e um núcleo do Greengrass (v1.10 ou posterior). Para obter informações sobre a criação de em grupo e de núcleos do Greengrass, consulte Conceitos básicos do AWS IoT Greengrass.
Para configurar um contêiner do Docker como dispositivo cliente do Greengrass e adicioná-lo a um grupo do Greengrass
-
Crie uma pasta no dispositivo de núcleo para armazenar os certificados e chaves usados para autenticar o dispositivo do Greengrass.
O caminho do arquivo deve ser montado no contêiner do Docker que você deseja iniciar. O snippet a seguir mostra como montar um caminho de arquivo no arquivo Compose. Neste exemplo,
path-to-device-certs
representa a pasta que você criou nesta etapa.version: '3.3' services: myService: image:
user-name
/repo
:image-tag
volumes: - /path-to-device-certs
/:/path-accessible-in-container
No painel de navegação do AWS IoT console, em Gerenciar, expanda dispositivos Greengrass e escolha Grupos (V1).
Selecione o grupo de destino.
-
Na página de configuração do grupo, selecione Dispositivos cliente e, em seguida, selecione Associar.
-
No modal Associar um dispositivo cliente a este grupo, escolha Criar AWS IoT coisa nova.
A página Criar coisas é aberta em uma nova guia.
-
Na página Criar coisas, selecione Criar uma única coisa, em seguida, selecione Avançar.
-
Na página Especificar propriedades da coisa, insira um nome para o dispositivo e, em seguida, selecione Avançar.
-
Na página Configurar certificado do dispositivo, selecione Avançar.
-
Na página Anexar políticas ao certificado, execute uma das seguintes ações:
-
Selecione uma política existente que conceda as permissões exigidas pelos dispositivos cliente e, em seguida, selecione Criar coisa.
Um modal é aberto, onde você pode baixar os certificados e as chaves que o dispositivo usa para se conectar ao Nuvem AWS núcleo.
-
Crie e anexe uma nova política que conceda permissões ao dispositivo cliente. Faça o seguinte:
-
Selecione Create policy (Criar política).
A página Create policy (Criar política) é aberta em uma nova guia.
-
Na página Create policy (Criar política) faça o seguinte:
-
Em Nome da política, insira um nome que descreva a política, como
GreengrassV1ClientDevicePolicy
. -
Na guia Instruções da política, em Documento da política, selecione JSON.
-
Insira o seguinte documento de política. Essa política permite que o dispositivo cliente descubra os núcleos do Greengrass e se comunique sobre todos os tópicos do MQTT. Para obter informações sobre como restringir o acesso a essa política, consulte Autorização e autenticação do dispositivo para o AWS IoT Greengrass.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
-
Selecione Create (Criar) para criar a política.
-
-
Volte para a guia do navegador com a página Anexar políticas ao certificado aberta. Faça o seguinte:
-
Na lista Políticas, selecione a política que você criou, como GreengrassV1ClientDevicePolicy.
Se a política não for exibida, selecione o botão de atualização.
-
Selecione Criar coisa.
Um modal é aberto, onde você pode baixar os certificados e as chaves que o dispositivo usa para se conectar ao Nuvem AWS núcleo.
-
-
-
-
No modal Baixar certificados e chaves, baixe os certificados do dispositivo.
Importante
Antes de selecionar Concluído, faça download dos recursos de segurança.
Faça o seguinte:
-
Em Certificado do dispositivo, selecione Download para baixar o certificado do dispositivo.
-
Em Arquivo de chave pública, selecione Download para baixar a chave pública do certificado.
-
Em Arquivo de chave privada, selecione Download para baixar o arquivo de chave privada para o certificado.
-
Revise Autenticação do servidor no Guia do desenvolvedor da AWS IoT e, em seguida selecione o certificado de CA raiz apropriado. Recomendamos que você use endpoints do Amazon Trust Services (ATS) e certificados raiz da CA do ATS. Em Certificados CA raiz, selecione Download para obter um certificado de CA raiz.
-
Selecione Done (Concluído).
Anote a ID do certificado, que é comum nos nomes dos arquivos do certificado e das chaves do dispositivo. Você precisará disso mais tarde.
-
-
Copie os certificados e as chaves na pasta criada na etapa 1.
Em seguida, crie uma assinatura no grupo. Neste exemplo, você cria uma assinatura que permite que o dispositivo de contêiner do Docker receba mensagens MQTT do serviço de shadow local.
nota
O tamanho máximo de um documento do shadow é 8 KB. Para obter mais informações, consulte Cotas do AWS IoT no Guia do desenvolvedor do AWS IoT .
Para criar uma assinatura que permita que o dispositivo de contêiner do Docker receba mensagens MQTT do serviço de shadow local
-
Na página Select your source and target, configure a origem e o destino, da seguinte forma:
-
Para Select a source (Selecione uma origem), selecione Serviços e Serviço de sombra local.
-
Em Selecionar um destino, selecione Devices (Dispositivos) e o seu dispositivo.
-
Selecione Next (Próximo).
-
Na página Filtrar seus dados com um tópico, em Filtro de tópico, selecione
$aws/things/
e, em seguida selecione Avançar.MyDockerDevice
/shadow/update/acceptedMyDockerDevice
Substitua pelo nome do dispositivo que você criou anteriormente. -
Selecione Finish.
-
Inclua o snippet de código a seguir na imagem do Docker a qual você faz referência no arquivo Compose. Esse é o código de dispositivo do Greengrass. Além disso, adicione o código ao contêiner do Docker que inicia o dispositivo do Greengrass dentro do contêiner. Ele pode ser executado como processo separado na imagem, ou em um thread separado.
import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)
Observações de segurança
Ao usar o conector de implantação do aplicativo do Docker do Greengrass, esteja ciente das seguintes considerações de segurança.
-
Armazenamento local do arquivo Compose do Docker
O conector armazena uma cópia do arquivo Compose no diretório especificado para o parâmetro
DockerComposeFileDestinationPath
.Você é responsável por proteger esse diretório. Você deve usar permissões do sistema de arquivos para restringir o acesso ao diretório.
-
Armazenamento local das credenciais do Docker
Se as imagens do Docker estiverem armazenadas em repositórios privados, o conector armazenará suas credenciais do Docker no diretório especificado para o parâmetro
DockerComposeFileDestinationPath
.Você é responsável por proteger essas credenciais. Por exemplo, use credential-helper
no dispositivo de núcleo ao instalar o Docker Engine. -
Instalar o Docker Engine de uma fonte confiável
Você é responsável por instalar o Docker Engine de uma fonte confiável. Esse conector usa o daemon do Docker no dispositivo de núcleo para acessar seus ativos do Docker e gerenciar contêineres do Docker.
-
Escopo das permissões de função de grupo do Greengrass
As permissões adicionadas à função de grupo do Greengrass podem ser assumidas por todos os conectores e funções do Lambda no grupo do Greengrass. Esse conector requer acesso ao arquivo Compose do Docker armazenado em um bucket do S3. Ele também requer acesso ao seu token de autorização do Amazon ECR se suas imagens do Docker estiverem armazenadas em um repositório privado no Amazon ECR.
Licenças
O conector de implantação do aplicativo do Docker do Greengrass inclui o seguinte licenciamento/software de terceiros:
-
AWS SDK for Python (Boto3)
/Licença Apache 2.0 -
botocore
/Licença Apache 2.0 -
dateutil
/Licença PSF -
docutils
/Licença BSD, GNU Licença pública geral (GPL), Licença Python Software Foundation, Domínio público -
jmespath
/Licença MIT -
s3transfer
/Licença Apache 2.0 -
urllib3
/Licença MIT
Esse conector é liberado de acordo com o Contrato de licença de software do Greengrass Core
Changelog
A tabela a seguir descreve as alterações em cada versão do conector.
Versão |
Alterações |
---|---|
7 |
Adicionado |
6 |
Adicionado |
5 |
As imagens são extraídas antes da execução |
4 |
pull-before-upComportamento adicionado para atualizar imagens do Docker. |
3 |
Correção de um problema com a localização de variáveis de ambiente. |
2 |
Adição do parâmetro |
1 |
Versão inicial. |
Um grupo do Greengrass só pode conter uma versão do conector por vez. Para obter informações sobre como fazer upgrade de uma versão do conector, consulte Atualizar a versões do conector.