Uso de archivos .zip para funciones de Lambda en Python - AWS Lambda

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.

Uso de archivos .zip para funciones de Lambda en Python

El código de la función de AWS Lambda incluye un archivo .py que contiene el código del controlador de la función, junto con los paquetes y módulos adicionales de los que dependa el código. Para implementar este código de función en Lambda, se utiliza un paquete de despliegue. Este paquete puede ser un archivo de archivos .zip o una imagen de contenedor. Para obtener más información sobre el uso de imágenes de contenedores con Python, consulte Implementar funciones de Lambda en Python con imágenes de contenedores.

Para crear un paquete de despliegue como un archivo de archivos .zip, puede emplear utilidad de archivado de archivos .zip incorporada de la herramienta de línea de comandos, o cualquier otra utilidad de archivos .zip, como 7zip. En los ejemplos que se muestran en las siguientes secciones se supone que está utilizando una herramienta zip de línea de comandos en un entorno Linux o macOS. Para utilizar los mismos comandos en Windows, puede instalar el Subsistema de Windows para Linux a fin de obtener una versión de Ubuntu y Bash integrada con Windows.

Tenga en cuenta que Lambda usa permisos de archivo de POSIX, por lo que puede necesitar establecer permisos para la carpeta del paquete de despliegue antes de crear el archivo de archivos .zip.

Dependencias de tiempo de ejecución en Python

Para las funciones de Lambda que utilizan el tiempo de ejecución de Python, una dependencia puede ser cualquier paquete o módulo de Python. Cuando implemente la función mediante un archivo .zip, podrá agregar estas dependencias a su archivo .zip con el código de la función o utilizar una capa de Lambda. Una capa es un archivo .zip independiente que puede contener código adicional y otro contenido. Para obtener más información sobre el uso de las capas de Lambda, consulte Uso de capas de Lambda.

Los tiempos de ejecución de Python para Lambda incluyen el AWS SDK for Python (Boto3) y sus dependencias. Lambda proporciona el SDK en el tiempo de ejecución para los escenarios de implementación en los que no puede agregar sus propias dependencias. Estos escenarios incluyen la creación de funciones en la consola mediante el editor de código integrado o el uso de funciones en línea en AWS Serverless Application Model (AWS SAM) o plantillas de AWS CloudFormation.

Lambda actualiza de manera periódica las bibliotecas del tiempo de ejecución de Python para incluir las actualizaciones y los parches de seguridad más recientes. Si la función usa la versión del SDK de Boto3 incluida en el tiempo de ejecución, pero el paquete de despliegue incluye las dependencias del SDK, esto puede provocar problemas de desalineación de versiones. Por ejemplo, el paquete de despliegue puede incluir la dependencia urllib3 del SDK. Cuando Lambda actualiza el SDK en el tiempo de ejecución, los problemas de compatibilidad entre la nueva versión del tiempo de ejecución y la versión de urllib3 del paquete de despliegue pueden provocar un error en la función.

importante

Para mantener un control total sobre las dependencias y evitar posibles problemas de desalineación de versiones, le recomendamos que agregue todas las dependencias de la función al paquete de despliegue, incluso si sus versiones están incluidas en el tiempo de ejecución de Lambda. Esto incluye el SDK de Boto3.

Para saber qué versión del SDK de Python (Boto3) se incluye en el tiempo de ejecución que está utilizando, consulte Versiones del SDK incluidas en el tiempo de ejecución.

Según el modelo de responsabilidad compartida de AWS, usted es responsable de la administración de cualquier dependencia en los paquetes de despliegue de sus funciones. Esto incluye la aplicación de actualizaciones y parches de seguridad. Para actualizar las dependencias del paquete de despliegue de la función, primero cree un nuevo archivo .zip y, a continuación, cárguelo en Lambda. Para obtener más información, consulte Creación de un paquete de despliegue .zip con dependencias y Creación y actualización de funciones de Lambda en Python mediante archivos .zip.

Creación de un paquete de despliegue .zip sin dependencias

Si el código de la función no tiene dependencias, el archivo .zip solo contiene el archivo .py con el código del controlador de la función. Utilice la utilidad zip que prefiera para crear un archivo .zip con el archivo .py en la raíz. Si el archivo .py no está en la raíz del archivo .zip, Lambda no podrá ejecutar el código.

Para obtener información sobre cómo implementar un archivo .zip para crear una nueva función de Lambda o actualizar una existente, consulte Creación y actualización de funciones de Lambda en Python mediante archivos .zip.

Creación de un paquete de despliegue .zip con dependencias

Si el código de la función depende de paquetes o módulos adicionales, puede agregar estas dependencias al archivo .zip con el código de la función o utilizar una capa de Lambda. En las instrucciones de esta sección, se muestra cómo incluir las dependencias en el paquete de despliegue .zip. Para que Lambda ejecute el código, el archivo .py que contiene el código del controlador y todas las dependencias de la función deben estar instalados en la raíz del archivo .zip.

Supongamos que el código de la función se guarda en un archivo llamado lambda_function.py. Los siguientes comandos de la CLI crean un archivo .zip llamado my_deployment_package.zip que contiene el código de la función de y sus dependencias. Puede instalar las dependencias directamente en una carpeta del directorio de su proyecto o utilizar un entorno virtual de Python.

Para crear el paquete de despliegue (directorio del proyecto)
  1. Desplácese hasta el directorio del proyecto que contiene su archivo de código fuente lambda_function.py. En este ejemplo, el directorio se llama my_function.

    cd my_function
  2. Cree un nuevo directorio llamado “package” en el que instalará sus dependencias.

    mkdir package

    Tenga en cuenta que, en el caso de un paquete de despliegue .zip, Lambda espera que el código fuente y sus dependencias estén en la raíz del archivo .zip. Sin embargo, instalar dependencias directamente en el directorio del proyecto puede introducir una gran cantidad de archivos y carpetas nuevos, lo que dificulta la navegación por el IDE. Aquí se crea un directorio package independiente para mantener las dependencias separadas del código fuente.

  3. Instale las dependencias en el directorio package. En el siguiente ejemplo, se instala el SDK de Boto3 desde el Índice de paquetes de Python mediante pip. Si el código de la función usa paquetes de Python que ha creado usted mismo, guárdelos en el directorio package.

    pip install --target ./package boto3
  4. Cree un archivo .zip con las bibliotecas instaladas en la raíz.

    cd package zip -r ../my_deployment_package.zip .

    Esto genera un archivo my_deployment_package.zip en el directorio del proyecto.

  5. Agregue el archivo lambda_function.py a la raíz del archivo .zip.

    cd .. zip my_deployment_package.zip lambda_function.py

    El archivo .zip debe tener una estructura de directorios plana, con el código del controlador de la función y todas las carpetas de dependencias instalados en la raíz de la siguiente manera.

    my_deployment_package.zip |- bin | |-jp.py |- boto3 | |-compat.py | |-data | |-docs ... |- lambda_function.py

    Si el archivo .py que contiene el código del controlador de la función no está en la raíz del archivo .zip, Lambda no podrá ejecutar el código.

Creación del paquete de despliegue (entorno virtual)
  1. Cree y active un entorno virtual en el directorio del proyecto. En este ejemplo, el directorio del proyecto se llama my_function.

    ~$ cd my_function ~/my_function$ python3.12 -m venv my_virtual_env ~/my_function$ source ./my_virtual_env/bin/activate
  2. Instale las bibliotecas necesarias con pip. En el siguiente ejemplo, se instala el SDK de Boto3.

    (my_virtual_env) ~/my_function$ pip install boto3
  3. Use pip show para encontrar la ubicación en su entorno virtual donde pip ha instalado sus dependencias.

    (my_virtual_env) ~/my_function$ pip show <package_name>

    La carpeta en la que pip instala sus bibliotecas puede llamarse site-packagesdist-packages. Esta carpeta puede estar ubicada en el directorio lib/python3.x o lib64/python3.x (donde python3.x representa la versión de Python que está utilizando).

  4. Desactive el entorno virtual.

    (my_virtual_env) ~/my_function$ deactivate
  5. Navegue al directorio que contiene las dependencias que instaló con pip y cree un archivo .zip en el directorio de su proyecto con las dependencias instaladas en la raíz. En este ejemplo, pip ha instalado sus dependencias en el directorio my_virtual_env/lib/python3.12/site-packages.

    ~/my_function$ cd my_virtual_env/lib/python3.12/site-packages ~/my_function/my_virtual_env/lib/python3.12/site-packages$ zip -r ../../../../my_deployment_package.zip .
  6. Navegue hasta la raíz del directorio de su proyecto donde se encuentra el archivo .py que contiene el código del controlador y agréguelo a la raíz del paquete .zip. En este ejemplo, el nombre del archivo de código de la función es lambda_function.py.

    ~/my_function/my_virtual_env/lib/python3.12/site-packages$ cd ../../../../ ~/my_function$ zip my_deployment_package.zip lambda_function.py

Creación de una capa de Python para las dependencias

En las instrucciones de esta sección, se muestra cómo incluir las dependencias en una capa. Para obtener instrucciones sobre cómo incluir las dependencias en el paquete de implementación, consulte Creación de un paquete de despliegue .zip con dependencias.

Cuando agrega una capa a una función, Lambda carga el contenido de la capa en el directorio /opt de ese entorno de ejecución. Para cada tiempo de ejecución de Lambda, la variable PATH ya incluye rutas de carpeta específicas en el directorio /opt. Para garantizar que la variable PATH recoja el contenido de la capa, incluya el contenido en las siguientes rutas de carpeta:

  • python

  • python/lib/python3.10/site-packages (directorios del sitio)

Por ejemplo, la estructura del archivo .zip de la capa podría tener el siguiente aspecto:

pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info

Además, Lambda detecta de forma automática cualquier biblioteca en el directorio /opt/lib y todos los archivos binarios en el directorio /opt/bin. Para asegurarse de que Lambda encuentre el contenido de la capa de forma correcta, también puede crear una capa con la siguiente estructura:

custom-layer.zip └ lib | lib_1 | lib_2 └ bin | bin_1 | bin_2

Después de empaquetar la capa, consulte Creación y eliminación de capas en Lambda y Adición de capas a las funciones para completar la configuración de la capa.

Ruta de búsqueda de dependencias y bibliotecas incluidas en tiempo de ejecución

Cuando utilice una instrucción import en su código, el tiempo de ejecución de Python buscará en los directorios de su ruta de búsqueda hasta que encuentre el módulo o el paquete. De forma predeterminada, la primera ubicación que busca el tiempo de ejecución es el directorio en el que se descomprime y monta el paquete de despliegue .zip (/var/task). Si incluye una versión de una biblioteca incluida en el tiempo de ejecución de su paquete de implementación, la versión tendrá prioridad sobre la versión incluida en el tiempo de ejecución. Las dependencias del paquete de despliegue también tienen prioridad sobre las dependencias de las capas.

Cuando agregue una dependencia a una capa, Lambda la extraerá en /opt/python/lib/python3.x/site-packages (donde python3.x representa la versión del tiempo de ejecución que utiliza) o /opt/python. En la ruta de búsqueda, estos directorios tienen prioridad sobre los directorios que contienen las bibliotecas incluidas en el tiempo de ejecución y las bibliotecas instaladas con pip (/var/runtime y /var/lang/lib/python3.x/site-packages). Las bibliotecas de las capas de funciones tienen prioridad sobre las versiones incluidas en el tiempo de ejecución.

nota

En la imagen base y el tiempo de ejecución administrado de Python 3.11, AWS SDK y sus dependencias se instalan en el directorio /var/lang/lib/python3.11/site-packages.

Para ver la ruta de búsqueda completa de la función de Lambda, agregue el siguiente fragmento de código.

import sys search_path = sys.path print(search_path)
nota

Dado que las dependencias del paquete de despliegue o de las capas tienen prioridad sobre las bibliotecas incluidas en el tiempo de ejecución, esto puede provocar problemas de desalineación de versiones si incluye una dependencia del SDK, como urllib3, en su paquete sin incluir también el SDK. Si implementa su propia versión de una dependencia de Boto3, también debe implementar Boto3 como una dependencia en su paquete de despliegue. Le recomendamos que empaquete todas las dependencias de la función, incluso si sus versiones están incluidas en el tiempo de ejecución.

También puede agregar dependencias en una carpeta independiente dentro del paquete .zip. Por ejemplo, puede agregar una versión del SDK de Boto3 a una carpeta del paquete .zip llamada common. Cuando descomprima y monte el paquete .zip, esta carpeta se colocará dentro del directorio /var/task. Para usar una dependencia de una carpeta del paquete de despliegue .zip en su código, utilice una instrucción import from. Por ejemplo, para usar una versión de Boto3 de una carpeta denominada common en el paquete .zip, utilice la siguiente instrucción.

from common import boto3

Uso de carpetas __pycache__

Le recomendamos que no incluya carpetas __pycache__ en el paquete de despliegue de la función. Es posible que el código de bytes de Python que se compila en un equipo de compilación con una arquitectura o un sistema operativo diferentes no sea compatible con el entorno de ejecución de Lambda.

Creación de paquetes de despliegue .zip con bibliotecas nativas

Si su función solo usa paquetes y módulos puros de Python, puede utilizar el comando pip install para instalar las dependencias en cualquier equipo de compilación local y crear el archivo .zip. Muchas bibliotecas populares de Python, incluidas NumPy y Pandas, no son puras de Python y contienen código escrito en C o C++. Cuando agregue bibliotecas que contienen código C o C++ a su paquete de despliegue, deberá compilar el paquete correctamente para garantizar que sea compatible con el entorno de ejecución de Lambda.

La mayoría de los paquetes disponibles en el Índice de paquetes de Python (PyPI) están disponibles como “ruedas” (archivos .whl). Un archivo .whl es un tipo de archivo ZIP que contiene una distribución integrada con binarios precompilados para un sistema operativo y una arquitectura de conjunto de instrucciones en particular. Para que su paquete de despliegue sea compatible con Lambda, debe instalar la rueda para los sistemas operativos Linux y la arquitectura del conjunto de instrucciones de su función.

Es posible que algunos paquetes solo estén disponibles como distribuciones de código fuente. Para estos paquetes, debe compilar y crear los componentes de C o C++ usted mismo.

Para ver qué distribuciones están disponibles para el paquete que necesita, haga lo siguiente:

  1. Busque el nombre del paquete en la página principal del Índice de paquetes de Python.

  2. Elija la versión del paquete que desea utilizar.

  3. Seleccione Descargar archivos.

Uso de distribuciones integradas (ruedas)

Para descargar una rueda que sea compatible con Lambda, utilice la opción --platform de pip.

Si la función de Lambda usa la arquitectura del conjunto de instrucciones x86_64, ejecute el siguiente comando pip install para instalar una rueda compatible en su directorio package. Reemplace --python 3.x con la versión del tiempo de ejecución de Python que está utilizando.

pip install \ --platform manylinux2014_x86_64 \ --target=package \ --implementation cp \ --python-version 3.x \ --only-binary=:all: --upgrade \ <package_name>

Si la función usa la arquitectura del conjunto de instrucciones arm64, ejecute el siguiente comando. Reemplace --python 3.x con la versión del tiempo de ejecución de Python que está utilizando.

pip install \ --platform manylinux2014_aarch64 \ --target=package \ --implementation cp \ --python-version 3.x \ --only-binary=:all: --upgrade \ <package_name>

Uso de distribuciones de código fuente

Si su paquete solo está disponible como distribución de código fuente, debe crear usted mismo las bibliotecas de C o C++. Para que su paquete sea compatible con el entorno de ejecución de Lambda, debe crearlo en un entorno que utilice el mismo sistema operativo Amazon Linux 2. Para ello, cree su paquete en una instancia Linux de Amazon EC2.

Para obtener más información sobre cómo lanzar y conectarse a una instancia Linux de Amazon EC2, consulte Tutorial: Introducción a las instancias Linux de Amazon EC2 en la Guía del usuario de Amazon EC2 para instancias Linux.

Creación y actualización de funciones de Lambda en Python mediante archivos .zip

Una vez que haya creado su paquete de despliegue .zip, puede usarlo para crear una nueva función de Lambda o actualizar una existente. Puede implementar el paquete .zip a través de la consola, la AWS Command Line Interface y la API de Lambda. También puede crear y actualizar funciones de Lambda mediante AWS Serverless Application Model (AWS SAM) y AWS CloudFormation.

El tamaño máximo de un paquete de despliegue .zip para Lambda es de 250 MB (descomprimido). Tenga en cuenta que este límite se aplica al tamaño combinado de todos los archivos que cargue, incluidas las capas de Lambda.

El tiempo de ejecución de Lambda necesita permiso para leer los archivos del paquete de implementación. En la notación octal de permisos de Linux, Lambda necesita 644 permisos para archivos no ejecutables (rw-r--r--) y 755 permisos (rwxr-xr-x) para directorios y archivos ejecutables.

En Linux y macOS, utilice el comando chmod para cambiar los permisos de los archivos y directorios del paquete de implementación. Por ejemplo, para brindarle a un archivo ejecutable los permisos correctos, ejecute el siguiente comando.

chmod 755 <filepath>

Para cambiar los permisos de los archivos en Windows, consulte Set, View, Change, or Remove Permissions on an Object en la documentación de Microsoft Windows.

Creación y actualización de funciones con archivos .zip mediante la consola

Para crear una nueva función, primero debe crearla en la consola y, a continuación, cargar el archivo .zip. Para actualizar una función existente, abra la página de la función correspondiente y, a continuación, siga el mismo procedimiento para agregar el archivo .zip actualizado.

Si el archivo .zip tiene un tamaño inferior a 50 MB, puede crear o actualizar una función al cargarlo directamente desde su equipo local. Para archivos .zip de más de 50 MB, primero debe cargar su paquete en un bucket de Amazon S3. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS Management Console, consulte Introducción a Amazon S3. Para cargar archivos mediante la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.

nota

No puede cambiar el tipo de paquete de implementación (.zip o imagen de contenedor) de una función existente. Por ejemplo, no se puede convertir una función de imagen de contenedor para utilizar un archivo .zip. Debe crear una nueva función.

Para crear una nueva función (consola)
  1. Abra la página Funciones de la consola de Lambda y elija Crear función.

  2. Elija Crear desde cero.

  3. En Información básica, haga lo siguiente:

    1. En Nombre de la función, escriba el nombre de la función.

    2. En Tiempo de ejecución, seleccione el tiempo de ejecución que desea utilizar.

    3. (Opcional) Para Arquitectura, elija la arquitectura del conjunto de instrucciones para su función. La arquitectura predeterminada es x86_64. Asegúrese de que el paquete de despliegue .zip para su función sea compatible con la arquitectura del conjunto de instrucciones que seleccione.

  4. (Opcional) En Permisos, expanda Cambiar función de ejecución predeterminada. Puede crear un nuevo Rol de ejecución o utilizar uno existente.

  5. Seleccione Crear función. Lambda crea una función básica “Hola, mundo” mediante el tiempo de ejecución elegido.

Para cargar un archivo .zip desde su equipo local (consola)
  1. En la página Funciones de la consola de Lambda, elija la función para la que desea cargar el archivo .zip.

  2. Seleccione la pestaña Código.

  3. En el panel Código fuente, elija Cargar desde.

  4. Elija un archivo .zip.

  5. Para cargar el archivo .zip, haga lo siguiente:

    1. Seleccione Cargar y, a continuación, seleccione su archivo .zip en el selector de archivos.

    2. Elija Abrir.

    3. Elija Guardar.

Carga de un archivo .zip desde un bucket de Amazon S3 (consola)
  1. En la página Funciones de la consola de Lambda, elija la función para la que desea cargar un nuevo archivo .zip.

  2. Seleccione la pestaña Código.

  3. En el panel Código fuente, elija Cargar desde.

  4. Elija la ubicación de Amazon S3.

  5. Pegue la URL del enlace de Amazon S3 de su archivo .zip y seleccione Guardar.

Actualización de las funciones del archivo .zip mediante el editor de código de la consola

Para algunas funciones con paquetes de despliegue en formato .zip, puede utilizar el editor de código integrado en la consola de Lambda para actualizar el código de la función de forma directa. Para utilizar esta característica, la función debe cumplir los siguientes criterios:

  • La función debe utilizar uno de los tiempos de ejecución del lenguaje interpretado (Python, Node.js o Ruby)

  • El paquete de despliegue de la función debe tener un tamaño inferior a 3 MB.

El código de función de las funciones con paquetes de despliegue de imágenes de contenedores no se puede editar directamente en la consola.

Para actualizar el código de función mediante el editor de código de la consola
  1. Abra la página Funciones de la consola de Lambda y seleccione su función.

  2. Seleccione la pestaña Código.

  3. En el panel Código fuente, seleccione su archivo de código fuente y edítelo en el editor de código integrado.

  4. Cuando haya terminado de editar el código, seleccione Implementar para guardar los cambios y actualizar la función.

Creación y actualización de funciones con archivos .zip mediante la AWS CLI

Puede utilizar la AWS CLI para crear una nueva función o actualizar una existente con un archivo .zip. Utilice los comandos create-function y update-function-code para implementar su paquete .zip. Si el archivo .zip tiene un tamaño inferior a 50 MB, puede cargarlo desde una ubicación de archivo en su equipo de compilación local. Para archivos más grandes, debe cargar su paquete .zip desde un bucket de Amazon S3. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.

nota

Si carga su archivo .zip desde un bucket de Amazon S3 con la AWS CLI, el bucket debe estar ubicado en la misma Región de AWS que su función.

Para crear una nueva función mediante un archivo .zip con la AWS CLI, debe especificar lo siguiente:

  • El nombre de la función (--function-name).

  • El tiempo de ejecución de la función (--runtime).

  • El nombre de recurso de Amazon (ARN) del rol de ejecución de la función (--role).

  • El nombre del método de controlador en el código de la función (--handler).

También debe especificar la ubicación del archivo .zip. Si el archivo .zip se encuentra en una carpeta de su equipo de compilación local, utilice la opción --zip-file para especificar la ruta del archivo, como se muestra en el siguiente comando de ejemplo.

aws lambda create-function --function-name myFunction \ --runtime python3.12 --handler lambda_function.lambda_handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --zip-file fileb://myFunction.zip

Para especificar la ubicación del archivo .zip en un bucket de Amazon S3, utilice la opción --code, como se muestra en el siguiente comando de ejemplo. Solo necesita utilizar el parámetro S3ObjectVersion para los objetos con versiones.

aws lambda create-function --function-name myFunction \ --runtime python3.12 --handler lambda_function.lambda_handler \ --role arn:aws:iam::111122223333:role/service-role/my-lambda-role \ --code S3Bucket=myBucketName,S3Key=myFileName.zip,S3ObjectVersion=myObjectVersion

Para actualizar una función existente mediante la CLI, especifique el nombre de la función mediante el parámetro --function-name. También debe especificar la ubicación del archivo .zip que desea utilizar para actualizar el código de la función. Si el archivo .zip se encuentra en una carpeta de su equipo de compilación local, utilice la opción --zip-file para especificar la ruta del archivo, como se muestra en el siguiente comando de ejemplo.

aws lambda update-function-code --function-name myFunction \ --zip-file fileb://myFunction.zip

Para especificar la ubicación del archivo .zip en un bucket de Amazon S3, utilice las opciones --s3-bucket--s3-key tal como se muestra en el siguiente comando de ejemplo. Solo necesita utilizar el parámetro --s3-object-version para los objetos con versiones.

aws lambda update-function-code --function-name myFunction \ --s3-bucket myBucketName --s3-key myFileName.zip --s3-object-version myObject Version

Creación y actualización de funciones con archivos .zip mediante la API de Lambda

Para crear y actualizar funciones con un archivo de archivos .zip, utilice las siguientes operaciones de la API:

Creación y actualización de funciones con archivos .zip mediante AWS SAM

AWS Serverless Application Model (AWS SAM) es un conjunto de herramientas que ayuda a agilizar el proceso de creación y ejecución de aplicaciones sin servidor en AWS. Defina los recursos de su aplicación en una plantilla YAML o JSON y utilice la interfaz de la línea de comandos de AWS SAM (AWS SAM CLI) para crear, empaquetar e implementar sus aplicaciones. Al crear una función de Lambda a partir de una plantilla de AWS SAM, AWS SAM crea automáticamente un paquete de despliegue .zip o una imagen de contenedor con el código de la función y las dependencias que especifique. Para obtener más información sobre el uso de AWS SAM para crear e implementar funciones de Lambda, consulte Introducción a AWS SAM en la Guía para desarrolladores de AWS Serverless Application Model.

También puede utilizar AWS SAM para crear una función de Lambda con un archivo de archivos .zip existente. Para crear una función de Lambda mediante AWS SAM, puede guardar el archivo .zip en un bucket de Amazon S3 o en una carpeta local de su equipo de compilación. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.

En la plantilla de AWS SAM, el recurso AWS::Serverless::Function especifica la función de Lambda. En este recurso, establezca las siguientes propiedades para crear una función mediante un archivo de archivos .zip:

  • PackageType: se establece como Zip.

  • CodeUri: se establece como el URI de Amazon S3, la ruta a la carpeta local o el objeto FunctionCode del código de la función.

  • Runtime: se establece como el entorno de ejecución elegido

Con AWS SAM, si su archivo .zip tiene más de 50 MB, no es necesario cargarlo primero en un bucket de Amazon S3. AWS SAM puede cargar paquetes .zip hasta el tamaño máximo permitido de 250 MB (descomprimidos) desde una ubicación de su equipo de compilación local.

Para obtener más información sobre la implementación de funciones mediante un archivo .zip en AWS SAM, consulte AWS::Serverless::Function en la Guía para desarrolladores de AWS SAM.

Creación y actualización de funciones con archivos .zip mediante AWS CloudFormation

Puede utilizar AWS CloudFormation para crear una función de Lambda con un archivo de archivos .zip. Para crear una función de Lambda a partir de un archivo .zip, primero debe cargar el archivo a un bucket de Amazon S3. Para obtener instrucciones sobre cómo cargar un archivo en un bucket de Amazon S3 con la AWS CLI, consulte Mover objetos en la Guía del usuario de la AWS CLI.

Para los tiempos de ejecución de Node.js y Python, también puede proporcionar código fuente en línea en la plantilla de AWS CloudFormation. A continuación, AWS CloudFormation crea un archivo .zip que contiene el código de la función creada.

Uso de un archivo .zip existente

En la plantilla de AWS CloudFormation, el recurso AWS::Lambda::Function especifica la función de Lambda. En este recurso, establezca las siguientes propiedades para crear una función mediante un archivo de archivos .zip:

  • PackageType: se establece como Zip.

  • Code: ingrese el nombre del bucket de Amazon S3 y el nombre del archivo .zip en los campos S3Bucket y S3Key.

  • Runtime: se establece como el entorno de ejecución elegido

Creación de un archivo .zip a partir de código en línea

Puede declarar funciones simples escritas en Python o Node.js en línea en una plantilla de AWS CloudFormation. Como el código está incrustado en YAML o JSON, no puede agregar ninguna dependencia externa a su paquete de despliegue. Esto significa que la función debe usar la versión del AWS SDK que se incluye en el tiempo de ejecución. Los requisitos de la plantilla, como tener que usar caracteres de escape para ciertos caracteres, también dificultan el uso de las características de comprobación de sintaxis y finalización de código del IDE. Esto significa que la plantilla puede requerir pruebas adicionales. Debido a estas limitaciones, declarar funciones en línea es más adecuado para códigos muy simples que no cambian con frecuencia.

Para crear un archivo .zip a partir de código en línea para los tiempos de ejecución de Node.js y Python, establezca las siguientes propiedades en el recurso AWS::Lambda::Function de la plantilla:

  • PackageType: se establece como Zip.

  • Code: se ingresa el código de la función en el campo ZipFile.

  • Runtime: se establece como el tiempo de ejecución elegido.

El archivo .zip que genera AWS CloudFormation no puede superar los 4 MB. Para obtener más información sobre la implementación de funciones mediante un archivo .zip en AWS CloudFormation, consulte AWS::Lambda::Function en la Guía del usuario de AWS CloudFormation.