View a markdown version of this page

Almacenamiento de código de S3 autoadministrado - AWS Lambda

Almacenamiento de código de S3 autoadministrado

De forma predeterminada, cuando se crea o actualiza una función o capa de Lambda a partir de un archivo .zip, Lambda almacena una copia del código en un almacenamiento administrado por Lambda. Cada cuenta de AWS tiene una cuota de 300 GB de almacenamiento administrado por Lambda por región.

Con el almacenamiento de código de S3 autoadministrado, se puede configurar Lambda para que haga referencia directamente al código desde un bucket de S3 de la cuenta. Lambda no almacena una copia del código, por lo que este no se contabiliza en la cuota de almacenamiento administrado por Lambda. Lambda accede directamente al código desde el bucket de S3.

El almacenamiento de código de S3 autoadministrado está disponible para todas las funciones y capas que se creen y actualicen mediante archivos .zip. Es compatible con todas las clases de almacenamiento de S3, excepto las clases de almacenamiento Glacier.

nota

El almacenamiento de código de S3 autoadministrado no modifica el tamaño máximo del paquete de implementación .zip, que se mantiene en 250 MB sin comprimir.

Configuración del almacenamiento de código de S3 autoadministrado

Para utilizar el almacenamiento de código de S3 autoadministrado, complete los siguientes pasos:

  1. Cree un bucket de S3 o utilice uno existente en la cuenta.

  2. Habilite el control de versiones de S3 para el bucket. Lambda requiere el control de versiones de S3 para realizar un seguimiento de la versión del objeto de origen que debe utilizar. Cada vez que se carga un nuevo paquete .zip, S3 crea una nueva versión para que Lambda pueda distinguir las actualizaciones.

  3. Cargue el paquete de implementación .zip en el bucket de S3.

  4. Conceda a la entidad principal del servicio de Lambda los permisos s3:GetObject y s3:GetObjectVersion para el objeto de origen. Consulte Configuración de permisos.

  5. Cree o actualice la función o la capa. Para ello, especifique el objeto de S3, la clave de S3 y la versión del objeto de S3, y establezca S3ObjectStorageMode en REFERENCE.

Configurar los permisos

Para utilizar el almacenamiento de código de S3 autoadministrado, conceda a la entidad principal del servicio de Lambda (lambda.amazonaws.com) permiso para acceder a los objetos de origen. Agregue la siguiente política de bucket de S3:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "LambdaSelfManagedCodeAccess", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::my-bucket/my-function.zip" ], "Principal": { "Service": "lambda.amazonaws.com" }, "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:lambda:us-east-1:111122223333:function:my-function" } } } ] }

Creación de una función con almacenamiento de S3 autoadministrado

Es posible crear una función con almacenamiento de código de S3 autoadministrado mediante AWS CLI o AWS CloudFormation.

Uso de AWS CLI

Utilice el comando create-function con el parámetro S3ObjectStorageMode=REFERENCE:

aws lambda create-function \ --function-name my-function \ --runtime python3.12 \ --role arn:aws:iam::111122223333:role/lambda-execution-role \ --handler lambda_function.lambda_handler \ --code S3Bucket=my-bucket,\ S3Key=my-function.zip,\ S3ObjectVersion=abc123def456,\ S3ObjectStorageMode=REFERENCE

Para actualizar una función existente de modo que utilice almacenamiento de S3 autoadministrado:

aws lambda update-function-code \ --function-name my-function \ --s3-bucket my-bucket \ --s3-key my-function.zip \ --s3-object-version abc123def456 \ --s3-object-storage-mode REFERENCE
importante

Debe especificar S3ObjectStorageMode=REFERENCE en cada llamada a update-function-code. Si se omite S3ObjectStorageMode, se utiliza COPY de forma predeterminada y Lambda almacena el código en el almacenamiento administrado por Lambda.

Uso de AWS CloudFormation

En la plantilla CloudFormation, establezca S3ObjectStorageMode en REFERENCE en la propiedad Code del recurso AWS::Lambda::Function:

Resources: MyFunction: Type: AWS::Lambda::Function Properties: FunctionName: my-function Runtime: python3.12 Handler: lambda_function.lambda_handler Role: !GetAtt LambdaExecutionRole.Arn Code: S3Bucket: my-bucket S3Key: my-function.zip S3ObjectVersion: abc123def456 S3ObjectStorageMode: REFERENCE

Uso del almacenamiento de S3 autoadministrado con capas

También puede utilizar el almacenamiento de código de S3 autoadministrado para las versiones de las capas. Utilice el comando publish-layer-version con S3ObjectStorageMode=REFERENCE:

aws lambda publish-layer-version \ --layer-name my-layer \ --content S3Bucket=my-bucket,S3Key=my-layer.zip,S3ObjectStorageMode=REFERENCE \ --compatible-runtimes python3.12

Es posible utilizar cualquier combinación de almacenamiento administrado por Lambda y almacenamiento autoadministrado para el código de las funciones y las capas.

Cambio entre modos de almacenamiento

Es posible alternar entre el almacenamiento de código administrado por Lambda y el almacenamiento de código de S3 autoadministrado al actualizar el código de una función o publicar una nueva versión de una capa. Establezca S3ObjectStorageMode en COPY o REFERENCE:

  • COPY (valor predeterminado): Lambda copia el código de origen en el almacenamiento administrado por Lambda.

  • REFERENCE: Lambda hace referencia al código de origen directamente desde el bucket de S3 sin almacenar una copia.

Al cambiar de COPY a REFERENCE, Lambda elimina la copia del código de origen administrada por Lambda. Al cambiar de REFERENCE a COPY, Lambda crea una copia del código de origen en el almacenamiento administrado por Lambda. El cambio a COPY falla si se supera el límite de almacenamiento de código administrado por Lambda.

Ciclo de vida de las funciones con almacenamiento autoadministrado

Lambda accede periódicamente al objeto de origen del bucket de S3 para volver a optimizar el código de la función. Debe mantener el acceso al objeto de origen para que la función permanezca activa.

  • Si Lambda pierde el acceso al objeto de origen de una función, esta pasa al estado Inactive. Para restaurar la función, restablezca el acceso al objeto de origen y actualice la función.

  • Si Lambda pierde el acceso al objeto de origen de una capa, la función permanece en el estado Active. Puede actualizar la configuración de la función sin actualizar las capas, actualizar el código de la función o actualizar la configuración de la función con capas nuevas. Sin embargo, no es posible actualizar la configuración de la función con una capa a la que no se puede acceder.

Uso entre cuentas y entre regiones

Puede crear funciones y capas a partir del código de origen almacenado en buckets de S3 de distintas cuentas y regiones. La recuperación de objetos entre regiones genera costos adicionales por transferencia de datos de S3. Consulte Precios de S3 para obtener más información.

Consideraciones

  • El almacenamiento de código de S3 autoadministrado solo está disponible para funciones y capas basadas en archivos .zip. Las funciones basadas en imágenes de contenedor siguen utilizando Amazon ECR.

  • El tamaño máximo del paquete de implementación .zip, que es de 250 MB sin comprimir, no cambia.

  • Se aplican las tarifas estándar de almacenamiento de Amazon S3 al código almacenado en los buckets autoadministrados. Lambda no cobra por la recuperación de objetos de S3 dentro de la misma región.

  • El almacenamiento de código de S3 autoadministrado es compatible con todas las clases de almacenamiento de S3, excepto las clases de almacenamiento Glacier.

  • Puede utilizar características de S3, como la replicación entre regiones de S3, para compartir artefactos entre regiones, así como políticas de ciclo de vida de S3 para administrar objetos.