Control de la ejecución de funciones de Greengrass Lambda utilizando la configuración específica del grupo - AWS IoT Greengrass

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.

Control de la ejecución de funciones de Greengrass Lambda utilizando la configuración específica del grupo

AWS IoT Greengrass permite la administración basada en la nube de funciones de . Aunque el código y las dependencias de una función de Lambda se administran mediante AWS Lambda, puede configurar el comportamiento de la función de Lambda cuando se ejecuta en un grupo de Greengrass.

Configuración específica del grupo

AWS IoT Greengrass proporciona la siguiente configuración específica del grupo para las funciones de Greengrass Lambda.

Usuario del sistema y grupo

La identidad de acceso que se utiliza para ejecutar una función de Lambda. De forma predeterminada, las funciones de Lambda se ejecutan como la identidad de acceso predeterminada del grupo. Por lo general, son las cuentas del sistema AWS IoT Greengrass estándar (ggc_user y ggc_group). Puede cambiar la configuración y elegir el ID de usuario y el ID de grupo con los permisos necesarios para ejecutar la función de Lambda. Puede anular tanto UID como GID o uno solo si deja el otro campo en blanco. Esta configuración le ofrece un control más detallado sobre el acceso a recursos de dispositivos. Le recomendamos que configure su hardware de Greengrass con los límites de recursos adecuados, permisos de archivos y cuotas de disco para los usuarios y grupos cuyos permisos se utilizan para la ejecución de funciones de Lambda.

Esta característica está disponible para AWS IoT Greengrass Core versión 1.7 y posteriores.

importante

Se recomienda evitar la ejecución de funciones de Lambda como raíz a menos que sea absolutamente necesario. Si se ejecuta como raíz, se incrementan los siguientes riesgos:

  • El riesgo de cambios no intencionados, como la eliminación accidental de un archivo crítico.

  • El riesgo que representan personas malintencionadas para sus datos y dispositivos.

  • El riesgo de que un contenedor se escape cuando los contenedores de Docker funcionan con --net=host y UID=EUID=0.

Si tiene que ejecutar como usuario raíz, debe actualizar la configuración de AWS IoT Greengrass para habilitarlo. Para obtener más información, consulte Ejecución de una función de Lambda como raíz.

ID de usuario del sistema (número)

El ID de usuario para el usuario que tiene los permisos necesarios para ejecutar la función de Lambda. Esta opción solo está disponible si elige Ejecutar como otro ID de usuario/ID de grupo. Puede utilizar el comando de getent passwd en el núcleo de su dispositivo de AWS IoT Greengrass para buscar el ID del usuario que desea usar para ejecutar la función de Lambda.

Si usa el mismo ID para ejecutar los procesos y la función de Lambda en un dispositivo de Greengrass core, su rol de grupo de Greengrass puede otorgar credenciales temporales para los procesos. Los procesos pueden usar las credenciales temporales en todas las implementaciones de Greengrass core.

ID de grupo del sistema (número)

El ID de grupo para el grupo que tiene los permisos necesarios para ejecutar la función de Lambda. Esta opción solo está disponible si elige Ejecutar como otro ID de usuario/ID de grupo. Puede utilizar el comando de getent group en el núcleo de su dispositivo de AWS IoT Greengrass para buscar el ID del usuario que desea usar para ejecutar la función de Lambda.

Contenedorización de funciones de Lambda

Elija si la función de Lambda se ejecuta con la creación de contenedores predeterminada para el grupo o especifique la creación de contenedores que se debe utilizar siempre para esta función de Lambda.

El modo de creación de contenedores de una función de Lambda determina su nivel de aislamiento.

  • Las funciones de Lambda en contenedor se ejecutan en el modo Contenedor de Greengrass. La función de Lambda se ejecuta en un entorno de tiempo de ejecución (o espacio de nombres) aislado dentro del contenedor de AWS IoT Greengrass.

  • Las funciones de Lambda que no están en un contenedor se ejecutan en el modo Sin contenedor. Las funciones de Lambda se ejecutan como un proceso normal de Linux sin ningún tipo de aislamiento.

Esta característica está disponible para AWS IoT Greengrass Core versión 1.7 y posteriores.

Le recomendamos que ejecute las funciones de Lambda en un contenedor de Greengrass a menos que su caso de uso requiera la ejecución sin creación de contenedores. Cuando las funciones de Lambda se ejecutan en un contenedor de Greengrass, puede utilizar recursos de dispositivos y locales asociados, así como disfrutar de los beneficios del aislamiento y de una mayor seguridad. Antes de cambiar la creación de contenedores, consulte Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda..

nota

Para ejecutar sin habilitar su espacio de nombres de kernel de dispositivo y cgroup, todas las funciones de Lambda se deben ejecutar sin creación de contenedores. Puede conseguirlo fácilmente configurando la creación de contenedores predeterminada para el grupo. Para obtener más información, consulte Configuración de la creación de contenedores predeterminada para funciones Lambda de un grupo.

Memory limit (Límite de memoria)

Asignación de memoria para la función. El valor predeterminado es 16 MB.

nota

La configuración del límite de memoria se descarta al cambiar la función de Lambda para ejecución sin creación de contenedores. Las funciones de Lambda que se ejecutan sin contenedorización no tienen límite de memoria. La configuración del límite de memoria se descarta al cambiar la función Lambda o la configuración de creación de contenedores predeterminada del grupo para ejecutarse sin creación de contenedores.

Timeout (Tiempo de espera)

La cantidad de tiempo antes de que se termine la función o solicitud. El valor predeterminado es de 3 segundos.

Anclado

El ciclo de vida de una función de Lambda puede ser bajo demanda o de larga duración. El valor predeterminado es bajo demanda.

Una función de Lambda bajo demanda se inicia en un contenedor nuevo o reutilizado cuando se invoca. Las solicitudes a la función puede ser procesados por cualquier contenedor disponible. Una función de Lambda de larga duración se inicia automáticamente después de iniciarse AWS IoT Greengrass y se mantiene en ejecución en su propio contenedor (o entorno de pruebas). Todas las solicitudes a la función se procesan en el mismo contenedor. Para obtener más información, consulte Configuración del ciclo de vida de las funciones de Lambda de Greengrass.

Read access to /sys directory (Acceso de lectura al directorio /sys)

Si la función puede obtener acceso o no a la carpeta /sys del host. Utilícelo cuando la función deba leer información del dispositivo desde /sys. El valor predeterminado es false.

nota

Esta configuración no está disponible cuando se ejecuta de una función de Lambda sin creación de contenedores. El valor de esta configuración se descarta al cambiar la función de Lambda para que se ejecute sin contenedores.

Tipo de codificación

El tipo de codificación esperado de la carga de entrada de la función, JSON o binaria. El valor predeterminado es JSON.

Se admite el tipo de codificación binaria a partir del software de AWS IoT Greengrass Core v1.5.0 y el SDK de AWS IoT Greengrass Core v1.1.0. Aceptar datos de entrada binarios puede ser útil para funciones que interactúan con datos de los dispositivos, ya que las limitadas capacidades de hardware de estos a menudo hacen que sea difícil o imposible construir un tipo de datos JSON.

nota

Los Ejecutables de Lambda solo admiten el tipo de codificación binaria (no JSON).

Argumentos del proceso

Los argumentos de línea de comandos para pasar a la función de Lambda cuando se ejecuta.

Variables de entorno

Pares clave-valor que pueden pasar ajustes de forma dinámica al código y bibliotecas de la función. Las variables de entorno local funcionan de la misma forma que las variables de entorno de las funciones de AWS Lambda, pero están disponibles en el entorno de núcleo.

Políticas de acceso a recursos

Una lista de hasta 10 recursos locales, recursos secretos y recursos de aprendizaje automático a los que puede acceder la función de Lambda y los correspondientes permisos read-only o read-write. En la consola, estos recursos afiliados aparecen en la página de configuración del grupo, en la pestaña Recursos.

El modo de creación de contenedores afecta a la forma en que las funciones de Lambda pueden acceder a los recursos de volumen y dispositivos locales y a los recursos de aprendizaje automático.

  • Las funciones de Lambda que no están en un contenedor deben acceder directamente a los recursos de volumen y dispositivos locales a través del sistema de archivos del dispositivo central.

  • Para permitir que las funciones de Lambda que no están en un contenedor tengan acceso a los recursos de aprendizaje automático del grupo de Greengrass, debe establecer las propiedades de permisos de acceso y de propietario del recurso en el recurso de aprendizaje automático. Para obtener más información, consulte Acceso a recursos de machine learning desde funciones .

Para obtener información sobre el uso de la AWS IoT Greengrass API para establecer valores de configuración específicos de grupo para las funciones Lambda definidas por el usuario, CreateFunctionDefinitionconsulte la Referencia de AWS IoT Greengrass Version 1la API create-function-definitiono la Referencia de comandos. AWS CLI Para implementar funciones de Lambda en un núcleo de Greengrass, cree una versión de definición de función que contenga sus funciones, cree una versión de grupo que haga referencia a la versión de definición de función y a otros componentes del grupo y, a continuación, implemente el grupo.

Ejecución de una función de Lambda como raíz

Esta característica está disponible para AWS IoT Greengrass Core versión 1.7 y posteriores.

Antes de poder ejecutar una o varias funciones de Lambda como raíz, primero debe actualizar la configuración de AWS IoT Greengrass para habilitar el soporte. El soporte para ejecutar funciones de Lambda como raíz está desactivado de forma predeterminada. La implementación genera un error si intenta implementar una función de Lambda y ejecutarla como raíz (UID y GID de 0) y no ha actualizado la configuración de AWS IoT Greengrass . Un error como el siguiente aparece en el registro de tiempo de ejecución (greengrass_root/ggc/var/log/system/runtime.log):

lambda(s) [list of function arns] are configured to run as root while Greengrass is not configured to run lambdas with root permissions
importante

Se recomienda evitar la ejecución de funciones Lambda como raíz a menos que sea absolutamente necesario. Si se ejecuta como raíz, se incrementan los siguientes riesgos:

  • El riesgo de cambios no intencionados, como la eliminación accidental de un archivo crítico.

  • El riesgo que representan personas malintencionadas para sus datos y dispositivos.

  • El riesgo de que un contenedor se escape cuando los contenedores de Docker funcionan con --net=host y UID=EUID=0.

Para permitir que las funciones de Lambda se ejecuten como raíz
  1. En el dispositivo de AWS IoT Greengrass, acceda a la carpeta greengrass-root/config.

    nota

    De forma predeterminada, greengrass-root es el directorio /greengrass.

  2. Modifique el archivo config.json para añadir "allowFunctionsToRunAsRoot" : "yes" al campo runtime. Por ejemplo:

    { "coreThing" : { ... }, "runtime" : { ... "allowFunctionsToRunAsRoot" : "yes" }, ... }
  3. Use los siguientes comandos para reiniciar AWS IoT Greengrass:

    cd /greengrass/ggc/core sudo ./greengrassd restart

    Ahora puede establecer el ID de usuario y el ID de grupo (UID/GID) de las funciones de Lambda en 0 para ejecutar la función de Lambda como raíz.

Puede cambiar el valor de "allowFunctionsToRunAsRoot" a "no" y reiniciar AWS IoT Greengrass si desea desactivar que las funciones de Lambda se ejecuten como raíz.

Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda.

Esta característica está disponible para AWS IoT Greengrass Core versión 1.7 y posteriores.

De forma predeterminada, las funciones de Lambda se ejecutan dentro de un contenedor AWS IoT Greengrass. Dicho contenedor proporciona aislamiento entre las funciones y el host, lo que brinda mayor seguridad tanto al host como a las funciones del contenedor.

Le recomendamos que ejecute las funciones de Lambda en un contenedor de Greengrass a menos que su caso de uso requiera la ejecución sin creación de contenedores. Al ejecutar las funciones de Lambda en un contenedor Greengrass, tiene más control sobre la restricción de acceso a los recursos.

A continuación, se muestran algunos casos de uso de ejemplo para la ejecución sin creación de contenedores:

  • Desea ejecutar AWS IoT Greengrass en un dispositivo que no admite el modo de contenedor (por ejemplo, porque utiliza una distribución especial de Linux o porque tiene una versión del kernel demasiado antigua).

  • Desea ejecutar su función de Lambda en otro entorno de contenedor con su propio OverlayFS, pero detecta conflictos de OverlayFS cuando la ejecuta en un contenedor de Greengrass.

  • Necesita acceso a recursos locales con rutas que no se pueden determinar en el momento de la implementación o cuyas rutas pueden cambiar tras la implementación, como en el caso de algunos dispositivos conectables.

  • Tiene una aplicación heredada que se ha escrito como y ha detectado problemas cuando se ejecuta como una función de Lambda en un contenedor.

Diferencias en la creación de contenedores
Creación de contenedores Notas

Contenedor de Greengrass

  • Todas las características de AWS IoT Greengrass están disponibles cuando ejecuta una función de Lambda en un contenedor de Greengrass.

  • Las funciones de Lambda que se ejecutan en un contenedor Greengrass no tienen acceso al código implementado de otras funciones de Lambda, incluso aunque se ejecuten con el mismo ID de grupo. Es decir, las funciones de Lambda se ejecutan con mayor aislamiento de entre sí.

  • Dado que las funciones de Lambda que se ejecutan en un contenedor AWS IoT Greengrass ejecutan todos los procesos secundarios en el mismo contenedor que la función de Lambda, los procesos secundarios se terminan cuando se termina la función de Lambda.

Sin contenedor

  • Las siguientes características no están disponibles para funciones de Lambda no incluidas en contenedores:

    • Límites de memoria de funciones de Lambda.

    • Dispositivos locales y recursos de volumen. Debe obtener acceso a estos recursos directamente en el dispositivo principal en lugar de obtener acceso a ellos como miembros del grupo de Greengrass.

  • Si la función de Lambda que no está en un contenedor accede a un recurso de aprendizaje automático, debe identificar a un propietario del recurso y establecer permisos de acceso en el recurso, no en la función de Lambda. Este requiere AWS IoT Greengrass Core versión 1.10 o posterior. Para obtener más información, consulte Acceso a recursos de machine learning desde funciones .

  • La función de Lambda tiene acceso de solo lectura al código implementado de otras funciones de Lambda que se están ejecutando con el ID del mismo grupo.

  • No terminan automáticamente las funciones de Lambda que abarcan procesos secundarios en una sesión de proceso distinta o con un controlador SIGHUP (signal hangup) anulado porAWS IoT Greengrass, como la utilidad nohup, cuando se termina la función de Lambda principal.

nota

La configuración de creación de contenedores predeterminada para el grupo Greengrass no se aplica a los conectores.

El cambio de la creación de contenedores para una función de Lambda puede provocar problemas durante la implementación. Si había asignado recursos locales a la función de Lambda que ya no están disponibles con la nueva configuración de creación de contenedores, la implementación genera un error.

  • Cuando se cambia una función de Lambda de ejecución en un contenedor de Greengrass a ejecución sin creación de contenedores, se descartan los límites de memoria de la función. Debe acceder al sistema de archivos directamente en lugar de utilizar los recursos locales asociados. Debe eliminar los recursos asociados antes de la implementación.

  • Al cambiar una función de Lambda de la ejecución sin creación de contenedores a la ejecución en un contenedor, la función de Lambda pierde el acceso directo al sistema de archivos. Debe definir un límite de memoria para cada función de o aceptar la opción predeterminada de 16 MB. Puede establecer esta configuración para cada función de Lambda antes de la implementación.

Para cambiar la configuración de creación de contenedores para una función de Lambda
  1. En el panel de navegación de la consola AWS IoT, en Administrar, expanda los dispositivos Greengrass y, a continuación, elija Grupos (V1).

  2. Elija el grupo que contiene la función de Lambda cuya configuración desea cambiar.

  3. Elija la tabla de las funciones Lambda.

  4. En la función de Lambda que desee cambiar, elija los puntos suspensivos () y, a continuación, elija Editar configuración.

  5. Cambiar la configuración de creación de contenedores. Si configura la función de Lambda para que ejecute un contenedor de Greengrass, también deberá configurar las propiedades Límite de memoria y Acceso de lectura al directorio /sys.

  6. Seleccione Guardar y, a continuación, Confirmar para guardar los cambios en la función de Lambda.

Los cambios surten efecto cuando el grupo se implementa.

También puede utilizar la referencia CreateFunctionDefinitiony CreateFunctionDefinitionVersionen la API. AWS IoT Greengrass Si va a cambiar la configuración de creación de contenedores, asegúrese de actualizar los demás parámetros también. Por ejemplo, si va a cambiar entre la ejecución de una función de Lambda en un contenedor de Greengrass a la ejecución sin creación de contenedores, asegúrese de borrar el parámetro MemorySize.

Determinación de los modos de aislamiento admitidos en el dispositivo de Greengrass

Puede utilizar el comprobador de dependencias de AWS IoT Greengrass para determinar los modos de aislamiento (contenedor de Greengrass/sin contenedor) admitidos por su dispositivo de Greengrass.

Para ejecutar el comprobador de dependencias de AWS IoT Greengrass
  1. Descarga y ejecuta el comprobador de AWS IoT Greengrass dependencias desde el GitHubrepositorio.

    wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip unzip greengrass-dependency-checker-GGCv1.11.x.zip cd greengrass-dependency-checker-GGCv1.11.x sudo modprobe configs sudo ./check_ggc_dependencies | more
  2. Si aparece more, pulse la tecla Spacebar para mostrar otra página de texto.

Para obtener más información acerca del comando modprobe, ejecute man modprobe en el terminal.

Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo

Esta característica está disponible para AWS IoT Greengrass Core versión 1.8 y posteriores.

Para tener un mayor control sobre el acceso a los recursos del dispositivo, puede configurar la identidad de acceso predeterminada que se utiliza para ejecutar funciones de Lambda en el grupo. Esta configuración determina los permisos predeterminados que se han asignado a sus funciones de Lambda cuando se ejecutan en el dispositivo central. Para invalidar la configuración de las distintas funciones del grupo, puede utilizar la propiedad Run as (Ejecutar como) de la función. Para obtener más información, consulte Ejecutar como.

Esta configuración de nivel de grupo se utiliza también para ejecutar el software de AWS IoT Greengrass Core subyacente. Se compone de funciones de Lambda del sistema que administran operaciones, como el redireccionamiento de mensajes, la sincronización de instantáneas locales y la detección automática de direcciones IP.

La identidad de acceso predeterminada se puede configurar para que se ejecute como las cuentas de AWS IoT Greengrass estándar (ggc_user y ggc_group) o para que utilice los permisos de otro usuario o grupo. Le recomendamos que configure su hardware de Greengrass con los límites de recursos, permisos de archivos y cuotas de disco adecuados para los usuarios y grupos cuyos permisos se utilizan para la ejecución de funciones de Lambda del sistema o definidas por el usuario.

Para modificar la identidad de acceso predeterminada para su grupo de AWS IoT Greengrass
  1. En el panel de navegación de la consola AWS IoT, en Administrar, expanda los dispositivos Greengrass y, a continuación, elija Grupos (V1).

  2. Elija el grupo cuya configuración desea cambiar.

  3. Seleccione la pestaña Funciones de Lambda y, en la sección Entorno de tiempo de ejecución de las funciones de Lambda predeterminado, seleccione Editar.

  4. En la página de Editar entorno de tiempo de ejecución Lambda predeterminado para Usuario y grupo del sistema predeterminados, elija Otro ID de usuario o grupo.

    Al elegir esta opción, se muestran los campos System user D (number) y System group ID (number).

  5. Escriba un ID de usuario, un ID de grupo o ambos. Si deja un campo en blanco, se utiliza la cuenta del sistema de Greengrass correspondiente (ggc_user o ggc_group).

    • En ID del usuario del sistema (número), especifique el ID del usuario que tiene los permisos que desea utilizar de forma predeterminada para ejecutar funciones de Lambda en el grupo. Puede utilizar el comando getent passwd en el dispositivo de AWS IoT Greengrass para buscar el ID de usuario.

    • En ID del grupo del sistema (número), especifique el ID del grupo que tiene los permisos que desea utilizar de forma predeterminada para ejecutar funciones de Lambda en el grupo. Puede utilizar el comando getent group en el dispositivo de AWS IoT Greengrass para buscar el ID de grupo.

    importante

    La ejecución como usuario raíz aumenta los riesgos en los datos y el dispositivo. No realice ejecuciones como usuario raíz (UID/GID=0) a menos que su caso de negocio lo requiera. Para obtener más información, consulte Ejecución de una función de Lambda como raíz.

Los cambios surten efecto cuando el grupo se implementa.

Configuración de la creación de contenedores predeterminada para funciones Lambda de un grupo

Esta característica está disponible para AWS IoT Greengrass Core versión 1.7 y posteriores.

La configuración de creación de contenedores de un grupo de Greengrass determina la creación de contenedores predeterminada para las funciones de Lambda del grupo.

  • En el modo Contenedor de Greengrass, las funciones de Lambda se ejecutan en un entorno de tiempo de ejecución aislado dentro de los contenedores de AWS IoT Greengrass de forma predeterminada.

  • En el modo Sin contenedor, las funciones de Lambda se ejecutan como procesos normales de Linux de forma predeterminada.

Puede modificar la configuración del grupo para especificar la creación de contenedores predeterminada para las funciones de Lambda del grupo. Puede pasar por alto esta configuración para una o varias funciones de Lambda en el grupo si desea que las funciones de Lambda se ejecuten con una creación de contenedores distinta a la del grupo predeterminado. Antes de cambiar la configuración de la creación de contenedores, consulte Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda..

importante

Si desea cambiar la creación de contenedores predeterminada del grupo, pero tiene una o varias funciones que utilizan una creación de contenedores distinta, cambie la configuración de las funciones de Lambda antes de cambiar la configuración del grupo. Si cambia primero la configuración de creación de contenedores del grupo, se descartan los valores de la configuración Memory limit (Límite de memoria) y Read access to /sys directory (Acceso de lectura al directorio /sys).

Para modificar la configuración de creación de contenedores de su grupo de AWS IoT Greengrass
  1. En el panel de navegación de la consola AWS IoT, en Administrar, expanda los dispositivos Greengrass y, a continuación, elija Grupos (V1).

  2. Elija el grupo cuya configuración desea cambiar.

  3. Elija la pestaña Función de Lambda.

  4. En Tiempo de ejecución predeterminado de funciones Lambda, elija Editar.

  5. En la página Tiempo de ejecución predeterminado de funciones de Lambda, en Contenedorización de la función de Lambda predeterminada, cambie el ajuste de contenedorización.

  6. Seleccione Guardar.

Los cambios surten efecto cuando el grupo se implementa.