Execute o AWS IoT Greengrass em um contêiner do Docker com provisionamento manual de recursos - AWS IoT Greengrass

Execute o AWS IoT Greengrass em um contêiner do Docker com provisionamento manual de recursos

Este tutorial mostra como instalar e executar o software AWS IoT Greengrass Core no contêiner do Docker com recursos da AWS provisionados manualmente.

Pré-requisitos

Para concluir este tutorial, você precisará do seguinte:

  • Uma Conta da AWS. Se você não tiver uma, consulte Configurar uma Conta da AWS.

  • Uma imagem do Docker do AWS IoT Greengrass. É possível criar uma imagem do Dockerfile do AWS IoT Greengrass.

  • O computador host em que você executa o contêiner do Docker deve atender aos seguintes requisitos:

    • Sistema operacional baseado em Linux com conexão à Internet.

    • Docker Engine, versão 18.09 ou posterior.

    • (Opcional) Docker Compose versão 1.22 ou posterior. O Docker Compose é necessário somente se você quiser usar a CLI do Docker Compose para executar suas imagens do Docker.

Recuperar endpoints da AWS IoT

Obtenha os endpoints da AWS IoT para sua Conta da AWS e salve-os para usar mais tarde. Seu dispositivo usa esses endpoints para se conectar à AWS IoT. Faça o seguinte:

  1. Obtenha o endpoint de dados do AWS IoT para sua Conta da AWS.

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

    { "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com" }
  2. Obtenha o endpoint de credenciais do AWS IoT para sua Conta da AWS.

    aws iot describe-endpoint --endpoint-type iot:CredentialProvider

    Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

    { "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com" }

Crie uma coisa do AWS IoT

Os itens da AWS IoT representam dispositivos e entidades lógicas que se conectam à AWS IoT. Os dispositivos principais do Greengrass são itens da AWS IoT. Quando você registra um dispositivo como um objeto da AWS IoT, ele pode usar um certificado digital para autenticação com a AWS.

Nesta seção, você cria um item da AWS IoT que representa seu dispositivo.

Como criar uma coisa AWS IoT
  1. Crie uma coisa da AWS IoT para o dispositivo. Execute o comando a seguir no computador de desenvolvimento.

    • Substitua MyGreengrassCore pelo nome da coisa a ser usada. Esse nome também é o nome do dispositivo principal do Greengrass.

      nota

      O nome do objeto não pode conter caracteres de dois pontos (:).

    aws iot create-thing --thing-name MyGreengrassCore

    Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

    { "thingName": "MyGreengrassCore", "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42" }
  2. (Opcional) Adicione o objeto da AWS IoT a um grupo de objetos novo ou existente. Use grupos de objetos para gerenciar frotas de dispositivos principais do Greengrass. Ao implantar componentes de software nos dispositivos, é possível segmentar dispositivos individuais ou grupos de dispositivos. É possível adicionar um dispositivo a um grupo de objetos com uma implantação ativa do Greengrass para implantar os componentes de software desse grupo de objetos no dispositivo. Faça o seguinte:

    1. (Opcional) Crie um grupo de coisas da AWS IoT.

      • Substitua MyGreengrassCoreGroup pelo nome do grupo de coisas a ser criado.

        nota

        O nome do grupo de objetos não pode conter caracteres de dois pontos (:).

      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      { "thingGroupName": "MyGreengrassCoreGroup", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup", "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa" }
    2. Adicione a coisa da AWS IoT a um grupo de coisas.

      • Substitua MyGreengrassCore pelo nome da coisa da AWS IoT.

      • Substitua MyGreengrassCoreGroup pelo nome do grupo de coisas.

      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

Criar o certificado da coisa

Quando você registra um dispositivo como um objeto da AWS IoT, ele pode usar um certificado digital para autenticação com a AWS. Esse certificado permite que o dispositivo se comunique com a AWS IoT e o AWS IoT Greengrass.

Nesta seção, você cria e baixa certificados que o dispositivo pode usar para se conectar com a AWS.

Para criar o certificado do objeto
  1. Crie uma pasta na qual você baixa os certificados para o objeto da AWS IoT.

    mkdir greengrass-v2-certs
  2. Crie e baixe os certificados para o objeto da AWS IoT.

    aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key

    Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

    { "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificatePem": "-----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw 3rrszlaEXAMPLE= -----END CERTIFICATE-----", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\ MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\ MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\ 59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\ hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\ FQIDAQAB\ -----END PUBLIC KEY-----\ ", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\ key omitted for security reasons\ -----END RSA PRIVATE KEY-----\ " } }

    Salve o nome do recurso da Amazon (ARN) do certificado para usar na configuração do certificado posteriormente.

Configurar o certificado do objeto

Anexe o certificado do objeto ao objeto da AWS IoT que você criou anteriormente e adicione uma política de AWS IoT ao certificado para definir as permissões da AWS IoT para o dispositivo principal.

Para configurar o certificado do objeto
  1. Anexe o certificado ao objeto da AWS IoT.

    • Substitua MyGreengrassCore pelo nome da coisa da AWS IoT.

    • Substitua o nome do recurso da Amazon (ARN) do certificado pelo ARN do certificado que você criou na etapa anterior.

    aws iot attach-thing-principal --thing-name MyGreengrassCore --principal arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

    O comando não terá nenhuma saída se a solicitação for bem-sucedida.

  2. Crie e anexe uma política de AWS IoT que defina as permissões da AWS IoT para seu dispositivo principal do Greengrass. A política a seguir permite acesso a todos os tópicos MQTT e operações do Greengrass, para que seu dispositivo funcione com aplicativos personalizados e futuras alterações que exijam novas operações do Greengrass. É possível restringir essa política com base em seu caso de uso. Para ter mais informações, consulte Política mínima de AWS IoT para dispositivos principais do AWS IoT Greengrass V2.

    Se você já configurou um dispositivo principal do Greengrass antes, poderá anexar a política AWS IoT em vez de criar uma nova.

    Faça o seguinte:

    1. Crie um arquivo que contenha o documento de política da AWS IoT exigido pelos dispositivos principais do Greengrass.

      Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o arquivo.

      nano greengrass-v2-iot-policy.json

      Copie o JSON a seguir no arquivo.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect", "greengrass:*" ], "Resource": [ "*" ] } ] }
    2. Crie uma política de AWS IoT a partir do documento de política.

      • Substitua GreengrassV2IoTThingPolicy pelo nome da política a ser criada.

      aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{ \\"Version\\": \\"2012-10-17\\", \\"Statement\\": [ { \\"Effect\\": \\"Allow\\", \\"Action\\": [ \\"iot:Publish\\", \\"iot:Subscribe\\", \\"iot:Receive\\", \\"iot:Connect\\", \\"greengrass:*\\" ], \\"Resource\\": [ \\"*\\" ] } ] }", "policyVersionId": "1" }
    3. Anexe a política de AWS IoT ao certificado do objeto da AWS IoT.

      • Substitua GreengrassV2IoTThingPolicy pelo nome da política a ser anexada.

      • Substitua o ARN de destino pelo ARN do certificado do objeto da AWS IoT.

      aws iot attach-policy --policy-name GreengrassV2IoTThingPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

Criar um perfil de troca de token

Os dispositivos principais do Greengrass usam um perfil de serviço do IAM, chamado perfil de troca de tokens, para autorizar chamadas para os serviços da AWS. O dispositivo usa o provedor de credenciais da AWS IoT para obter credenciais temporárias da AWS para esse perfil, o que permite que o dispositivo interaja com a AWS IoT, envie registros para o Amazon CloudWatch Logs e baixe artefatos de componentes personalizados do Amazon S3. Para ter mais informações, consulte Autorize os dispositivos principais a interagir com os serviços da AWS.

Use um alias de perfil da AWS IoT para configurar o perfil de troca de tokens para os dispositivos principais do Greengrass. Os aliases de perfil permitem que você altere o perfil de troca de tokens de um dispositivo, mas mantenha a mesma configuração do dispositivo. Para mais informações, consulte Autorizar de chamadas diretas para serviços da AWS no Guia do desenvolvedor do AWS IoT Core.

Nesta seção, você cria um perfil do IAM de troca de tokens e um alias de perfil da AWS IoT que aponta para o perfil. Se você já configurou um dispositivo principal do Greengrass, pode usar o perfil de troca de tokens e o alias de perfil em vez de criar novos. Em seguida, você configura o objeto da AWS IoT do dispositivo para usar esse perfil e alias.

Para criar um perfil do IAM de troca de token
  1. Crie um perfil do IAM que seu dispositivo possa usar como um perfil de troca de tokens. Faça o seguinte:

    1. Crie um arquivo que contenha o documento de política de confiança que o perfil de troca de token exige.

      Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o arquivo.

      nano device-role-trust-policy.json

      Copie o JSON a seguir no arquivo.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Crie o perfil de troca de token com o documento de política de confiança.

      • Substitua GreengrassV2TokenExchangeRole pelo nome do perfil do IAM a ser criado.

      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      { "Role": { "Path": "/", "RoleName": "GreengrassV2TokenExchangeRole", "RoleId": "AROAZ2YMUHYHK5OKM77FB", "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole", "CreateDate": "2021-02-06T00:13:29+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } }
    3. Crie um arquivo que contenha o documento de política de acesso exigido pelo perfil de troca de tokens.

      Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o arquivo.

      nano device-role-access-policy.json

      Copie o JSON a seguir no arquivo.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogStreams", "s3:GetBucketLocation" ], "Resource": "*" } ] }
      nota

      Essa política de acesso não permite acesso a artefatos de componentes nos buckets do S3. Para implantar componentes personalizados que definem artefatos no Amazon S3, é preciso adicionar permissões ao perfil para permitir que seu dispositivo principal recupere artefatos de componentes. Para ter mais informações, consulte Permitir acesso aos buckets do S3 para artefatos de componentes.

      Se você ainda não tem um bucket do S3 para artefatos de componentes, é possivel adicionar essas permissões depois de criar um bucket.

    4. Crie uma política do IAM a partir do documento de política.

      • Substitua GreengrassV2TokenExchangeRole pelo nome da política do IAM a ser criada.

      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      { "Policy": { "PolicyName": "GreengrassV2TokenExchangeRoleAccess", "PolicyId": "ANPAZ2YMUHYHACI7C5Z66", "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess", "Path": "/", "DefaultVersionId": "v1", "AttachmentCount": 0, "PermissionsBoundaryUsageCount": 0, "IsAttachable": true, "CreateDate": "2021-02-06T00:37:17+00:00", "UpdateDate": "2021-02-06T00:37:17+00:00" } }
    5. Anexe a política do IAM ao perfil de troca do tokens.

      • Substitua GreengrassV2TokenExchangeRole pelo nome do perfil do IAM.

      • Substitua o ARN da política pelo ARN da política do IAM que você criou na etapa anterior.

      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

  2. Crie um alias de perfil da AWS IoT que aponte para o perfil de troca de tokens.

    • Substitua GreengrassCoreTokenExchangeRoleAlias pelo nome do alias de perfil a ser criado.

    • Substitua o ARN do perfil pelo ARN do perfil do IAM que você criou na etapa anterior.

    aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole

    Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

    { "roleAlias": "GreengrassCoreTokenExchangeRoleAlias", "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" }
    nota

    Para criar um alias de perfil, você precisa ter permissão para passar o perfil do IAM de troca de tokens para a AWS IoT. Se você receber uma mensagem de erro ao tentar criar um alias de perfil, verifique se o usuário da AWS tem essa permissão. Para mais informações, consulte Conceder permissões ao usuário para passar um perfil a um serviço da AWS no Guia do usuário do AWS Identity and Access Management.

  3. Crie e anexe uma política de AWS IoT que permita que seu dispositivo principal do Greengrass use o alias de perfil para assumir o perifl de troca de tokens. Se você já configurou um dispositivo principal do Greengrass antes, poderá anexar o alias de perfil da AWS IoT em vez de criar um novo. Faça o seguinte:

    1. (Opcional) Crie um arquivo que contenha o documento de política de AWS IoT exigido pelo alias de perfil.

      Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o arquivo.

      nano greengrass-v2-iot-role-alias-policy.json

      Copie o JSON a seguir no arquivo.

      • Substitua o ARN do recurso pelo ARN do alias da do perfil.

      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:AssumeRoleWithCertificate", "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias" } ] }
    2. Crie uma política de AWS IoT a partir do documento de política.

      • Substitua GreengrassCoreTokenExchangeRoleAliasPolicy pelo nome da política de AWS IoT a ser criada.

      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json

      Se a solicitação for bem-sucedida, a resposta será semelhante ao exemplo a seguir.

      { "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy", "policyDocument": "{ \\"Version\\":\\"2012-10-17\\", \\"Statement\\": [ { \\"Effect\\": \\"Allow\\", \\"Action\\": \\"iot:AssumeRoleWithCertificate\\", \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\" } ] }", "policyVersionId": "1" }
    3. Anexe a política de AWS IoT ao certificado do objeto da AWS IoT.

      • Substitua GreengrassCoreTokenExchangeRoleAliasPolicy pelo nome da política de AWS IoT de alias do perfil.

      • Substitua o ARN de destino pelo ARN do certificado do objeto da AWS IoT.

      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4

      O comando não terá nenhuma saída se a solicitação for bem-sucedida.

Baixar certificados para o dispositivo

Anteriormente, você baixou o certificado do dispositivo para o computador de desenvolvimento. Nesta secção, transfere o certificado da autoridade de certificação (CA) de raiz da Amazon. Em seguida, se você planeja executar o software AWS IoT Greengrass Core no Docker em um computador diferente do seu computador de desenvolvimento, copie os certificados para esse computador host. O software AWS IoT Greengrass Core usa esses certificados para se conectar ao serviço de nuvem do AWS IoT.

Para baixar certificados para o dispositivo
  1. Em seu computador de desenvolvimento, faça download do certificado da autoridade de certificação (CA) raiz da Amazon. Os certificados da AWS IoT são associados ao certificado de CA raiz da Amazon por padrão.

    Linux or Unix
    sudo curl -o ./greengrass-v2-certs/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
    Windows Command Prompt (CMD)
    curl -o .\greengrass-v2-certs\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
    PowerShell
    iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile .\greengrass-v2-certs\AmazonRootCA1.pem
  2. Se você planeja executar o software AWS IoT Greengrass Core no Docker em outro dispositivo, copie os certificados para esse computador host. Se o SSH e o SCP estiverem habilitados no computador de desenvolvimento e no computador host, será possível usar o comando scp no computador de desenvolvimento para transferir os certificados. Substitua o device-ip-address pelo endereço IP do seu computador host.

    scp -r greengrass-v2-certs/ device-ip-address:~

Criar um arquivo de configuração

  1. No computador host, crie uma pasta para colocar seu arquivo de configuração.

    mkdir ./greengrass-v2-config
  2. Utilize um editor de texto para criar um arquivo de configuração com o nome config.yaml na pasta ./greengrass-v2-config.

    Por exemplo, você pode executar o seguinte comando para usar o GNU nano para criar o config.yaml.

    nano ./greengrass-v2-config/config.yaml
  3. Copie o conteúdo YAML a seguir para o arquivo. Esse arquivo de configuração parcial especifica os parâmetros do sistema e os parâmetros do núcleo do Greengrass.

    --- system: certificateFilePath: "/tmp/certs/device.pem.crt" privateKeyPath: "/tmp/certs/private.pem.key" rootCaPath: "/tmp/certs/AmazonRootCA1.pem" rootpath: "/greengrass/v2" thingName: "MyGreengrassCore" services: aws.greengrass.Nucleus: componentType: "NUCLEUS" version: "nucleus-version" configuration: awsRegion: "region" iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias" iotDataEndpoint: "device-data-prefix-ats.iot.region.amazonaws.com" iotCredEndpoint: "device-credentials-prefix.credentials.region.amazonaws.com"

    Em seguida, substitua os seguintes valores:

    • /tmp/certs. O diretório no contêiner do Docker no qual você monta os certificados baixados ao iniciar o contêiner.

    • /greengrass/v2. A pasta raiz do Greengrass que você deseja usar para instalação. Use a variável de ambiente GGC_ROOT para definir esse valor.

    • MyGreengrassCore. O nome da coisa da AWS IoT.

    • nucleus-version. A versão do software do AWS IoT Greengrass Core a ser instalada. Esse valor deve corresponder à versão da imagem do Docker ou do Dockerfile que você baixou. Se você baixou a imagem do Docker do Greengrass com a tag latest, use docker inspect image-id para ver a versão da imagem.

    • region. A Região da AWS onde você criou seus recursos da AWS IoT. Também é necessário especificar o mesmo valor para a variável de ambiente AWS_REGION em seu arquivo de ambiente.

    • GreengrassCoreTokenExchangeRoleAlias. O alias do perfil de troca de tokens.

    • device-data-prefix. O prefixo do seu endpoint de dados da AWS IoT.

    • device-credentials-prefix. O prefixo do seu endpoint de credenciais da AWS IoT.

Criar um arquivo de ambiente

Este tutorial usa um arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner do Docker. Você também pode usar o argumento -e ou --env em seu comando docker run para definir variáveis de ambiente no contêiner do Docker ou definir as variáveis em um bloco environment no arquivo docker-compose.yml.

  1. Use um editor de texto para criar um arquivo de ambiente chamado .env.

    Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o .env no diretório atual.

    nano .env
  2. Copie o conteúdo a seguir para o arquivo.

    GGC_ROOT_PATH=/greengrass/v2 AWS_REGION=region PROVISION=false COMPONENT_DEFAULT_USER=ggc_user:ggc_group INIT_CONFIG=/tmp/config/config.yaml

    Em seguida, substitua os valores a seguir:

    • /greengrass/v2. O caminho para a pasta raiz a ser usada para instalar o software AWS IoT Greengrass Core.

    • region. A Região da AWS onde você criou seus recursos da AWS IoT. Você deve especificar o mesmo valor para o parâmetro de configuração awsRegion em seu arquivo de configuração.

    • /tmp/config/. A pasta em que você monta o arquivo de configuração ao iniciar o contêiner do Docker.

    nota

    Você pode definir a variável de ambiente DEPLOY_DEV_TOOLS para true a fim de implantar o componente CLI do Greengrass, que permite desenvolver componentes personalizados dentro do contêiner do Docker. Recomendamos que você use este componente somente em ambientes de desenvolvimento, não em ambientes de produção. Este componente fornece acesso a informações e operações que você normalmente não precisará em um ambiente de produção. Siga o princípio do privilégio mínimo implantando este componente somente nos dispositivos principais em que você precisar dele.

Executar o software AWS IoT Greengrass Core em um contêiner

Este tutorial mostra como iniciar a imagem do Docker que você criou em um contêiner do Docker. Você pode usar a CLI do Docker ou a CLI do Docker Compose para executar a imagem do software AWS IoT Greengrass Core em um contêiner do Docker.

Docker
  • Este tutorial mostra como iniciar a imagem do Docker que você criou em um contêiner do Docker.

    docker run --rm --init -it --name docker-image \ -v path/to/greengrass-v2-config:/tmp/config/:ro \ -v path/to/greengrass-v2-certs:/tmp/certs:ro \ --env-file .env \ -p 8883 \ your-container-image:version

    Esse exemplo de comando usa os seguintes argumentos para docker run:

    • --rm. Limpa o contêiner quando ele sair.

    • --init. Usa um processo de inicialização no contêiner.

      nota

      O argumento --init é necessário para desligar o software AWS IoT Greengrass Core quando você interrompe o contêiner do Docker.

    • -it. (Opcional) Executa o contêiner do Docker em primeiro plano como um processo interativo. Em vez disso, você pode substituir isso pelo argumento -d para executar o contêiner do Docker no modo desanexado. Para obter mais informações, consulte Detached vs foreground na documentação do Docker.

    • --name. Executa um contêiner chamado aws-iot-greengrass

    • -v. Monta um volume no contêiner do Docker para disponibilizar o arquivo de configuração e os arquivos de certificado para o AWS IoT Greengrass em execução dentro do contêiner.

    • --env-file. (Opcional) Especifica o arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner do Docker. Esse argumento é necessário somente se você criou um arquivo de ambiente para definir variáveis de ambiente. Se você não criou um arquivo de ambiente, pode usar argumentos --env para definir variáveis de ambiente diretamente no comando de execução do Docker.

    • -p. (Opcional) Publica a porta 8883 do contêiner na máquina host. Esse argumento é necessário se você quiser se conectar e se comunicar pelo MQTT porque o AWS IoT Greengrass usa a porta 8883 para tráfego MQTT. Para abrir outras portas, use argumentos -p adicionais.

    nota

    Para executar seu contêiner do Docker com maior segurança, você pode usar os argumentos --cap-drop e --cap-add para habilitar seletivamente os recursos do Linux para seu contêiner. Para obter mais informações, consulte Runtime privilege and Linux capabilities no site de documentação do Docker.

Docker Compose
  1. Use um editor de texto para criar um arquivo Compose do Docker chamado docker-compose.yml.

    Por exemplo, em um sistema baseado em Linux, você pode executar o comando a seguir para usar o GNU nano para criar o docker-compose.yml no diretório atual.

    nano docker-compose.yml
    nota

    Você também pode baixar e usar a versão mais recente do arquivo Compose fornecido pela AWS no GitHub.

  2. Adicione o conteúdo a seguir ao arquivo do Compose. O arquivo deve ser semelhante ao exemplo a seguir. Substitua your-container-name:version pelo nome da sua imagem do Docker.

    version: '3.7' services: greengrass: init: true build: context: . container_name: aws-iot-greengrass image: your-container-name:version volumes: - /path/to/greengrass-v2-config:/tmp/config/:ro - /path/to/greengrass-v2-certs:/tmp/certs:ro env_file: .env ports: - "8883:8883"

    Neste exemplo, os seguintes parâmetros no arquivo do Compose são opcionais:

    • ports: publica a porta 8883 do contêiner na máquina host. Esse parâmetro é necessário se você quiser se conectar e se comunicar pelo MQTT porque o AWS IoT Greengrass usa a porta 8883 para tráfego MQTT.

    • env_file: especifica o arquivo de ambiente para definir as variáveis de ambiente que serão passadas para o instalador do software AWS IoT Greengrass Core dentro do contêiner do Docker. Esse parâmetro é necessário somente se você criou um arquivo de ambiente para definir variáveis de ambiente. Se você não criou um arquivo de ambiente, pode usar o parâmetro environment para definir variáveis de ambiente diretamente em seu arquivo Compose.

    nota

    Para executar seu contêiner do Docker com maior segurança, você pode usar os argumentos cap_drop e cap_add em seu arquivo do Compose para habilitar seletivamente os recursos do Linux para seu contêiner. Para obter mais informações, consulte Runtime privilege and Linux capabilities no site de documentação do Docker.

  3. Execute o seguinte comando para iniciar o contêiner.

    docker-compose -f docker-compose.yml up

Próximas etapas

Agora o software AWS IoT Greengrass Core está em execução em um contêiner do Docker. Execute o comando a seguir para recuperar o ID do contêiner em execução no momento.

docker ps

Em seguida, você pode executar o comando a seguir para acessar o contêiner e explorar o software AWS IoT Greengrass Core executado dentro do contêiner.

docker exec -it container-id /bin/bash

Para obter mais informações sobre a criação de um componente simples, consulte Etapa 4: desenvolver e testar um componente no dispositivo em Tutorial: Conceitos básicos do AWS IoT Greengrass V2.

nota

Quando você usa docker exec para executar comandos dentro do contêiner do Docker, esses comandos não são registrados nos logs do Docker. Para registrar os comandos nos logs do Docker, anexe um shell interativo ao contêiner do Docker. Para ter mais informações, consulte Anexar um shell interativo ao contêiner do Docker.

O arquivo de log do AWS IoT Greengrass Core é chamado greengrass.log e está localizado em /greengrass/v2/logs. Os arquivos de log do componente também estão localizados no mesmo diretório. Para copiar logs do Greengrass para um diretório temporário no host, execute o seguinte comando:

docker cp container-id:/greengrass/v2/logs /tmp/logs

Se você quiser manter os logs após a saída ou remoção de um contêiner, recomendamos que você vincule e monte somente o diretório /greengrass/v2/logs no diretório de logs temporários no host, em vez de montar todo o diretório Greengrass. Para ter mais informações, consulte Manter os logs do Greengrass fora do contêiner do Docker.

Para interromper a execução de um contêiner do Docker do AWS IoT Greengrass, execute docker stop ou docker-compose -f docker-compose.yml stop. Essa ação envia SIGTERM para o processo do Greengrass e encerra todos os processos associados que foram iniciados no contêiner. O contêiner do Docker é inicializado com o docker-init executável como processo PID 1, o que ajuda a eliminar quaisquer processos zumbis restantes. Para obter mais informações, consulte Specify an init process na documentação do Docker.

Para obter informações sobre como solucionar problemas com a execução do AWS IoT Greengrass em um contêiner do Docker, consulte Solução de problemas do AWS IoT Greengrass em um contêiner do Docker.