Ejecución de AWS IoT Greengrass en un contenedor de 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.

Ejecución de AWS IoT Greengrass en un contenedor de Docker con aprovisionamiento manual de recursos

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

Requisitos previos

Necesitará lo siguiente para completar este tutorial:

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

  • Imagen de Docker de AWS IoT Greengrass. Puede crear una imagen desde el Dockerfile AWS IoT Greengrass.

  • El equipo host en el que ejecute el contenedor de Docker debe cumplir los siguientes requisitos:

    • 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 quiere usar la CLI de Docker Compose para ejecutar sus imágenes de Docker.

Recuperación de los puntos de conexión de AWS IoT

Obtenga los puntos de conexión de AWS IoT para Cuenta de AWS y guárdelos para usarlos más adelante. El dispositivo usa estos puntos de conexión para conectarse a AWS IoT. Haga lo siguiente:

  1. Obtenga el punto de conexión de datos de AWS IoT para su Cuenta de AWS.

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

    Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

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

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

    Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

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

Creación de un objeto de AWS IoT

Los objetos AWS IoT representan dispositivos y entidades lógicas que se conectan a AWS IoT. Los dispositivos principales de Greengrass son objetos AWS IoT. Cuando registre un dispositivo como un objeto AWS IoT, ese dispositivo puede usar un certificado digital para autenticarse con AWS.

En esta sección, creará un objeto AWS IoT que represente su dispositivo.

Crear un objeto de AWS IoT
  1. Cree un objeto AWS IoT para su dispositivo. En su equipo de desarrollo, ejecute el siguiente comando.

    • Reemplace MyGreengrassCore por el nombre del objeto que usará. 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 exitosamente, la respuesta se parece al siguiente ejemplo.

    { "thingName": "MyGreengrassCore", "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore", "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42" }
  2. (Opcional) Agregue el objeto AWS IoT a un grupo de objetos nuevo o existente. Los grupos de objetos se usan para administrar 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 agregar un dispositivo a un grupo de objetos con una implementación activa de Greengrass para implementar los componentes de software de ese grupo de objetos en el dispositivo. Haga lo siguiente:

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

      • Reemplace MyGreengrassCoreGroup por el nombre del grupo de objetos que creará.

        nota

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

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

      Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

      { "thingGroupName": "MyGreengrassCoreGroup", "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup", "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa" }
    2. Agregue un objeto AWS IoT a un grupo de objetos.

      • Reemplace MyGreengrassCore por el nombre de su objeto AWS IoT.

      • Reemplace MyGreengrassCoreGroup por el nombre del grupo de objetos.

      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.

Creación del certificado del objeto

Cuando registre un dispositivo como un objeto AWS IoT, ese dispositivo puede usar un certificado digital para autenticarse con AWS. Este certificado permite que el dispositivo se comunique con AWS IoT y AWS IoT Greengrass.

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

Creación del certificado del objeto
  1. Creación de una carpeta en la que descargue los certificados del objeto AWS IoT.

    mkdir greengrass-v2-certs
  2. Cree y descargue los certificados del objeto 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

    Si la solicitud se realiza exitosamente, la respuesta se parece al siguiente ejemplo.

    { "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 usarlo para configurar el certificado más adelante.

Configuración del certificado del objeto

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

Configuración del certificado del objeto
  1. Asocie el certificado al objeto AWS IoT.

    • Reemplace MyGreengrassCore por el nombre de su objeto AWS IoT.

    • Reemplace el nombre de recurso de Amazon (ARN) del certificado 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 política de AWS IoT que defina los permisos de AWS IoT del 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 del caso de uso. Para obtener más información, consulte Política mínima de AWS IoT para dispositivos principales de AWS IoT Greengrass V2.

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

    Haga lo siguiente:

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

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

      nano greengrass-v2-iot-policy.json

      Copie 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 política de AWS IoT a partir del documento de política.

      • Reemplace GreengrassV2IoTThingPolicy por el nombre 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 exitosamente, la respuesta se parece al 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. Asocie la política de AWS IoT al certificado del objeto AWS IoT.

      • Reemplace GreengrassV2IoTThingPolicy por el nombre de la política que se va adjuntar.

      • Reemplace el ARN de destino por el ARN del certificado de su objeto 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.

Creación de un rol de intercambio de token

Los dispositivos principales de Greengrass usan un rol de servicio de IAM, llamado el rol de intercambio de token, para autorizar las llamadas a los servicios de AWS. El dispositivo utiliza el proveedor de credenciales de AWS IoT para obtener credenciales de AWS temporales para este rol, lo que permite al dispositivo interactuar con AWS IoT, enviar registros a los Registros de Amazon CloudWatch y descargar artefactos de componentes personalizados de Amazon S3. Para obtener más información, consulte Autorización de los dispositivos principales para interactuar con los servicios de AWS.

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

En esta sección, se crea un rol de IAM de intercambio de token y un alias de rol AWS IoT que apunte a ese rol. Si ya ha configurado un dispositivo principal de Greengrass, puede usar su rol de intercambio de token y su alias de rol en lugar de crear otros nuevos. A continuación, configure el objeto AWS IoT del dispositivo para que use ese rol y ese alias.

Creación de un rol de IAM de intercambio de token
  1. Creación de un rol de IAM que su dispositivo puede usar como rol de intercambio de token. Haga lo siguiente:

    1. Creación de un archivo que contenga el documento de política de confianza que requiere el rol de intercambio de token.

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

      nano device-role-trust-policy.json

      Copie el siguiente JSON en el archivo.

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

      • Reemplace GreengrassV2TokenExchangeRole 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 exitosamente, la respuesta se parece al 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. Creación de un archivo que contenga el documento de política de acceso que requiere el rol de intercambio de token.

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

      nano device-role-access-policy.json

      Copie 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 componentes en los buckets de S3. Para implementar componentes personalizados que definan artefactos en Amazon S3, debe agregar permisos al rol para permitir que su dispositivo principal recupere artefactos de componentes. Para obtener más información, consulte Cómo permitir el acceso a los buckets de S3 para los artefactos del componente.

      Si aún no tiene un bucket de S3 para los artefactos de los componentes, puede agregar estos permisos más adelante, después de crear un bucket.

    4. Creación de la política de IAM a partir del documento de política.

      • Reemplace GreengrassV2TokenExchangeRoleAccess 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 exitosamente, la respuesta se parece al 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 al rol de intercambio de token.

      • Reemplace GreengrassV2TokenExchangeRole por el nombre del rol de IAM.

      • Reemplace 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. Creación de un alias de rol AWS IoT que apunte al rol de intercambio de token.

    • Reemplace GreengrassCoreTokenExchangeRoleAlias por el nombre del alias del rol que se va a crear.

    • Reemplace 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 exitosamente, la respuesta se parece al siguiente ejemplo.

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

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

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

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

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

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

      Copie el siguiente JSON en el archivo.

      • Reemplace el ARN del recurso por el ARN del alias de rol.

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

      • Reemplace GreengrassCoreTokenExchangeRoleAliasPolicy por el nombre de la política de AWS IoT 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 exitosamente, la respuesta se parece al siguiente ejemplo.

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

      • Reemplace GreengrassCoreTokenExchangeRoleAliasPolicy por el nombre de la política de alias del rol de AWS IoT.

      • Reemplace el ARN de destino por el ARN del certificado de su objeto 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.

Descarga de certificados al dispositivo

Anteriormente, descargó el certificado de su dispositivo en su computadora de desarrollo. En esta sección, puede descargar el certificado de autoridad de certificación (CA) raíz de Amazon. Luego, si planea ejecutar el software AWS IoT Greengrass Core 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 en la nube de AWS IoT.

Descarga de certificados al dispositivo
  1. Descargue el certificado de la autoridad de certificación (CA) de Amazon. Los certificados AWS IoT 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 Core de Docker en un equipo diferente al de su equipo de desarrollo, debe copiar los certificados en ese equipo host. Si SSH y SCP están habilitados en la computadora de desarrollo y en la computadora host, puede utilizar el comando scp de la computadora de desarrollo para transferir el certificado. Sustituya device-ip-address por la dirección IP de su computadora host.

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

Creación de un archivo de configuración

  1. En la computadora 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 denominado config.yaml en la carpeta ./greengrass-v2-config.

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

    nano ./greengrass-v2-config/config.yaml
  3. Copie el siguiente contenido 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"

    Reemplace los siguientes valores:

    • /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 quiera usar para la instalación. Puede establecer este valor mediante la variable de entorno GGC_ROOT.

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

    • nucleus-version. La versión del software AWS IoT Greengrass Core a instalar. Este valor debe coincidir con la versión de la imagen de Docker o del Dockerfile que ha descargado. Si ha descargado la imagen de Docker de Greengrass con la etiqueta latest, use docker inspect image-id para ver la versión de la imagen.

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

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

    • device-data-prefix. El prefijo de su punto de conexión de datos de AWS IoT.

    • device-credentials-prefix. El prefijo del punto de conexión de sus credenciales de AWS IoT.

Creación de un archivo de entorno

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

  1. Utilice un editor de texto para crear un archivo de política llamado .env.

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

    nano .env
  2. Copie el contenido siguiente 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

    Reemplace los siguientes valores.

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

    • region. La Región de AWS donde creó sus recursos de AWS IoT. 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 entorno DEPLOY_DEV_TOOLS a true para implementar el componente CLI de Greengrass, que le permite desarrollar componentes personalizados dentro del contenedor de Docker. Se recomienda usar este componente solo en entornos de desarrollo y no en entornos de producción. Este componente brinda acceso a información y operaciones que, por lo general, no necesitará en un entorno de producción. Siga el principio de privilegio mínimo al implementar este componente solo en los dispositivos principales donde lo necesite.

Ejecución del software AWS IoT Greengrass Core 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 Core 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 ejecutar docker:

    • --rm. Limpia el contenedor al salir.

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

      nota

      El argumento --init 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 argumento -d para ejecutar el contenedor de 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 ejecución de AWS IoT Greengrass 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 Core 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 argumentos --env 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 argumentos --cap-drop y --cap-add para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulte Privilegios en tiempo de ejecución y capacidades de Linux en el sitio web de Docker.

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

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

    nano docker-compose.yml
    nota

    También puede descargar y usar la última versión del archivo Compose proporcionado por AWS desde GitHub.

  2. Agregue el siguiente contenido al archivo Compose. El archivo debe ser similar al siguiente ejemplo. Sustituya your-container-name:version por el nombre de su 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 del archivo Compose de ejemplo son opcionales:

    • ports: (Opcional) Publica el puerto contenedor 8883 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: (Opcional) Especifica el archivo de entorno para establecer las variables de entorno que se pasarán al instalador del software AWS IoT Greengrass Core dentro del contenedor de Docker. Este parámetro solo es necesario si ha creado un archivo de entorno para establecer variables de entorno. Si no creó un archivo de entorno, puede usar el parámetro de entorno para configurar las variables directamente en su archivo Compose.

    nota

    Para ejecutar su contenedor de Docker con mayor seguridad, puede usar cap_drop y cap_add en su archivo Compose para habilitar de forma selectiva las capacidades de Linux para su contenedor. Para obtener más información, consulte Privilegios en tiempo de ejecución y capacidades de Linux en el sitio web de Docker.

  3. Para iniciar el contenedor, ejecute el siguiente comando.

    docker-compose -f docker-compose.yml up

Siguientes pasos

El software AWS IoT Greengrass Core ahora se ejecuta en un contenedor de Docker. Ejecute el siguiente comando para recuperar el ID del contenedor en el contenedor de ejecución actual.

docker ps

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

docker exec -it container-id /bin/bash

Para obtener más información sobre cómo crear un componente simple, consulte Paso 4: Desarrollo y prueba de un componente en su dispositivo en Tutorial: Cómo empezar con AWS IoT Greengrass V2

nota

Cuando utiliza docker exec para ejecutar comandos dentro del contenedor de Docker, esos comandos no se capturan en los registros de Docker. Para registrar los comandos en los registros de Docker, asocie un intérprete de comandos interactivo al contenedor de Docker. Para obtener más información, consulte Asociación de un intérprete de comandos interactivo a un contenedor de Docker.

El archivo de registro de AWS IoT Greengrass Core se llama greengrass.log y se encuentra en /greengrass/v2/logs. Los archivos de registro de componentes también se encuentran en el mismo directorio. Para copiar los registros de Greengrass en 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 directorio /greengrass/v2/logs en el directorio de registros temporales del host, en lugar de montar todo el directorio de Greengrass. Para obtener más información, consulte Conservación de los registros de Greengrass fuera del contenedor de Docker.

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

Para obtener más información acerca de la solución de problemas relacionados con la ejecución de AWS IoT Greengrass en un contenedor de Docker, consulte Solución de problemas AWS IoT Greengrass en un contenedor Docker.