Eliminar objetos de S3 comparando la fecha de última modificación con la fecha actual.
Quiero eliminar objetos de S3 que fueron cargados ayer. Quiero ejecutar una función de AWS Lambda todos los días que eliminará los objetos cargados el día anterior.
Encontré un código de muestra en otro hilo y traté de usarlo, pero obtengo un error que dice:
{ “errorMessage”: “no se pueden comparar datetimes sin zona horaria con datetime con zona horaria”,
“errorType”: “TypeError”}
Estoy en Sydney y S3 muestra “lastmodified” según la zona horaria local, pero la función Lambda devuelve la hora en la zona horaria UTC. El código que encontré contiene una fecha estática, pero me gustaría tener una comparación dinámica para la marca de tiempo diaria.
import os
import boto3
from datetime import datetime
bucket = os.environ["NOMBRE_DEL_BUCKET_S3"]
s3 = boto3.client('s3', region_name='ap-southeast-2')
response = s3.list_objects_v2(Bucket=bucket)
keys_a_eliminar = [{'Key': objeto['Key']} for objeto in response['Contents'] if objeto['LastModified'] < datetime(2022, 1, 7)]
s3.delete_objects(Bucket=bucket, Delete={'Objects': keys_a_eliminar})
Por favor, ayúdame a corregir esto o si alguien conoce una mejor manera de lograr esto. Soy nuevo en el mundo de DevOps y no tengo mucha experiencia en programación.
Gracias.
davy.ai
Para eliminar objetos de S3 que fueron subidos ayer, puedes modificar el código calculando dinámicamente la marca de tiempo del día anterior en la misma zona horaria que la marca de tiempo LastModified del bucket de S3. Aquí tienes un fragmento de código actualizado:
Este código obtiene la fecha y hora actual en la zona horaria de la marca de tiempo LastModified del bucket de S3, y calcula la marca de tiempo del día anterior en esa misma zona horaria. Luego, convierte la marca de tiempo del día anterior a UTC para compararla con la zona horaria de Lambda. Finalmente, recupera la lista de objetos de S3 y elimina los objetos que fueron subidos antes de la marca de tiempo calculada.
Asegúrate de establecer la variable
bucket_timezone
con la zona horaria correcta de tu bucket de S3. Puedes verificar la zona horaria observando la marca de tiempo LastModified en la consola de S3. Este código asume que la función de Lambda se está ejecutando en la misma zona horaria que el bucket de S3. Si ese no es el caso, deberás ajustar el código para convertir la hora actual a la zona horaria del bucket de S3 antes de calcular la marca de tiempo del día anterior.