Cómo configurar el acceso a recursos locales mediante AWS Management Console - 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.

Cómo configurar el acceso a recursos locales mediante AWS Management Console

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

Puede configurar funciones de Lambda para obtener acceso seguro a los recursos locales en el dispositivo host del núcleo de Greengrass. Los recursos locales son los buses y periféricos que se encuentran físicamente en el mismo host o volúmenes del sistema de archivos del sistema operativo del host. Para obtener más información, incluidos los requisitos y las restricciones, consulte Acceder a recursos locales con conectores y funciones de Lambda.

Este tutorial describe cómo utilizar la AWS Management Console para configurar el acceso a los recursos locales que se encuentran en un dispositivo del núcleo de AWS IoT Greengrass. Contiene los siguientes pasos de alto nivel:

Para ver un tutorial que utilice la AWS Command Line Interface, consulte Cómo configurar el acceso a recursos locales mediante la interfaz de la línea de comando de AWS.

Requisitos previos

Para completar este tutorial, se necesita lo siguiente:

  • Un grupo de Greengrass y un núcleo de Greengrass (versión 1.3 o posterior). Para crear un grupo o dispositivo del núcleo de Greengrass, consulte Empezar con AWS IoT Greengrass.

  • Los siguientes directorios están en el dispositivo del núcleo de Greengrass:

    • /src/LRAtest

    • /dest/LRAtest

    El grupo propietario de estos directorios debe tener acceso de lectura y escritura a los directorios. Puede utilizar el siguiente comando para conceder el acceso:

    sudo chmod 0775 /src/LRAtest

Paso 1: Crear un paquete de implementación de la función de Lambda

En este paso, va a crear un paquete de implementación de la función de Lambda, que es un archivo ZIP que contiene el código de la característica y dependencias. También puede descargar AWS IoT Greengrass Core SDK para que se incluya en el paquete como una dependencia.

  1. En su equipo, copie el siguiente script de Python en un archivo local denominado lraTest.py. Contiene la lógica de la aplicación para la función de Lambda.

    # Demonstrates a simple use case of local resource access. # This Lambda function writes a file test to a volume mounted inside # the Lambda environment under destLRAtest. Then it reads the file and # publishes the content to the AWS IoT LRAtest topic. import sys import greengrasssdk import platform import os import logging # Setup logging to stdout logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) # Create a Greengrass Core SDK client. client = greengrasssdk.client('iot-data') volumePath = '/dest/LRAtest' def function_handler(event, context): try: client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.') volumeInfo = os.stat(volumePath) client.publish(topic='LRA/test', payload=str(volumeInfo)) with open(volumePath + '/test', 'a') as output: output.write('Successfully write to a file.') with open(volumePath + '/test', 'r') as myfile: data = myfile.read() client.publish(topic='LRA/test', payload=data) except Exception as e: logger.error('Failed to publish message: ' + repr(e)) return
  2. Desde la página de descargas del Core SDK AWS IoT Greengrass, descargue el SDK AWS IoT Greengrass básico para Python en su ordenador.

  3. Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta greengrasssdk.

  4. Comprima los siguientes elementos en un archivo denominado lraTestLambda.zip:

    • lraTest.py. Lógica de la aplicación.

    • greengrasssdk. Biblioteca necesaria para todas las funciones de Lambda de Python.

    El archivo lraTestLambda.zip es el paquete de implementación de la función de Lambda. Ya está listo para crear una función de Lambda y cargar el paquete de implementación.

Paso 2: Crear y publicar una función de Lambda

En este paso, va a utilizar la consola de AWS Lambda para crear una función de Lambda y va a configurarla para utilizar el paquete de implementación. A continuación, publicará una versión de la característica y creará un alias.

Primero, cree una función de Lambda.

  1. En la AWS Management Console, elija Servicios y abra la consola de AWS Lambda.

  2. Elija Funciones.

  3. Elija Crear función, y, a continuación, elija Autor desde cero.

  4. En la sección Basic information (Información básica), especifique los siguientes valores.

    1. En Nombre de la función, introduzca TestLRA.

    2. En Runtime (Tiempo de ejecución), elija Python 3.7.

    3. En Permisos, mantenga la configuración predeterminada. Esto crea un rol de ejecución que otorga permisos Lambda básicos. AWS IoT Greengrass no utiliza este rol.

  5. Elija Crear función.

    La página Create function (Crear función) con Create function (Crear función) resaltado.

     

  6. Cargue el paquete de implementación de la función de Lambda y registre el controlador.

    1. En la pestaña Código, en Código fuente, seleccione Cargar desde. En el menú desplegable, seleccione un archivo .zip.

      La carga del menú desplegable con el archivo .zip resaltado.
    2. Seleccione Cargar y, a continuación, elija su paquete de implementación lraTestLambda.zip. A continuación, elija Guardar.

    3. En la pestaña Código de la función, en Configuración de tiempo de ejecución, elija Editar y, a continuación, introduzca los siguientes valores.

      • En Runtime (Tiempo de ejecución), elija Python 3.7.

      • En Handler (Controlador), escriba lraTest.function_handler.

    4. Seleccione Save.

      nota

      El botón de prueba de la consola de AWS Lambda no funciona con esta función. El SDK AWS IoT Greengrass Core no contiene los módulos necesarios para ejecutar las funciones de Lambda de Greengrass de forma independiente en la consola AWS Lambda. Estos módulos (por ejemplo, greengrass_common) se suministran a las funciones una vez desplegados en el núcleo de Greengrass.

    A continuación, publique la primera versión de la función de Lambda. A continuación, cree un alias para la versión.

    Los grupos de Greengrass pueden hacer referencia a una función de Lambda por versión o alias (recomendado). El uso de un alias facilita la gestión de las actualizaciones del código porque no tiene que cambiar la tabla de suscripción o la definición del grupo cuando se actualiza el código de la función. En su lugar, basta con apuntar el alias a la nueva versión de la función.

  7. En Actions (Acciones), elija Publish new version (Publicar nueva versión).

  8. En Version description (Descripción de versión), escriba First version y, a continuación, elija Publish (Publicar).

  9. En la página de configuración de TestLRA: 1, en el menú Actions (Acciones), elija Create alias (Crear alias).

  10. En la página Crear un alias, para Nombre, introduzca test. En Version (Versión), escriba 1.

    nota

    AWS IoT Greengrass no admite alias de Lambda para versiones de $LATEST.

  11. Seleccione Create (Crear).

    La página Create a new alias (Crear un nuevo alias) con Create (Crear) resaltado.

    Ahora puede añadir la función de Lambda al grupo de Greengrass.

Paso 3: Añadir la función de Lambda al grupo de Greengrass

En este paso, va a añadir la función al grupo y va a configurar el ciclo de vida de la función.

Primero, añada función de Lambda al grupo de 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 de Greengrass en el que desea añadir la función de Lambda.

  3. En la página de configuración del grupo, elija la pestaña Funciones de Lambda.

  4. En la sección Mis funciones de Lambda, seleccione Añadir.

  5. En la página Añadir función de Lambda, elija la Función de lambda. Seleccionar TestLRA.

  6. Elija la versión de la función de Lambda.

  7. En la sección Configuración de la función de Lambda, seleccione Usuario y grupo del sistema y Creación de contenedores de la función de Lambda.

     

    A continuación, configure el ciclo de vida de la función de Lambda.

  8. En Timeout (Tiempo de espera), elija 30 seconds (30 segundos).

    importante

    Las funciones de Lambda que utilizan recursos locales (tal y como se describe en este procedimiento) deben ejecutarse en un contenedor de Greengrass. De lo contrario, si intenta implementar la función, se producirá un error en la implementación. Para obtener más información, consulte Containerization (Creación de contenedores).

  9. En la parte inferior de la página, elija Agregar función de Lambda.

Paso 4: Agregar un recurso local al grupo de Greengrass

En este paso, va a añadir un recurso de volumen local al grupo de Greengrass y va a conceder a la característica acceso de lectura y escritura al recurso. Un recurso local tiene un ámbito de nivel de grupo. Puede conceder permisos para que cualquier función de Lambda del grupo obtenga acceso al recurso.

  1. En la página de configuración del grupo, elija la pestaña Recursos.

  2. En la sección Recursos locales, seleccione Añadir.

  3. En la página Añadir un recurso local, utilice los siguientes valores.

    1. En Nombre del recurso, escriba testDirectory.

    2. En Resource type (Tipo de recurso), elija Device (Dispositivo).

    3. En Ruta del dispositivo, escriba /src/LRAtest. Esta ruta debe existir en el sistema operativo del host.

      La ruta del dispositivo local es la ruta absoluta local del recurso en el sistema de archivos del dispositivo del núcleo. Esta ubicación se encuentra fuera del contenedor en el que se ejecuta la característica. La ruta no puede comenzar con /sys.

    4. En Destination path (Ruta de destino), escriba /dest/LRAtest. Esta ruta debe existir en el sistema operativo del host.

      El valor de ruta de destino es la ruta completa del recurso en el espacio de nombres de Lambda. Esta ubicación se encuentra dentro del contenedor en el que se ejecuta la característica.

    5. En Propietario del grupo del sistema y permiso de acceso a archivos, seleccione Añadir automáticamente permisos del sistema de archivos del grupo del sistema propietario del recurso.

      La opción Propietario del grupo del sistema y permiso de acceso a archivos le permite conceder permisos adicionales de acceso a archivos al proceso Lambda. Para obtener más información, consulte Group owner file access permission (Permiso de acceso a los archivos del propietario del grupo).

  4. Seleccione Add resource (Añadir recurso). La página Resources muestra el nuevo recurso testDirectory.

Paso 5: Agregar suscripciones al grupo de Greengrass

En este paso, va a añadir dos suscripciones al grupo de Greengrass. Estas suscripciones permiten la comunicación bidireccional entre la función de Lambda e AWS IoT.

En primer lugar, cree una suscripción para que la función de Lambda envíe mensajes a AWS IoT.

  1. En la página de configuración del grupo, elija la pestaña Suscripciones.

  2. Elija Add (Agregar).

  3. En la página Crear una suscripción, configure el origen y el destino de la siguiente manera:

    1. Para Tipo de origen, elija Función de lambda y, a continuación, TestLRA.

    2. Para Tipo de destino, elija Servicio y, a continuación, Nube de IoT.

    3. En Filtro por temas, introduzca LRA/test y, a continuación, seleccione Crear suscripción.

  4. La página Subscriptions muestra la nueva suscripción.

     

    A continuación, configure una suscripción que invoque la característica desde AWS IoT.

  5. En la página Subscriptions, elija Add Subscription.

  6. En la página Select your source and target, configure el origen y el destino, de la siguiente manera:

    1. En Tipo de origen, elija la función de Lambda y, a continuación, elija Nube de IoT.

    2. Para Tipo de destino, elija Servicio y, a continuación, Nube de IoT.

    3. Elija Next (Siguiente).

  7. En la página Filter your data with a topic (Filtrar los datos con un tema), en el campo Topic filter (Filtro de temas), escriba invoke/LRAFunction y, a continuación, elija Next (Siguiente).

  8. Elija Finalizar. La página Subscriptions muestra ambas suscripciones.

Paso 6: Implementar el grupo de AWS IoT Greengrass

En este paso, va a implementar la versión actual de la definición del grupo.

  1. Asegúrese de que el núcleo de AWS IoT Greengrass se está ejecutando. Ejecute los siguientes comandos en el terminal de Raspberry Pi según sea necesario.

    1. Para comprobar si el daemon está en ejecución:

      ps aux | grep -E 'greengrass.*daemon'

      Si la salida contiene una entrada root para /greengrass/ggc/packages/1.11.6/bin/daemon, el daemon está en ejecución.

      nota

      La versión que figura en la ruta depende de la versión del software AWS IoT Greengrass Core que esté instalada en el dispositivo del núcleo.

    2. Iniciar el daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. En la página de configuración de grupo, elija Implementar.

    nota

    La implementación produce un error si ejecuta la función de Lambda sin creación de contenedores e intenta acceder a los recursos locales asociados.

  3. Si se le solicita, en la pestaña Función de lambda, en Funciones de Lambda del sistema, seleccione Detector IP y, a continuación, Editar y, a continuación, Detectar automáticamente.

    Esto permite a los dispositivos adquirir automáticamente la información de conexión del dispositivo principal, como la dirección IP, el DNS y el número de puerto. Se recomienda la detección automática, pero AWS IoT Greengrass también es compatible con puntos de conexión especificados manualmente. Solo se le solicitará el método de detección la primera vez que se implemente el grupo.

    nota

    Si se le solicita, conceda permiso para crear el rol de servicio de Greengrass y asócielo a su Cuenta de AWS en el Región de AWS actual. Este rol permite a AWS IoT Greengrass acceder a los servicios de AWS.

    En la página Deployments (Implementaciones), se muestra la marca temporal, el ID de versión y el estado de la implementación. Al terminar, el estado de la implementación es Completado.

    Para obtener ayuda sobre la resolución de problemas, consulte Solución de problemas de AWS IoT Greengrass.

Probar el acceso al recurso local

Ahora puede verificar si el acceso al recurso local se ha configurado correctamente. Para probarlo, suscríbase al tema LRA/test y publique en el tema invoke/LRAFunction. La prueba se realiza correctamente si la función de Lambda envía la carga esperada a AWS IoT.

  1. En el menú de navegación de la consola AWS IoT, en Probar, elija el cliente de prueba MQTT.

  2. En Suscribirse a un tema, en Filtro de temas, introduzca LRA/test.

  3. En Información adicional, en Visualización de cargas útiles en MQTT, seleccione Mostrar cargas útiles como cadenas.

  4. Elija Subscribe. La función de Lambda realiza la publicación en el tema LRA/test.

    La página Subscriptions (Suscripciones) con Subscribe to topic (Suscribirse al tema) resaltado.
  5. En Publicar en un tema, en el nombre del temainvoke/LRAFunction, escriba y, a continuación, elija Publicar para invocar la función de Lambda. La prueba se realiza correctamente si la página muestra las tres cargas de mensajes de la característica.

    La página Subscriptions (Suscripciones) con el tema invoke/LRAFunction y Publish to topic (Publicar en tema) resaltados y los resultados de la prueba con los datos de mensajes.

El archivo de prueba creado por la función de Lambda se encuentra en el directorio /src/LRAtest del dispositivo del núcleo de Greengrass. Aunque la función de Lambda escribe en un archivo del directorio /dest/LRAtest, ese archivo está visible solo en el espacio de nombres de Lambda. No puede verlo en un espacio de nombres normal de Linux. Cualquier cambio que se realice en la ruta de destino se refleja en ruta de origen del sistema de archivos.

Para obtener ayuda sobre la resolución de problemas, consulte Solución de problemas de AWS IoT Greengrass.