AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.
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.
Conector de implementación de aplicaciones Docker
El conector de implementación de aplicaciones de Docker de Greengrass facilita la ejecución de las imágenes de Docker en un AWS IoT Greengrass core. El conector utiliza Docker Compose para iniciar una aplicación Docker multicontenedor desde un archivo de docker-compose.yml
. Concretamente, el conector ejecuta comandos de docker-compose
para administrar los contenedores Docker en un único dispositivo central. Para obtener más información, consulte Overview of Greengrass group role permissions (Descripción general de Docker Compose
Después de implementar el grupo de Greengrass, el conector lanza las últimas imágenes e inicia los contenedores de Docker. Ejecuta el docker-compose pull
comando y docker-compose
up
. El conector publica el estado del comando en un tema MQTT de salida. También registra información del estado sobre contenedores Docker en funcionamiento. Esto le permite supervisar los registros de su aplicación en Amazon CloudWatch. Para obtener más información, consulte Monitorización con registros de AWS IoT Greengrass. El conector también inicia contenedores Docker cada vez que se reinicia el daemon de Greengrass. La cantidad de contenedores Docker que se puede ejecutar en el núcleo depende del hardware que tenga.
Los contenedores Docker se ejecutan fuera del dominio de Greengrass en el dispositivo central, de modo que no pueden acceder a la comunicación entre procesos (IPC) del núcleo. Sin embargo, puede configurar algunos canales de comunicación con componentes de Greengrass, como las funciones locales de Lambda. Para obtener más información, consulte Comunicación con contenedores Docker.
Puede usar el conector para alojar un servidor web o un servidor MySQL en su dispositivo central. Los servicios locales de sus aplicaciones Docker pueden comunicarse entre sí, con otros procesos del entorno local y con servicios en la nube. Por ejemplo, puede ejecutar un servidor web del núcleo que envíe solicitudes desde las funciones de Lambda a un servicio web en la nube.
Este conector se ejecuta en modo de aislamiento Sin contenedor, por lo que puede implementarlo en un grupo de Greengrass que se ejecute sin creación de contenedores de Greengrass.
Este conector tiene las siguientes versiones.
Versión |
ARN |
---|---|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2. |
|
1 |
|
Para obtener información sobre los cambios de versión, consulte el Registro de cambios.
Requisitos
Este conector exige los siguientes requisitos:
-
Versión 1.10 o posterior del software AWS IoT Greengrass Core.
nota
Este conector no es compatible con distribuciones OpenWrt.
-
Se necesita tener la versión 3.7 o 3.8 de Python
instalada en el dispositivo principal y añadido a la variable de entorno PATH. nota
Para usar Python 3.8, ejecute el siguiente comando para crear un enlace simbólico desde la carpeta de instalación predeterminada de Python 3.7 a los binarios de Python 3.8 instalados.
sudo ln -s
path-to-python-3.8
/python3.8 /usr/bin/python3.7Esto configura su dispositivo para que cumpla con el requisito de Python para AWS IoT Greengrass.
-
Un mínimo de 36 MB de RAM en el núcleo de Greengrass para que el conector supervise los contenedores Docker en funcionamiento. El requisito total de memoria depende del número de contenedores Docker que se ejecuten en el núcleo.
-
Docker Engine
versión 1.9.1 o posterior instalado en el núcleo de Greengrass. La versión 19.0.3 es la última versión cuyo funcionamiento con el conector se ha verificado. El ejecutable
docker
debe estar en el directorio/usr/bin
o/usr/local/bin
.importante
Le recomendamos que instale un almacén de credenciales para proteger las copias locales de sus credenciales de Docker. Para obtener más información, consulte Notas de seguridad.
Para obtener información sobre la instalación de Docker en distribuciones de Amazon Linux, consulte Conceptos básicos de Docker para Amazon ECS en la Guía para desarrolladores de Amazon Elastic Container Service.
-
Docker Compose
instalado en el núcleo de Greengrass. El ejecutable docker-compose
debe estar en el directorio/usr/bin
o/usr/local/bin
.Las siguientes versiones de Docker Compose se verifican para que funcionen con el conector.
Versión del conector
Versión de Docker Compose verificada
7
1.25.4
6
1.25.4
5
1.25.4
4
1.25.4
3
1.25.4
2
1.25.1
1
1.24.1
-
Un único archivo de Docker Compose (por ejemplo,
docker-compose.yml
), almacenado en Amazon Simple Storage Service (Amazon S3). El formato debe ser compatible con la versión de Docker Compose instalada en el núcleo. Debe probar el archivo antes de usarlo en su núcleo. Si edita el archivo después de implementar el grupo de Greengrass, debe volver a implementar el grupo para actualizar la copia local del núcleo. -
Un usuario de Linux con permiso para llamar al daemon local de Docker y escribir en el directorio que almacena la copia local del archivo de Compose. Para obtener más información, consulte Configuración del usuario de Docker en el núcleo.
-
El rol de grupo Greengrass configurado para permitir la acción
s3:GetObject
en el bucket S3 que contiene el archivo de Compose. Este permiso se muestra en el siguiente ejemplo de política de IAM.{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToComposeFileS3Bucket", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Effect": "Allow", "Resource": "arn:aws:s3:::
bucket-name
/*" } ] }nota
Si su bucket de S3 está habilitado para el control de versiones, entonces el rol debe estar configurado para permitir también la acción
s3:GetObjectVersion
. Para obtener más información, consulte Uso del control de versiones en la Guía del usuario de Amazon Simple Storage Service.Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte Administración del rol de grupo de Greengrass (consola) o Administración del rol de grupo de Greengrass (CLI).
-
Si el archivo Docker Compose hace referencia a una imagen de Docker almacenada en Amazon ECR, el rol de grupo Greengrass configurado para permitir lo siguiente:
-
Las acciones de
ecr:GetDownloadUrlForLayer
yecr:BatchGetImage
en los repositorios de Amazon ECR que contienen las imágenes de Docker. -
La acción de
ecr:GetAuthorizationToken
en sus recursos.
Los repositorios deben estar en la misma Cuenta de AWS y Región de AWS que el conector.
importante
Todos los conectores y las funciones de Lambda del grupo de Greengrass pueden asumir permisos en el rol de grupo. Para obtener más información, consulte Notas de seguridad.
Estos permisos se muestran en la siguiente política de ejemplo.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGetEcrRepositories", "Effect": "Allow", "Action": [ "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": [ "arn:aws:ecr:
region
:account-id
:repository/repository-name
" ] }, { "Sid": "AllowGetEcrAuthToken", "Effect": "Allow", "Action": "ecr:GetAuthorizationToken", "Resource": "*" } ] }Para obtener más información, consulte Ejemplos de políticas de repositorio de Amazon ECR en la Guía del usuario de Amazon ECR.
Para el requisito de rol de grupo, debe configurar el rol para conceder los permisos necesarios y asegurarse de que el rol se ha añadido al grupo. Para obtener más información, consulte Administración del rol de grupo de Greengrass (consola) o Administración del rol de grupo de Greengrass (CLI).
-
-
Si el archivo de Docker Compose hace referencia a una imagen de Docker de AWS Marketplace
, el conector también tiene los siguientes requisitos: -
Debe estar suscrito a los productos de contenedor de AWS Marketplace. Para obtener más información, consulte Búsqueda y suscripción a productos de contenedor en la Guía del suscriptor de AWS Marketplace.
-
AWS IoT Greengrass debe configurarse para admitir secretos locales, como se describe en Requisitos de secretos. El conector utiliza esta característica únicamente para recuperar sus secretos de AWS Secrets Manager, no para almacenarlos.
-
Debe crear un secreto en Secrets Manager para cada registro de AWS Marketplace que almacene una imagen de Docker a la que se hace referencia en su archivo de Compose. Para obtener más información, consulte Acceso a imágenes de Docker desde repositorios privados.
-
-
Si el archivo de Docker Compose hace referencia a una imagen de Docker de repositorios privados en registros distintos de Amazon ECR, como Docker Hub, el conector también tendrá los siguientes requisitos:
-
AWS IoT Greengrass debe configurarse para admitir secretos locales, como se describe en Requisitos de secretos. El conector utiliza esta característica únicamente para recuperar sus secretos de AWS Secrets Manager, no para almacenarlos.
-
Debe crear un secreto en Secrets Manager para cada repositorio privado que almacene una imagen de Docker a la que se hace referencia en su archivo de Compose. Para obtener más información, consulte Acceso a imágenes de Docker desde repositorios privados.
-
-
El daemon de Docker debe ejecutarse cuando implemente un grupo de Greengrass que contenga este conector.
Acceso a imágenes de Docker desde repositorios privados
Si utiliza credenciales para acceder a sus imágenes de Docker, debe permitir que el conector tenga acceso a ellas. La forma en que lo haga depende de dónde se encuentre la imagen de Docker.
En el caso de las imágenes de Docker almacenadas en Amazon ECR, concede permiso para obtener su token de autorización en el rol del grupo de Greengrass. Para obtener más información, consulte Requisitos.
En el caso de las imágenes de Docker almacenadas en otros repositorios o registros privados, debe crear un secreto en AWS Secrets Manager para almacenar su información de inicio de sesión. Lo que incluye las imágenes de Docker a las que se ha suscrito en AWS Marketplace. Cree un secreto para cada repositorio. Si actualiza sus secretos en Secrets Manager, los cambios se propagarán al núcleo la próxima vez que implemente el grupo.
nota
Secrets Manager es un servicio que puede utilizar para almacenar y administrar de forma segura sus credenciales, claves y otros secretos en la Nube de AWS. Para obtener más información, consulte ¿Qué es AWS Secrets Manager? en la Guía del usuario de AWS Secrets Manager.
Cada secreto debe contener las siguientes claves:
Clave |
Valor |
---|---|
|
El nombre de usuario utilizado para acceder al repositorio o al registro. |
|
La contraseña utilizada para acceder al repositorio o al registro. |
|
El punto de enlace del registro. Este debe coincidir con la URL de registro correspondiente del archivo de Compose. |
nota
Para permitir el acceso de AWS IoT Greengrass a un secreto de forma predeterminada, el nombre del secreto debe comenzar por greengrass-. De lo contrario, debe conceder el acceso su rol de servicio de Greengrass. Para obtener más información, consulte Permitir que AWS IoT Greengrass obtenga valores de secretos.
- Para obtener información de inicio de sesión para las imágenes de Docker desde AWS Marketplace
-
-
Obtenga su contraseña para las imágenes de Docker de AWS Marketplace mediante el comando
aws ecr get-login-password
. Para obtener más información, consulte get-login password en la Referencia de comandos de la AWS CLI.aws ecr get-login-password
-
Recupere la URL de registro de la imagen de Docker. Abra el sitio web AWS Marketplace y abra la página de lanzamiento del producto contenedor. En Imágenes del contenedor, seleccione Ver detalles de la imagen del contenedor para buscar el nombre de usuario y la URL del registro.
Use el nombre de usuario, la contraseña y la URL del registro recuperados para crear un secreto para cada registro AWS Marketplace que almacene las imágenes de Docker a las que se hace referencia en tu archivo de Compose.
-
- Para crear secretos (consola)
-
En la consola de AWS Secrets Manager, seleccione Other type of secrets (Otro tipo de secretos). En Specify the key-value pairs to be stored for this secret (Especificar los pares clave-valor que se van a almacenar para este secreto), añada filas para
username
,password
yregistryUrl
. Para obtener más información, consulte Creación de un secreto básico en la Guía del usuario de AWS Secrets Manager. - Para crear secretos (CLI)
-
En la AWS CLI, utilice el comando
create-secret
de Secrets Manager como se muestra en el siguiente ejemplo. Para obtener más información, consulte create-cluster en la Referencia de comandos de la AWS CLI.aws secretsmanager create-secret --name greengrass-MySecret --secret-string [{"username":"Mary_Major"},{"password":"abc123xyz456"},{"registryUrl":"https://docker.io"}]
importante
Es su responsabilidad proteger el directorio DockerComposeFileDestinationPath
en el que se guarda el archivo de Docker Compose y las credenciales de las imágenes de Docker de los repositorios privados. Para obtener más información, consulte Notas de seguridad.
Parámetros
Este conector proporciona los siguientes parámetros:
Ejemplo de creación de conector (AWS CLI)
El siguiente comando de la CLI crea una ConnectorDefinition
con una versión inicial que contiene el conector de implementación de la aplicación de Greengrass Docker.
aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyDockerAppplicationDeploymentConnector", "ConnectorArn": "arn:aws:greengrass:
region
::/connectors/DockerApplicationDeployment/versions/5", "Parameters": { "DockerComposeFileS3Bucket": "myS3Bucket", "DockerComposeFileS3Key": "production-docker-compose.yml", "DockerComposeFileS3Version": "123", "DockerComposeFileDestinationPath": "/home/username/myCompose", "DockerUserId": "1000", "AWSSecretsArnList": "[\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret1-hash
\",\"arn:aws:secretsmanager:region
:account-id
:secret:greengrass-secret2-hash
\"]", "DockerContainerStatusLogFrequency": "30", "ForceDeploy": "True", "DockerPullBeforeUp": "True" } } ] }'
nota
La función de Lambda de este conector tiene un ciclo de vida prolongado.
Datos de entrada
Este conector no requiere ni acepta datos de entrada.
Datos de salida
Este conector publica el estado del comando de docker-compose up
como datos de salida.
- Filtro de temas en la suscripción
-
dockerapplicationdeploymentconnector/message/status
- Ejemplo de salida: Correcto
-
{ "status":"success", "GreengrassDockerApplicationDeploymentStatus":"Successfully triggered docker-compose up", "S3Bucket":"myS3Bucket", "ComposeFileName":"production-docker-compose.yml", "ComposeFileVersion":"123" }
- Ejemplo de salida: Error
-
{ "status":"fail", "error_message":"
description of error
", "error":"InvalidParameter" }El tipo de error puede ser
InvalidParameter
oInternalError
.
Configuración del usuario de Docker en el núcleo de AWS IoT Greengrass
El conector de implementación de aplicaciones Docker de Greengrass se ejecuta como el usuario que especifique para el parámetro DockerUserId
. Si no especifica un valor, el conector se ejecutará como ggc_user
, que es la identidad de acceso de Greengrass predeterminada.
Para permitir que el conector interactúe con el daemon de Docker, el usuario de Docker debe pertenecer al grupo de Linux de docker
del núcleo. El usuario de Docker también debe tener permisos de escritura en el directorio de DockerComposeFileDestinationPath
. Aquí es donde el conector almacena el archivo local de docker-compose.yml
y las credenciales de Docker.
nota
-
Le recomendamos que cree un usuario de Linux en lugar de utilizar el
ggc_user
predeterminado. De lo contrario, cualquier función de Lambda del grupo de Greengrass podrá acceder al archivo de Compose y a las credenciales de Docker. -
Se recomienda evitar la ejecución como raíz a menos que sea absolutamente necesario. Si especifica el usuario raíz, debe permitir que las funciones de Lambda se ejecuten como raíz en el núcleo de AWS IoT Greengrass. Para obtener más información, consulte Ejecución de una función de Lambda como raíz.
-
Cree el usuario. Puede ejecutar el comando de
useradd
e incluir la opción de-u
opcional para asignar un ID de usuario. Por ejemplo:sudo useradd -u
1234
user-name
-
Añada el usuario al grupo de
docker
en el núcleo. Por ejemplo:sudo usermod -aG docker
user-name
Para obtener más información, como por ejemplo la forma de crear el grupo de
docker
, consulte Manage Docker as a non-root user (Administrar Docker como usuario no raíz)en la documentación de Docker. -
Otorgue permisos al usuario para que pueda escribir en el directorio especificado para el parámetro de
DockerComposeFileDestinationPath
. Por ejemplo:-
Para fijar al usuario como propietario del directorio. En este ejemplo se utiliza el ID de usuario del paso 1.
chown
1234
docker-compose-file-destination-path
-
Otorgue permisos de lectura y escritura al propietario.
chmod 700
docker-compose-file-destination-path
Para obtener más información, consulte How To Manage File And Folder Permissions In Linux (Cómo administrar los permisos de archivos y carpetas en Linux)
en la documentación de Linux Foundation. -
Si no asignó un ID de usuario al crear el usuario, o si utilizó un usuario existente, ejecute el comando de
id
para buscar el ID de usuario.id -u
user-name
Utilice el ID de usuario para configurar el parámetro de
DockerUserId
para el conector.
-
Información de uso
Cuando utilice el conector de implementación de la aplicación de Greengrass Docker, debe tener en cuenta la siguiente información de uso específica de la implementación.
-
Prefijo fijo para nombres de proyectos. El conector antepone el prefijo de
greengrassdockerapplicationdeployment
a los nombres de los contenedores Docker que inicia. El conector utiliza este prefijo como nombre del proyecto en los comandos dedocker-compose
que ejecuta. -
Comportamiento de registro. El conector escribe información de estado e información de resolución de problemas en un archivo de registro. Puede configurar AWS IoT Greengrass para enviar registros a CloudWatch Logs y para escribir registros localmente Para obtener más información, consulte Registro de conectores. Esta es la ruta al registro local para el conector:
/
greengrass-root
/ggc/var/log/user/region
/aws/DockerApplicationDeployment.logDebe tener permisos de root para acceder a los registros locales.
-
Actualización de imágenes de Docker. Docker almacena imágenes en la caché en el dispositivo central. Si actualiza una imagen de Docker y desea propagar el cambio al dispositivo central, asegúrese de cambiar la etiqueta de la imagen en el archivo de Compose. Los cambios surten efecto después de que se implemente el grupo de Greengrass.
-
Tiempo de espera de 10 minutos para operaciones de limpieza. Cuando el daemon de Greengrass se detiene durante un reinicio, el comando de
docker-compose down
se activa. Todos los contenedores de Docker tienen un máximo de 10 minutos después de que se activedocker-compose down
para realizar cualquier operación de limpieza. Si la limpieza no se completa en 10 minutos, deberá limpiar manualmente los contenedores restantes. Para obtener más información, consulte docker rmen la documentación de la CLI de Docker. -
Ejecución de comandos de Docker. Para solucionar problemas, puede ejecutar comandos de Docker en una ventana de terminal del dispositivo central. Por ejemplo, ejecute el siguiente comando para ver los contenedores Docker iniciados por el conector:
docker ps --filter name="greengrassdockerapplicationdeployment"
-
ID de recurso reservado. El conector utiliza el ID de
DOCKER_DEPLOYER_SECRET_RESOURCE_RESERVED_ID_
para los recursos de Greengrass que crea en el grupo de Greengrass. Los ID de recurso deben ser únicos en el grupo, así que no asigne un ID de recurso que pueda entrar en conflicto con este ID de recurso reservado.index
-
Modo sin conexión. Si establece el parámetro de configuración
DockerOfflineMode
enTrue
, el conector Docker puede funcionar en modo fuera de línea. Esto puede ocurrir cuando la implementación de un grupo de Greengrass se reinicia mientras el dispositivo principal está fuera de línea y el conector no puede establecer una conexión con Amazon S3 o Amazon ECR para recuperar el archivo de Docker Compose.Con el modo sin conexión activado, el conector intenta descargar el archivo de Compose y ejecutar los comandos
docker login
como lo haría en un reinicio normal. Si estos intentos fallan, el conector busca un archivo de Compose almacenado localmente en la carpeta que se especificó mediante el parámetroDockerComposeFileDestinationPath
. Si existe un archivo Compose local, el conector sigue la secuencia normal de los comandosdocker-compose
y extrae imágenes locales. Si el archivo de Compose o las imágenes locales no están presentes, se produce un error en el conector. El comportamiento de los parámetrosForceDeploy
yStopContainersOnNewDeployment
sigue siendo el mismo en el modo sin conexión.
Comunicación con contenedores Docker
AWS IoT Greengrass admite los siguientes canales de comunicación entre componentes Greengrass y contenedores Docker:
-
Las funciones de Lambda pueden usar API REST para comunicarse con procesos en contenedores de Docker. Puede configurar un servidor en un contenedor de Docker que abre un puerto. Las funciones de Lambda se pueden comunicar con el contenedor de este puerto.
-
Los procesos de los contenedores Docker pueden intercambiar mensajes MQTT a través del bróker de mensajería local de Greengrass. Puede configurar el contenedor de Docker como un dispositivo de cliente en el grupo de Greengrass y, a continuación, crear suscripciones para permitir que el contenedor se comunique con funciones de Lambda, dispositivos de cliente y otros conectores en el grupo, o con AWS IoT y el servicio de sombra local. Para obtener más información, consulte Configurar la comunicación MQTT con contenedores Docker.
-
Las funciones de Lambda de Greengrass pueden actualizar un archivo compartido para pasar información a contenedores de Docker. Puede utilizar el archivo de Compose para montar un subconjunto de la ruta del archivo compartido en un contenedor Docker.
Configurar la comunicación MQTT con contenedores Docker
Puede configurar un contenedor de Docker como un dispositivo de cliente y añadirlo a un grupo de Greengrass. A continuación, puede crear suscripciones que permitan la comunicación MQTT entre el contenedor Docker y los componentes Greengrass o AWS IoT. En el siguiente procedimiento, va a crear una suscripción que permite que el dispositivo del contenedor Docker reciba mensajes de actualización de sombra desde el servicio de sombra local. Puede seguir este patrón para crear otras suscripciones.
nota
Suponemos que ya ha creado un grupo de Greengrass y un núcleo de Greengrass (versión 1.10 o posterior) en este procedimiento. Para obtener más información acerca de la creación de núcleos y grupos de Greengrass, consulte Introducción a AWS IoT Greengrass.
Para configurar un contenedor de Docker como un dispositivo de cliente y añadirlo a un grupo de Greengrass
-
Cree una carpeta en el dispositivo central para almacenar los certificados y claves utilizados para autenticar el dispositivo Greengrass.
La ruta del archivo debe montarse en el contenedor Docker que desee iniciar. El siguiente fragmento muestra cómo montar una ruta de archivo en el archivo de Compose. En este ejemplo,
path to device-certs
representa la carpeta que creó en este paso.version: '3.3' services: myService: image:
user-name
/repo
:image-tag
volumes: - /path-to-device-certs
/:/path-accessible-in-container
En el panel de navegación de la consola de AWS IoT, en Administrar, expanda los Dispositivos de Greengrass y, a continuación, elija Grupos (V1).
Seleccione el grupo de destino.
-
En la página de configuración del grupo, seleccione Dispositivos de cliente y, a continuación, seleccione Asociar.
-
En el modal Asociar un dispositivo cliente a este grupo, elija Crear un objeto nuevo de AWS IoT.
La página Crear objetos se abre en una pestaña nueva.
-
En la página Crear objetos, elija Crear un solo objeto, y luego seleccione Siguiente.
-
En la página Especificar las propiedades del objeto, introduce un nombre para el dispositivo y, a continuación, seleccione Siguiente.
-
En la página Configurar el certificado del dispositivo, seleccione Siguiente.
-
En la página Adjuntar políticas al certificado, realice uno de los siguientes procedimientos:
-
Seleccione una política existente que conceda los permisos que requieren los dispositivos clientes y, a continuación, seleccione Crear objeto.
Se abre un modal en el que puede descargar los certificados y las claves que el dispositivo utiliza para conectarse al Nube de AWS y al núcleo.
-
Cree y adjunte una nueva política que conceda permisos al dispositivo cliente. Haga lo siguiente:
-
Elija Crear política.
La página Create policy (Crear política) se abre en una pestaña nueva.
-
En la página Create policy (Crear política), haga lo siguiente:
-
En Nombre de la política, introduzca un nombre que describa la política, como
GreengrassV1ClientDevicePolicy
. -
En la pestaña Declaraciones de política, en Documento de política, seleccione JSON.
-
Ingrese el siguiente documento de política. Esta política permite que el dispositivo cliente descubra los núcleos de Greengrass y comunique todos los temas MQTT. Para obtener información acerca de cómo restringir el acceso a esta política, consulte Autenticación y autorización de dispositivos en AWS IoT Greengrass.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Connect", "iot:Receive" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "greengrass:*" ], "Resource": [ "*" ] } ] }
-
Elija Create (Crear) para crear la política.
-
-
Vuelva a la pestaña del navegador con la página Adjuntar políticas al certificado abierta. Haga lo siguiente:
-
En la lista Políticas, seleccione la política que ha creado, como GreengrassV1ClientDevicePolicy.
Si no se puede ver la política, seleccione el botón de actualizar.
-
Elija Crear objeto.
Se abre un modal en el que puede descargar los certificados y las claves que el dispositivo utiliza para conectarse al Nube de AWS y al núcleo.
-
-
-
-
En el modal Descargar certificados y claves, descargue los certificados del dispositivo.
importante
Descargue los recursos de seguridad antes de elegir Listo.
Haga lo siguiente:
-
Para el Certificado del dispositivo, seleccione Descargar para descargar el certificado del dispositivo.
-
En Archivo de clave pública, seleccione Descargar para descargar la clave pública del certificado.
-
En Archivo de clave privada, seleccione Descargar para descargar el archivo de clave privada del certificado.
-
Revise la Autenticación de servidor en la Guía del desarrollador de AWS IoT y seleccione el certificado de CA raíz adecuado. Le recomendamos que utilice los puntos de conexión de Amazon Trust Services (ATS) y los certificados de CA raíz de ATS. En Certificados de CA raíz, seleccione Descargar para obtener un certificado de CA raíz.
-
Seleccione Listo.
Tome nota del identificador del certificado que comparten los nombres de archivo del certificado y las claves del dispositivo. Lo necesitará más adelante.
-
-
Copie los certificados y las claves en la carpeta que ha creado en el paso 1.
A continuación, cree una suscripción en el grupo. En este ejemplo, crear una suscripción permite que el dispositivo del contenedor Docker reciba mensajes MQTT del servicio de sombra local.
nota
El tamaño máximo de un documento sombra es de 8 kB. Para obtener más información, consulte Cuotas de AWS IoT en la Guía para desarrolladores de AWS IoT.
Para crear una suscripción que permita al dispositivo del contenedor Docker recibir mensajes MQTT del servicio de sombra local
-
En la página Select your source and target, configure el origen y el destino, de la siguiente manera:
-
Para Select a source (Seleccionar un origen): elija Services (Servicios) y, a continuación, Local Shadow Service (Servicio de sombra local).
-
En Select a target (Seleccionar un destino), seleccione Devices (Dispositivos), y, a continuación, elija su dispositivo.
-
Elija Siguiente.
-
En la página Filtrar los datos por tema, en el campo Filtro por tema, escriba
$aws/things/
y, a continuación, seleccione Siguiente. ReemplaceMyDockerDevice
/shadow/update/acceptedMyDockerDevice
por el nombre del dispositivo que ha creado. -
Seleccione Finalizar.
-
Incluya el siguiente fragmento de código en la imagen de Docker a la que haga referencia en su archivo de Compose. Este es el código del dispositivo Greengrass. Además, añada el código en el contenedor Docker que inicia el dispositivo Greengrass dentro del contenedor. Se puede ejecutar como un proceso independiente en la imagen o en una cadena independiente.
import os import sys import time import uuid from AWSIoTPythonSDK.core.greengrass.discovery.providers import DiscoveryInfoProvider from AWSIoTPythonSDK.exception.AWSIoTExceptions import DiscoveryInvalidRequestException from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient # Replace thingName with the name you registered for the Docker device. thingName = "MyDockerDevice" clientId = thingName # Replace host with the IoT endpoint for your &AWS-account;. host = "myPrefix.iot.region.amazonaws.com" # Replace topic with the topic where the Docker container subscribes. topic = "$aws/things/MyDockerDevice/shadow/update/accepted" # Replace these paths based on the download location of the certificates for the Docker container. rootCAPath = "/path-accessible-in-container/AmazonRootCA1.pem" certificatePath = "/path-accessible-in-container/certId-certificate.pem.crt" privateKeyPath = "/path-accessible-in-container/certId-private.pem.key" # Discover Greengrass cores. discoveryInfoProvider = DiscoveryInfoProvider() discoveryInfoProvider.configureEndpoint(host) discoveryInfoProvider.configureCredentials(rootCAPath, certificatePath, privateKeyPath) discoveryInfoProvider.configureTimeout(10) # 10 seconds. GROUP_CA_PATH = "./groupCA/" MQTT_QOS = 1 discovered = False groupCA = None coreInfo = None try: # Get discovery info from AWS IoT. discoveryInfo = discoveryInfoProvider.discover(thingName) caList = discoveryInfo.getAllCas() coreList = discoveryInfo.getAllCores() # Use first discovery result. groupId, ca = caList[0] coreInfo = coreList[0] # Save the group CA to a local file. groupCA = GROUP_CA_PATH + groupId + "_CA_" + str(uuid.uuid4()) + ".crt" if not os.path.exists(GROUP_CA_PATH): os.makedirs(GROUP_CA_PATH) groupCAFile = open(groupCA, "w") groupCAFile.write(ca) groupCAFile.close() discovered = True except DiscoveryInvalidRequestException as e: print("Invalid discovery request detected!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") except BaseException as e: print("Error in discovery!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) print("Stopping...") myAWSIoTMQTTClient = AWSIoTMQTTClient(clientId) myAWSIoTMQTTClient.configureCredentials(groupCA, privateKeyPath, certificatePath) # Try to connect to the Greengrass core. connected = False for connectivityInfo in coreInfo.connectivityInfoList: currentHost = connectivityInfo.host currentPort = connectivityInfo.port myAWSIoTMQTTClient.configureEndpoint(currentHost, currentPort) try: myAWSIoTMQTTClient.connect() connected = True except BaseException as e: print("Error in connect!") print("Type: %s" % str(type(e))) print("Error message: %s" % str(e)) if connected: break if not connected: print("Cannot connect to core %s. Exiting..." % coreInfo.coreThingArn) sys.exit(-2) # Handle the MQTT message received from GGShadowService. def customCallback(client, userdata, message): print("Received an MQTT message") print(message) # Subscribe to the MQTT topic. myAWSIoTMQTTClient.subscribe(topic, MQTT_QOS, customCallback) # Keep the process alive to listen for messages. while True: time.sleep(1)
Notas de seguridad
Cuando utilice el conector de implementación de la aplicación de Greengrass Docker, tenga en cuenta las siguientes consideraciones de seguridad.
-
Almacenamiento local del archivo de Docker Compose
El conector guarda una copia del archivo de Compose en el directorio especificado con el parámetro de
DockerComposeFileDestinationPath
.Es su responsabilidad proteger este directorio. Debe utilizar los permisos del sistema de archivos para restringir el acceso al directorio.
-
Almacenamiento local de las credenciales de Docker
Si las imágenes de Docker se guardan en repositorios privados, el conector almacenará las credenciales de Docker en el directorio especificado con el parámetro
DockerComposeFileDestinationPath
.Es su responsabilidad proteger estas credenciales. Por ejemplo, debe usar credencial-helper
en el dispositivo central cuando instale Docker Engine. -
Instalar Docker Engine desde una fuente de confianza
Es su responsabilidad instalar Docker Engine desde una fuente de confianza. Este conector utiliza el daemon de Docker del dispositivo central para acceder a sus recursos de Docker y administrar los contenedores de Docker.
-
Alcance de los permisos de rol del grupo de Greengrass
Todos los conectores y funciones de Lambda del grupo de Greengrass pueden asumir los permisos que añada en el rol del grupo de Greengrass. Este conector requiere acceso al archivo de Docker Compose almacenado en un bucket S3. También requiere acceso a su token de autorización de Amazon ECR si sus imágenes de Docker se almacenan en un repositorio privado en Amazon ECR.
Licencias
El conector de implementación de Greengrass Docker incluye las siguientes licencias y software de terceros:
-
AWS SDK for Python (Boto3)
/Apache License 2.0 -
botocore
/Apache License 2.0 -
dateutil
/PSF License -
docutils
/BSD License, GNU General Public License (GPL), Python Software Foundation License, Public Domain -
jmespath
/MIT License -
s3transfer
/Apache License 2.0 -
urllib3
/MIT License
Este conector se publica bajo el contrato de licencia de software de Greengrass Core
Registros de cambios
La siguiente tabla describe los cambios en cada versión del conector.
Versión |
Cambios |
---|---|
7 |
Se agregó |
6 |
Se agregó |
5 |
Las imágenes se extraen antes de ejecutar |
4 |
Para actualizar las imágenes de Docker, se ha añadido el comportamiento de extraer antes de levantar. |
3 |
Se ha corregido un problema con la búsqueda de variables de entorno. |
2 |
Se ha agregado el parámetro |
1 |
Versión inicial. |
Un grupo de Greengrass solo puede contener una versión del conector a la vez. Para obtener información sobre cómo actualizar una versión de conector, consulte Actualización de versiones de los conectores.