Uso de AWS Lambda con operaciones por lotes de Amazon S3 - AWS Lambda

Uso de AWS Lambda con operaciones por lotes de Amazon S3

Puede utilizar las operaciones por lotes de Amazon S3 para invocar una función Lambda en un conjunto grande de objetos de Amazon S3. Amazon S3 realiza un seguimiento del progreso de las operaciones por lotes, envía notificaciones y almacena un informe de finalización que muestra el estado de cada acción.

Para ejecutar una operación por lotes, cree untrabajo de operaciones por lotes de Amazon S3. Cuando se crea el trabajo, se proporciona un manifiesto (la lista de objetos) y se configura la acción a realizar en esos objetos.

Cuando se inicia el trabajo por lotes, Amazon S3 invoca la función Lambda sincrónicamente para cada objeto del manifiesto. El parámetro de evento incluye los nombres del bucket y del objeto.

En el ejemplo siguiente se muestra el evento que Amazon S3 envía a la función Lambda de un objeto denominado customerImage1.jpg en el bucket examplebucket.

ejemplo Evento de solicitud por lotes de Amazon S3

{ "invocationSchemaVersion": "1.0", "invocationId": "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "job": { "id": "f3cc4f60-61f6-4a2b-8a21-d07600c373ce" }, "tasks": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "s3Key": "customerImage1.jpg", "s3VersionId": "1", "s3BucketArn": "arn:aws:s3:us-east-1:0123456788:examplebucket" } ] }

Su función Lambda debe devolver un objeto JSON con los campos tal como se muestran en el siguiente ejemplo. Puede copiar el parámetro invocationId y taskId desde el parámetro de evento. Puede devolver una cadena en el resultString. Amazon S3 guarda los valores resultString en el informe de finalización.

ejemplo Respuesta de solicitud por lotes de Amazon S3

{ "invocationSchemaVersion": "1.0", "treatMissingKeysAs" : "PermanentFailure", "invocationId" : "YXNkbGZqYWRmaiBhc2RmdW9hZHNmZGpmaGFzbGtkaGZza2RmaAo", "results": [ { "taskId": "dGFza2lkZ29lc2hlcmUK", "resultCode": "Succeeded", "resultString": "["Alice", "Bob"]" } ] }

Invocación de funciones de Lambda desde operaciones por lotes de Amazon S3

Puede invocar la función Lambda con el ARN de una función no calificada o calificada. Si desea utilizar la misma versión de una función para todo el trabajo por lotes, configure una versión de función específica en el parámetro FunctionARN cuando cree el trabajo. Si configura un alias o el calificador $LATEST, el trabajo por lotes comienza inmediatamente a llamar a la nueva versión de la función si el alias o $LATEST se actualizan durante la ejecución del trabajo.

Tenga en cuenta que no puede reutilizar una función Amazon S3 basada en eventos existente para operaciones por lotes. Esto se debe a que la operación por lotes de Amazon S3 pasa un parámetro de evento diferente a la función Lambda y espera un mensaje de retorno con una estructura JSON específica.

En la política basada en recursos que cree para el trabajo por lotes de Amazon S3, asegúrese de establecer permisos para que el trabajo invoque su función Lambda.

En el rol de ejecución de la función, establezca una política de confianza para que Amazon S3 asuma el rol cuando ejecute la función.

Si su función utiliza SDK de AWS para administrar recursos de Amazon S3, debe agregar permisos de Amazon S3 a la función de ejecución.

Cuando se ejecuta el trabajo, Amazon S3 inicia varias instancias de función para procesar los objetos de Amazon S3 en paralelo, hasta el límite de simultaneidad de la función. Amazon S3 limita el aumento inicial de instancias para evitar un costo excesivo para trabajos más pequeños.

Si la función Lambda devuelve un código de respuesta TemporaryFailure, Amazon S3 reintenta la operación.

Para obtener más información acerca de las operaciones por lotes de Amazon S3, consulte Realización de operaciones por lotes en la Guía para desarrolladores de Amazon S3.

Para obtener un ejemplo de cómo utilizar una función Lambda en operaciones por lotes de Amazon S3, consulte Invocación de una función Lambda desde las operaciones por lotes de Amazon S3 en la Guía para desarrolladores de Amazon S3.