He configurado las notificaciones 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.
Descripción corta
Para solucionar problemas, use el manual de procedimientos de automatización AWSSupport-TroubleshootLambdaS3Event para AWS Systems Manager. O bien, solucione manualmente los problemas de la función de Lambda.
Resolución
Ejecución del manual de procedimientos de Automatización de AWS Systems Manager
Requisito previo: Antes de iniciar el manual de procedimientos, asegúrese de que su usuario o rol de AWS Identity and Access Management (IAM) cuente con los permisos necesarios. Para obtener más información, consulte la sección Permisos de IAM necesarios de AWSSupport-TroubleshootLambdaS3Event.
Siga estos pasos:
-
Abra la consola de Systems Manager.
-
En el panel de navegación, seleccione Documents (Documentos).
-
En la barra de búsqueda, ingrese AWSSupport-TroubleshootLambdaS3Event.
-
Seleccione AWSSupport-TroubleshootLambdaS3Event.
-
Seleccione Execute Automation (Ejecutar automatización).
-
Seleccione Execute (Ejecutar).
Nota: La prueba puede tardar hasta 15 minutos en completarse. Para obtener una lista de los pasos que realiza el manual de procedimientos, consulte la sección Pasos del documento de AWSSupport-TroubleshootLambdaS3Event.
Solución manual de problemas de la función de Lambda
Nota: Si recibe errores al ejecutar los comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Solución de errores de AWS CLI. Además, asegúrese de utilizar la versión más reciente de AWS CLI.
Confirmación de que los tipos de eventos de Amazon S3 estén configurados correctamente
Al configurar las notificaciones de eventos de S3, debe 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 envía la notificación.
Por ejemplo, configure una notificación de eventos para invocar Lambda con el tipo de evento s3:ObjectCreated:Put. Si carga un archivo grande, Amazon S3 utiliza automáticamente el proceso de carga multiparte para cargar el archivo en el bucket. Para invocar la función de Lambda para esta carga, también debe configurar el tipo de evento s3:ObjectCreated:CompleteMultipartUpload. O bien, use el tipo de evento s3:ObjectCreated:* para solicitar notificaciones para cada API que Amazon S3 utiliza para crear un objeto.
Confirmación de que los filtros de nombres de claves de objetos 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úrese de que los filtros de prefijos o sufijos especificados en la notificación de eventos incluyan el nombre de la clave del objeto cargado. Además, asegúrese de que la función de Lambda se encuentre en la misma Región de AWS que el bucket de S3.
Nota: No puede usar un carácter comodín (*) en los filtros como prefijo o sufijo para representar un carácter.
Para el filtrado de nombres de claves de objetos, determinados caracteres especiales de los prefijos o sufijos deben codificarse en formato URL o mediante codificación porcentual. Por ejemplo, para definir el valor de un prefijo como test=abc/, ingrese el valor codificado en formato URL test%3Dabc/.
Para obtener más información sobre el tratamiento de caracteres específicos en los nombres de claves de objetos, consulte Pautas de nomenclatura de claves de objetos.
Confirmación de que la política basada en recursos de IAM de la función de Lambda tiene los permisos necesarios para que Amazon S3 invoque la función
Compruebe la política basada en recursos de IAM de la función de Lambda para confirmar que permite al bucket invocar la función. Si el bucket no puede invocar la función, añada la política necesaria.
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, consulte Administración de permisos en AWS Lambda.
Nota: Cuando use la consola de Amazon S3 para añadir una nueva notificación de eventos, Amazon S3 añade automáticamente los permisos necesarios a la política basada en recursos de la función. Sin embargo, si usa el comando put-bucket-notification-configuration de AWS CLI para añadir una notificación de eventos, la política de la función no se actualiza automáticamente.
Confirmación de que las funciones de Lambda están configuradas para gestionar invocaciones simultáneas desde las notificaciones de eventos de S3
Debe 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 con mayor rapidez de la que la función puede escalar o si la función se encuentra en el nivel máximo de simultaneidad, Lambda limita las solicitudes.
Para obtener más información, consulte 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 “Unable to validate the following destination configurations” cuando usa las notificaciones de eventos de Amazon S3 con buckets de uso general?
¿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?