Conceitos básicos de conectores do Greengrass (CLI) - 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á.

Conceitos básicos de conectores do Greengrass (CLI)

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

Este tutorial mostra como usar a AWS CLI para trabalhar com conectores.

Use conectores para acelerar o ciclo de vida de desenvolvimento. Os conectores são módulos pré-criados e reutilizáveis que podem facilitar a interação com serviços, protocolos e recursos. Eles podem ajudar você a implantar a lógica de negócios para Dispositivos Greengrass mais rapidamente. Para obter mais informações, consulte Integrar a serviços e protocolos usando conectores do Greengrass.

Neste tutorial, você configura e implanta o conector de notificações do Twilio. O conector recebe informações de mensagem do Twilio como dados de entrada e aciona uma mensagem de texto do Twilio. O fluxo de dados é exibido no diagrama a seguir.

Fluxo de dados da função do Lambda para o conector de notificações do Twilio para o Twilio.

Depois de configurar o conector, crie uma função do Lambda e uma assinatura.

  • A função avalia os dados simulados do sensor de temperatura. Ele publica, de forma condicional, as informações de mensagem do Twilio para um tópico MQTT. Esse é o tópico que o conector assina.

  • A assinatura permite que a função publique no tópico e que o conector receba os dados do tópico.

O conector de notificações do Twilio exige um token de autenticação do Twilio para interagir com a API do Twilio. O token é um tipo de texto secreto criado no AWS Secrets Manager e referenciado de um recurso de grupo. Isso permite que o AWS IoT Greengrass crie uma cópia local do segredo no núcleo do Greengrass, onde ele é criptografado e disponibilizado para o conector. Para obter mais informações, consulte Implantar segredos no núcleo do AWS IoT Greengrass.

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

O tutorial levará aproximadamente 30 minutos para ser concluído.

Usar a AWS IoT Greengrass API

É útil compreender os padrões a seguir ao trabalhar com componentes de grupo e grupos do Greengrass (por exemplo, os conectores, as funções e os recursos no grupo).

  • No topo da hierarquia, um componente tem um objeto de definição que é um contêiner para objetos da versão. Por sua vez, uma versão é um contêiner para os conectores, as funções ou outros tipos de componentes.

  • Ao implantar o núcleo do Greengrass, você implanta uma versão do grupo específica. A versão do grupo pode conter uma versão de cada tipo de componente. Um núcleo é necessário, mas os demais são incluídos conforme necessário.

  • As versões são imutáveis, portanto, você deve criar novas versões quando desejar fazer alterações.

dica

Se você receber um erro ao executar um comando da AWS CLI, adicione o parâmetro --debug e, em seguida, execute o comando novamente para obter mais informações sobre o erro.

A API do AWS IoT Greengrass permite que você crie diversas definições para um tipo de componente. Por exemplo, você pode criar um objeto FunctionDefinition toda vez que criar uma FunctionDefinitionVersion, ou você pode adicionar novas versões a uma definição existente. Essa flexibilidade permite que você personalize seu sistema de gerenciamento de versão.

Pré-requisitos

Para concluir este tutorial, você precisa de:

  • Um grupo do Greengrass e um núcleo do Greengrass (versão 1.9.3 ou posterior). Para saber como criar um grupo e núcleo Greengrass, consulte Começando com AWS IoT Greengrass. O tutorial Conceitos básicos também inclui etapas para instalar o software do núcleo do AWS IoT Greengrass.

  • Python 3.7 instalado no dispositivo de núcleo do AWS IoT Greengrass.

  • AWS IoT Greengrass deve ser configurado para oferecer suporte a segredos locais, conforme descrito em Requisitos de segredos.

    nota

    Este requisito inclui permitir o acesso aos seus segredos do Secrets Manager. Se você estiver usando o perfil de serviço padrão do Greengrass, o Greengrass terá permissão para obter os valores de segredos com nomes que começam com greengrass-.

  • Um SID da conta do Twilio, um token de autorização e um número de telefone habilitado para Twilio. Depois de criar um projeto do Twilio, esses valores estarão disponíveis no painel do projeto.

    nota

    Você pode usar uma conta de teste do Twilio. Se você estiver usando uma conta de teste, você deve adicionar números de telefone que não são de destinatários do Twilio a uma lista de números de telefone verificados. Para obter mais informações, consulte Como trabalhar com a sua conta de teste gratuita do Twilio.

  • O AWS CLI instalado e configurado em seu computador. Para obter mais informações, consulte o Instalando o AWS Command Line Interface e Configurando a AWS CLI no Guia do usuário do AWS Command Line Interface.

     

    Os exemplos neste tutorial são gravados para Linux e outros sistemas baseados em Unix. Se você estiver usando o Windows, consulte Especificando valores de parâmetro para a AWS Command Line Interface para saber mais sobre as diferenças de sintaxe.

    Se o comando contém uma string JSON, o tutorial fornece um exemplo que tem o JSON em uma única linha. Em alguns sistemas, pode ser mais fácil editar e executar comandos usando esse formato.

Etapa 1: Criar um segredo do Secrets Manager

Nesta etapa, você usa a API do AWS Secrets Manager para criar um secreto para o token de autenticação do Twilio.

  1. Primeiro, crie o segredo.

    • Substitua twilio-auth-token pelo seu token de autenticação do Twilio.

    aws secretsmanager create-secret --name greengrass-TwilioAuthToken --secret-string twilio-auth-token
    nota

    Por padrão, o perfil de serviço do Greengrass permite que AWS IoT Greengrass obtenha o valor de segredos com nomes que começam com greengrass-. Para obter mais informações, consulte os requisitos de segredos.

  2. Copie da saída o ARN do segredo. Use-o para criar o recurso de segredo e configurar o conector de notificações do Twilio.

Etapa 2: Criar uma definição e uma versão de recurso

Nesta etapa, você usa a API do AWS IoT Greengrass para criar um recurso de segredo para o seu segredo do Secrets Manager.

  1. Crie uma definição de recurso que inclua uma versão inicial.

    • Substitua secret-arn pelo ARN do segredo que você copiou na etapa anterior.

     

    JSON Expanded
    aws greengrass create-resource-definition --name MyGreengrassResources --initial-version '{ "Resources": [ { "Id": "TwilioAuthToken", "Name": "MyTwilioAuthToken", "ResourceDataContainer": { "SecretsManagerSecretResourceData": { "ARN": "secret-arn" } } } ] }'
    JSON Single-line
    aws greengrass create-resource-definition \ --name MyGreengrassResources \ --initial-version '{"Resources": [{"Id": "TwilioAuthToken", "Name": "MyTwilioAuthToken", "ResourceDataContainer": {"SecretsManagerSecretResourceData": {"ARN": "secret-arn"}}}]}'
  2. Copie o LatestVersionArn da definição de recurso da saída. Você usa esse valor para adicionar a versão de definição do recurso à versão de grupo que você implanta no núcleo.

Etapa 3: Criar uma definição e uma versão de conector

Nesta etapa, você configura parâmetros para o conector de notificações do Twilio.

  1. Crie uma definição de conector com uma versão inicial.

    • Substitua account-sid pelo seu ID de conta do Twilio.

    • Substitua secret-arn pelo ARN do seu segredo do Secrets Manager. O conector o usa para obter o valor do segredo local.

    • Substitua phone-number pelo seu número de telefone habilitado para Twilio. O Twilio usa esse texto para iniciar a mensagem. Isso pode ser substituído na carga da mensagem de entrada. Use o formato a seguir: +19999999999.

     

    JSON Expanded
    aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyTwilioNotificationsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Parameters": { "TWILIO_ACCOUNT_SID": "account-sid", "TwilioAuthTokenSecretArn": "secret-arn", "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken", "DefaultFromPhoneNumber": "phone-number" } } ] }'
    JSON Single-line
    aws greengrass create-connector-definition \ --name MyGreengrassConnectors \ --initial-version '{"Connectors": [{"Id": "MyTwilioNotificationsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Parameters": {"TWILIO_ACCOUNT_SID": "account-sid", "TwilioAuthTokenSecretArn": "secret-arn", "TwilioAuthTokenSecretArn-ResourceId": "TwilioAuthToken", "DefaultFromPhoneNumber": "phone-number"}}]}'
    nota

    TwilioAuthToken é o ID que você usou na etapa anterior para criar o recurso de segredo.

  2. Copie o LatestVersionArn da definição do conector da saída. Use esse valor para adicionar a versão da definição do conector à versão de grupo que você implanta no núcleo.

Etapa 4: crie um pacote de implantação para a função do Lambda

Para criar uma função do Lambda, você deve, primeiro, criar um pacote de implantação da função do Lambda que contenha o código da função e as dependências. As funções do Lambda do Greengrass exigem o SDK do Core AWS IoT Greengrass para tarefas como comunicação com mensagens MQTT no ambiente de núcleo e acesso a segredos locais. Este tutorial cria uma função Python, então você usa a versão Python do SDK no pacote de implantação.

  1. Na página de downloads do SDK do Core AWS IoT Greengrass, baixe o AWS IoT Greengrass SDK do Core para Python em seu computador.

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

  3. Salve a seguinte função do código Python em um arquivo local denominado temp_monitor.py.

    import greengrasssdk import json import random client = greengrasssdk.client('iot-data') # publish to the Twilio Notifications connector through the twilio/txt topic def function_handler(event, context): temp = event['temperature'] # check the temperature # if greater than 30C, send a notification if temp > 30: data = build_request(event) client.publish(topic='twilio/txt', payload=json.dumps(data)) print('published:' + str(data)) print('temperature:' + str(temp)) return # build the Twilio request from the input data def build_request(event): to_name = event['to_name'] to_number = event['to_number'] temp_report = 'temperature:' + str(event['temperature']) return { "request": { "recipient": { "name": to_name, "phone_number": to_number, "message": temp_report } }, "id": "request_" + str(random.randint(1,101)) }
  4. Comprima os seguintes itens em um arquivo denominado temp_monitor_python.zip. Ao criar o arquivo ZIP, inclua apenas o código e suas dependências, e não a pasta que contém os arquivos.

    • temp_monitor.py. Lógica do aplicativo.

    • greengrasssdk. Biblioteca necessária para funções Python do Lambda do Greengrass que publicam mensagens MQTT.

    Esse é o pacote de implantação de sua função do Lambda

Etapa 5: Criar uma função do Lambda

Agora, crie uma função do Lambda que usa o pacote de implantação.

  1. Crie um perfil do IAM para você transmitir no ARN da função ao criar a função.

    JSON Expanded
    aws iam create-role --role-name Lambda_empty --assume-role-policy '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
    JSON Single-line
    aws iam create-role --role-name Lambda_empty --assume-role-policy '{"Version": "2012-10-17", "Statement": [{"Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"},"Action": "sts:AssumeRole"}]}'
    nota

    O AWS IoT Greengrass não usa essa função, pois as permissões para as funções do Lambda do Greengrass são especificadas na função de grupo do Greengrass. Neste tutorial, você cria uma função vazia.

  2. Copie a Arn da saída.

  3. Use a API AWS Lambda para criar a função TempMonitor. O comando a seguir pressupõe que o arquivo zip esteja no diretório atual.

    • Substitua role-arn pelo Arn que você copiou.

    aws lambda create-function \ --function-name TempMonitor \ --zip-file fileb://temp_monitor_python.zip \ --role role-arn \ --handler temp_monitor.function_handler \ --runtime python3.7
  4. Publique uma versão da função.

    aws lambda publish-version --function-name TempMonitor --description 'First version'
  5. Crie um alias para a versão publicada.

    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.

    nota

    O AWS IoT Greengrass não oferece suporte a alias do Lambda para as versões $LATEST.

    aws lambda create-alias --function-name TempMonitor --name GG_TempMonitor --function-version 1
  6. Copie a AliasArn da saída. Você usa esse valor ao configurar a função para o AWS IoT Greengrass e ao criar uma assinatura.

Agora você está pronto para configurar a função para o AWS IoT Greengrass.

Etapa 6: Criar uma definição e uma versão de função

Para usar uma função do Lambda em um núcleo AWS IoT Greengrass, você cria uma versão de definição de função que faz referência à função do Lambda por alias e define a configuração no nível de grupo. 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.

  1. Crie uma definição de função que inclua uma versão inicial.

    • Substitua alias-arn pelo AliasArn que você copiou quando criou o alias.

     

    JSON Expanded
    aws greengrass create-function-definition --name MyGreengrassFunctions --initial-version '{ "Functions": [ { "Id": "TempMonitorFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": { "Executable": "temp_monitor.function_handler", "MemorySize": 16000, "Timeout": 5 } } ] }'
    JSON Single-line
    aws greengrass create-function-definition \ --name MyGreengrassFunctions \ --initial-version '{"Functions": [{"Id": "TempMonitorFunction", "FunctionArn": "alias-arn", "FunctionConfiguration": {"Executable": "temp_monitor.function_handler", "MemorySize": 16000,"Timeout": 5}}]}'
  2. Copie a LatestVersionArn da saída. Você usa esse valor para adicionar a versão de definição da função à versão de grupo que você implanta no núcleo.

  3. Copie a Id da saída. Você pode usar esse valor no futuro, ao atualizar a função.

Etapa 7: criar uma definição e uma versão de assinatura

Nesta etapa, adicione uma assinatura que permita que a função do Lambda envie dados de entrada para o conector. O conector define os tópicos MQTT que assina, para que essa assinatura use um dos tópicos. Esse é o mesmo tópico no qual a função de exemplo publica.

Para este tutorial, você também pode criar assinaturas que permitem que a função receba as leituras de temperatura simuladas do AWS IoT e permitem que o AWS IoT receba informações de status do conector.

  1. Crie uma definição de assinatura que contém uma versão inicial que inclui as assinaturas.

    • Substitua alias-arn pelo AliasArn que você copiou quando criou o alias para a função. Use esse ARN para ambas as assinaturas que o usam.

     

    JSON Expanded
    aws greengrass create-subscription-definition --initial-version '{ "Subscriptions": [ { "Id": "TriggerNotification", "Source": "alias-arn", "Subject": "twilio/txt", "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4" }, { "Id": "TemperatureInput", "Source": "cloud", "Subject": "temperature/input", "Target": "alias-arn" }, { "Id": "OutputStatus", "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Subject": "twilio/message/status", "Target": "cloud" } ] }'
    JSON Single-line
    aws greengrass create-subscription-definition \ --initial-version '{"Subscriptions": [{"Id": "TriggerNotification", "Source": "alias-arn", "Subject": "twilio/txt", "Target": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4"},{"Id": "TemperatureInput", "Source": "cloud", "Subject": "temperature/input", "Target": "alias-arn"},{"Id": "OutputStatus", "Source": "arn:aws:greengrass:region::/connectors/TwilioNotifications/versions/4", "Subject": "twilio/message/status", "Target": "cloud"}]}'
  2. Copie a LatestVersionArn da saída. Você usa esse valor para adicionar a versão de definição da assinatura à versão de grupo que você implanta no núcleo.

Etapa 8: Criar uma versão de grupo

Agora, você está pronto para criar uma versão de grupo que contém todos os itens que deseja implantar. Faça isso criando uma versão de grupo que faz referência à versão de destino de cada componente.

Primeiro, obtenha o ID do grupo e o ARN da versão de definição do núcleo. Esses valores são necessárias para criar a versão do grupo.

  1. Obtenha o ID do grupo e a versão mais recente do grupo:

    1. Obtenha os IDs do grupo do Greengrass de destino e a versão do grupo. Esse procedimento pressupõe que esse seja o grupo e a versão mais recente do grupo. A consulta a seguir retorna o grupo criado mais recentemente.

      aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"

      Ou é possível consultar por nome. Os nomes de grupo não precisam ser exclusivos, portanto, vários grupos podem ser retornados.

      aws greengrass list-groups --query "Groups[?Name=='MyGroup']"
      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.

    2. Copie da saída o Id do grupo de destino. Você usa isso para obter a versão de definição de núcleo e ao implantar o grupo.

    3. Copie a LatestVersion da saída, que é o ID da última versão adicionada ao grupo. Você usa isso para obter a versão de definição do núcleo.

  2. Obtenha o ARN da versão de definição de núcleo:

    1. Obtenha a versão do grupo. Para esta etapa, vamos considerar que a versão mais recente do grupo inclui uma versão de definição do núcleo.

      • Substitua group-id pelo Id que você copiou para o grupo.

      • Substitua group-version-id pelo LatestVersion que você copiou para o grupo.

      aws greengrass get-group-version \ --group-id group-id \ --group-version-id group-version-id
    2. Copie a CoreDefinitionVersionArn da saída.

  3. Criar uma versão de grupo.

    • Substitua group-id pelo Id que você copiou para o grupo.

    • Substitua core-definition-version-arn pelo CoreDefinitionVersionArn que você copiou para a versão de definição do núcleo.

    • Substitua resource-definition-version-arn pelo LatestVersionArn que você copiou para a definição de recurso.

    • Substitua connector-definition-version-arn pelo LatestVersionArn que você copiou para a definição do conector.

    • Substitua function-definition-version-arn pelo LatestVersionArn que você copiou para a definição de função.

    • Substitua subscription-definition-version-arn pelo LatestVersionArn que você copiou para a definição de assinatura.

    aws greengrass create-group-version \ --group-id group-id \ --core-definition-version-arn core-definition-version-arn \ --resource-definition-version-arn resource-definition-version-arn \ --connector-definition-version-arn connector-definition-version-arn \ --function-definition-version-arn function-definition-version-arn \ --subscription-definition-version-arn subscription-definition-version-arn
  4. Copie o valor de Version da saída. Este é o ID da versão do grupo. Você usa esse valor para implantar a versão do grupo.

Etapa 9: Criar uma implantação

Implante o grupo no dispositivo do núcleo.

  1. Em um terminal do dispositivo de núcleo, certifique-se de que o daemon do AWS IoT Greengrass está em execução.

    1. Para verificar se o daemon está em execução:

      ps aux | grep -E 'greengrass.*daemon'

      Se a saída contém uma entrada root para /greengrass/ggc/packages/1.11.6/bin/daemon, o daemon está em execução.

    2. Para iniciar o daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Crie um implantação do .

    • Substitua group-id pelo Id que você copiou para o grupo.

    • Substitua group-version-id pelo Version copiado para a nova versão do grupo.

    aws greengrass create-deployment \ --deployment-type NewDeployment \ --group-id group-id \ --group-version-id group-version-id
  3. Copie a DeploymentId da saída.

  4. Obtenha o status de implantação.

    • Substitua group-id pelo Id que você copiou para o grupo.

    • Substitua deployment-id pelo DeploymentId que você copiou para a implantação.

    aws greengrass get-deployment-status \ --group-id group-id \ --deployment-id deployment-id

    Se o status for Success, a implantação foi bem-sucedida. Para obter ajuda sobre a solução de problemas, consulte Solução de problemas de AWS IoT Greengrass.

Testar a solução

  1. Na página inicial do console do AWS IoT, selecione Testar.

  2. Em Inscrever-se no tópico, use os seguintes valores e, em seguida, selecione Inscreva-se. O conector de notificações do Twilio publica informações de status nesse tópico.

    Propriedade

    Valor

    Tópico de assinatura

    twilio/mensagem/status

    Exibição da carga útil do MQTT

    Exibir cargas úteis como strings

  3. Para Publicar no tópico, use os valores a seguir e, em seguida selecione Publicar para invocar a função.

    Propriedade

    Valor

    Tópico

    temperatura/entrada

    Message

    Substitua nome do destinatário com nome e número de telefone do destinatário pelo número de telefone do destinatário da mensagem de texto. Exemplo: +12345000000

    { "to_name": "recipient-name", "to_number": "recipient-phone-number", "temperature": 31 }

    Se você estiver usando uma conta de teste, você deve adicionar números de telefone que não são de destinatários do Twilio a uma lista de números de telefone verificados. Para obter mais informações, consulte Verificar seu número de telefone pessoal.

    Se for bem-sucedido, o destinatário receberá a mensagem de texto e o console exibirá o success status dos dados de saída.

    Agora, altere a temperature na mensagem de entrada para 29 e publique. Como é inferior a 30, a função TempMonitor não dispara o gatilho da mensagem do Twilio.

Consulte também