首页 > 解决方案 > 需要将目录内容上传到 S3 存储桶

问题描述

我的场景是我目前正在使用 AWS CLI 使用以下 AWS CLI 命令将我的目录内容上传到 S3 存储桶:

aws s3 sync results/foo s3://bucket/

现在我需要替换它并使用 python 代码来执行此操作。我正在探索boto3文档以找到正确的方法。我看到一些选项,例如: https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/s3.html#S3.Client.upload_file https://boto3.amazonaws.com/ v1/documentation/api/1.9.42/reference/services/s3.html#S3.ServiceResource.Object

有人可以建议哪种方法是正确的。

我知道我必须通过boto3.client('sts').assume_role(role, session)随后调用和使用它们来获取凭据。

标签: python-3.xamazon-web-servicesamazon-s3boto3aws-cli

解决方案


AWS CLI 实际上是用 Python 编写的,并使用您可以使用的相同 API 调用。

要意识到的重要一点是,Amazon S3 一次只有一个 API 调用来上传/下载一个对象

因此,您的 Python 代码需要:

  • 获取要复制的文件列表
  • 遍历每个文件并将其上传到 Amazon S3

当然,如果您想要sync功能(仅复制新/修改的文件),那么您的程序将需要更多智能来确定要复制哪些文件。

Boto3 有两种通用类型的方法:

  • client与 API 调用 1:1 映射的方法,以及
  • resource更 Pythonic 但可能在后台进行多个 API 调用的方法

您使用哪种类型是您自己的选择。就个人而言,我发现client上传/下载对象的方法更容易,并且在resource必须循环资源时这些方法很好(例如,“对于每个 EC2 实例,对于每个 EBS 卷,检查每个标签”)。


推荐阅读