Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento manual de recursos - AWS IoT Greengrass

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Se ejecuta AWS IoT Greengrass en un contenedor Docker con aprovisionamiento manual de recursos

En este tutorial, se muestra cómo instalar y ejecutar el software AWS IoT Greengrass principal en un contenedor Docker con recursos aprovisionados manualmente. AWS

Requisitos previos

Necesitará lo siguiente para completar este tutorial:

  • Una Cuenta de AWS. Si no dispone de una, consulte Configure un Cuenta de AWS.

  • Una imagen de AWS IoT Greengrass Docker. Puede crear una imagen a partir del AWS IoT Greengrass Dockerfile.

  • El ordenador host en el que se ejecuta el contenedor de Docker debe cumplir los siguientes requisitos:

    • Un sistema operativo basado en Linux con conexión a Internet.

    • Docker Engine versión 18.09 o posterior.

    • (Opcional) Docker Compose versión 1.22 o posterior. Docker Compose solo es necesario si quieres usar la CLI de Docker Compose para ejecutar tus imágenes de Docker.

Recupera los puntos finales AWS IoT

Obtenga sus AWS IoT Cuenta de AWS puntos finales y guárdelos para usarlos más tarde. El dispositivo utiliza estos puntos finales para conectarse a ellos. AWS IoT Haga lo siguiente:

  1. Obtenga el punto final AWS IoT de datos para su. Cuenta de AWS

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

    La respuesta es similar a la del siguiente ejemplo, si la solicitud se realiza correctamente.

    { "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com" }
  2. Obtenga el punto final de AWS IoT credenciales para su. Cuenta de AWS

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

    La respuesta es similar a la del siguiente ejemplo, si la solicitud se realiza correctamente.

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

Creación de un objeto de AWS IoT

AWS IoTlas cosas representan dispositivos y entidades lógicas a AWS IoT los que se conectan. Los dispositivos principales de Greengrass son AWS IoT cosas. Cuando registras un dispositivo como una AWS IoT cosa, ese dispositivo puede usar un certificado digital para autenticarse. AWS

En esta sección, crearás AWS IoT algo que represente tu dispositivo.

Crear un objeto de AWS IoT
  1. Crea cualquier AWS IoT cosa para tu dispositivo. En tu ordenador de desarrollo, ejecuta el siguiente comando.

    • MyGreengrassCoreSustitúyalo por el nombre de la cosa que se va a utilizar. Este nombre también es el nombre de su dispositivo principal de Greengrass.

      nota

      El nombre del objeto no puede contener dos puntos (:).

    aws iot create-thing --thing-name MyGreengrassCore

    Si la solicitud se realiza correctamente, la respuesta es similar a la del siguiente ejemplo.

    { "thingName": "MyGreengrassCore", "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42" }
  2. (Opcional) Añada la AWS IoT cosa a un grupo de cosas nuevo o existente. Los grupos de cosas se utilizan para gestionar las flotas de dispositivos principales de Greengrass. Al implementar componentes de software en sus dispositivos, puede dirigirlos a dispositivos individuales o a grupos de dispositivos. Puede añadir un dispositivo a un grupo de cosas con una implementación activa de Greengrass para implementar los componentes de software de ese grupo de cosas en el dispositivo. Haga lo siguiente:

    1. (Opcional) Cree un grupo de AWS IoT cosas.

      • MyGreengrassCoreGroupSustitúyalo por el nombre del grupo de cosas que desee crear.

        nota

        El nombre del grupo de cosas no puede contener dos puntos (:).

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

      La respuesta es similar a la del siguiente ejemplo, si la solicitud se realiza correctamente.

      { "thingGroupName": "MyGreengrassCoreGroup", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup", "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa" }
    2. Añada la AWS IoT cosa a un grupo de cosas.

      • MyGreengrassCoreSustitúyala por el nombre de la AWS IoT cosa.

      • MyGreengrassCoreGroupSustitúyalo por el nombre del grupo de cosas.

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

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

Crea el certificado de la cosa

Cuando registras un dispositivo como una AWS IoT cosa, ese dispositivo puede usar un certificado digital para autenticarseAWS. Este certificado permite que el dispositivo se comunique con AWS IoT yAWS IoT Greengrass.

En esta sección, puede crear y descargar certificados que el dispositivo puede usar para conectarseAWS.

Para crear la cosa: certificado
  1. Crea una carpeta donde descargues los certificados de la AWS IoT cosa.

    mkdir greengrass-v2-certs
  2. Crea y descarga los certificados de la AWS IoT cosa.

    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

    La respuesta es similar a la del siguiente ejemplo, si la solicitud se realiza correctamente.

    { "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-----\ " } }

    Guarde el nombre de recurso de Amazon (ARN) del certificado para configurarlo más adelante.

Configure el certificado del objeto

Adjunte el certificado del AWS IoT objeto al elemento que creó anteriormente y añada una AWS IoT política al certificado para definir los AWS IoT permisos del dispositivo principal.

Para configurar el certificado de la cosa
  1. Adjunte el certificado a la AWS IoT cosa.

    • Reemplácelo MyGreengrassCorecon el nombre de su AWS IoT cosa.

    • Sustituya el certificado Amazon Resource Name (ARN) por el ARN del certificado que creó en el paso anterior.

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

    El comando no tiene ningún resultado si la solicitud se realiza correctamente.

  2. Cree y adjunte una AWS IoT política que defina los AWS IoT permisos de su dispositivo principal de Greengrass. La siguiente política permite el acceso a todos los temas de MQTT y a las operaciones de Greengrass, de modo que su dispositivo funcione con aplicaciones personalizadas y con cambios futuros que requieran nuevas operaciones de Greengrass. Puede restringir esta política en función de su caso de uso. Para obtener más información, consulte AWS IoTPolítica mínima para los dispositivos AWS IoT Greengrass V2 principales.

    Si ya ha configurado un dispositivo principal de Greengrass, puede adjuntar su AWS IoT política en lugar de crear una nueva.

    Haga lo siguiente:

    1. Cree un archivo que contenga el documento AWS IoT de política que requieren los dispositivos principales de Greengrass.

      Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crear el archivo.

      nano greengrass-v2-iot-policy.json

      Copia el siguiente JSON en el archivo.

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

      • Sustituya GreengrassV2IoT por el nombre ThingPolicy de la política que se va a crear.

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

      Si la solicitud se realiza correctamente, la respuesta es similar a la del siguiente ejemplo.

      { "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. Adjunta la AWS IoT política al certificado de la AWS IoT cosa.

      • Sustituya GreengrassV2IoT por el nombre ThingPolicy de la política que desee adjuntar.

      • Sustituya el ARN de destino por el ARN del certificado de su dispositivo. AWS IoT

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

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

Crea un rol de intercambio de fichas

Los dispositivos principales de Greengrass utilizan una función de servicio de IAM, denominada función de intercambio de fichas, para autorizar las llamadas a los servicios. AWS El dispositivo utiliza el proveedor de AWS IoT credenciales para obtener AWS credenciales temporales para esta función, lo que permite al dispositivo interactuar con Amazon LogsAWS IoT, enviar registros a Amazon CloudWatch Logs y descargar artefactos de componentes personalizados de Amazon S3. Para obtener más información, consulte Autorizar a los dispositivos principales a interactuar con AWS los servicios.

Se utiliza un alias de AWS IoT rol para configurar el rol de intercambio de fichas para los dispositivos principales de Greengrass. Los alias de rol le permiten cambiar el rol de intercambio de fichas de un dispositivo, pero mantener la configuración del dispositivo igual. Para obtener más información, consulte Autorizar llamadas directas a AWS los servicios en la Guía para AWS IoT Coredesarrolladores.

En esta sección, se crea una función de IAM de intercambio de fichas y un alias de AWS IoT función que apunte a esa función. Si ya ha configurado un dispositivo principal de Greengrass, puede utilizar su función de intercambio de fichas y su alias de función en lugar de crear otros nuevos. A continuación, configura el dispositivo para que utilice ese rol y ese alias. AWS IoT

Para crear un rol de IAM para el intercambio de fichas
  1. Cree una función de IAM que su dispositivo pueda utilizar como función de intercambio de fichas. Haga lo siguiente:

    1. Cree un archivo que contenga el documento de política de confianza que requiere la función de intercambio de tokens.

      Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crear el archivo.

      nano device-role-trust-policy.json

      Copia el siguiente JSON en el archivo.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "credentials.iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Cree la función de intercambio de fichas con el documento de política de confianza.

      • Sustituya GreengrassV2 TokenExchangeRole por el nombre del rol de IAM que desee crear.

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

      Si la solicitud se realiza correctamente, la respuesta es similar a la del siguiente ejemplo.

      { "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. Cree un archivo que contenga el documento de política de acceso que requiere la función de intercambio de tokens.

      Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crear el archivo.

      nano device-role-access-policy.json

      Copia el siguiente JSON en el archivo.

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

      Esta política de acceso no permite el acceso a los artefactos de los componentes de los depósitos de S3. Para implementar componentes personalizados que definan artefactos en Amazon S3, debe añadir permisos al rol para permitir que su dispositivo principal recupere artefactos de componentes. Para obtener más información, consulte Permita el acceso a los depósitos de S3 para los artefactos de los componentes.

      Si aún no tiene un depósito de S3 para los artefactos de los componentes, puede añadir estos permisos más adelante, después de crear un depósito.

    4. Cree la política de IAM a partir del documento de política.

      • Sustituya GreengrassV2 TokenExchangeRoleAccess por el nombre de la política de IAM que desee crear.

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

      Si la solicitud se realiza correctamente, la respuesta es similar a la del siguiente ejemplo.

      { "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. Adjunte la política de IAM a la función de intercambio de fichas.

      • Sustituya GreengrassV2 TokenExchangeRole por el nombre de la función de IAM.

      • Sustituya el ARN de la política por el ARN de la política de IAM que creó en el paso anterior.

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

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

  2. Cree un alias de AWS IoT rol que apunte al rol de intercambio de fichas.

    • GreengrassCoreTokenExchangeRoleAliasSustitúyalo por el nombre del alias del rol que se va a crear.

    • Sustituya el ARN del rol por el ARN del rol de IAM que creó en el paso anterior.

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

    Si la solicitud se realiza correctamente, la respuesta es similar a la del ejemplo siguiente.

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

    Para crear un alias de rol, debe tener permiso para transferir el rol de IAM de intercambio de fichas. AWS IoT Si recibe un mensaje de error al intentar crear un alias de rol, compruebe que su AWS usuario tiene este permiso. Para obtener más información, consulte Conceder permisos a un usuario para transferir un rol a un AWS servicio en la Guía del AWS Identity and Access Management usuario.

  3. Cree y adjunte una AWS IoT política que permita a su dispositivo principal de Greengrass utilizar el alias del rol para asumir el rol de intercambio de fichas. Si ya ha configurado un dispositivo principal de Greengrass, puede adjuntar su AWS IoT política de alias de rol en lugar de crear una nueva. Haga lo siguiente:

    1. (Opcional) Cree un archivo que contenga el documento AWS IoT de política que requiere el alias del rol.

      Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano para crear el archivo.

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

      Copia el siguiente JSON en el archivo.

      • Sustituya el ARN del recurso por el ARN del alias de su rol.

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

      • GreengrassCoreTokenExchangeRoleAliasPolicySustitúyala por el nombre de la AWS IoT política que se va a crear.

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

      Si la solicitud se realiza correctamente, la respuesta es similar a la del ejemplo siguiente.

      { "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. Adjunta la AWS IoT política al certificado de la AWS IoT cosa.

      • GreengrassCoreTokenExchangeRoleAliasPolicySustitúyala por el nombre de la AWS IoT política de alias del rol.

      • Sustituya el ARN de destino por el ARN del certificado de su dispositivo. AWS IoT

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

      El comando no tiene ningún resultado si la solicitud se realiza correctamente.

Descargue los certificados al dispositivo

Anteriormente, descargaste el certificado de tu dispositivo en tu ordenador de desarrollo. En esta sección, descargas el certificado de la autoridad de certificación (CA) raíz de Amazon. Luego, si planea ejecutar el software AWS IoT Greengrass principal de Docker en un equipo diferente al de su equipo de desarrollo, debe copiar los certificados en ese equipo host. El software AWS IoT Greengrass Core usa estos certificados para conectarse al servicio AWS IoT en la nube.

Para descargar los certificados al dispositivo
  1. En tu ordenador de desarrollo, descarga el certificado de la autoridad de certificación raíz (CA) de Amazon. AWS IoTlos certificados están asociados al certificado de CA raíz de Amazon de forma predeterminada.

    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. Si planea ejecutar el software AWS IoT Greengrass principal de Docker en un dispositivo diferente al de su ordenador de desarrollo, copie los certificados en el ordenador host. Si SSH y SCP están habilitados en la computadora de desarrollo y la computadora host, puede usar el scp comando en su computadora de desarrollo para transferir los certificados. device-ip-addressSustitúyala por la dirección IP de la computadora host.

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

Cree un archivo de configuración

  1. En el ordenador host, cree una carpeta en la que coloque el archivo de configuración.

    mkdir ./greengrass-v2-config
  2. Utilice un editor de texto para crear un archivo de configuración con config.yaml el nombre de la ./greengrass-v2-config carpeta.

    Por ejemplo, puede ejecutar el siguiente comando para usar GNU nano para crear elconfig.yaml.

    nano ./greengrass-v2-config/config.yaml
  3. Copia el siguiente contenido de YAML en el archivo. Este archivo de configuración parcial especifica los parámetros del sistema y los parámetros del núcleo de 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"

    A continuación, sustituya los valores siguientes:

    • /tmp/certs. El directorio del contenedor de Docker en el que se montan los certificados descargados al iniciar el contenedor.

    • /greengrass/v2. La carpeta raíz de Greengrass que desea usar para la instalación. Utilice la variable de GGC_ROOT entorno para establecer este valor.

    • MyGreengrassCore. Es el nombre del objeto de AWS IoT.

    • versión núcleo. La versión del software AWS IoT Greengrass principal que se va a instalar. Este valor debe coincidir con la versión de la imagen de Docker o del Dockerfile que descargó. Si has descargado la imagen de Docker de Greengrass con la latest etiqueta, úsala docker inspect image-id para ver la versión de la imagen.

    • region. El Región de AWS lugar donde creó sus recursos. AWS IoT También debe especificar el mismo valor para la variable de AWS_REGION entorno en el archivo de entorno.

    • GreengrassCoreTokenExchangeRoleAlias. El alias del rol de intercambio de fichas.

    • device-data-prefix. El prefijo del punto final AWS IoT de datos.

    • device-credentials-prefix. El prefijo del punto final de tus AWS IoT credenciales.

Cree un archivo de entorno

Este tutorial utiliza un archivo de entorno para configurar las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass Core dentro del contenedor de Docker. También puede usar el --env argumento -e o en su docker run comando para establecer las variables de entorno en el contenedor de Docker o puede establecer las variables en un environment bloque del docker-compose.yml archivo.

  1. Usa un editor de texto para crear un archivo de entorno llamado.env.

    Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano y crear el directorio actual.env.

    nano .env
  2. Copie el siguiente contenido en el archivo.

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

    A continuación, sustituya los valores siguientes.

    • /greengrass/v2. La ruta a la carpeta raíz que se utilizará para instalar el software AWS IoT Greengrass principal.

    • region. El Región de AWS lugar donde creaste tus AWS IoT recursos. Debe especificar el mismo valor para el parámetro awsRegion de configuración en el archivo de configuración.

    • /tmp/config/. La carpeta en la que se monta el archivo de configuración al iniciar el contenedor de Docker.

    nota

    Puede configurar la variable de DEPLOY_DEV_TOOLS entorno true para implementar el componente CLI de Greengrass, que le permite desarrollar componentes personalizados dentro del contenedor de Docker. Le recomendamos que utilice este componente únicamente en entornos de desarrollo, no en entornos de producción. Este componente proporciona acceso a información y operaciones que normalmente no necesitará en un entorno de producción. Siga el principio de privilegios mínimos implementando este componente solo en los dispositivos principales donde lo necesite.

Ejecute el software AWS IoT Greengrass principal en un contenedor

Este tutorial le muestra cómo iniciar la imagen de Docker que creó en un contenedor de Docker. Puede usar la CLI de Docker o la CLI de Docker Compose para ejecutar la imagen del software AWS IoT Greengrass principal en un contenedor de Docker.

Docker
  • Este tutorial le muestra cómo iniciar la imagen de Docker que creó en un contenedor de 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

    Este comando de ejemplo usa los siguientes argumentos para docker run:

    • --rm. Limpia el contenedor al salir.

    • --init. Utiliza un proceso de inicio en el contenedor.

      nota

      El --init argumento es necesario para cerrar el software AWS IoT Greengrass Core al detener el contenedor de Docker.

    • -it. (Opcional) Ejecuta el contenedor de Docker en primer plano como un proceso interactivo. En su lugar, puede sustituirlo por el -d argumento para ejecutar el contenedor Docker en modo separado. Para obtener más información, consulte Separado frente a primer plano en la documentación de Docker.

    • --name. Ejecuta un contenedor llamado aws-iot-greengrass

    • -v. Monta un volumen en el contenedor de Docker para que el archivo de configuración y los archivos de certificado estén disponibles para su AWS IoT Greengrass ejecución dentro del contenedor.

    • --env-file. (Opcional) Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. Este argumento solo es necesario si ha creado un archivo de entorno para establecer variables de entorno. Si no creó un archivo de entorno, puede usar --env argumentos para establecer las variables de entorno directamente en el comando run de Docker.

    • -p. (Opcional) Publica el puerto contenedor 8883 en la máquina host. Este argumento es obligatorio si desea conectarse y comunicarse a través de MQTT, ya que AWS IoT Greengrass utiliza el puerto 8883 para el tráfico de MQTT. Para abrir otros puertos, utilice argumentos adicionales. -p

    nota

    Para ejecutar su contenedor de Docker con mayor seguridad, puede usar los --cap-add argumentos --cap-drop y para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulta los privilegios de tiempo de ejecución y las capacidades de Linux en la documentación de Docker.

Docker Compose
  1. Usa un editor de texto para crear un archivo de Docker Compose llamado. docker-compose.yml

    Por ejemplo, en un sistema basado en Linux, puede ejecutar el siguiente comando para usar GNU nano y crear el docker-compose.yml directorio actual.

    nano docker-compose.yml
    nota

    También puedes descargar y usar la última versión del archivo Compose proporcionado desdeAWS. GitHub

  2. Agrega el siguiente contenido al archivo Compose. El archivo debe ser similar al siguiente ejemplo. Sustituye:version your-container-name por el nombre de la imagen de 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"

    Los siguientes parámetros de este archivo Compose de ejemplo son opcionales:

    • ports—Publica los 8883 puertos del contenedor en la máquina host. Este parámetro es obligatorio si desea conectarse y comunicarse a través de MQTT, ya que AWS IoT Greengrass utiliza el puerto 8883 para el tráfico de MQTT.

    • env_file—Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass principal dentro del contenedor de Docker. Este parámetro solo es necesario si ha creado un archivo de entorno para configurar las variables de entorno. Si no has creado un archivo de entorno, puedes usar el parámetro de entorno para configurar las variables directamente en tu archivo de Compose.

    nota

    Para ejecutar tu contenedor de Docker con mayor seguridad, puedes usar cap_drop y cap_add en tu archivo de Compose para habilitar de forma selectiva las capacidades de Linux para tu contenedor. Para obtener más información, consulta los privilegios de tiempo de ejecución y las capacidades de Linux en la documentación de Docker.

  3. Ejecute el siguiente comando para iniciar el contenedor.

    docker-compose -f docker-compose.yml up

Siguientes pasos

AWS IoT GreengrassEl software principal se ejecuta ahora en un contenedor Docker. Ejecute el siguiente comando para recuperar el ID del contenedor que se está ejecutando actualmente.

docker ps

A continuación, puede ejecutar el siguiente comando para acceder al contenedor y explorar el software AWS IoT Greengrass principal que se ejecuta dentro del contenedor.

docker exec -it container-id /bin/bash

Para obtener información sobre cómo crear un componente simple, consulte Paso 4: Desarrolle y pruebe un componente en su dispositivo en Tutorial: Introducción a AWS IoT Greengrass V2

nota

Cuando se ejecutan comandos dentro del contenedor de Docker, esos comandos no se registran en los registros de Docker. docker exec Para registrar tus comandos en los registros de Docker, adjunta un shell interactivo al contenedor de Docker. Para obtener más información, consulte Adjunte un shell interactivo al contenedor de Docker.

El archivo de registro AWS IoT Greengrass principal se llama greengrass.log y se encuentra en. /greengrass/v2/logs Los archivos de registro de los componentes también se encuentran en el mismo directorio. Para copiar los registros de Greengrass a un directorio temporal del host, ejecute el siguiente comando:

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

Si desea conservar los registros después de que un contenedor se cierre o se haya eliminado, le recomendamos que monte únicamente el /greengrass/v2/logs directorio en el directorio de registros temporales del host, en lugar de montar todo el directorio de Greengrass. Para obtener más información, consulte Conserva los registros de Greengrass fuera del contenedor de Docker.

Para detener un contenedor de AWS IoT Greengrass Docker en ejecución, ejecute o. docker stop docker-compose -f docker-compose.yml stop Esta acción se envía SIGTERM al proceso de Greengrass y cierra todos los procesos asociados que se iniciaron en el contenedor. El contenedor Docker se inicializa con el docker-init ejecutable como PID de proceso 1, lo que ayuda a eliminar cualquier proceso zombi sobrante. Para obtener más información, consulte Especificar un proceso de inicio en la documentación de Docker.

Para obtener información sobre cómo solucionar problemas relacionados con la ejecución AWS IoT Greengrass en un contenedor Docker, consulte. Solución de problemas de AWS IoT Greengrass en un contenedor Docker