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:
-
Uso de una imagen base de AWS para Lambda
Las imágenes base de AWS vienen precargadas con un tiempo de ejecución de lenguaje, un cliente de interfaz de tiempo de ejecución para administrar la interacción entre Lambda y el código de la función, y un emulador de interfaz de tiempo de ejecución para realizar pruebas locales.
-
Uso de una imagen base exclusiva del sistema operativo de AWS
Las imágenes base exclusivas del sistema operativo de AWS
contienen 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. -
Uso de una imagen base que no es de AWS
Puede utilizar una imagen base alternativa de otro registro de contenedores, como Alpine Linux o Debian. También puede utilizar una imagen personalizada creada por su organización. Para que la imagen sea compatible con Lambda, debe incluir en ella un cliente de interfaz de tiempo de ejecución para su lenguaje.
sugerencia
Para reducir el tiempo que tardan las funciones de contenedor de Lambda en activarse, consulte Uso de compilaciones de varias fases
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.
Temas
Requisitos
Instale la versión 2 de la AWS Command Line Interface (AWS CLI) y la CLI de Docker
-
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
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
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. microdnf
es 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
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 AWS
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
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
Abra la página de Funciones
en la consola de Lambda. -
Elija la función que desea actualizar.
-
En Configuración de imagen, elija Editar.
-
Introduzca nuevos valores para cualquiera de los parámetros de anulación y, a continuación, elija Guardar.
-
(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.