Criar implantações em massa para grupos - AWS IoT Greengrass

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

Criar implantações em massa para grupos

Você pode usar chamadas de API simples para implantar um grande número de grupos do Greengrass ao mesmo tempo. Essas implantações são acionadas com uma taxa adaptável que tem um limite superior fixo.

Este tutorial descreve como usar o AWS CLI para criar e monitorar implantação para grupo em massa no AWS IoT Greengrass. O exemplo de implantação em massa deste tutorial contém vários grupos. Você pode usar o exemplo na sua implementação para adicionar quantos grupos precisar.

O tutorial contém as seguintes etapas de nível elevado:

Pré-requisitos

Para concluir este tutorial, você precisa de:

  • Um ou mais grupos implantáveis do Greengrass. Para obter mais informações sobre a criação de grupos e cores do AWS IoT Greengrass, consulte Começando com AWS IoT Greengrass.

  • O AWS CLI instalado e configurado em sua máquina. Para obter mais informações, consulte o Guia do usuário do AWS CLI.

  • Um bucket do S3 criado na mesma Região da AWS como AWS IoT Greengrass. Para obter mais informações, consulte Criando e configurando um bucket do S3 no Guia do usuário do Amazon Simple Storage Service.

    nota

    Atualmente, buckets habilitados SSE KMS não são compatíveis.

Etapa 1: Criar e fazer upload do arquivo de entrada de implementação em massa

Nesta etapa, você cria um arquivo de entrada para implantação e faz upload dele para o seu bucket do Amazon S3. Esse arquivo é serializado, um arquivo JSON delimitado por linha, que contém informações sobre cada grupo na implantação em massa. O AWS IoT Greengrass usa essas informações para implantar cada grupo em seu nome quando você inicializa a implantação de grupo em massa.

  1. Execute o seguinte comando a fim de obter o groupId para cada grupo que você deseja implantar. Você insere o groupId no seu arquivo de entrada da implantação em massa para que o AWS IoT Greengrass possa identificar cada grupo a ser implantado.

    nota

    Também é possível encontrar esses valores no console do AWS IoT. O ID do grupo é exibido na página Settings (Configurações) do grupo. Os IDs de versão do grupo são exibidos na guia Implantações do grupo.

    aws greengrass list-groups

    A resposta contém informações sobre cada grupo na sua conta do AWS IoT Greengrass:

    { "Groups": [ { "Name": "string", "Id": "string", "Arn": "string", "LastUpdatedTimestamp": "string", "CreationTimestamp": "string", "LatestVersion": "string", "LatestVersionArn": "string" } ], "NextToken": "string" }

    Execute o seguinte comando a fim de obter o groupVersionId de cada grupo que você deseja implantar.

    list-group-versions --group-id groupId

    A resposta contém informações sobre todas as versões no grupo. Anote o ID da valor Version para a versão do grupo você deseja usar.

    { "Versions": [ { "Arn": "string", "Id": "string", "Version": "string", "CreationTimestamp": "string" } ], "NextToken": "string" }
  2. Em seu computador terminal ou editor de sua escolha, crie um arquivo, MyBulkDeploymentInputFile, do exemplo a seguir. Esse arquivo contém informações sobre cada grupo do AWS IoT Greengrass a ser incluído em uma implantação em massa. Embora esse exemplo defina vários grupos para esse tutorial, seu arquivo pode conter apenas um.

    nota

    O tamanho do arquivo deve ser menor que 100 MB.

    {"GroupId":"groupId1", "GroupVersionId":"groupVersionId1", "DeploymentType":"NewDeployment"} {"GroupId":"groupId2", "GroupVersionId":"groupVersionId2", "DeploymentType":"NewDeployment"} {"GroupId":"groupId3", "GroupVersionId":"groupVersionId3", "DeploymentType":"NewDeployment"} ...

    Cada registro (ou linha) contém um objeto do grupo. Cada objeto do grupo contém seu GroupId e GroupVersionId correspondentes e um DeploymentType. Atualmente, o AWS IoT Greengrass oferece suporte apenas aos tipos NewDeployment de implantação em massa.

    Salve e feche seu arquivo. Anote a localização do arquivo.

  3. Use o comando a seguir em seu terminal para fazer upload do arquivo de entrada no seu bucket do Amazon S3. Substitua o caminho do arquivo pelo local e nome do seu arquivo. Para obter informações, consulte Adicionar um objeto a um bucket.

    aws s3 cp path/MyBulkDeploymentInputFile s3://my-bucket/

Etapa 2: Criar e configurar uma função de execução do IAM

Nesta etapa, você usa o console do IAM para criar uma função de execução autônoma. Em seguida, você estabelece uma relação de confiança entre a função e o AWS IoT Greengrass e garante que o usuário do IAM tenha privilégios PassRole para sua função de execução. Isso permite que o AWS IoT Greengrass assuma a função de execução e crie as implantações em seu nome.

  1. Use a política a seguir para criar uma função de execução. Esse documento de política permite que o AWS IoT Greengrass acesse seu arquivo de entrada da implantação em massa ao criar cada implantação em seu nome.

    Para obter mais informações sobre como criar um perfil do IAM e delegar permissões, consulte Criar funções do IAM.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "greengrass:CreateDeployment", "Resource": [ "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId1", "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId2", "arn:aws:greengrass:region:accountId:/greengrass/groups/groupId3", ... ] } ] }
    nota

    Essa política deve ter um recurso para cada grupo ou versão do grupo do seu arquivo de entrada da implantação em massa a ser implantado pelo AWS IoT Greengrass. Para permitir o acesso a todos os grupos, para Resource, especifique um asterisco:

    "Resource": ["*"]
  2. Modifique a relação de confiança da sua função de execução a fim de incluir o AWS IoT Greengrass. Isso permite ao AWS IoT Greengrass usar sua função de execução e as permissões anexadas a ele. Para obter informações, consulte Editar a relação de confiança de uma função existente.

    Recomendamos que você também inclua as chaves de contexto de condição global aws:SourceArn e aws:SourceAccount em sua política de confiança para ajudar a evitar o problema de segurança confused deputy. As chaves de contexto de condição restringem o acesso para permitir somente as solicitações provenientes da conta especificada e do espaço de trabalho do Greengrass. Para obter mais informações sobre o problema substituto confuso, consulte Prevenção do problema do substituto confuso entre serviços.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "account-id" }, "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" } } } ] }
  3. Forneça permissões PassRole do IAM para a sua função de execução ao usuário do IAM. Esse usuário do IAM é o usado para iniciar a implantação em massa. As permissões PassRole permitem que o usuário do IAM passe a sua função de execução ao AWS IoT Greengrass para uso. Para obter mais informações, consulte Conceder a um usuário permissões para transmitir uma função a um produto da AWS.

    Use o seguinte exemplo para atualizar a política do IAM anexada ao seu perfil de execução. Modifique este exemplo, conforme necessário.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1508193814000", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::account-id:user/executionRoleArn" ] "Condition": { "StringEquals": { "iam:PassedToService": "greengrass.amazonaws.com" } } } ] }

Etapa 3: Permitir o acesso da função de execução ao bucket do S3

Para iniciar sua implantação em massa, sua função de execução deve ser capaz de ler o arquivo de entrada da implantação em massa do seu bucket do Amazon S3. Anexe a política de exemplo a seguir ao seu bucket do Amazon S3 para que suas permissões GetObject sejam acessíveis à sua função de execução.

Para obter mais informações, consulte Como eu faço para adicionar uma política de bucket do S3?

{ "Version": "2008-10-17", "Id": "examplePolicy", "Statement": [ { "Sid": "Stmt1535408982966", "Effect": "Allow", "Principal": { "AWS": [ "executionRoleArn" ] }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/objectKey" } ] }

Você pode usar o comando a seguir em seu terminal para verificar a política do seu bucket:

aws s3api get-bucket-policy --bucket my-bucket
nota

Você pode modificar diretamente sua função de execução a fim de conceder a ela permissões GetObject para o seu bucket do Amazon S3. Para isso, anexe a seguinte política de exemplo à sua função de execução.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::my-bucket/objectKey" } ] }

Etapa 4: Implantar os grupos

Nesta etapa, você inicia uma operação de implantação em massa para todas as versões do grupo configuradas no seu arquivo de entrada da implantação em massa. A ação de implantação para cada uma de suas versões de grupo é do tipo NewDeploymentType.

nota

Você não pode chamar StartBulkDeployment enquanto outra implantação em massa da mesma conta ainda estiver em execução. A solicitação foi rejeitada.

  1. Use o comando a seguir para iniciar a implantação em massa.

    Recomendamos que você inclua um token X-Amzn-Client-Token em cada solicitação StartBulkDeployment. Essas solicitações são idempotentes com relação ao token e os parâmetros da solicitação. Esse token pode ser qualquer string exclusiva e com diferenciação entre maiúsculas de minúsculas de até 64 caracteres ASCII.

    aws greengrass start-bulk-deployment --cli-input-json "{ "InputFileUri":"URI of file in S3 bucket", "ExecutionRoleArn":"ARN of execution role", "AmznClientToken":"your Amazon client token" }"

    O comando deve resultar em um código de status bem-sucedido 200, junto com a seguinte resposta:

    { "bulkDeploymentId": UUID }

    Anote o ID da implantação em massa. Ele pode ser usado para verificar o status de sua implantação em massa.

    nota

    Embora as operações de implantação em massa não sejam compatíveis no momento, é possível criar regras de eventos do Amazon EventBridge para receber notificações sobre alterações no status de implantação de grupos individuais. Para obter mais informações, consulte Obter notificações de implantação.

  2. Use o comando a seguir para verificar o status da sua implantação em massa.

    aws greengrass get-bulk-deployment-status --bulk-deployment-id 1234567

    O comando deve retornar um código de status bem-sucedido 200, além de uma carga JSON de informações:

    { "BulkDeploymentStatus": Running, "Statistics": { "RecordsProcessed": integer, "InvalidInputRecords": integer, "RetryAttempts": integer }, "CreatedAt": "string", "ErrorMessage": "string", "ErrorDetails": [ { "DetailedErrorCode": "string", "DetailedErrorMessage": "string" } ] }

    BulkDeploymentStatus contém o status atual da execução em massa. A execução pode ter um dos seis status diferentes:

    • Initializing. A solicitação de implantação em massa foi recebida, e a execução está prestes a ser iniciada.

    • Running. A execução da implantação em massa foi iniciada.

    • Completed. A execução da implantação em massa finalizou o processamento de todos os registros.

    • Stopping. A execução da implantação em massa recebeu um comando de interrupção e será encerrada em breve. Não é possível iniciar uma nova implantação em massa enquanto uma implantação anterior está em estado Stopping.

    • Stopped. A execução da implantação em massa foi interrompida manualmente.

    • Failed. A execução da implantação em massa encontrou um erro e foi encerrada. É possível encontrar detalhes do erro no campo ErrorDetails.

    A carga JSON também inclui informações estatísticas sobre o progresso da implantação em massa. Você pode usar essas informações para determinar a quantidade de grupos que foram processados e quantos deles falharam. As informações estatísticas incluem:

    • RecordsProcessed: o número de registro de tentativas do grupo.

    • InvalidInputRecords: o número total de registros que não apresentaram erro de nova tentativa. Por exemplo, isso pode ocorrer se o registro de um grupo do arquivo de entrada usa um formato inválido ou especifica uma versão de grupo inexistente, ou se a execução não concede permissão para implantar um grupo ou versão do grupo.

    • RetryAttempts: o número de tentativas de implantação que apresentaram erro de nova tentativa. Por exemplo, uma nova tentativa é acionada se a tentativa de implantar um grupo retorna um erro de limitação. A implantação do grupo pode ser repetida até cinco vezes.

    No caso de uma falha de execução da implantação em massa, essa carga também inclui uma seção ErrorDetails que pode ser usada para solução de problemas. Ela contém informações sobre a causa da falha de execução.

    Você pode verificar periodicamente o status da implantação em massa para confirmar se ela está progredindo conforme esperado. Depois de concluir a implantação, RecordsProcessed deve ser igual ao número de grupos de implantação em seu arquivo de entrada da implantação em massa. Isso indica que cada registro foi processado.

Etapa 5: Testar a implantação

Use o comando ListBulkDeployments para encontrar o ID da implantação em massa.

aws greengrass list-bulk-deployments

Esse comando retorna uma lista de todas as suas implantações em massa da mais recente para a menos recente, incluindo o BulkDeploymentId.

{ "BulkDeployments": [ { "BulkDeploymentId": 1234567, "BulkDeploymentArn": "string", "CreatedAt": "string" } ], "NextToken": "string" }

Agora, chame o comando ListBulkDeploymentDetailedReports para reunir informações detalhadas sobre cada implantação.

aws greengrass list-bulk-deployment-detailed-reports --bulk-deployment-id 1234567

O comando deve retornar um código de status bem-sucedido 200, junto com uma carga JSON de informações:

{ "BulkDeploymentResults": [ { "DeploymentId": "string", "GroupVersionedArn": "string", "CreatedAt": "string", "DeploymentStatus": "string", "ErrorMessage": "string", "ErrorDetails": [ { "DetailedErrorCode": "string", "DetailedErrorMessage": "string" } ] } ], "NextToken": "string" }

Essa carga geralmente contém uma lista paginada de cada implantação e seu status de implantação da mais recente para a menos recente. Ela também contém mais informações no caso de uma falha de execução da implantação em massa. Novamente, o número total de implantações listadas deve ser igual ao número de grupos que você identificou no seu arquivo de entrada da implantação em massa.

As informações retornadas podem ser alteradas até que as implantações estejam em estado terminal (êxito ou falha). Você pode chamar esse comando periodicamente até lá.

Solução de problemas de implantações em massa

Se a implantação em massa não for bem-sucedida, você poderá tentar as etapas de solução de problemas a seguir. Execute os comandos no seu terminal.

Solução de problemas de erros do arquivo de entrada

A implantação em massa pode falhar em caso de erros de sintaxe no arquivo de entrada da implantação em massa. Isso retorna um status Failed de implantação em massa com uma mensagem de erro indicando o número da linha do primeiro erro de validação. Existem quatro erros possíveis:

  • InvalidInputFile: Missing GroupId at line number: line number

    Esse erro indica que a linha fornecida do arquivo de entrada não é capaz de registrar o parâmetro especificado. Os possíveis parâmetros ausentes são GroupId e GroupVersionId.

  • InvalidInputFile: Invalid deployment type at line number : line number. Only valid type is 'NewDeployment'.

    Esse erro indica a linha fornecida do arquivo de entrada lista um tipo inválido de implantação. No momento, o único tipo de implantação compatível é NewDeployment.

  • Line %s is too long in S3 File. Valid line is less than 256 chars.

    Esse erro indica que a linha fornecida do arquivo de entrada é longa demais e deve ser reduzida.

  • Failed to parse input file at line number: line number

    Esse erro indica que a linha fornecida do arquivo de entrada não é considerada um json válido.

Verifique se há implantações simultâneas em massa

Não é possível iniciar uma nova implantação em massa enquanto outra ainda está em execução ou em estado não terminal. Isso pode resultar em um Concurrent Deployment Error. Você pode usar o comando ListBulkDeployments para verificar se uma implantação em massa está sendo executada no momento. Esse comando lista as implantações em massa da mais recente para a menos recente.

{ "BulkDeployments": [ { "BulkDeploymentId": BulkDeploymentId, "BulkDeploymentArn": "string", "CreatedAt": "string" } ], "NextToken": "string" }

Use o BulkDeploymentId da primeira implantação em massa listada para executar o comando GetBulkDeploymentStatus. Se a sua implantação em massa mais recente estiver em um estado de execução (Initializing ou Running), use o comando a seguir para interromper a implantação em massa.

aws greengrass stop-bulk-deployment --bulk-deployment-id BulkDeploymentId

Essa ação resulta em um status Stopping até que a implantação seja Stopped. Após a implantação atingir o status Stopped, você pode iniciar uma nova implantação em massa.

Verificar ErrorDetails

Execute o comando GetBulkDeploymentStatus para retornar uma carga JSON que contém informações sobre qualquer falha de execução da implantação em massa.

"Message": "string", "ErrorDetails": [ { "DetailedErrorCode": "string", "DetailedErrorMessage": "string" } ]

Ao obter um erro, a carga JSON ErrorDetails retornada por essa chamada contém mais informações sobre a falha de execução da implantação em massa. Um código de status de erro na série 400, por exemplo, indica um erro de entrada, nos parâmetros de entrada ou nas dependências do chamador.

Verificar o log de núcleo do AWS IoT Greengrass

Você pode solucionar problemas ao visualizar os logs de núcleo do AWS IoT Greengrass. Use os comandos a seguir para visualizar o runtime.log:

cd /greengrass/ggc/var/log sudo cat system/runtime.log | more

Para obter mais informações sobre registro em log do AWS IoT Greengrass, consulte Monitoramento com logs do AWS IoT Greengrass.

Consulte também

Para mais informações, consulte os seguintes recursos do :