View a markdown version of this page

Implemente aplicaciones en contenedores si se AWS IoT Greengrass V2 ejecutan como un contenedor Docker - Recomendaciones de AWS

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.

Implemente aplicaciones en contenedores si se AWS IoT Greengrass V2 ejecutan como un contenedor Docker

Salih Bakir, Giuseppe Di Bella y Gustav Svalander, Amazon Web Services

Resumen

AWS IoT Greengrass Version 2, cuando se implementa como un contenedor de Docker, no admite la ejecución de contenedores de aplicaciones de Docker de forma nativa. Este patrón le muestra cómo crear una imagen de contenedor personalizada basada en la última versión AWS IoT Greengrass V2 que habilite la funcionalidad Docker-in-Docker (DiND). Con DiND, puede ejecutar aplicaciones en contenedores dentro del entorno. AWS IoT Greengrass V2

Puede implementar este patrón como una solución independiente o integrarlo con plataformas de organización de contenedores como Amazon ECS Anywhere. En cualquiera de los dos modelos de implementación, mantiene todas las AWS IoT Greengrass V2 funciones, incluidas las capacidades de procesamiento AWS IoT SiteWise perimetral, al tiempo que permite implementaciones escalables basadas en contenedores.

Requisitos previos y limitaciones

Requisitos previos 

  • Un activo. Cuenta de AWS

  • Para conocer AWS IoT Greengrass Version 2 los requisitos previos generales, consulte los requisitos previos en la AWS IoT Greengrass Version 2 documentación.

  • Docker Engine, instalado y configurado en Linux, macOS o Windows.

  • Docker Compose (si utiliza la interfaz de línea de comandos (CLI) de Docker Compose para ejecutar imágenes de Docker).

  • Un sistema operativo Linux.

  • Un hipervisor con un servidor host que admite la virtualización.

  • Requisitos del sistema:

    • 2 GB de RAM (mínimo)

    • 5 GB de espacio disponible en disco (mínimo)

    • Para AWS IoT SiteWise Edge, una CPU x86_64 de cuatro núcleos con 16 GB de RAM y 50 GB de espacio disponible en disco. Para obtener más información sobre el procesamiento de AWS IoT SiteWise datos, consulte los requisitos del paquete de procesamiento de datos en la documentación. AWS IoT SiteWise

Versiones de producto

  • AWS IoT Greengrass Version 2 versión 2.5.3 o posterior

  • Docker-in-Docker versión 1.0.0 o posterior

  • Docker Compose versión 1.22 o posterior

  • Docker Engine, versión 20.10.12 o posterior

Limitaciones

  • Algunas Servicios de AWS no están disponibles en todas las versiones. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte AWS Services by Region. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.

Arquitectura

Pila de tecnología de destino

  • Fuentes de datos: dispositivos de IoT, sensores o equipos industriales que generan datos para su procesamiento

  • AWS IoT Greengrass V2— Funciona como un contenedor Docker con D-in-D capacidades, implementado en infraestructuras perimetrales

  • Aplicaciones en contenedores: aplicaciones personalizadas que se ejecutan en el AWS IoT Greengrass V2 entorno como contenedores Docker anidados

  • (Opcional) Amazon ECS Anywhere: organización de contenedores que gestiona la implementación de AWS IoT Greengrass V2 contenedores

  • Otros Servicios de AWS: AWS IoT Core AWS IoT SiteWise, y otros Servicios de AWS para el procesamiento y la administración de datos

Arquitectura de destino

El siguiente diagrama muestra un ejemplo de arquitectura de implementación de destino que utiliza Amazon ECS Anywhere, que es una herramienta de administración de contenedores.

Arquitectura de implementación con Amazon ECS Anywhere.

En el diagrama, se muestra el siguiente flujo de trabajo:

1: Almacenamiento de imágenes de contenedores: Amazon ECR almacena las imágenes del AWS IoT Greengrass contenedor y cualquier contenedor de aplicaciones personalizadas necesario para el procesamiento perimetral.

2 y 3: Despliegue de contenedores: Amazon ECS Anywhere despliega la imagen del AWS IoT Greengrass contenedor desde Amazon ECR en la ubicación perimetral, gestionando el ciclo de vida del contenedor y el proceso de despliegue.

4: Despliegue de componentes: el AWS IoT Greengrass núcleo implementado despliega automáticamente sus componentes relevantes en función de su configuración. Los componentes incluyen AWS IoT SiteWise Edge y otros componentes de procesamiento perimetral necesarios dentro del entorno contenerizado.

5: Ingesta de datos: una vez que esté completamente configurado, AWS IoT Greengrass comienza a ingerir datos de telemetría y sensores de varias fuentes de datos de IoT en la ubicación perimetral.

6: Procesamiento de datos e integración en la nube: el AWS IoT Greengrass núcleo contenerizado procesa los datos de forma local mediante sus componentes desplegados (incluido AWS IoT SiteWise Edge para datos industriales). Luego, envía los datos procesados a los Nube de AWS servicios para su posterior análisis y almacenamiento.

Tools (Herramientas)

Servicios de AWS

  • Amazon ECS Anywhere le ayuda a implementar, usar y gestionar las tareas y los servicios de Amazon ECS en su propia infraestructura.

  • Amazon Elastic Compute Cloud (Amazon EC2) proporciona una capacidad informática escalable en el Nube de AWS. Puede lanzar tantos servidores virtuales como necesite y escalarlos o reducirlos con rapidez.

  • Amazon Elastic Container Registry (Amazon ECR) es un servicio de registro de imágenes de contenedor administrado que es seguro, escalable y fiable.

  • AWS IoT Greengrass es un servicio en la nube y de tiempo de ejecución en la periferia de Internet de las cosas (IoT) de código abierto que ayuda a crear, implementar y administrar aplicaciones de IoT en los dispositivos.

  • AWS IoT SiteWise lo ayuda a recopilar, modelar, analizar y visualizar datos de equipos industriales a escala.

Otras herramientas

  • Docker es un conjunto de productos de plataforma como servicio (PaaS) que utiliza la virtualización a nivel del sistema operativo para entregar software en contenedores.

  • Docker Compose es una herramienta para definir y ejecutar aplicaciones de varios contenedores.

  • Docker Engine es una tecnología de contenerización de código abierto para crear y contenedorizar aplicaciones.

Repositorio de código

El código de este patrón está disponible en el repositorio de la versión 2. GitHub AWS IoT Greengrass Docker-in-Docker

Epics

TareaDescripciónHabilidades requeridas

Clona y navega hasta el repositorio.

Para clonar el repositorio, utilice el siguiente comando:

git clone https://github.com/aws-samples/aws-iot-greengrass-v2-docker-in-docker.git

Para navegar hasta el docker directorio, utilice el siguiente comando:

cd aws-iot-greengrass-v2-docker-in-docker/docker

DevOps ingeniero, AWS DevOps

Cree la imagen de Docker.

Para crear la imagen de Docker con la versión predeterminada (la más reciente), ejecute el siguiente comando:

docker build -t x86_64/aws-iot-greengrass:latest .

O bien, para crear la imagen de Docker con una versión específica, ejecute el siguiente comando:

docker build --build-arg GREENGRASS_RELEASE_VERSION=2.12.0 -t x86_64/aws-iot-greengrass:2.12.0 .

Para verificar la compilación, ejecuta el siguiente comando:

docker images | grep aws-iot-greengrass

 

AWS DevOps, DevOps ingeniero, desarrollador de aplicaciones

(Opcional) Empuje a Amazon ECR.

  1. Para crear el repositorio, ejecute el siguiente comando:

    aws ecr create-repository --repository-name aws-iot-greengrass-dind --region us-east-1

  2. Para autenticarse, ejecute el siguiente comando:

    aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com

  3. Para etiquetar y enviar, ejecuta los siguientes comandos:

    docker tag x86_64/aws-iot-greengrass:latest <ACCOUNT-ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

    docker push <ACCOUNT_ID>.dkr.ecr.us-east-1.amazonaws.com/aws-iot-greengrass-dind:latest

Desarrollador de aplicaciones, AWS DevOps, DevOps ingeniero
TareaDescripciónHabilidades requeridas

Seleccione el método de autenticación.

Elija una de las siguientes opciones:

  • Opción 1 (recomendada): funciones de IAM: utilícelas si se ejecuta en Amazon EC2, Amazon ECS o Amazon EKS con las funciones de IAM adecuadas. No se necesita ninguna configuración adicional.

  • Opción 2: Variables de entorno: para pruebas y desarrollo.

  • Opción 3: Archivo de credenciales: no se recomienda para producción.

  • Opción 4: env.cfg archivo heredado.

Administrador de AWS

Configure el método de autenticación.

Para el método de autenticación que ha seleccionado, utilice las siguientes instrucciones de configuración:

  • Opción 2 (variables de entorno): Preparar y AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY, de forma opcionalAWS_SESSION_TOKEN.

  • Opción 3 (archivo de credenciales): crear un directorio y un archivo de credenciales:

    • (a) Ejecute el siguiente comando:

      mkdir -p ~/greengrass-v2-credentials

    • (b) Cree el siguiente archivo en~/greengrass-v2-credentials/credentials:

      [default]

      aws_access_key_id=YourAccessKey

      aws_secret_access_key=YourSecretKey

    • (c) Proteja el archivo de la siguiente manera:

      chmod 600 ~/greengrass-v2-credentials/credentials

  • Opción 4 (env.cfg): cree el env.cfg archivo en el docker directorio de la siguiente manera:

    GGC_ROOT_PATH=/greengrass/v2

    AWS_REGION=us-east-1

    PROVISION=true

    THING_NAME=MyGreengrassCore

    THING_GROUP_NAME=MyGreengrassCoreGroup

    TES_ROLE_NAME=GreengrassV2TokenExchangeRole

    TES_ROLE_ALIAS_NAME=GreengrassCoreTokenExchangeRoleAlias

    COMPONENT_DEFAULT_USER=ggc_user:ggc_group

Administrador de AWS
TareaDescripciónHabilidades requeridas

Configuración docker-compose.yml.

Actualice el docker-compose.yml archivo con las variables de entorno de la siguiente manera:

  • Variables clave: PROVISION, AWS_REGIONTHING_NAME,THING_GROUP_NAME,TES_ROLE_NAME, TES_ROLE_ALIAS_NAME

  • En el caso de las credenciales a través de variables de entorno, elimine los comentarios siguientes:

    environment:

    - AWS_ACCESS_KEY_ID=YourKey

    - AWS_SECRET_ACCESS_KEY=YourSecret

  • En el caso del archivo de credenciales, elimine los comentarios siguientes:

    volumes:

    - ~/greengrass-v2-credentials:/root/.aws/:ro

  • Para la persistencia del registro, añada lo siguiente:

    volumes:

    - ./logs:/greengrass/v2/logs

DevOps ingeniero

Inicie y verifique el contenedor.

Para empezar en primer plano, ejecute el siguiente comando:

docker-compose up --build

O bien, para empezar en segundo plano, ejecute el siguiente comando:

docker-compose up --build -d

Para comprobar el estado, ejecute el siguiente comando:

docker-compose ps

Para supervisar los registros, ejecute el siguiente comando:

docker-compose logs -f

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Ejecute el contenedor con la CLI de Docker.

  • Para iniciar una ejecución básica sin aprovisionamiento, ejecute el siguiente comando:

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  • Para iniciar una ejecución con variables de entorno, ejecute el siguiente comando:

    docker run --init --privileged -it --name aws-iot-greengrass -e PROVISION=true -e AWS_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=YourKey -e AWS_SECRET_ACCESS_KEY=YourSecret -e THING_NAME=MyGreengrassCore -e THING_GROUP_NAME=MyGreengrassCoreGroup -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Para iniciar una ejecución con un archivo de credenciales, ejecute el siguiente comando:

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro -e PROVISION=true -e AWS_REGION=us-east-1 -e THING_NAME=MyGreengrassCore -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Para iniciar una ejecución con un env.cfg archivo, ejecute el siguiente comando:

    docker run --init --privileged -it --name aws-iot-greengrass -v ~/greengrass-v2-credentials:/root/.aws:ro --env-file env.cfg -p 8883:8883 x86_64/aws-iot-greengrass:latest

  • Para iniciar una ejecución con registros persistentes, ejecuta el siguiente comando:

    docker run --init --privileged -it --name aws-iot-greengrass -v \$(pwd)/logs:/greengrass/v2/logs x86_64/aws-iot-greengrass:latest

DevOps ingeniero

Verifica el contenedor.

  • Para comprobar el estado del contenedor, ejecuta el siguiente comando:

    docker ps | grep aws-iot-greengrass

  • Para supervisar los registros, ejecute el siguiente comando:

    docker logs -f aws-iot-greengrass

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Implemente aplicaciones.

  • Para implementar el contenedor de aplicaciones, ejecute el siguiente comando:

    docker run -d --name my-app nginx:alpine

  • Para verificar la implementación, ejecute el siguiente comando:

    docker ps

  • Para acceder a los registros, ejecute el siguiente comando:

    cd /greengrass/v2/logs && cat greengrass.log

Desarrollador de aplicaciones

Acceda y pruébelo Docker-in-Docker.

  1. Para abrir un shell en el contenedor, ejecute el siguiente comando:

    docker exec -it aws-iot-greengrass sh

  2. Para verificar Docker, ejecuta los siguientes comandos:

    docker --version

    docker ps

  3. Para realizar una prueba Docker-in-Docker, ejecute el siguiente comando:

    docker run --rm hello-world

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Configure el clúster de Amazon ECS.

  • Para crear un clúster de Amazon ECS, ejecute el siguiente comando:

    aws ecs create-cluster --cluster-name greengrass-cluster --region us-east-1

  • Para crear la activación de SSM, ejecute el siguiente comando:

    aws ssm create-activation --default-instance-name greengrass-edge --iam-role GreengrassECSAnywhereRole --registration-limit 10 --region us-east-1

  • Para instalar el agente SSM en un dispositivo perimetral, ejecute el siguiente comando:

    curl -o install.sh https://s3.amazonaws.com/aws-ssm-downloads/latest/linux_amd64/install.sh

    chmod +x install.sh

    ./install.sh activation-code activation-id us-east-1

Administrador de AWS

Implemente la tarea Amazon ECS.

  • Cree greengrass-task-definition.json con la configuración de tareasprivileged:true, incluidas containerDefinitions las variables de entorno y los montajes de volumen para cada /var/lib/docker /greengrass/v2.Register tarea. Use el siguiente comando:

    aws ecs register-task-definition --cli-input-json file://greengrass-task-definition.json

  • Para crear el servicio, ejecute el siguiente comando:

    aws ecs create-service --cluster greengrass-cluster --service-name greengrass-service --task-definition greengrass-dind --desired-count 1 --launch-type EXTERNAL --region us-east-1

  • Para verificar la implementación, ejecute el siguiente comando:

    aws ecs describe-services --cluster greengrass-cluster --services greengrass-service --region us-east-1

Administrador de AWS
TareaDescripciónHabilidades requeridas

Detenga el contenedor.

  • Para detener el contenedor mediante Docker Compose, ejecute los siguientes comandos:

    docker-compose stop

    docker-compose down

    docker-compose down -v

  • Para detener el contenedor (elimina los volúmenes) mediante la CLI de Docker, ejecute los siguientes comandos:

    docker stop aws-iot-greengrass

    docker rm aws-iot-greengrass

  • Para detener el contenedor mediante force remove, ejecute el siguiente comando:

    docker rm -f aws-iot-greengrass

DevOps ingeniero

Resolución de problemas

ProblemaSolución

El contenedor no se inicia debido a errores de permiso.

  1. Para asegurarte de que el contenedor se ejecuta con la --privileged marca requerida Docker-in-Docker, ejecuta el siguiente comando:

    docker run --init --privileged -it --name aws-iot-greengrass x86_64/aws-iot-greengrass:latest

  2. En el docker-compose.yml archivo, defina lo siguiente:

    privileged: true

aviso

--privilegedconcede privilegios ampliados al contenedor.

El aprovisionamiento falla debido a errores de credenciales.

Para comprobar que las credenciales están configuradas correctamente, siga estos pasos:

  1. Compruebe la función de IAM:

    aws sts get-caller-identity

  2. Verifique las variables de entorno:

    docker exec -it aws-iot-greengrass sh -c 'echo \$AWS_ACCESS_KEY_ID'

  3. Compruebe el archivo de credenciales:

    docker exec -it aws-iot-greengrass sh -c 'cat /root/.aws/credentials'

Asegúrese de que los permisos de IAM incluyan iot:CreateThingiot:CreatePolicy, iot:AttachPolicyiam:CreateRole, yiam:AttachRolePolicy.

No se puede conectar al daemon de Docker dentro del contenedor.

  1. Compruebe el estado del daemon de Docker:

    docker exec -it aws-iot-greengrass sh -c 'ps aux | grep dockerd'

  2. Compruebe que existe el socket Docker:

    docker exec -it aws-iot-greengrass sh -c 'ls -la /var/run/docker.sock'

  3. Inicie manualmente si es necesario:

    docker exec -it aws-iot-greengrass sh -c 'dockerd > /var/log/docker.log 2>&1 &'

El contenedor se queda sin espacio en disco.

  1. Compruebe el espacio en disco:

    df -h

  2. Limpie los recursos de Docker:

    docker system prune -a --volumes

  3. Elimine los artefactos antiguos de Greengrass:

    docker exec -it aws-iot-greengrass sh -c 'rm -rf /greengrass/v2/work/*'

Garantice un espacio mínimo en disco: 5 GB para las operaciones básicas y 50 GB para Edge AWS IoT SiteWise

Problemas de compilación.

  1. Asegúrese de estar en el docker directorio:

    cd docker && pwd

  2. Comprueba que Dockerfile existe:

    ls -la Dockerfile

  3. Compruebe que Docker esté instalado y en ejecución:

    docker --version && docker ps

Problemas de conectividad de red.

  1. Pruebe de la resolución de DNS:

    docker exec -it aws-iot-greengrass sh -c 'nslookup google.com'

  2. Pruebe AWS la conectividad:

    docker exec -it aws-iot-greengrass sh -c 'curl https://iot.us-east-1.amazonaws.com'

Compruebe que el firewall permita el tráfico saliente de HTTPS (443) y MQTT (8883).

Los componentes de Greengrass no se despliegan.

  1. Compruebe los registros de Greengrass:

    docker exec -it aws-iot-greengrass sh -c 'cat /greengrass/v2/logs/greengrass.log'

  2. Verifique la configuración del rol de TES:

    aws iot describe-role-alias --role-alias TES_ROLE_ALIAS_NAME

Compruebe los registros específicos de los componentes en el /greengrass/v2/logs/ directorio.

El contenedor sale inmediatamente después del inicio.

  1. Compruebe si hay errores en los registros del contenedor:

    docker logs aws-iot-greengrass

  2. Ejecute con un shell interactivo para la depuración:

    docker run --init --privileged -it --entrypoint sh x86_64/aws-iot-greengrass:latest

Compruebe que todas las variables de entorno requeridas estén configuradas correctamente siPROVISION=true. Asegúrese de utilizar la --init marca al iniciar el contenedor.

Recursos relacionados

AWS resources

Otros recursos

Información adicional

  • Para el procesamiento de datos de AWS IoT SiteWise Edge, Docker debe estar disponible en el AWS IoT Greengrass entorno.

  • Para ejecutar un contenedor anidado, debe ejecutarlo con credenciales de AWS IoT Greengrass nivel de administrador.