2015-10-23 228 views
4

我在不同地区有一个EC2实例和一个S3存储桶。存储区包含我的EC2实例定期使用的一些文件。 我想以编程方式下载我的EC2实例上的文件(使用python)从EC2实例访问Amazon S3存储桶

有没有办法做到这一点?

回答

7

很多方法可以做到这一点从蟒蛇

博托内有S3模块,这将做到这一点。 http://boto.readthedocs.org/en/latest/ref/s3.html

你也可以只使用Python请求库通过HTTP下载

AWS CLI还为您提供一个选项,从shell下载:

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

添加到什么@joeButler了上面说的...

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

0

如上所述,您可以使用Boto来做到这一点。为了使其更安全并且不用担心用户凭证,您可以使用IAM将EC2计算机访问权限授予特定存储区。希望有所帮助。

1

我使用golang编写的Minio,它的开源代码,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 client aka mcMC镜命令来执行相同的。你可以将它添加到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 

注:更换接入&与你的密钥。

0

如果你想使用python,你可能想使用更新的boto3 API。我个人比原来的博托包更喜欢它。它适用于python2和python3,而differences是最小的。

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