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 de 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, debe crear un trabajo 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 de 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 de Lambda de un objeto denominado customerImage1.jpg en el bucket DOC-EXAMPLE-BUCKET.

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:::DOC-EXAMPLE-BUCKET" } ] }

Su función de 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 una función de Lambda desde operaciones por lotes de Amazon S3

Puede invocar la función de 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 basada en eventos de Amazon S3 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 de 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 de 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 de 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 Administrar 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 de Lambda desde las operaciones por lotes de Amazon S3 en la Guía para desarrolladores de Amazon S3.