我正在寻找一种通过python脚本从一个区域的S3桶复制到另一个不同区域的S3桶的方法。
我可以使用AWS CLI使用:
aws s3 cp source-bucket target-bucket --recursive --source-region region1 --region region2
然而,我想看看是否有可能在python脚本中使用boto3。
我所研究的似乎适用于使用boto3.resource
和resource.meta.cleint.copy
的同一区域
Amazon S3一次只能"复制"一个对象。
当您使用AWS CLI命令时,它首先获取源桶中的对象列表,然后为每个要复制的对象调用copy_object()
一次(它使用多线程同时进行多个复制)。
您可以编写自己的python脚本做同样的事情。(实际上,AWS CLI就是一个Python程序!)您的代码还需要调用list_objects_v2()
,然后为每个要复制的对象调用copy_object()
。
如果桶位于不同的区域,则将命令发送到目标区域,引用源区域,例如:
s3_client = boto3.client('s3', region_name='destination-region-id)
response = s3_client.copy_object(Bucket=..., Key=..., CopySource={'Bucket': 'source-bucket', 'Key': 'source-key'})