Uso de imágenes de contenedor de Lambda - 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 imágenes de contenedor de Lambda

El código de la función AWS Lambda se compone de scripts o programas compilados y sus dependencias. Utiliza un paquete de implementación para implementar su código de función en Lambda. Lambda admite dos tipos de paquetes de implementación: imágenes de contenedor y archivos .zip.

Hay tres formas de crear una imagen de contenedor para una función de Lambda:

sugerencia

Para reducir el tiempo que tardan las funciones de contenedor de Lambda en activarse, consulte Uso de compilaciones de varias fases en la documentación de Docker. Para compilar imágenes de contenedor eficientes, siga Prácticas recomendadas para escribir Dockerfiles.

Para crear una función de Lambda a partir de una imagen de contenedor, cree su imagen de manera local y cárguela en un repositorio de Amazon Elastic Container Registry (Amazon ECR). A continuación, especifique el URI del repositorio cuando cree la función. El repositorio Amazon ECR debe estar en el mismo Región de AWS que la función de Lambda. Puede crear una función con una imagen de una cuenta AWS diferente, siempre que la imagen esté en la misma región que la función de Lambda. Para obtener más información, consulte Permisos entre cuentas de Amazon ECR.

En esta página, se explican los tipos de imágenes base y los requisitos para crear imágenes de contenedor compatibles con Lambda.

nota

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

Requisitos

Instale la versión 2 de la AWS Command Line Interface (AWS CLI) y la CLI de Docker. Además, tenga en cuenta los siguientes requisitos:

  • La imagen de contenedor debe implementar la Tiempos de ejecución de la API de Lambda. Los clientes de interfaz de tiempo de ejecución de AWS de código abierto implementan la API. Puede agregar un cliente de interfaz de tiempo de ejecución a su imagen base preferida para que sea compatible con Lambda.

  • La imagen de contenedor debe poder ejecutarse en un sistema de archivos de solo lectura. Su código de función puede acceder a un directorio /tmp con escritura permitida con entre 512 MB y 10,240 MB, en incrementos de 1 MB, de almacenamiento.

  • El usuario predeterminado de Lambda debe ser capaz de leer todos los archivos necesarios para ejecutar el código de función. Lambda sigue las prácticas recomendadas de seguridad definiendo un usuario predeterminado de Linux con permisos de privilegio mínimo. Compruebe que el código de su aplicación no depende de los archivos que otros usuarios de Linux tienen restricciones para ejecutar.

  • Lambda solo admite imágenes de contenedor basadas en Linux.

  • Lambda proporciona imágenes base de varias arquitecturas. Sin embargo, la imagen que crea para su función debe tener como destino a solo una de las arquitecturas. Lambda no admite funciones que utilizan imágenes de contenedor de varias arquitecturas.

Uso de una imagen base de AWS para Lambda

Puede utilizar una de las imágenes base de AWS para Lambda a fin de crear la imagen de contenedor para el código de función. Las imágenes base están precargadas con un tiempo de ejecución de lenguaje y otros componentes necesarios para ejecutar una imagen contenedor en Lambda. Agregue su código de función y dependencias a la imagen base y luego lo empaqueta como una imagen de contenedor.

AWS proporciona periódicamente actualizaciones a las imágenes base AWS para Lambda. Si su Dockerfile incluye el nombre de la imagen en la propiedad FROM, el cliente de Docker extrae la última versión de la imagen del repositorio de Amazon ECR. Para utilizar la imagen base actualizada, debe reconstruir la imagen contenedor y actualizar el código de función.

Las imágenes base de Node.js 20, Python 3.12, Java 21, AL2023 y versiones posteriores se basan en la imagen de contenedor mínima de Amazon Linux 2023. Las imágenes base anteriores utilizan Amazon Linux 2. AL2023 ofrece varias ventajas con respecto a Amazon Linux 2, incluida una huella de implementación más reducida y versiones actualizadas de bibliotecas como glibc.

Las imágenes basadas en AL2023 utilizan microdnf (con enlaces simbólicos comodnf) como administrador de paquetes en lugar deyum, que es el administrador de paquetes predeterminado en Amazon Linux 2. microdnfes una implementación independiente de. dnf Para obtener una lista de los paquetes que se incluyen en las imágenes basadas en AL2023, consulte las columnas Minimal Container de la sección Comparación de paquetes instalados en Amazon Linux 2023 Container Images. Para obtener más información sobre las diferencias entre AL2023 y Amazon Linux 2, consulte Introducción al entorno de ejecución de Amazon Linux 2023 AWS Lambda en el blog de AWS informática.

nota

Para ejecutar imágenes basadas en AL2023 de forma local, incluso con AWS Serverless Application Model (AWS SAM), debe usar la versión 20.10.10 o posterior de Docker.

Para crear una imagen de contenedor a partir de una imagen base de AWS, elija las instrucciones para el lenguaje que prefiera:

Uso de una imagen base exclusiva del sistema operativo de AWS

Las imágenes base exclusivas del sistema operativo de AWScontienen una distribución de Amazon Linux y el emulador de interfaz de tiempo de ejecución. Por lo general, estas imágenes se utilizan para crear imágenes contenedoras para lenguajes compilados, como Go y Rust, y para un lenguaje o versión de un lenguaje para los que Lambda no proporciona una imagen base, como Node.js 19. También puede usar imágenes base exclusivas del sistema operativo para implementar un tiempo de ejecución personalizado. Para que la imagen sea compatible con Lambda, debe incluir en ella un cliente de interfaz de tiempo de ejecución para su lenguaje.

Etiquetas Tiempo de ejecución Sistema operativo Dockerfile Obsolescencia

al2023

Tiempo de ejecución exclusivo del sistema operativo Amazon Linux 2023 Dockerfile solo para el sistema operativo Runtime activado GitHub

al2

Tiempo de ejecución exclusivo del sistema operativo Amazon Linux 2 El tiempo de ejecución de Dockerfile solo para sistemas operativos está activado GitHub

Galería pública de Amazon Elastic Container Registry: gallery.ecr.aws/lambda/provided

Uso de una imagen base que no es de AWS

Lambda admite cualquier imagen que se ajuste a uno de los siguientes formatos de manifiesto de imagen:

  • Docker Image Manifest V2 Schema 2 (usado con Docker versión 1.10 y posteriores)

  • Especificaciones de la iniciativa de contenedores abiertos (OCI) (versión 1.0.0 y posteriores)

Lambda admite un tamaño máximo de imagen sin comprimir de 10 GB, incluidas todas las capas.

nota

Para que la imagen sea compatible con Lambda, debe incluir en ella un cliente de interfaz de tiempo de ejecución para su lenguaje.

Clientes de interfaz de tiempo de ejecución

Si utiliza una imagen base exclusiva del sistema operativo o una imagen base alternativa, debe incluir un cliente de interfaz de tiempo de ejecución en su imagen. El cliente de interfaz de tiempo de ejecución debe extender la Tiempos de ejecución de la API de Lambda, que administra la interacción entre Lambda y el código de función. AWS proporciona clientes de interfaz de tiempo de ejecución de código abierto para los siguientes lenguajes:

Si utiliza un lenguaje que no tiene un cliente de interfaz de tiempo de ejecución de AWS, debe crear el suyo propio.

Permisos de Amazon ECR

Antes de crear la función de Lambda desde una imagen de contenedor, debe crear la imagen de forma local y cargarla en un repositorio de Amazon ECR. Cuando cree la función, especifique el URI del repositorio de Amazon ECR.

Asegúrese de que los permisos para el usuario o el rol que crean la función contengan las políticas administradas por AWS GetRepositoryPolicy y SetRepositoryPolicy.

Por ejemplo, utilice la consola de IAM para crear un rol con la siguiente política:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ecr:SetRepositoryPolicy", "ecr:GetRepositoryPolicy" ], "Resource": "arn:aws:ecr:us-east-1:111122223333:repository/hello-world" } ] }

Políticas de repositorios de Amazon ECR

Para una función en la misma cuenta que la imagen de contenedor en Amazon ECR, puede agregar los permisos ecr:BatchGetImage y ecr:GetDownloadUrlForLayer a su política de repositorios de Amazon ECR. En el siguiente ejemplo se muestra la política mínima:

{ "Sid": "LambdaECRImageRetrievalPolicy", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ] }

Para obtener más información sobre los permisos de repositorio de Amazon ECR, consulte Políticas de repositorio privado en la Guía del usuario de Amazon Elastic Container Registry.

Si el repositorio de Amazon ECR no incluye estos permisos, Lambda agrega ecr:BatchGetImage y ecr:GetDownloadUrlForLayer a los permisos del repositorio de imágenes de contenedor. Lambda puede agregar estos permisos solo si la entidad principal que llama a Lambda tiene los permisos ecr:getRepositoryPolicy y ecr:setRepositoryPolicy.

Para ver o editar los permisos del repositorio de Amazon ECR, siga las instrucciones de Establecer una instrucción de política de repositorio privado en la Guía del usuario de Amazon Elastic Container Registry.

Permisos entre cuentas de Amazon ECR

Una cuenta diferente en la misma región puede crear una función que utiliza una imagen de contenedor propiedad de su cuenta. En el siguiente ejemplo, su política de permisos de repositorio de Amazon ECR necesita las siguientes instrucciones para otorgar acceso al número de cuenta 123456789012.

  • CrossAccountPermission— Permite a la cuenta 123456789012 crear y actualizar funciones Lambda que utilizan imágenes de este repositorio de ECR.

  • LambdaECR ImageCrossAccountRetrievalPolicy: Lambda eventualmente establecerá el estado de una función como inactiva si no se invoca durante un período prolongado. Esta instrucción es necesaria para que Lambda pueda recuperar la imagen de contenedor para su optimización y almacenamiento en caché en nombre de la función propiedad de 123456789012.

ejemplo — Agregar permiso entre cuentas al repositorio
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPermission", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "AWS": "arn:aws:iam::123456789012:root" } }, { "Sid": "LambdaECRImageCrossAccountRetrievalPolicy", "Effect": "Allow", "Action": [ "ecr:BatchGetImage", "ecr:GetDownloadUrlForLayer" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "StringLike": { "aws:sourceARN": "arn:aws:lambda:us-east-1:123456789012:function:*" } } } ] }

Para brindar acceso a varias cuentas, agregue los ID de cuenta a la lista de la entidad principal en la política CrossAccountPermission y a la lista de evaluación de condiciones en LambdaECRImageCrossAccountRetrievalPolicy.

Si está trabajando con varias cuentas en una organización de AWS, le recomendamos que enumere cada ID de cuenta en la política de permisos ECR. Este enfoque se alinea con la práctica recomendada de seguridad de AWS de establecer permisos limitados en las políticas de IAM.

Configuración de imagen de contenedor

A continuación se muestra la configuración común para una imagen de contenedor. Si usa esta configuración en su Dockerfile, observe cómo Lambda la interpreta y procesa:

  • ENTRYPOINT: especifica la ruta absoluta al punto de entrada de la aplicación.

  • CMD: especifica los parámetros que desea pasar con ENTRYPOINT.

  • WORKDIR: especifica la ruta absoluta al directorio de trabajo.

  • ENV: especifica una variable de entorno para la función de Lambda.

Para obtener más información acerca de cómo Docker utiliza la configuración de la imagen de contenedor, consulte ENTRYPOINT en la referencia Dockerfile en el sitio web de Docker Docs. Para obtener más información acerca del uso de ENTRYPOINT y CMD, vea Desmitificación de ENTRYPOINT y CMD en Docker en el blog de código abierto de AWS.

Puede especificar la configuración de la imagen de contenedor en Dockerfile cuando construya la imagen. También puede anular estas configuraciones mediante la consola de Lambda o la API de Lambda. Esto le permite implementar varias funciones que implementan la misma imagen de contenedor pero con diferentes configuraciones de tiempo de ejecución.

aviso

Cuando especifique ENTRYPOINT o CMD en el Dockerfile o como anulación, asegúrese de introducir la ruta absoluta. Además, no utilice enlaces simbólicos como punto de entrada al contenedor.

Cómo anular los valores de configuración en la imagen de contenedor
  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija la función que desea actualizar.

  3. En Configuración de imagen, elija Editar.

  4. Introduzca nuevos valores para cualquiera de los parámetros de anulación y, a continuación, elija Guardar.

  5. (Opcional) Para agregar o anular variables de entorno, en Variables de entorno, elija Editar.

Para obtener más información, consulte Uso de variables de entorno de Lambda.