Amazon web services 将超过100天的S3文件移动到另一个存储桶

Amazon web services 将超过100天的S3文件移动到另一个存储桶,amazon-web-services,amazon-s3,aws-sdk,aws-cli,Amazon Web Services,Amazon S3,Aws Sdk,Aws Cli,是否有一种方法可以在一个S3存储桶中查找所有超过100天的文件,并将它们移动到另一个存储桶中?欢迎使用AWS CLI或SDK的解决方案。 在src bucket中,文件的组织方式为bucket/type/year/month/day/hour/file S3://my logs bucket/logtype/2020/04/30/16/logfile.csv 例如,在2020/04/30上,必须移动2020/01/21上或之前的日志文件。如我在评论中所述,您可以为S3存储桶创建生命周期策略。下面

是否有一种方法可以在一个S3存储桶中查找所有超过100天的文件,并将它们移动到另一个存储桶中?欢迎使用AWS CLI或SDK的解决方案。 在src bucket中,文件的组织方式为bucket/type/year/month/day/hour/file
S3://my logs bucket/logtype/2020/04/30/16/logfile.csv


例如,在
2020/04/30
上,必须移动
2020/01/21
上或之前的日志文件。

如我在评论中所述,您可以为S3存储桶创建生命周期策略。下面是一些步骤

使用生命周期策略规则删除\终止对象是可选的,您可以在S3存储桶中的对象上定义所需的操作

生命周期策略使用不同的存储类来转换对象。在配置生命周期策略之前,我建议先了解不同的存储类别,因为每个类别都有各自的相关成本:


对于100天的用例,我建议将日志转换为归档存储类,如S3 Glacier。这可能更具成本效益。

正如我在评论中提到的,您可以为S3存储桶创建生命周期策略。下面是一些步骤

使用生命周期策略规则删除\终止对象是可选的,您可以在S3存储桶中的对象上定义所需的操作

生命周期策略使用不同的存储类来转换对象。在配置生命周期策略之前,我建议先了解不同的存储类别,因为每个类别都有各自的相关成本:


对于100天的用例,我建议将日志转换为归档存储类,如S3 Glacier。这可能会证明更具成本效益。

以下是一些Python代码:

  • 如果文件早于给定时间段,则将文件从
    Bucket-A
    移动到
    Bucket-B
  • 全名和路径将被保留
导入boto3
从datetime导入datetime,timedelta
SOURCE_BUCKET='BUCKET-a'
目的地_BUCKET='BUCKET-b'
s3\u client=boto3.client('s3'))
#创建一个可重用的分页器
paginator=s3\u client.get\u paginator('list\u objects\u v2'))
#从分页器创建分页迭代器
页面迭代器=paginator.paginate(Bucket=SOURCE\u Bucket)
#循环遍历每个对象,查找比给定时间段更早的对象
对于页面迭代器中的页面:
对于第['Contents']页中的对象:

如果对象['LastModified']
  • 如果文件早于给定时间段,则将文件从
    Bucket-A
    移动到
    Bucket-B
  • 全名和路径将被保留
导入boto3
从datetime导入datetime,timedelta
SOURCE_BUCKET='BUCKET-a'
目的地_BUCKET='BUCKET-b'
s3\u client=boto3.client('s3'))
#创建一个可重用的分页器
paginator=s3\u client.get\u paginator('list\u objects\u v2'))
#从分页器创建分页迭代器
页面迭代器=paginator.paginate(Bucket=SOURCE\u Bucket)
#循环遍历每个对象,查找比给定时间段更早的对象
对于页面迭代器中的页面:
对于第['Contents']页中的对象:


如果对象['LastModified']datetime.now().astimezone()-timedelta(days=2)
为小时数?@cloudbud
timedelta(hours=1)
但要做一些测试!谢谢我会做一些测试我还有一个问题,如果源存储桶和目标存储桶在不同的帐户和不同的地区,那么这将是怎样的done@Cloudbud请创建一个新问题,而不是通过对旧问题的评论来提问。嘿,John,我希望实现类似的功能,但是,我想复制超过1小时的对象并删除原始对象,如何更改此语句:
datetime.now().astimezone()-timedelta(days=2)
到小时数?@cloudbud
timedelta(hours=1)
,但请执行一些测试!谢谢我会做一些测试我还有一个问题,如果源存储桶和目标存储桶在不同的帐户和不同的地区,那么这将是怎样的done@Cloudbud请创建一个新问题,而不是通过对旧问题的评论提问。