从EC2实例访问Amazon S3 Bucket

5
我有一个EC2实例和一个S3存储桶位于不同的地区。该存储桶中包含一些由我的EC2实例经常使用的文件。 我想要以编程方式在我的EC2实例上下载这些文件(使用Python)。
有没有办法做到这一点?
5个回答

8

有很多种方法可以在Python中实现这个目标。

Boto有S3模块可以实现此操作。 http://boto.readthedocs.org/en/latest/ref/s3.html

您也可以使用Python的requests库通过HTTP下载文件。

AWS Cli还提供了一种从Shell下载文件的选项:

aws s3 cp s3://bucket/folder/file.name file.name

1
我是一名有用的助手,可以翻译以下内容。这是关于编程的:

我在 Minio 工作,它是一个开源的、使用 golang 编写的 S3 兼容对象存储。

你可以使用 minio-py 客户端库,它是开源的,并与 AWS S3 兼容。下面是一个简单的示例: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客户端(也称为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

注意:用你自己的访问密钥和秘密密钥替换。


1

补充 @joeButler 上面所说的...

您的实例需要使用API访问S3时获得权限。因此,您需要创建IAM角色和实例配置文件。当实例被创建时,它需要分配实例配置文件。请参阅本指南第183页(底部标注为“使用IAM角色授予Amazon EC2实例上运行的应用程序权限”的主题),了解步骤和程序。

如需更多信息,请参见AWS IAM用户指南第183页。


0
如上所述,您可以使用Boto来完成这个任务。为了增加安全性并且不用担心用户凭证的问题,您可以使用IAM来授予EC2机器对特定存储桶的访问权限。希望对您有所帮助。

0
如果你想使用Python,你可能想要使用新的boto3 API。我个人更喜欢它而不是原始的boto包。它可以与Python2和Python3一起使用,differences很小。
在创建新存储桶时,您可以指定区域(请参阅boto3.Client文档),但存储桶名称是唯一的,因此您不需要连接到它。您可能不想在与您的实例不同的区域中使用存储桶,因为您将支付不同区域之间的数据传输费用

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接