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 cargar archivos recientemente modificados desde AWS S3 a DynamoDB.

Tengo un bucket AWS S3 llamado bucket1, donde se cargan archivos diariamente. Sin embargo, quiero cargar solo los nombres de los archivos recién añadidos, no los nombres de los archivos añadidos anteriormente, en dynomodb.

Bucket 1:

abc.txt: el nombre del archivo se añadió en dynomodb con la fecha anterior.
acd.txt: el archivo de hoy, quiero añadir su nombre a dynomodb.

Tomar los nombres de los archivos recién cargados en S3 y actualizarlos en dynomodb.

Agradecería si pudiera brindarme algún conocimiento al respecto.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para cumplir esta tarea, podemos:

    1. Usar AWS Lambda para desencadenar un evento cada vez que se cargue un archivo nuevo en el bucket 1 de S3.
    2. En la función Lambda, podemos usar la biblioteca boto3 para obtener la lista de archivos cargados recientemente en el bucket de S3. También podemos usar boto3 para consultar la tabla DynamoDB para el nombre de archivo del archivo cargado previamente.
    3. Después de obtener ambos nombres de archivo, podemos verificar si el archivo recién cargado ya está en la tabla DynamoDB. Si no lo está, podemos agregar el nombre de archivo a la tabla DynamoDB.
    4. Si el archivo recién cargado ya existe en la tabla DynamoDB, podemos omitir la actualización.

    Aquí hay un fragmento de código simple para comenzar con este enfoque:

    import boto3
    from datetime import datetime
    
    s3_client = boto3.client('s3')
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('my-table')
    
    def lambda_handler(event, context):
        # Obtener la lista de archivos cargados recientemente en el bucket 1 de S3
        response = s3_client.list_objects_v2(Bucket='bucket-1')
        for file in response['Contents']:
            # Verificar si el archivo fue cargado hoy
            date_uploaded = file['LastModified'].strftime('%Y-%m-%d')
            if date_uploaded != datetime.now().strftime('%Y-%m-%d'):
                continue
    
            # Verificar si el archivo ya está en la tabla DynamoDB
            filename = file['Key']
            response = table.get_item(Key={'filename': filename})
            if 'Item' in response:
                continue
    
            # Agregar el nombre de archivo a la tabla DynamoDB
            table.put_item(Item={'filename': filename})
    

Comments are closed.