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.
Configuración de AWS IoT Greengrass Core
Un núcleo de AWS IoT Greengrass es un objeto (dispositivo) de AWS IoT que actúa como un concentrador o puerta de enlace en entornos de periferia. Al igual que ocurre con otros dispositivos AWS IoT, hay un núcleo en el registro, tiene una sombra de dispositivo y utiliza un certificado de dispositivo para la autenticación con AWS IoT Core y AWS IoT Greengrass. El dispositivo del núcleo ejecuta el software AWS IoT Greengrass Core, que le permite administrar los procesos locales de los grupos de Greengrass, como la comunicación, la sincronización de instantáneas y el intercambio de tokens.
El software AWS IoT Greengrass Core proporciona las siguientes funcionalidades:
-
Implementación y ejecución local de conectores y funciones de Lambda.
-
Procesa los flujos de datos de forma local con exportaciones automáticas a la Nube de AWS.
-
Mensajes MQTT a través de la red local entre dispositivos, conectores y funciones de Lambda mediante suscripciones administradas.
-
Mensajes MQTT entre AWS IoT y dispositivos, conectores y funciones de Lambda mediante suscripciones administradas.
-
Conexiones seguras entre los dispositivos y Nube de AWS mediante la autenticación y la autorización de dispositivos.
-
Sincronización de sombras locales de dispositivos. Las sombras se pueden configurar para sincronizarse con Nube de AWS.
-
Acceso controlado a los recursos del dispositivo local y el volumen.
-
Implementación de modelos de machine learning entrenados en la nube para la ejecución de la inferencia local.
-
Detección automática de direcciones IP que permite a los dispositivos detectar el dispositivo principal de Greengrass.
-
Implementación central de la configuración de grupos nuevos o actualizados. Una vez descargados los datos de configuración, el dispositivo principal se reinicia automáticamente.
-
Actualizaciones de software vía inalámbrica (OTA) para funciones de Lambda definidas por el usuario de manera segura y transparente.
-
Almacenamiento seguro y cifrado de los secretos locales y acceso controlado por conectores y funciones de Lambda.
Archivo de configuración de AWS IoT Greengrass Core
El archivo de configuración del software AWS IoT Greengrass Core es config.json
. Se encuentra en el directorio /
.greengrass-root
/config
nota
greengrass-root
representa la ruta donde está instalado el software de AWS IoT Greengrass Core en su dispositivo. Normalmente, este es el directorio /greengrass
.
Si utiliza la opción Creación de grupo predeterminado de la consola de AWS IoT Greengrass, el archivo config.json
se implementa en el dispositivo principal en un estado de trabajo.
Para revisar el contenido de este archivo, ejecute el siguiente comando:
cat /
greengrass-root
/config/config.json
A continuación se muestra un ejemplo de un archivo config.json
. Esta es la versión que se genera al crear el núcleo de la consola de AWS IoT Greengrass.
Los puntos de conexión del servicio deben coincidir con el tipo de certificado de CA raíz.
Los puntos de enlace de AWS IoT Core y AWS IoT Greengrass deben corresponder al tipo de certificado de entidad de certificación raíz del dispositivo. Si los puntos de enlace y el tipo de certificado no coinciden, se produce un error en los intentos de autenticación entre el dispositivo y AWS IoT Core o AWS IoT Greengrass. Para obtener más información, consulte Autenticación del servidor en la Guía del desarrollador de AWS IoT.
Si su dispositivo utiliza un certificado CA raíz de Amazon Trust Services (ATS), que es el método preferido, también deberá utilizar puntos de conexión ATS para las operaciones del plano de datos de administración y descubrimiento de dispositivos. Los puntos de enlace de ATS incluyen el segmento ats
, como se muestra en la siguiente sintaxis del punto de enlace de AWS IoT Core.
prefix
-ats.iot.region
.amazonaws.com
nota
Para la compatibilidad con versiones anteriores, AWS IoT Greengrass actualmente es compatible con los certificados de entidad de certificación raíz de VeriSign y los puntos de conexión heredados en algunas Región de AWS. Si utiliza un certificado raíz de entidad de certificación de VeriSign heredado, le recomendamos que cree un punto de enlace de ATS y utilice en su lugar un certificado de raíz de entidad de certificación de ATS. De lo contrario, asegúrese de utilizar los puntos de enlace heredados correspondientes. Para obtener más información, consulte Puntos de enlace heredados admitidos en la Referencia general de Amazon Web Services.
Puntos de enlace en config.json
En un dispositivo central de Greengrass, los puntos de enlace se especifican en el objeto coreThing
del archivo config.json. La propiedad iotHost
representa el punto de enlace de AWS IoT Core. La propiedad ggHost
representa el punto de enlace de AWS IoT Greengrass. En el siguiente fragmento de código de ejemplo, estas propiedades especifican puntos de enlace de ATS.
{ "coreThing" : { ... "iotHost" : "abcde1234uwxyz-ats.iot.us-west-2.amazonaws.com", "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com", ... },
- Punto de enlace de AWS IoT Core
-
Para obtener su punto de enlace de AWS IoT Core, ejecute el comando aws iot describe-endpoint de la CLI con el parámetro
--endpoint-type
adecuado.-
Para devolver un punto de enlace firmado por ATS, ejecute:
aws iot describe-endpoint --endpoint-type iot:Data-ATS
-
Para devolver un punto de enlace heredado firmado por VeriSign, ejecute:
aws iot describe-endpoint --endpoint-type iot:Data
-
- Punto de enlace de AWS IoT Greengrass
-
Su punto de enlace de AWS IoT Greengrass es su punto de enlace
iotHost
con el prefijo de host reemplazado por greengrass. Por ejemplo, el punto de enlace firmado por ATS esgreengrass-ats.iot.
. Utiliza la misma región que el punto de enlace de AWS IoT Core.region
.amazonaws.com
Realizar la conexión en el puerto 443 o a través de un proxy de red
Esta característica está disponible en la versión 1.7 y posteriores de AWS IoT Greengrass Core.
Los núcleos de Greengrass se comunican con AWS IoT Core utilizando el protocolo de mensajería MQTT con autenticación de cliente TLS. Convencionalmente, MQTT sobre TLS utiliza el puerto 8883. Sin embargo, como medida de seguridad, los entornos restrictivos podrían limitar el tráfico de entrada y salida a un pequeño rango de puertos TCP. Por ejemplo, el firewall de una compañía podría abrir el puerto 443 para el tráfico HTTPS, pero cerrar otros puertos que se utilizan para protocolos menos frecuentes, como, por ejemplo, el puerto 8883 para tráfico MQTT. Otros entornos restrictivos podrían requerir que todo el tráfico pase a través de un proxy HTTP antes de conectarse a Internet.
Para habilitar la comunicación en estos casos, AWS IoT Greengrass permite las siguientes configuraciones:
-
MQTT con autenticación del cliente de TLS a través del puerto 443. Si su red permite realizar conexiones al puerto 443, puede configurar el núcleo para usar el puerto 443 para tráfico MQTT en lugar del puerto predeterminado 8883. Esto puede ser una conexión directa al puerto 443 o una conexión a través de un servidor proxy de red.
AWS IoT Greengrass utiliza la extensión TLS red de protocolo de capa de aplicación
(ALPN) para habilitar esta conexión. Como en el caso de la configuración predeterminada, MQTT sobre TLS en el puerto 443 utiliza la autenticación de cliente basada en certificados. Cuando se configura para utilizar una conexión directa al puerto 443, el núcleo admite actualizaciones inalámbricas (OTA) para el software AWS IoT Greengrass. Esta compatibilidad requiere AWS IoT Greengrass Core v1.9.3 o posterior.
-
Comunicación HTTPS a través del puerto 443. AWS IoT Greengrass envía el tráfico HTTPS a través del puerto 8443 de forma predeterminada, pero puede configurarlo para que utilice el puerto 443.
-
Conexión a través de un proxy de red. Puede configurar un servidor proxy de red para que actúe como intermediario para conectarse al núcleo de Greengrass. Solo se admiten la autenticación básica y los proxies HTTP y HTTPS.
La configuración del proxy se transfiere a funciones de Lambda definidas por el usuario a través de las variables de entorno
http_proxy
,https_proxy
, yno_proxy
. Las funciones de Lambda definidas por el usuario deben utilizar estos ajustes de transferencia para conectarse a través del proxy. Las bibliotecas comunes utilizadas por las funciones de Lambda para establecer la conexión (como boto3 o cURL y los paquetesrequests
de python) suelen utilizar estas variables de entorno de forma predeterminada. Si una función de Lambda especifica también estas mismas variables de entorno, AWS IoT Greengrass no las invalida.importante
Los núcleos de Greengrass que están configurados para usar un proxy de red no admiten actualizaciones OTA.
Para configurar MQTT a través del puerto 443
Esta característica requiere la versión 1.7 o posterior de AWS IoT Greengrass Core.
Este procedimiento permite que el núcleo de Greengrass utilice el puerto 443 para la mensajería MQTT con AWS IoT Core.
-
Ejecute el siguiente comando para detener el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
Abra
para editarlo como usuario.greengrass-root
/config/config.json -
En el objeto
coreThing
, añada la propiedadiotMqttPort
y establezca el valor en443
, tal y como se muestra en el siguiente ejemplo.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
"iotMqttPort" : 443,
"ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com", "keepAlive" : 600 }, ... } -
Inicie el daemon.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
Para configurar HTTPS a través del puerto 443
Esta característica requiere la versión 1.8 o posterior de AWS IoT Greengrass Core.
Este procedimiento configura el núcleo para usar el puerto 443 para la comunicación HTTPS.
-
Ejecute el siguiente comando para detener el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
Abra
para editarlo como usuario.greengrass-root
/config/config.json -
En el objeto
coreThing
, añada las propiedadesiotHttpPort
eggHttpPort
, tal y como se muestra en el siguiente ejemplo.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com",
"iotHttpPort" : 443,
"ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com","ggHttpPort" : 443,
"keepAlive" : 600 }, ... } -
Inicie el daemon.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
Para configurar un proxy de red
Esta característica requiere la versión 1.7 o posterior de AWS IoT Greengrass Core.
Este procedimiento permite a AWS IoT Greengrass conectarse a Internet a través de un proxy de red HTTP o HTTPS.
-
Ejecute el siguiente comando para detener el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
Abra
para editarlo como usuario.greengrass-root
/config/config.json -
En el objeto
coreThing
, añada el objeto networkProxy, tal y como se muestra en el siguiente ejemplo.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com", "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com", "keepAlive" : 600,
"networkProxy": { "noProxyAddresses" : "http://128.12.34.56,www.mywebsite.com", "proxy" : { "url" : "https://my-proxy-server:1100", "username" : "Mary_Major", "password" : "pass@word1357" } }
}, ... } -
Inicie el daemon.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
Objeto networkProxy
Utilice el objeto networkProxy
para especificar información sobre el proxy de red. Este objeto incluye las siguientes propiedades.
Campo | Descripción |
---|---|
noProxyAddresses |
Opcional. Una lista separada por comas de direcciones IP o nombres de host que están exentos del proxy. |
proxy |
El proxy al que conectar. Un proxy tiene las siguientes propiedades.
|
Permitir puntos de enlace
La comunicación entre los dispositivos Greengrass y AWS IoT Core o AWS IoT Greengrass debe autenticarse. Esta autenticación se basa en certificados de dispositivo X.509 registrados y claves criptográficas. Para permitir que las solicitudes autenticadas se transmitan a través de proxies sin cifrado adicional, permita los puntos de enlace siguientes.
punto de enlace | Puerto | Descripción |
---|---|---|
greengrass. |
443 |
Se utiliza para las operaciones del plano de control para la administración de grupos. |
o
|
MQTT: 8883 o 443 HTTPS: 8443 o 443 |
Se utiliza para las operaciones del plano de datos para la administración de dispositivos, como la sincronización de sombras. Permita el uso uno o ambos puntos de conexión, en función de si el núcleo y los dispositivos de cliente utilizan certificados de entidad de certificación raíz de Amazon Trust Services (opción preferida), certificados de entidad de certificación raíz antiguos o ambos. Para obtener más información, consulte Los puntos de conexión del servicio deben coincidir con el tipo de certificado de CA raíz.. |
o
|
8443 o 443 |
Se utiliza para las operaciones de detección de dispositivos. Permita el uso uno o ambos puntos de conexión, en función de si el núcleo y los dispositivos de cliente utilizan certificados de entidad de certificación raíz de Amazon Trust Services (opción preferida), certificados de entidad de certificación raíz antiguos o ambos. Para obtener más información, consulte Los puntos de conexión del servicio deben coincidir con el tipo de certificado de CA raíz.. notaLos clientes que se conecten por el puerto 443 deben implementar la extensión TLS de Negociación de Protocolo de Capa de Aplicación (ALPN) |
*.s3.amazonaws.com |
443 |
Se utiliza para las operaciones de implementación de dispositivos y las actualizaciones inalámbricas. Este formato incluye el carácter |
logs. |
443 |
Es obligatorio si el grupo de Greengrass está configurado para escribir los registros en CloudWatch. |
Configurar un directorio de escritura para AWS IoT Greengrass
Esta característica está disponible en la versión 1.6 y posteriores de AWS IoT Greengrass Core
De forma predeterminada, el software de AWS IoT Greengrass Core se implementa en un solo directorio raíz donde AWS IoT Greengrass realiza todas las operaciones de lectura y escritura. Sin embargo, puede configurar AWS IoT Greengrass para que utilice un directorio independiente para todas las operaciones de escritura, incluida la creación de directorios y archivos. En este caso, AWS IoT Greengrass utiliza dos directorios de nivel superior:
-
El directorio
greengrass-root
, que puede dejar como lectura-escritura o, si lo desea, solo lectura. Contiene el software de AWS IoT Greengrass Core y otros componentes fundamentales que deben permanecer inmutables durante el tiempo de ejecución, como los certificados yconfig.json
. -
El directorio de escritura especificado. Contiene contenido con permiso de escritura, como registros, información de estado y funciones de Lambda implementadas y definidas por el usuario.
Esta configuración da como resultado la siguiente estructura de directorios.
- Directorio raíz de Greengrass
-
greengrass-root
/ |-- certs/ | |-- root.ca.pem | |--hash
.cert.pem | |--hash
.private.key | |--hash
.public.key |-- config/ | |-- config.json |-- ggc/ | |-- packages/ | |--package-version
/ | |-- bin/ | |-- daemon | |-- greengrassd | |-- lambda/ | |-- LICENSE/ | |-- release_notes_package-version
.html | |-- runtime/ | |-- java8
/ | |-- nodejs8.10
/ | |-- python3.8
/ | |-- core/ - Directorio de escritura
-
write-directory
/ |-- packages/ | |--package-version
/ | |-- ggc_root/ | |-- rootfs_nosys/ | |-- rootfs_sys/ | |-- var/ |-- deployment/ | |-- group/ | |-- group.json | |-- lambda/ | |-- mlmodel/ |-- var/ | |-- log/ | |-- state/
Para configurar un directorio de escritura
-
Ejecute el siguiente comando para detener el daemon de AWS IoT Greengrass:
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
Abra
para editarlo como usuario.greengrass-root
/config/config.json -
Añada
writeDirectory
como parámetro y especifique la ruta al directorio de destino, tal y como se muestra en el siguiente ejemplo.{ "coreThing": { "caPath": "root-CA.pem", "certPath": "hash.pem.crt", ... }, ... "writeDirectory" : "/
write-directory
" }nota
Puede actualizar la configuración
writeDirectory
tantas veces como desee. Después de actualizar la configuración, AWS IoT Greengrass utiliza el directorio de escritura recién especificado en el siguiente inicio, pero no migra contenido desde el directorio de escritura anterior. -
Ahora que el directorio de escritura está configurado, tiene la opción de hacer que el directorio
greengrass-root
sea de solo lectura. Para obtener instrucciones, consulte Cómo hacer que el directorio raíz de Greengrass sea de solo lectura.De lo contrario, inicie el daemon de AWS IoT Greengrass:
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start
Para hacer que el directorio raíz de Greengrass sea de solo lectura
Siga estos pasos solo si desea hacer el directorio raíz de Greengrass de solo lectura. El directorio de escritura debe estar configurado antes de comenzar.
-
Conceda permisos de acceso a directorios necesarios:
-
Otorgue permisos de lectura y escritura al propietario de
config.json
.sudo chmod 0600 /
greengrass-root
/config/config.json -
Haga a ggc_user el propietario de los certificados y los directorios Lambda del sistema.
sudo chown -R ggc_user:ggc_group /
greengrass-root
/certs/ sudo chown -R ggc_user:ggc_group /greengrass-root
/ggc/packages/1.11.6/lambda/nota
Las cuentas ggc_user y ggc_group se utilizan de forma predeterminada para ejecutar funciones de Lambda del sistema. Si ha configurado la identidad de acceso predeterminada de nivel de grupo para utilizar distintas cuentas, debe proporcionar permisos a dicho usuario (UID) y grupo (GID) en su lugar.
-
-
Haga que el directorio raíz
greengrass-root
sea de solo lectura empleando el mecanismo que prefiera.nota
Una forma para que el directorio raíz
greengrass-root
sea de solo lectura es montar el directorio como de solo lectura. Sin embargo, para aplicar actualizaciones OTA al software de AWS IoT Greengrass Core en un directorio montado, en primer lugar es necesario desmontar el directorio y luego volver a montarlo después de la actualización. Puede añadir estas operacionesumount
ymount
a los scriptsota_pre_update
yota_post_update
. Para obtener más información sobre las actualizaciones OTA, consulte Agente de actualización de OTA para Greengrass y Regeneración administrada con actualizaciones OTA. -
Inicie el daemon.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd startSi los permisos del paso 1 no están establecidos correctamente, el daemon no se iniciará.
Configuración de MQTT
En el entorno de AWS IoT Greengrass, los dispositivos cliente locales, las funciones de Lambda, los conectores y los componentes del sistema pueden comunicarse entre sí y con AWS IoT Core. Toda la comunicación pasa por el núcleo, que gestiona las suscripciones que autorizan la comunicación MQTT entre entidades.
Para obtener información sobre la configuración de MQTT para la que puede configurar AWS IoT Greengrass, consulte las siguientes secciones:
nota
OPC-UA es un estándar de intercambio de información para la comunicación industrial. Para implementar la compatibilidad con OPC-UA en el dispositivo principal de Greengrass, puede usar el conector IoT SiteWise. El conector envía datos de dispositivos industriales desde servidores de OPC-UA a propiedades de recursos en AWS IoT SiteWise.
Mensaje de calidad del servicio
AWS IoT Greengrass admite niveles de calidad de servicio (QoS) 0 o 1, dependiendo de su configuración y del destino y la dirección de la comunicación. El núcleo de Greengrass actúa como cliente para la comunicación con AWS IoT Core y como agente de mensajes para la comunicación en la red local.

Para obtener más información sobre MQTT y QoS, consulte Introducción
- Comunicación con el Nube de AWS
-
-
Los mensajes salientes usan QoS 1
El núcleo envía mensajes a los destinos de Nube de AWS mediante QoS 1. AWS IoT Greengrass utiliza una cola de mensajes MQTT para procesar estos mensajes. Si AWS IoT no confirma la entrega de mensajes, el mensaje se pone en cola para intentarlo más tarde. No se puede volver a intentar enviar el mensaje si la cola está llena. La confirmación de entrega del mensaje puede ayudar a minimizar la pérdida de datos provocada por la conectividad intermitente.
Como los mensajes salientes a AWS IoT utilizan QoS 1, la velocidad máxima a la que el núcleo de Greengrass puede enviar mensajes depende de la latencia entre el núcleo y AWS IoT. Cada vez que el núcleo envía un mensaje, espera a que AWS IoT confirme el mensaje antes de enviar el siguiente mensaje. Por ejemplo, si el tiempo de ida y vuelta entre el núcleo y su Región de AWS es de 50 milisegundos, el núcleo puede enviar hasta 20 mensajes por segundo. Tenga en cuenta este comportamiento al elegir la Región de AWS donde se conecta el núcleo. Para transferir datos de IoT de gran volumen a la Nube de AWS, puede usar el administrador de flujos.
Para obtener más información sobre la cola de mensajes MQTT, incluyendo cómo configurar una caché de almacenamiento local que pueda persistir los mensajes destinados a los objetivos de la Nube de AWS, consulte Cola de mensajes MQTT para objetivos en la nube.
-
Los mensajes entrantes usan QoS 0 (predeterminado) o QoS 1
De forma predeterminada, el núcleo se suscribe con QoS 0 a mensajes de fuentes de la Nube de AWS. Si habilita sesiones persistentes, el núcleo se suscribe con QoS 1. Esto puede ayudar a minimizar la pérdida de datos debido a la conectividad intermitente. Para administrar la QoS para estas suscripciones, configure la configuración de persistencia en el componente del sistema de cola de impresión local.
Para obtener más información, incluida la forma de habilitar el núcleo para establecer una sesión persistente con los destinos de la Nube de AWS, consulte Sesiones persistentes de MQTT con AWS IoT Core.
-
- Comunicación con objetivos locales
-
Todas las comunicaciones locales usan QoS 0. El núcleo intenta enviar un mensaje a un destino local, que puede ser una función de Lambda de Greengrass, un conector o un dispositivo de cliente. El núcleo no almacena mensajes ni confirma entrega. Los mensajes se pueden dejar en cualquier lugar entre los componentes.
nota
Aunque la comunicación directa entre funciones de Lambda no utiliza mensajería MQTT, el comportamiento es el mismo.
Cola de mensajes MQTT para objetivos en la nube
Los mensajes MQTT que se destinan a destinos en la Nube de AWS se ponen en la cola a la espera de procesamiento. Los mensajes en la cola se procesan siguiendo el orden primero en entrar, primero en salir (FIFO). Después de procesar un mensaje y publicarlo en AWS IoT Core, el mensaje se elimina de la cola.
Por defecto, el núcleo de Greengrass almacena en memoria los mensajes no procesados destinados a los objetivos en la Nube de AWS. En su lugar, puede configurar el núcleo para almacenar mensajes sin procesar en una caché de almacenamiento local. A diferencia del almacenamiento en memoria, el almacenamiento en caché local tiene la capacidad de persistir a través de reinicios del núcleo (por ejemplo, después de la implementación de un grupo o reinicio de un dispositivo), por lo que AWS IoT Greengrass puede continuar procesando mensajes. También puede configurar el tamaño del almacenamiento.
aviso
El núcleo de Greengrass puede poner en cola los mensajes MQTT duplicados cuando pierde la conexión, ya que vuelve a intentar una operación de publicación antes de que el cliente MQTT detecte que está desconectado. Para evitar la duplicación de mensajes MQTT para los destinos en la nube, configure el valor del núcleo en menos de la keepAlive
mitad de su valor mqttOperationTimeout
. Para obtener más información, consulte Archivo de configuración de AWS IoT Greengrass Core.
AWS IoT Greengrass utiliza el componente del sistema de cola de impresión (la función de Lambda de GGCloudSpooler
) para administrar la cola de mensajes. Puede utilizar las siguientes variables de entorno GGCloudSpooler
para configurar los valores de almacenamiento.
-
GG_CONFIG_STORAGE_TYPE. La ubicación de la cola de mensajes. Los siguientes valores son válidos:
-
FileSystem
. Almacene mensajes sin procesar en la caché de almacenamiento local en el disco del dispositivo central físico. Cuando el núcleo se reinicia, se conservan los mensajes que hay en cola a la espera de procesamiento. Los mensajes se eliminan después de que se procesan. -
Memory
(predeterminada). Almacena los mensajes sin procesar en la memoria. Cuando el núcleo se reinicia, los mensajes en la cola se pierden.Esta opción está optimizada para dispositivos con capacidades limitadas de hardware. Si se utiliza esta configuración, le recomendamos que implemente grupos o reinicie el dispositivo en un momento en el que la interrupción del servicio sea mínima.
-
-
GG_CONFIG_MAX_SIZE_BYTES. El tamaño de almacenamiento en bytes. Este valor puede ser cualquier número entero que no sea negativo superior o igual a 262144 (256 KB); un tamaño más pequeño impide que se inicie el software de AWS IoT Greengrass Core. El valor predeterminado es 2.5 MB de tamaño. Cuando se alcanza el límite de tamaño, los mensajes en cola más antiguos se sustituyen por mensajes nuevos.
nota
Esta característica está disponible en la versión 1.6 y posteriores de AWS IoT Greengrass Core Las versiones anteriores utilizan almacenamiento en memoria con un tamaño de cola de 2,5 MB. No puede ajustar la configuración de almacenamiento para versiones anteriores.
Para almacenar los mensajes en la caché local
Puede configurar AWS IoT Greengrass para almacenar los mensajes en caché en el sistema de archivos de modo que persistan entre los reinicios del núcleo. Para ello, se implementa una versión de definición de característica en la que la característica GGCloudSpooler
establece el tipo de almacenamiento en FileSystem
. Debe utilizar la API de AWS IoT Greengrass para configurar el almacenamiento en caché local. No puede hacer esto en la consola.
En el procedimiento siguiente, se usa el comando de CLI create-function-definition-version
para configurar la cola de impresión para que guarde los mensajes que hay en cola en el sistema de archivos. También configura un tamaño de cola de 2.6 MB.
-
Obtenga los ID de la versión de grupo y grupo de Greengrass de destino. En este procedimiento, suponemos que estos son el último grupo y la última versión de grupo. La siguiente consulta devuelve el grupo creado más recientemente.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
También puede hacer la consulta por nombre. No es necesario que los nombres de grupo sean únicos, por lo que podrían devolverse varios grupos.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"nota
También puede encontrar estos valores en la consola de AWS IoT. El ID de grupo se muestra en la página Settings (Configuración) del grupo. Los ID de versión del grupo se muestran en la pestaña Implementaciones del grupo.
-
Copie los valores
Id
yLatestVersion
del grupo de destino en la salida. -
Obtenga la última versión del grupo.
-
Reemplace
id-grupo
con elId
que ha copiado. -
Reemplace
id-última-versión-grupo
con laLatestVersion
que ha copiado.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idlatest-group-version-id
-
-
Desde el objeto
Definition
de la salida, copie elCoreDefinitionVersionArn
y los ARN de todos los demás componentes de grupo exceptoFunctionDefinitionVersionArn
. Utilizará estos valores cuando cree una nueva versión del grupo. -
Desde
FunctionDefinitionVersionArn
en el resultado, copie el ID de la definición de la característica. El ID es el GUID que va detrás del segmentofunctions
en el ARN, tal y como se muestra en el siguiente ejemplo.arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
nota
O puede crear una definición de la función ejecutando el comando
create-function-definition
y luego copiar el ID del resultado. -
Añada una versión de definición de la función a la definición de la característica.
-
Reemplace
function-definition-id
con elId
que ha copiado de la definición de la función. -
Reemplace
arbitrary-function-id
con un nombre para la función, como, por ejemplo,spooler-function
. -
Agregue las funciones de Lambda que desea incluir en esta versión de la matriz de
functions
. Puede utilizar el comandoget-function-definition-version
para obtener las funciones de Lambda de Greengrass de una versión de la definición de característica existente.
aviso
Asegúrese de que se especifica un valor para
GG_CONFIG_MAX_SIZE_BYTES
que sea mayor o igual a 262144. Un tamaño más pequeño impide que se inicie el software de AWS IoT Greengrass Core.aws greengrass create-function-definition-version \ --function-definition-id
function-definition-id
\ --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_MAX_SIZE_BYTES":"2621440","GG_CONFIG_STORAGE_TYPE":"FileSystem"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id
"}]'nota
Si previamente configuró la variable de entorno
GG_CONFIG_SUBSCRIPTION_QUALITY
para admitir sesiones persistentes con AWS IoT Core, inclúyala en esta instancia de función. -
-
Copie el
Arn
de la versión de definición de la característica del resultado. -
Cree una versión de grupo que contenga la función de Lambda del sistema.
-
Reemplace
id-grupo
con elId
del grupo. -
Reemplace
arn-versión-definición-núcleo
con elCoreDefinitionVersionArn
que ha copiado de la última versión del grupo. -
Reemplace
function-definition-version-arn
con elArn
que ha copiado para la nueva versión de definición de la característica. -
Reemplace los ARN para otros componentes del grupo (por ejemplo,
SubscriptionDefinitionVersionArn
oDeviceDefinitionVersionArn
) que ha copiado de la última versión del grupo. -
Elimine los parámetros no utilizados. Por ejemplo, elimine
--resource-definition-version-arn
si la versión de su grupo no contiene ningún recurso.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --device-definition-version-arndevice-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
\ --resource-definition-version-arnresource-definition-version-arn
\ --subscription-definition-version-arnsubscription-definition-version-arn
-
-
Copie la
Version
del resultado. Este es el ID de la nueva versión del grupo. -
Implemente el grupo con la nueva versión del grupo.
-
Reemplace
id-grupo
con elId
que ha copiado para el grupo. -
Reemplace
id-versión-grupo
con elVersion
que ha copiado para el nuevo grupo.
aws greengrass create-deployment \ --group-id
group-id
\ --group-version-idgroup-version-id
\ --deployment-type NewDeployment -
Para actualizar la configuración de almacenamiento, utilice la API de AWS IoT Greengrass para crear una nueva versión de la definición de la característica que contenga la característica GGCloudSpooler
con la configuración actualizada. A continuación, añada la versión de la definición de la característica a una nueva versión del grupo (junto con los demás componentes del grupo) e implemente la versión del grupo. Si desea restaurar la configuración predeterminada, puede implementar una versión de definición de la característica que no incluya la característica GGCloudSpooler
.
Esta función de Lambda del sistema no es visible en la consola. Sin embargo, después de que la función se añade a la última versión del grupo, se incluye en las implementaciones que se realizan desde la consola (a menos que utilice la API para sustituirla o eliminarla).
Sesiones persistentes de MQTT con AWS IoT Core
Esta característica está disponible para AWS IoT Greengrass Core v1.10 y versiones posteriores.
Un núcleo de Greengrass puede establecer una sesión persistente con el agente de mensajes de AWS IoT. Una sesión persistente es una conexión continua que permite al núcleo recibir mensajes enviados mientras el núcleo está fuera de línea. El núcleo es el cliente en la conexión.
En una sesión persistente, el agente de mensajes AWS IoT guarda todas las suscripciones que realiza el núcleo durante la conexión. Si el núcleo se desconecta, el agente de mensajes de AWS IoT almacena mensajes nuevos y no reconocidos publicados como QoS 1 y destinados a destinos locales, como funciones de Lambda y dispositivos de cliente. Cuando el núcleo se vuelve a conectar, la sesión persistente se reanuda y el agente de mensajes de AWS IoT envía mensajes almacenados al núcleo a una velocidad máxima de 10 mensajes por segundo. Las sesiones persistentes tienen un período de caducidad predeterminado de 1 hora, que comienza cuando el agente de mensajes detecta que el núcleo se desconecta. Para obtener más información, consulte Sesiones persistentes de MQTT en la Guía del desarrollador de AWS IoT.
AWS IoT Greengrass utiliza el componente del sistema de cola de impresión (la función de Lambda de GGCloudSpooler
) para crear suscripciones que tengan AWS IoT como origen. Puede utilizar la siguiente variable de entorno GGCloudSpooler
para configurar sesiones persistentes.
-
GG_CONFIG_SUBSCRIPTION_QUALITY. La calidad de las suscripciones que tienen AWS IoT como origen. Los siguientes valores son válidos:
-
AtMostOnce
(predeterminada). Deshabilita las sesiones persistentes. Las suscripciones usan QoS 0. -
AtLeastOncePersistent
. Habilita sesiones persistentes. Establece el indicadorcleanSession
a0
en mensajesCONNECT
y se suscribe con QoS 1.Se garantiza que los mensajes publicados con QoS 1 que recibe el núcleo lleguen a la cola de trabajo en memoria del daemon Greengrass. El núcleo reconoce el mensaje después de añadirlo a la cola. La comunicación posterior de la cola al destino local (por ejemplo, la función de Lambda de Greengrass, conector o dispositivo) se envía como QoS 0. AWS IoT Greengrass no garantiza la entrega a los destinos locales.
nota
Puede utilizar la propiedad de configuración MaxWorkItemCount para controlar el tamaño de la cola de elementos de trabajo. Por ejemplo, puede aumentar el tamaño de la cola si su carga de trabajo requiere mucho tráfico MQTT.
Cuando las sesiones persistentes están habilitadas, el núcleo abre al menos una conexión adicional para el intercambio de mensajes MQTT con AWS IoT. Para obtener más información, consulte ID de cliente para conexiones MQTT con AWS IoT.
-
Para configurar sesiones persistentes de MQTT
Puede configurar AWS IoT Greengrass para usar sesiones persistentes con AWS IoT Core. Para ello, se implementa una versión de definición de función en la que la función GGCloudSpooler
establece la calidad de suscripción en AtLeastOncePersistent
. Esta configuración se aplica a todas las suscripciones que tengan AWS IoT Core (cloud
) como origen. Debe usar la API AWS IoT Greengrass para configurar sesiones persistentes. No puede hacer esto en la consola.
El siguiente procedimiento utiliza el comando de la CLI create-function-definition-version
para configurar el spooler para que utilice sesiones persistentes. En este procedimiento suponemos que va a actualizar la configuración de la versión más reciente de un grupo existente.
-
Obtenga los ID de la versión de grupo y grupo de Greengrass de destino. En este procedimiento, suponemos que estos son el último grupo y la última versión de grupo. La siguiente consulta devuelve el grupo creado más recientemente.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
También puede hacer la consulta por nombre. No es necesario que los nombres de grupo sean únicos, por lo que podrían devolverse varios grupos.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"nota
También puede encontrar estos valores en la consola de AWS IoT. El ID de grupo se muestra en la página Settings (Configuración) del grupo. Los ID de versión del grupo se muestran en la pestaña Implementaciones del grupo.
-
Copie los valores
Id
yLatestVersion
del grupo de destino en la salida. -
Obtenga la última versión del grupo.
-
Reemplace
id-grupo
con elId
que ha copiado. -
Reemplace
id-última-versión-grupo
con laLatestVersion
que ha copiado.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idlatest-group-version-id
-
-
Desde el objeto
Definition
de la salida, copie elCoreDefinitionVersionArn
y los ARN de todos los demás componentes de grupo exceptoFunctionDefinitionVersionArn
. Utilizará estos valores cuando cree una nueva versión del grupo. -
Desde
FunctionDefinitionVersionArn
en el resultado, copie el ID de la definición de la característica. El ID es el GUID que va detrás del segmentofunctions
en el ARN, tal y como se muestra en el siguiente ejemplo.arn:aws:greengrass:us-west-2:123456789012:/greengrass/definition/functions/bcfc6b49-beb0-4396-b703-6dEXAMPLEcu5/versions/0f7337b4-922b-45c5-856f-1aEXAMPLEsf6
nota
O puede crear una definición de la función ejecutando el comando
create-function-definition
y luego copiar el ID del resultado. -
Añada una versión de definición de la función a la definición de la característica.
-
Reemplace
function-definition-id
con elId
que ha copiado de la definición de la función. -
Reemplace
arbitrary-function-id
con un nombre para la función, como, por ejemplo,spooler-function
. -
Agregue las funciones de Lambda que desea incluir en esta versión de la matriz de
functions
. Puede utilizar el comandoget-function-definition-version
para obtener las funciones de Lambda de Greengrass de una versión de la definición de característica existente.
aws greengrass create-function-definition-version \ --function-definition-id
function-definition-id
\ --functions '[{"FunctionArn": "arn:aws:lambda:::function:GGCloudSpooler:1","FunctionConfiguration": {"Environment": {"Variables":{"GG_CONFIG_SUBSCRIPTION_QUALITY":"AtLeastOncePersistent"}},"Executable": "spooler","MemorySize": 32768,"Pinned": true,"Timeout": 3},"Id": "arbitrary-function-id
"}]'nota
Si previamente ha establecido las variables de entorno
GG_CONFIG_STORAGE_TYPE
oGG_CONFIG_MAX_SIZE_BYTES
para definir la configuración de almacenamiento, inclúyalas en esta instancia de característica. -
-
Copie el
Arn
de la versión de definición de la característica del resultado. -
Cree una versión de grupo que contenga la función de Lambda del sistema.
-
Reemplace
id-grupo
con elId
del grupo. -
Reemplace
arn-versión-definición-núcleo
con elCoreDefinitionVersionArn
que ha copiado de la última versión del grupo. -
Reemplace
function-definition-version-arn
con elArn
que ha copiado para la nueva versión de definición de la característica. -
Reemplace los ARN para otros componentes del grupo (por ejemplo,
SubscriptionDefinitionVersionArn
oDeviceDefinitionVersionArn
) que ha copiado de la última versión del grupo. -
Elimine los parámetros no utilizados. Por ejemplo, elimine
--resource-definition-version-arn
si la versión de su grupo no contiene ningún recurso.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --device-definition-version-arndevice-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
\ --resource-definition-version-arnresource-definition-version-arn
\ --subscription-definition-version-arnsubscription-definition-version-arn
-
-
Copie la
Version
del resultado. Este es el ID de la nueva versión del grupo. -
Implemente el grupo con la nueva versión del grupo.
-
Reemplace
id-grupo
con elId
que ha copiado para el grupo. -
Reemplace
id-versión-grupo
con elVersion
que ha copiado para el nuevo grupo.
aws greengrass create-deployment \ --group-id
group-id
\ --group-version-idgroup-version-id
\ --deployment-type NewDeployment -
-
(Opcional) Aumente la propiedad MaxWorkItemCount en el archivo de configuración principal. Esto puede ayudar al núcleo a manejar el mayor tráfico MQTT y la comunicación con los destinos locales.
Para actualizar la configuración de almacenamiento, utilice la API de AWS IoT Greengrass para crear una nueva versión de la definición de la característica que contenga la característica GGCloudSpooler
con la configuración actualizada. A continuación, añada la versión de la definición de la característica a una nueva versión del grupo (junto con los demás componentes del grupo) e implemente la versión del grupo. Si desea restaurar la configuración predeterminada, puede crear una versión de definición de la función que no incluya la función GGCloudSpooler
.
Esta función de Lambda del sistema no es visible en la consola. Sin embargo, después de que la función se añade a la última versión del grupo, se incluye en las implementaciones que se realizan desde la consola (a menos que utilice la API para sustituirla o eliminarla).
ID de cliente para conexiones MQTT con AWS IoT
Esta característica está disponible en la versión 1.8 y posteriores de AWS IoT Greengrass Core.
El núcleo de Greengrass abre conexiones MQTT con AWS IoT Core para operaciones como la sincronización de sombras y la administración de certificados. Para estas conexiones, el núcleo genera los ID de cliente predecibles en función del nombre del objeto de núcleo. Los ID de cliente predecibles se puede utilizar con las características de monitorización, auditoría y precios, incluidos AWS IoT Device Defender y eventos de ciclo de vida de AWS IoT. También puede crear lógica en torno a los ID de cliente predecibles (por ejemplo, plantillas de política de suscripción basadas en atributos del certificado).
nota
La duplicación de ID de cliente en conexiones simultáneas puede provocar un bucle infinito de conexión-desconexión. Esto puede ocurrir si otro dispositivo está codificado para utilizar el nombre de dispositivo de núcleo como ID de cliente en las conexiones. Para obtener más información, consulte este paso de solución de problemas.
Los dispositivos de Greengrass también están plenamente integrados con el servicio de indexación de flotas de AWS IoT Device Management. Esto le permite indexar y buscar dispositivos basados en atributos de dispositivo, estado de sombra y estado de conexión en la nube. Por ejemplo, los dispositivos de Greengrass establecen al menos una conexión que utiliza el nombre de objeto como ID de cliente, a fin de que pueda utilizar la indexación de conectividad para detectar los dispositivos de Greengrass que están actualmente conectados a AWS IoT Core o desconectados de este. Para obtener más información, consulte Servicio de indexación de flotas en la Guía del desarrollador de AWS IoT.
Configuración del puerto MQTT para mensajería local
Esta característica requiere la versión 1.10 o posterior de AWS IoT Greengrass Core.
El núcleo de Greengrass actúa como agente de mensajes local para la mensajería MQTT entre funciones de Lambda locales, conectores y dispositivos de cliente. De forma predeterminada, el núcleo utiliza el puerto 8883 para el tráfico MQTT en la red local. Es posible que desee cambiar el puerto para evitar un conflicto con otro software que se ejecute en el puerto 8883.
Para configurar el número de puerto que utiliza el núcleo para el tráfico MQTT local
-
Ejecute el siguiente comando para detener el daemon de Greengrass.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd stop -
Abra
para editarlo como usuario.greengrass-root
/config/config.json -
En el objeto de
coreThing
, añada la propiedad deggMqttPort
y fije el valor en el número de puerto que desee utilizar. Los valores válidos son de 1024 a 65535. En el siguiente ejemplo se fija el número de puerto en9000
.{ "coreThing" : { "caPath" : "root.ca.pem", "certPath" : "12345abcde.cert.pem", "keyPath" : "12345abcde.private.key", "thingArn" : "arn:aws:iot:us-west-2:123456789012:thing/core-thing-name", "iotHost" : "abcd123456wxyz-ats.iot.us-west-2.amazonaws.com", "ggHost" : "greengrass-ats.iot.us-west-2.amazonaws.com",
"ggMqttPort" : 9000,
"keepAlive" : 600 }, ... } -
Inicie el daemon.
cd /
greengrass-root
/ggc/core/ sudo ./greengrassd start -
Si la detección automática de IP está habilitada para el núcleo, la configuración está completa.
Si la detección automática de IP no está habilitada, debe actualizar la información de conectividad del núcleo. Esto permite que los dispositivos de cliente reciban el número de puerto correcto durante las operaciones de detección para adquirir información de conectividad básica. Puede utilizar la consola de AWS IoT o la API de AWS IoT Greengrass para actualizar la información de conectividad básica. En este procedimiento, solo se actualiza el número de puerto. La dirección IP local del núcleo sigue siendo la misma.
- Para actualizar la información de conectividad del núcleo (consola)
-
-
En la página de configuración del grupo, elija el núcleo de Greengrass.
-
En la página de detalles principales, elija la pestaña Puntos de conexión de agente MQTT.
-
Seleccione Gestionar puntos de conexión y, a continuación, seleccione Añadir punto de conexión
-
Introduzca su dirección IP local actual y el nuevo número de puerto. En el siguiente ejemplo se fija el número de puerto de
9000
para la dirección IP192.168.1.8
. -
Elimine el punto de enlace obsoleto y, a continuación, seleccione Update (Actualizar)
-
- Para actualizar la información de conectividad del núcleo (API)
-
-
Utilice la acción UpdateConnectivityInfo. En el siguiente ejemplo se utiliza
update-connectivity-info
en AWS CLI para fijar el número de puerto de9000
para la dirección IP192.168.1.8
.aws greengrass update-connectivity-info \ --thing-name "MyGroup_Core" \ --connectivity-info "[{\"Metadata\":\"\",\"PortNumber\":9000,\"HostAddress\":\"192.168.1.8\",\"Id\":\"localIP_192.168.1.8\"},{\"Metadata\":\"\",\"PortNumber\":8883,\"HostAddress\":\"127.0.0.1\",\"Id\":\"localhost_127.0.0.1_0\"}]"
-
nota
También puede configurar el puerto que utiliza el núcleo para la mensajería MQTT con AWS IoT Core. Para obtener más información, consulte Realizar la conexión en el puerto 443 o a través de un proxy de red.
Tiempo de espera para las operaciones de publicación, suscripción y cancelación de suscripción en las conexiones MQTT con la Nube de AWS
Esta característica está disponible en AWS IoT Greengrass v1.10.2 o posterior.
Puede configurar la cantidad de tiempo (en segundos) para permitir que el núcleo de Greengrass complete una operación de publicación, suscripción o cancelación de suscripción en las conexiones MQTT con AWS IoT Core. Puede que desee ajustar esta configuración si se agota el tiempo de espera de las operaciones debido a restricciones de ancho de banda o a una alta latencia. Para establecer esta configuración en el archivo config.json, agregue o cambie la propiedad mqttOperationTimeout
en el objeto coreThing
. Por ejemplo:
{ "coreThing": { "mqttOperationTimeout": 10, "caPath": "root-ca.pem", "certPath": "
hash
.cert.pem", "keyPath": "hash
.private.key", ... }, ... }
El tiempo de espera predeterminado es de 5 segundos. El tiempo de espera mínimo es de 5 segundos.
Activación de la detección automática de IP
Puede configurar AWS IoT Greengrass para permitir que los dispositivos cliente de un grupo de Greengrass descubran automáticamente el núcleo de Greengrass. Cuando está activado, el núcleo vigila los cambios en sus direcciones IP. Si una dirección cambia, el núcleo publica una lista actualizada de direcciones. Estas direcciones se ponen a disposición de los dispositivos cliente que estén en el mismo grupo de Greengrass que el núcleo.
nota
La política AWS IoT para los dispositivos de cliente debe conceder el permiso greengrass:Discover
que permita a los dispositivos extraer la información de conectividad del núcleo. Para obtener más información sobre esta instrucción de política, consulte Autorización de detección.
Para activar esta característica desde la consola AWS IoT Greengrass, elija Detección automática cuando implementación su grupo de Greengrass por primera vez. También puede activar o desactivar esta característica en la página de configuración del grupo seleccionando la pestaña Funciones de Lambda y seleccionando el detector IP. La detección automática de IP está activada si se selecciona Detectar y anular automáticamente los puntos de conexión del agente MQTT.
Para gestionar la detección automática con la API AWS IoT Greengrass, debe configurar la función de Lambda IPDetector
del sistema. El siguiente procedimiento muestra cómo utilizar el comando CLI create-function-definition-version para configurar la detección automática del núcleo de Greengrass.
-
Obtenga los ID de la versión de grupo y grupo de Greengrass de destino. En este procedimiento, suponemos que estos son el último grupo y la última versión de grupo. La siguiente consulta devuelve el grupo creado más recientemente.
aws greengrass list-groups --query "reverse(sort_by(Groups, &CreationTimestamp))[0]"
También puede hacer la consulta por nombre. No es necesario que los nombres de grupo sean únicos, por lo que podrían devolverse varios grupos.
aws greengrass list-groups --query "Groups[?Name=='
MyGroup
']"nota
También puede encontrar estos valores en la consola de AWS IoT. El ID de grupo se muestra en la página Settings (Configuración) del grupo. Los ID de versión del grupo se muestran en la pestaña Implementaciones del grupo.
-
Copie los valores
Id
yLatestVersion
del grupo de destino en la salida. -
Obtenga la última versión del grupo.
-
Reemplace
id-grupo
con elId
que ha copiado. -
Reemplace
id-última-versión-grupo
con laLatestVersion
que ha copiado.
aws greengrass get-group-version \ --group-id
group-id
\ --group-version-idlatest-group-version-id
-
-
Desde el objeto
Definition
de la salida, copie elCoreDefinitionVersionArn
y los ARN de todos los demás componentes de grupo exceptoFunctionDefinitionVersionArn
. Utilizará estos valores cuando cree una nueva versión del grupo. -
En el objeto
FunctionDefinitionVersionArn
de la salida, copie el ID y la versión de la definición de funciones:arn:aws:greengrass:
region
:account-id
:/greengrass/groups/function-definition-id
/versions/function-definition-version-id
nota
Si lo desea, para crear una definición de la función ejecute el comando
create-function-definition
y luego copie el ID del resultado. -
Utilice el comando
get-function-definition-version
para obtener la definición de estado actual. Utilice el valor defunction-definition-id
que copió para la definición de funciones. Por ejemplo,4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3
.aws greengrass get-function-definition-version --function-definition-id
function-definition-id
--function-definition-version-idfunction-definition-version-id
Anote las configuraciones de las funciones que aparecen. Tendrá que incluirlas cuando cree una nueva versión de la definición de funciones para evitar que se pierda la configuración de la definición actual.
-
Añada una versión de definición de la función a la definición de la característica.
-
Reemplace
function-definition-id
con elId
que ha copiado de la definición de la función. Por ejemplo,4d941bc7-92a1-4f45-8d64-EXAMPLEf76c3
. -
Reemplace
arbitrary-function-id
con un nombre para la función, como, por ejemplo,auto-detection-function
. -
Añada en la matriz de
functions
todas las funciones de Lambda que desee incluir en esta versión, por ejemplo, las funciones mostradas en el paso anterior.
aws greengrass create-function-definition-version \ --function-definition-id
function-definition-id
\ --functions '[{"FunctionArn":"arn:aws:lambda:::function:GGIPDetector:1","Id":"arbitrary-function-id
","FunctionConfiguration":{"Pinned":true,"MemorySize":32768,"Timeout":3}}]'\ --region us-west-2 -
-
Copie el
Arn
de la versión de definición de la característica del resultado. -
Cree una versión de grupo que contenga la función de Lambda del sistema.
-
Reemplace
id-grupo
con elId
del grupo. -
Reemplace
arn-versión-definición-núcleo
con elCoreDefinitionVersionArn
que ha copiado de la última versión del grupo. -
Reemplace
function-definition-version-arn
con elArn
que ha copiado para la nueva versión de definición de la característica. -
Reemplace los ARN para otros componentes del grupo (por ejemplo,
SubscriptionDefinitionVersionArn
oDeviceDefinitionVersionArn
) que ha copiado de la última versión del grupo. -
Elimine los parámetros no utilizados. Por ejemplo, elimine
--resource-definition-version-arn
si la versión de su grupo no contiene ningún recurso.
aws greengrass create-group-version \ --group-id
group-id
\ --core-definition-version-arncore-definition-version-arn
\ --function-definition-version-arnfunction-definition-version-arn
\ --device-definition-version-arndevice-definition-version-arn
\ --logger-definition-version-arnlogger-definition-version-arn
\ --resource-definition-version-arnresource-definition-version-arn
\ --subscription-definition-version-arnsubscription-definition-version-arn
-
-
Copie la
Version
del resultado. Este es el ID de la nueva versión del grupo. -
Implemente el grupo con la nueva versión del grupo.
-
Reemplace
id-grupo
con elId
que ha copiado para el grupo. -
Reemplace
id-versión-grupo
con elVersion
que ha copiado para el nuevo grupo.
aws greengrass create-deployment \ --group-id
group-id
\ --group-version-idgroup-version-id
\ --deployment-type NewDeployment -
Si desea introducir manualmente la dirección IP del núcleo de Greengrass, puede realizar este tutorial con una definición de funciones diferente y no incluir la función IPDetector
. Esto impedirá que la función de detección pueda localizar e introducir automáticamente la dirección IP del núcleo de Greengrass.
Esta función de Lambda del sistema no es visible en la consola de Lambda. Una vez que la función se agregue a la última versión del grupo, se incluye en las implementaciones que se realizan desde la consola, a menos que se utilice la API para sustituirla o eliminarla.
Configurar el sistema Init para que inicie el daemon de Greengrass
Es una buena práctica configurar el sistema init para que inicie el daemon de Greengrass durante el arranque, especialmente si administra grandes flotas de dispositivos.
nota
Si ha utilizado apt
para instalar el software AWS IoT Greengrass Core, puede utilizar los scripts systemd para habilitar el inicio en el arranque. Para obtener más información, consulte Uso de scripts de systemd para administrar el ciclo de vida del demonio de Greengrass.
Existen diferentes tipos de sistema init, como initd, systemd y SystemV, que utilizan parámetros de configuración similares. En el siguiente ejemplo se muestra un archivo de servicio para systemd. El parámetro Type
se establece en forking
porque greengrassd (que se utiliza para iniciar Greengrass) bifurca el proceso del daemon de Greengrass y el parámetro Restart
está establecido en on-failure
para indicar a systemd que reinicie Greengrass si Greengrass entra en un estado de error.
nota
Para ver si su dispositivo usa systemd, ejecute el script check_ggc_dependencies
como se describe en el Módulo 1. A continuación, para utilizar systemd, asegúrese de que el parámetro useSystemd
en config.json está establecido en yes
.
[Unit] Description=Greengrass Daemon [Service] Type=forking PIDFile=/var/run/greengrassd.pid Restart=on-failure ExecStart=/greengrass/ggc/core/greengrassd start ExecReload=/greengrass/ggc/core/greengrassd restart ExecStop=/greengrass/ggc/core/greengrassd stop [Install] WantedBy=multi-user.target