es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo activar los eventos de copia de S3 CLI en CDK Python?

¿Qué EventType debo usar? He intentado todas las propiedades CREADAS, por ejemplo OBJECT_CREATED_PUT, pero no puedo capturar ningún evento.

$ aws s3 cp ./testFile.txt s3://.... >> CloudWatch > registro > Evento recibido: {}

app.py

de aws import s3 como _s3

salida_s3 = _s3.Bucket(self, "salida_s3", removal_policy=core.RemovalPolicy.DESTROY, auto_delete_objects=True)

<h1>permite que la instancia lea/escriba archivos</h1>

salida_s3.grant.read_write(instance)

<h1>crear notificación de s3 para la función lambda</h1>

notificación = aws.s3.notifications.LambdaDestination(función)

salida_s3.add_event_notification(_s3.EventType.OBJECT_CREATED_COMPLETE_MULTIPART_UPLOAD,
                                notificación)

salida_s3.add_event_notification(_s3.EventType.OBJECT_CREATED_PUT,
                                notificación)

lambda_handler.py

importar json

def main(evento, contexto):
    print("Evento recibido: " + json.dumps(evento, indent=2))
    return json.dumps(evento, indent=2)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que ya ha intentado utilizar todos los eventos CREADOS, incluyendo OBJECT_CREATED_PUT, pero ninguno activa el manejador de eventos.

    Una cosa que puede comprobar es la política del bucket para asegurarse de que se permiten las notificaciones de eventos. Específicamente, debe verificar si la política del bucket incluye la siguiente declaración:

    {
        "Sid": "LambdaPermissions",
        "Effect": "Allow",
        "Principal": {
            "Service": "s3.amazonaws.com"
        },
        "Action": "lambda:InvokeFunction",
        "Resource": "arn:aws:lambda:<region>:<account_id>:function:<function_name>",
        "Condition": {
            "ArnLike": {
                "AWS:SourceArn": "arn:aws:s3:::<bucket_name>"
            }
        }
    }
    

    Reemplace <region>, <account_id>, <function_name> y <bucket_name> con los valores correspondientes.

    Si la política del bucket es correcta, intente probar la función de Lambda para asegurarse de que funciona. Puede usar la CLI de AWS para invocar directamente la función Lambda:

    aws lambda invoke --function-name <function_name> --payload '{}' output.txt
    

    Reemplace <function_name> con el nombre de su función Lambda.

    Si la función Lambda funciona correctamente, intente cargar un objeto en el bucket de S3 usando la CLI de AWS:

    aws s3 cp ./testFile.txt s3://<bucket_name>
    

    Reemplace <bucket_name> con el nombre de su bucket de S3.

    Si el evento todavía no se activa, intente agregar declaraciones de depuración a su función Lambda para ver si está recibiendo el evento. También puede intentar suscribirse a un tipo de evento diferente, como OBJECT_CREATED_COMPLETE o OBJECT_CREATED_POST.

    Esperamos que alguno de estos pasos le ayude a descubrir por qué el evento no se está activando.

Comments are closed.