Pruebas de imágenes de Lambda contenedor localmente - AWS Lambda

Pruebas de imágenes de Lambda contenedor localmente

El emulador de interfaz de AWS Lambda tiempo de ejecución (RIE) es un proxy para la API de Lambda tiempo de ejecución que le permite probar localmente su función Lambda empaquetada como una imagen de contenedor. El emulador es un servidor web ligero que convierte solicitudes HTTP en eventos JSON para pasar a la función Lambda en la imagen de contenedor.

Las imágenes AWS base para Lambda incluyen el componente RIE. Si utiliza una imagen base alternativa, puede probar la imagen sin agregar RIE a la imagen. También puede crear el componente RIE en su imagen base. AWS proporciona un componente RIE de código abierto en el repositorio de AWS GitHub.

Puede usar el emulador para probar si su código de función es compatible con el entorno Lambda. También use el emulador para probar que su función Lambda se ejecuta hasta completarse correctamente y proporciona la salida esperada. Si crea extensiones y agentes en la imagen de contenedor, puede usar el emulador para probar que las extensiones y los agentes funcionan correctamente con la API de extensiones Lambda.

Para ver ejemplos de cómo utilizar el RIE, consulte Soporte de imágenes de contenedor para Lambda en el AWS Blog.

Directrices para el uso del RIE

Tenga en cuenta las siguientes directrices cuando utilice el emulador de interfaz de tiempo de ejecución:

  • El RIE no emula las configuraciones de seguridad de Lambda y autenticación, ni la Lambda orquestación.

  • El emulador solo admite arquitecturas Linux x86-64.

  • El emulador no admite el AWS X-Ray seguimiento ni otras Lambda integraciones.

Variables de entorno

El emulador de interfaz de tiempo de ejecución admite un subconjunto de variables de entorno para la función Lambda en la imagen local en ejecución.

Si su función utiliza credenciales de seguridad, puede configurar las credenciales estableciendo las siguientes variables de entorno:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN

  • AWS_REGION

Para establecer el tiempo de espera de la función, configure AWS_LAMBDA_FUNCTION_TIMEOUT. Introduzca el número máximo de segundos que desea permitir que se ejecute la función.

El emulador no rellena las siguientes variables de entorno Lambda. Sin embargo, puede configurarlos para que coincidan con los valores que espera cuando la función se ejecuta en el servicio Lambda:

  • AWS_LAMBDA_FUNCTION_VERSION

  • AWS_LAMBDA_FUNCTION_NAME

  • AWS_LAMBDA_FUNCTION_MEMORY_SIZE

Probar una imagen con RIE incluido en la imagen

Las imágenes AWS base para Lambda incluyen el emulador de interfaz de tiempo de ejecución. También puede seguir estos pasos si ha incorporado el RIE en su imagen base alternativa.

Para probar su función Lambda con el emulador

  1. Cree su imagen localmente usando el comando docker build.

    docker build -t myfunction:latest .
  2. Ejecute la imagen de contenedor localmente utilizando el comando docker run.

    docker run -p 9000:8080 myfunction:latest

    Este comando ejecuta la imagen como un contenedor e inicia un punto de enlace localmente en localhost:9000/2015-03-31/functions/function/invocations.

  3. Desde una nueva ventana de terminal, publique un evento en el siguiente punto de enlace mediante un comando curl:

    curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Este comando invoca la función Lambda que se ejecuta en la imagen de contenedor y devuelve una respuesta.

Construya RIE en su imagen base

Puede construir RIE en una imagen base. Descargue el RIE de GitHub a su máquina local y actualice su Dockerfile para instalar RIE.

Para construir el emulador en su imagen

  1. Cree un script y guárdelo en el directorio del proyecto. Configure los permisos de ejecución para el archivo del script.

    El script verifica la presencia de la variable de entorno AWS_LAMBDA_RUNTIME_API, que indica la presencia de la API de tiempo de ejecución. Si la API de tiempo de ejecución está presente, el script ejecuta el cliente de interfaz de tiempo de ejecución. De lo contrario, el script ejecuta el emulador de interfaz de tiempo de ejecución.

    En el ejemplo siguiente se muestra un script típico para una función Node.js.

    #!/bin/sh if [ -z "${AWS_LAMBDA_RUNTIME_API}" ]; then exec /usr/local/bin/aws-lambda-rie /usr/bin/npx aws-lambda-ric $@ else exec /usr/bin/npx aws-lambda-ric $@ fi

    En el siguiente ejemplo se muestra un script típico para una función Python.

    #!/bin/sh if [ -z "${AWS_LAMBDA_RUNTIME_API}" ]; then exec /usr/local/bin/aws-lambda-rie usr/local/bin/python -m awslambdaric $@ else exec /usr/local/bin/python -m awslambdaric $@ fi
  2. Descargue el emulador de interfaz de tiempo de ejecución de GitHub en el directorio de su proyecto.

  3. Instale el paquete emulador y cambie ENTRYPOINT para ejecutar el nuevo script agregando las siguientes líneas a su Dockerfile:

    ADD aws-lambda-rie /usr/local/bin/aws-lambda-rie ENTRYPOINT [ "/entry_script.sh" ]
  4. Cree su imagen localmente usando el comando docker build.

    docker build -t myfunction:latest .

Probar una imagen sin agregar RIE a la imagen

Instale el emulador de interfaz de tiempo de ejecución en su máquina local. Cuando ejecuta la imagen de contenedor, establece el punto de entrada para que sea el emulador.

Para probar una imagen sin agregar RIE a la imagen

  1. Desde el directorio del proyecto, ejecute el siguiente comando para descargar el RIE de GitHub e instalarlo en su máquina local.

    mkdir -p ~/.aws-lambda-rie && curl -Lo ~/.aws-lambda-rie/aws-lambda-rie \ https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie \ && chmod +x ~/.aws-lambda-rie/aws-lambda-rie
  2. Ejecute Lambda la función usando el docker run comando.

    docker run -d -v ~/.aws-lambda-rie:/aws-lambda -p 9000:8080 \ --entrypoint /aws-lambda/aws-lambda-rie myfunction:latest <image entrypoint> \ <(optional) image command>

    Esto ejecuta la imagen como un contenedor e inicia un endpoint localmente en localhost:9000/2015-03-31/functions/function/invocations.

  3. Publicar un evento en el siguiente extremo mediante un comando curl:

    curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

    Este comando invoca la función que se ejecuta en la imagen de contenedor y devuelve una respuesta.