从EC2实例访问Amazon S3 Bucket

时间:2015-10-23 09:17:41

标签: python amazon-web-services amazon-s3 amazon-ec2 amazon-iam

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

有办法吗?

5 个答案:

答案 0 :(得分:8)

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

Boto有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 :(得分:1)

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

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

答案 2 :(得分:1)

我为Minio工作,它是用golang编写的开源源代码,S3 Compatible对象存储器。

您可以使用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 mc mc mirror 命令来执行相同操作。您可以将其添加到cron。

$ mc mirror s3/mybucket localfolder

注意:

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

安装Minio客户端:

的GNU / Linux

下载mc for:

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

注意:替换访问权限&与你的密钥。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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