Sid*_*dha 0 python amazon-s3 amazon-web-services python-3.x boto3
我需要编写代码 (python) 将 S3 文件从一个 S3 存储桶复制到另一个。源存储桶位于不同的 AWS 账户中,我们使用 IAM 用户凭证从该存储桶中读取数据。该代码在与目标存储桶相同的账户中运行,因此它具有 IAM 角色的写入访问权限。我能想到的一种方法是创建与源帐户的 s3 客户端连接,将整个文件读入内存(getObject-?),然后使用目标存储桶创建另一个 s3 客户端并写入内容(putObject-?)之前已被读入内存。但如果文件大小增大,效率会变得非常低,因此想知道是否有更好的方法,最好是 boto3 提供 AWS 托管的方式来传输文件而不将内容读入内存。
PS:我无法添加或修改源帐户中的角色或策略以授予对目标帐户的直接读取访问权限。源帐户由其他人拥有,他们只提供可以从存储桶中读取数据的用户。
流媒体是此类问题的标准解决方案。您建立一个源和一个目的地,然后从一个源流到另一个目的地。
事实上,boto3get_object()和upload_fileobj()方法都支持流。
您的代码将如下所示:
import boto3
src = boto3.client('s3', src_access_key, src_secret_key)
dst = boto3.client('s3') # creds implicit through IAM role
src_response = src.get_object(Bucket=src_bucket, Key=src_key)
dst.upload_fileobj(src_response['Body'], dst_bucket, dst_key)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |