He configurado una notificación de eventos de Amazon Simple Storage Service (Amazon S3) para invocar mi función de AWS Lambda. Sin embargo, la función no se invoca cuando se produce el evento de Amazon S3.
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de la AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Comprobación de si el tipo de evento de Amazon S3 se ha configurado correctamente
Al configurar las notificaciones de eventos de S3, debes especificar cada tipo de evento que hace que Amazon S3 envíe la notificación. Si se produce un tipo de evento no especificado en el bucket de Amazon S3, Amazon S3 no enviará la notificación.
Por ejemplo, puedes configurar una notificación de evento para invocar Lambda con el tipo de evento s3:ObjectCreated:Put. Si subes un archivo grande, Amazon S3 utiliza automáticamente el proceso de carga multiparte para subir el archivo al bucket. Para invocar la función de Lambda para esta carga, también debes configurar el tipo de evento s3:ObjectCreated:CompleteMultipartUpload. O bien, utiliza el tipo de evento s3:ObjectCreated:* para solicitar notificaciones para cada API que Amazon S3 utilice para crear un objeto.
Comprobación de que los filtros de nombre clave del objeto incluyen el nombre del archivo cargado
Si las notificaciones de eventos de S3 utilizan el filtrado de nombres de claves de objetos, Amazon S3 publica notificaciones solo para objetos con prefijos o sufijos específicos. Asegúrate de que los filtros de prefijos o sufijos especificados en la notificación de eventos incluyan el nombre de la clave del objeto cargado.
Nota: No puedes usar un carácter comodín (*) como prefijo o sufijo para representar cualquier carácter
Para filtrar nombres de claves de objetos, algunos caracteres especiales de los prefijos o sufijos deben estar codificados en URL (codificados en porcentajes). Por ejemplo, para definir el valor de un prefijo como test=abc/, introduce test%3Dabc/ como valor.
Para obtener más información sobre el manejo específico de caracteres en los nombres de las claves de objetos, consulta Pautas de nomenclatura de claves de objetos.
Comprobación de que la política basada en recursos de IAM de tu función de Lambda tenga los permisos necesarios para que Amazon S3 invoque la función
Consulta la política basada en recursos de AWS Identity and Access Management (IAM) de tu función de Lambda para comprobar que la política permite que el bucket invoque la función. Si el bucket no puede invocar la función, agrega la política requerida.
Ejemplo de política:
{
"Version": "2012-10-17",
"Id": "default",
"Statement": [
{
"Sid": "lambda-allow-s3-my-function",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "123456789012"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
}
}
}
]
}
Para obtener más información, consulta Administración de permisos en AWS Lambda.
Nota: Cuando usas la consola de Amazon S3 para añadir una nueva notificación de evento, Amazon S3 añade automáticamente los permisos necesarios a la política basada en recursos de tu función. Sin embargo, si utilizas el comando put-bucket-notification-configuration de la AWS CLI para añadir una notificación de evento, la política de la función no se actualiza automáticamente.
Comprobación de que la función de Lambda está configurada para gestionar invocaciones simultáneas desde las notificaciones de eventos de S3
Debes configurar la función de Lambda para gestionar las invocaciones simultáneas desde las notificaciones de eventos de S3. Si las solicitudes de invocación llegan más rápido de lo que la función puede escalar o si la función tiene la máxima concurrencia, Lambda reduce las solicitudes.
Para obtener más información, consulta Invocación de una función de Lambda de forma asíncrona.
Información relacionada
¿Cómo utilizo Automatización de AWS Systems Manager para solucionar problemas cuando mi notificación de eventos de Amazon S3 no invoca una función de Lambda?
Procese las notificaciones de eventos de Amazon S3 con Lambda
Tutorial: Uso de un desencadenador de Amazon S3 para invocar una función de Lambda
¿Por qué aparece el error «No se pueden validar las siguientes configuraciones de destino» al crear una notificación de eventos de Amazon S3?
¿Cómo configuro una notificación de eventos de Amazon S3 para invocar una función de Lambda que está en otra cuenta de AWS?