从 EC2 实例访问 Amazon S3 Bucket

Access to Amazon S3 Bucket from EC2 instance

我在不同的区域有一个 EC2 实例和一个 S3 存储桶。该存储桶包含我的 EC2 实例经常使用的一些文件。 我想以编程方式将文件下载到我的 EC2 实例上(使用 python)

有办法吗?

在 python

中有很多方法可以做到这一点

Boto 具有可以执行此操作的 S3 模块。 http://boto.readthedocs.org/en/latest/ref/s3.html

您也可以只使用 python 请求库通过 http

下载

A​​WS Cli 还为您提供了从 shell:

下载的选项
aws s3 cp s3://bucket/folder/file.name file.name

添加@joeButler 上面所说的...

您的实例需要使用 API 访问 S3 的权限。 因此,您需要创建 IAM 角色和实例配置文件。您的实例需要在创建时分配实例配置文件。请参阅第 183 页(如页面底部所示。主题名称为“使用 IAM 角色向应用程序授予权限 运行 on Amazon EC2 Instances"):AWS IAM User Guide 了解步骤和过程。

如上所述,您可以使用 Boto 来完成此操作。为了使其更安全并且不用担心用户凭据,您可以使用 IAM 授予 EC2 机器仅对特定存储桶的访问权限。希望对您有所帮助。

我为 Minio 工作,它是用 golang 编写的开源 S3 兼容对象存储。

您可以使用minio-py client library, its open source & compatible with AWS S3. Below is a simple example of get_object.py

from minio import Minio
from minio.error import ResponseError

client = Minio('s3.amazonaws.com',
               access_key='YOUR-ACCESSKEYID',
               secret_key='YOUR-SECRETACCESSKEY')

# Get a full object
try:
    data = client.get_object('my-bucketname', 'my-objectname')
    with open('my-testfile', 'wb') as file_data:
        for d in data:
            file_data.write(d)
except ResponseError as err:
    print(err)

你也可以使用minio client aka mc它来mc mirror命令来执行同样的操作。您可以将其添加到 cron。

$ mc mirror s3/mybucket localfolder

注:

  • s3 是别名
  • mybucket 是您的 AWS S3 存储桶
  • localfolder 是备份的EC2机器文件。

正在安装 Minio 客户端:

GNU/Linux

下载 mc 用于:

      
$ ./mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12

注意:用您的替换访问和密钥。

如果您想使用 python,您可能需要使用较新的 boto3 API。我个人更喜欢它而不是原始的 boto 包。它适用于 python2 和 python3,并且 differences 是最小的。

您可以在创建新存储桶时指定区域(请参阅 boto3.Client 文档),但存储桶名称是唯一的,因此您不需要连接到它。而且您可能不想在与您的实例不同的区域使用存储桶,因为 您将为区域之间的数据传输付费