Creación de funciones de Lambda definidas como imágenes de contenedor - AWS Lambda

Creación de funciones de Lambda definidas como imágenes de contenedor

Cuando se crea una función Lambda, empaquete el código de función en un paquete de implementación. Lambda admite dos tipos de paquetes de implementación: imágenes de contenedor y archivos .zip. El flujo de trabajo para crear una función es diferente según el tipo de paquete de implementación. Para configurar una función definida como un archivo .zip, consulte Creación de funciones Lambda definidas como archivos .zip.

Puede utilizar la consola de Lambda y la API de Lambda para crear una función definida como una imagen contenedor, actualizar y probar el código de imagen y configurar otras opciones de función.

nota

No se puede convertir una función de archivo de archivo .zip existente para utilizar una imagen contenedor. Debe crear una nueva función.

Cuando selecciona una imagen mediante una etiqueta de imagen, Lambda convierte esa etiqueta en el resumen de imagen subyacente. Para recuperar el resumen de la imagen, utilice la operación API GetFunctionConfiguration. Para actualizar la función a una versión de imagen más reciente, debe utilizar la consola de Lambda para actualizar el código de función o utilizar la operación API UpdateFunctionCode. Las operaciones de configuración como UpdateFunctionConfiguration no actualizan la imagen contenedor de la función.

nota

En Amazon ECR, si reasigna la etiqueta de imagen a otra imagen, Lambda no actualiza la versión de la imagen.

Versión de la función $LATEST

Al publicar una versión de función, el código y la mayoría de las opciones de configuración se bloquean para mantener una experiencia coherente para los usuarios de esa versión. Puede cambiar el código y muchas opciones de configuración solo en la versión no publicada de la función. De forma predeterminada, la consola muestra información de configuración para la versión no publicada de la función. Para ver las versiones de una función, elija Cualificadores. La versión no publicada se denomina $LATEST.

Tenga en cuenta que Amazon Elastic Container Registry (Amazon ECR) también utiliza una etiqueta más reciente para indicar la última versión de la imagen del contenedor. Tenga cuidado de no confundir esta etiqueta con la versión de la función $LATEST.

Para obtener más información acerca de la administración de versiones, consulte Versiones de la función de Lambda.

Implementación de imágenes de

Cuando implementa código como imagen contenedor en una función de Lambda, la imagen se somete a un proceso de optimización para ejecutarse en Lambda. Este proceso puede tardar unos segundos, durante los cuales la función está en estado pendiente. Cuando se completa el proceso de optimización, la función entra en el estado activo.

Permisos de Amazon ECR

Para que su función acceda a la imagen del contenedor en Amazon ECR, puede agregar los permisos ecr:BatchGetImage y ecr:GetDownloadUrlForLayer a su repositorio 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 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 del contenedor. Lambda puede agregar estos permisos solo si el 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 Configuración de una instrucción de política de repositorio en la Guía del usuario de Amazon Elastic Container Registry.

Sustituir la configuración del contenedor

Puede usar la consola de Lambda o la API de Lambda para anular la siguiente configuración de imagen de contenedor:

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

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

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

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

Cualquier valor que proporcione en la consola de Lambda o en la API de Lambda anula los valores del Dockerfile.

Creación de una función (consola)

Para crear una función definida como imagen contenedor, primero debe crear la imagen y, a continuación, almacenar la imagen en el repositorio de Amazon ECR.

Para crear la función

  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija Create function (Crear función).

  3. Elija la opción Imagen de contenedor.

  4. Bajo Basic information (Información básica), haga lo siguiente:

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

    2. Para Container image URI (URI de imagen de contenedor), proporcione una imagen de contenedor compatible con la arquitectura del conjunto de instrucciones que desea para el código de función.

      Puede ingresar el URI de imagen de Amazon ECR o buscar la imagen de Amazon ECR.

      • Ingrese el URI de imagen de Amazon ECR.

      • O bien, para buscar la imagen en un repositorio Amazon ECR, elija Examinar imágenes. Seleccione el repositorio de Amazon ECR en la lista desplegable y, a continuación, seleccione la imagen.

  5. (Opcional) Para anular los parámetros de configuración que se incluyen en Dockerfile, expanda Sustituciones de imágenes de contenedor. Puede anular cualquiera de los siguientes parámetros:

    • Para Punto de entrada, introduzca la ruta completa del ejecutable en tiempo de ejecución. En el ejemplo siguiente se muestra un punto de entrada para una función Node.js:

      "/usr/bin/npx", "aws-lambda-ric"
    • En Comando, introduzca parámetros adicionales para pasar a la imagen con Punto de entrada. En el ejemplo siguiente se muestra un comando para una función Node.js:

      "app.handler"
    • En Directorio de trabajo, introduzca la ruta completa del directorio de trabajo para la función. En el ejemplo siguiente se muestra el directorio de trabajo de una imagen base de AWS para Lambda:

      "/var/task"
    nota

    Para la configuración de anulación, asegúrese de que encierra cada cadena entre comillas (" ").

  6. (Opcional) Para Architecture (Arquitectura), elija la arquitectura del conjunto de instrucciones para la función. La arquitectura predeterminada es x86_64. Nota: Cuando cree la imagen de contenedor para su función, asegúrese de que sea compatible con esta arquitectura del conjunto de instrucciones.

  7. (Opcional) En Permisos, expanda Cambiar función de ejecución predeterminada. A continuación, elija crear un nuevo rol de ejecucióno utilizar un rol existente.

  8. Elija Create function (Crear función).

Actualización del código de función (consola)

Después de implementar una imagen contenedor en una función, la imagen es de solo lectura. Para actualizar el código de función, primero debe implementar una nueva versión de imagen. Cree una nueva versión de imagen, y a continuación, almacene la imagen en el repositorio de Amazon ECR.

Para configurar la función para utilizar una imagen de contenedor actualizada

  1. Abra la página de Funciones en la consola de Lambda.

  2. Elija la función que desea actualizar.

  3. En Imagen, elija Implementar nueva imagen.

  4. Elija Examinar imágenes.

  5. En el cuadro de diálogo Seleccionar imagen de contenedor, seleccione el repositorio de Amazon ECR en la lista desplegable y, a continuación, seleccione la nueva versión de imagen.

  6. Seleccione Save.

Anula los parámetros de imagen (consola)

Puede utilizar la consola de Lambda para anular los valores de configuración en la imagen contenedor.

Para anular los valores de configuración en la imagen 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 AWS Lambda.

Uso de la API de Lambda

Para administrar funciones definidas como imágenes de contenedor, utilice las siguientes operaciones de API:

Para crear una función definida como imagen contenedor, utilice el comando create-function. Establezca la package-type a Image y especifique el URI de la imagen del contenedor utilizando el code parámetro.

Cuando crea la función, puede especificar la arquitectura del conjunto de instrucciones. La arquitectura predeterminada es x86-64. Asegúrese de que el código de la imagen de contenedor sea compatible con la arquitectura.

Tenga en cuenta que debe crear la función desde la misma cuenta que el registro de contenedores en Amazon ECR.

aws lambda create-function --region sa-east-1 --function-name my-function \ --package-type Image \ --code ImageUri=<ECR Image URI> \ --role arn:aws:iam::123456789012:role/lambda-ex

Para actualizar el código de función, utilice el comando update-function-code. Especifique la ubicación de la imagen del contenedor mediante el parámetro image-uri.

nota

No se puede cambiar el package-type de una función.

aws lambda update-function-code --region sa-east-1 --function-name my-function \ --image-uri <ECR Image URI> \

Para actualizar los parámetros de la función, utilice la update-function-configuration operación. Especifique EntryPoint y Command como matrices de cadenas, y WorkingDirectory como una cadena.

aws lambda update-function-configuration --function-name my-function \ --image-config '{"EntryPoint": ["/usr/bin/npx", "aws-lambda-ric"], \ "Command": ["app.handler"] , \ "WorkingDirectory": "/var/task"}'

AWS CloudFormation

Puede utilizar AWS CloudFormation para crear funciones de Lambda definidas como imágenes contenedoras. En la plantilla AWS CloudFormation, el recurso de AWS::Lambda::Function especifica la función de Lambda. Para obtener descripciones de las propiedades del recurso AWS::Lambda::Function, consulte AWS::Lambda::Function en la Guía del usuario de AWS CloudFormation .

En el AWS::Lambda::Function recurso, establezca las siguientes propiedades para crear una función definida como una imagen contenedor:

  • AWS::Lambda::Function

    • PackageType: establecer en Image.

    • Código: introduzca el URI de la imagen del contenedor en el campo ImageUri.

    • ImageConfig: (opcional) anule las propiedades de configuración de la imagen del contenedor.

La propiedad ImageConfig en AWS::Lambda::Function contiene los siguientes campos:

  • Comando: especifica los parámetros con los que desea pasar EntryPoint.

  • EntryPoint: especifica el punto de entrada de la aplicación.

  • WorkingDirectory: especifica el directorio de trabajo.

nota

Si declara una propiedad ImageConfig en la AWS CloudFormation plantilla, debe proporcionar valores para las tres propiedades de ImageConfig.

Para obtener más información, consulte ImageConfig en la Guía del usuario de AWS CloudFormation .