¿Cómo creo una capa de Lambda con un entorno de Lambda simulado con Docker?

4 minutos de lectura
0

Quiero crear una capa de AWS Lambda que sea compatible con las versiones ejecutables del entorno de destino. ¿Cómo puedo hacerlo?

Descripción corta

Cuando desarrolla funciones de Lambda, elige entre las versiones ejecutables de Lambda compatibles. Para crear funciones y capas de Lambda que sean compatibles con versiones ejecutables específicas, puede realizar una de las siguientes acciones:

Para obtener más información, consulte Creating and sharing Lambda layers.

Resolución

Nota: Si recibe errores al ejecutar los comandos de Interfaz de línea de comandos de AWS (AWS CLI), asegúrese de utilizar la versión más reciente de AWS CLI.

Las instrucciones siguientes utilizan Python como lenguaje de codificación y una plataforma informática basada en Linux como ejemplo. Para otros lenguajes y plataformas de codificación, adapte los pasos en consecuencia.

Instalación de Docker en su ordenador

Si aún no lo ha hecho, instale Docker para Linux, Windows o macOS en su ordenador.

Creación de la estructura de directorios adecuada y especificación de las dependencias en el archivo de requisitos de pip (requirements.txt)

Para obtener más información sobre la creación de estructuras de directorios, consulte Including library dependencies in a layer. Para obtener más información sobre la especificación de dependencias, consulte Requirements files en la guía del usuario de pip.

Ejemplo de estructura de directorios para una capa de Lambda compatible con las versiones 3.6 y 3.8 de Python

├── requirements.txt
└── python/
    └── lib/
        ├── python3.6/
        │   └── site-packages/
        └── python3.8/
            └── site-packages/

Nota: El tamaño total descomprimido de la función y de todas las capas no puede superar el límite de tamaño del paquete de despliegue descomprimido de 250 MB. Para obtener más información sobre la compatibilidad de las versiones de Python en Lambda, consulte Building Lambda functions with Python.

Instalación de las dependencias de la biblioteca en las subcarpetas correspondientes en función de las versiones ejecutables que especificó en la estructura de directorios

Ejecute el siguiente comando de AWS CLI una vez por cada versión ejecutable que haya especificado en la estructura de directorios:

Importante: Sustituya 3.6 por 3.7 o 3.8, según las bibliotecas compatibles que quiera instalar.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"

Creación de un archivo.zip para su capa

Ejecute el siguiente comando para comprimir la carpeta python y crear el paquete de capas:

Nota: Puede reemplazar mypythonlibs por el nombre que prefiera.

zip -r mypythonlibs.zip python > /dev/null

El archivo .zip se descomprime en la carpeta /opt del entorno de Lambda. Se puede acceder a la carpeta /opt desde el código de la función de Lambda.

Creación o actualización de su capa

Para crear o actualizar la capa de Lambda, ejecute el siguiente comando:

Importante: Asegúrese de incluir las versiones ejecutables compatibles que especificó anteriormente. Sustituya mypythonlibs por el nombre del paquete que utilizó en el paso anterior. Sustituya My python libs por la descripción que prefiera.

aws lambda publish-layer-version --layer-name mypythonlibs --description "My python libs" --zip-file fileb://mypythonlibs.zip --compatible-runtimes "python3.6" "python3.8"

Revise el resultado y copie el nombre de recurso de Amazon (ARN) de la capa. Necesita el ARN de la capa para completar el siguiente paso.

Actualización de la configuración de la función de Lambda para usar la capa

Ejecute el siguiente comando para actualizar la configuración de la función de Lambda para usar la capa:

Importante: Sustituya arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 por la capa ARN.

aws lambda update-function-configuration --layers arn:aws:lambda:us-east-2:123456789012:layer:mypythonlibs:1 --function-name my-function

(Opcional) Use las imágenes de Docker de su paquete de Lambda en lugar de un archivo de AWS SAM

En lugar de usar un archivo de AWS SAM, también puede usar las imágenes de Docker de amazon/aws-sam-cli-build-image para crear su paquete de Lambda. El uso de las imágenes de Docker le permite crear el paquete sin crear una capa.

1.    Ejecute el siguiente comando para obtener las versiones necesarias de sus dependencias:

Importante: Sustituya 3.6 por 3.7 o 3.8, según las bibliotecas compatibles que quiera instalar.

docker run -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.6" /bin/sh -c "pip install -r requirements.txt -t libs; exit"

2.    Cree un paquete de despliegue de Lambda que incluya el código de la función y las bibliotecas correctas.


Información relacionada

¿Cómo puedo resolver los errores «unknown service», «parameter validation failed» u «object has no attribute» de una función de Lambda de Python (Boto3)?

Building layers

Use any programming language and share common components

Lambda (Referencia de comandos de AWS CLI)

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años