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 copiar y pegar varios objetos en la misma ubicación de S3 para generar notificaciones de ObjectCreated?

Ya tengo miles de objetos en mi bucket S3. Ahora he escrito una función lambda que los procesa y se activa cuando se agrega un archivo a ese bucket S3. Me gustaría copiar algunos objetos con patrones coincidentes y dejarlos en el mismo bucket para activar mi lambda. Actualmente, estoy siguiendo el siguiente método que tarda mucho tiempo.

import boto3, botocore
s3_source = boto3.resource('s3')
bucket_source = s3_source.Bucket('vistradata')

key_list = []
objs = list(bucket_source.objects.filter(Prefix='data/'))
for i in range(0, len(objs)):
     key_list.append(objs[i].key)

files = [i for i in key_list if 'mystring' in i]

def copy_data_from_s3(input_file):

    s3 = boto3.resource('s3')
    copy_source = {
        'Bucket': 'bucket',
        'Key': input_file
     }
    s3.meta.client.copy(copy_source, 'bucket', input_file)

for i in files:
    copy_data_from_s3(i)

¿Hay algún método mejor utilizando “aws s3 sync” o “aws s3 cp”? Los ejemplos que veo en línea copian datos de un bucket a otro y no dentro del mismo bucket. Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay un método mejor utilizando los comandos AWS S3 sync o AWS S3 cp. Puede utilizar los parámetros –exclude y –include para especificar un patrón que coincida con los objetos que desea copiar, y luego copiarlos en el mismo bucket con un nombre de clave nuevo. Aquí hay un ejemplo de comando que puede utilizar:

    aws s3 sync s3://vistradata/ s3://vistradata/ --exclude "*" --include "data/mystring*" --copy-arg "--metadata x-amz-meta-process=trigger-lambda"
    

    Este comando sincronizará el bucket completo consigo mismo, pero excluira todos los objetos que contengan el comodín * e incluirá solo los objetos que comiencen con “data/mystring”. El parámetro –copy-arg se utiliza para agregar metadatos a los objetos copiados, que luego puede utilizar para activar su función lambda.

    Tenga en cuenta que los comandos S3 sync y S3 cp son más eficientes que el método que está utilizando actualmente porque utilizan la funcionalidad de copia de varias partes y solicitudes paralelas para acelerar el proceso.

Comments are closed.