【发布时间】:2016-01-22 18:46:35
【问题描述】:
我在不同区域有一个 EC2 实例和一个 S3 存储桶。存储桶包含一些我的 EC2 实例经常使用的文件。 我想以编程方式下载我的 EC2 实例上的文件(使用 python)
有没有办法做到这一点?
【问题讨论】:
标签: python amazon-web-services amazon-s3 amazon-ec2 amazon-iam
我在不同区域有一个 EC2 实例和一个 S3 存储桶。存储桶包含一些我的 EC2 实例经常使用的文件。 我想以编程方式下载我的 EC2 实例上的文件(使用 python)
有没有办法做到这一点?
【问题讨论】:
标签: python amazon-web-services amazon-s3 amazon-ec2 amazon-iam
如果您想使用 python,您可能需要使用较新的 boto3 API。我个人比原来的 boto 包更喜欢它。它适用于 python2 和 python3,differences 是最小的。
您可以在创建新存储桶时指定区域(请参阅boto3.Client 文档),但存储桶名称是唯一的,因此您不需要连接到它。而且您可能不想在与您的实例不同的区域中使用存储桶,因为您需要为区域之间的数据传输付费。
【讨论】:
我为 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 client aka mc它来mc mirror命令来执行同样的操作。您可以将其添加到 cron。
$ mc mirror s3/mybucket localfolder
注意:
安装 Minio 客户端:
GNU/Linux
下载mc:
来自https://dl.minio.io/client/mc/release/linux-arm/mc的ARM
$ chmod 755 mc $ ./mc --帮助添加您的 S3 凭据
注意:将访问和密钥替换为您的。
【讨论】:
如上所述,您可以使用 Boto 做到这一点。为了使其更安全且无需担心用户凭证,您可以使用 IAM 仅授予 EC2 机器对特定存储桶的访问权限。希望对您有所帮助。
【讨论】:
补充@joeButler 上面所说的...
您的实例需要使用 API 访问 S3 的权限。 因此,您需要创建 IAM 角色和实例配置文件。您的实例需要在创建时分配实例配置文件。请参阅第 183 页(如页面底部所示。主题名称为“使用 IAM 角色向应用程序授予权限 在本指南的 Amazon EC2 实例上运行”):AWS IAM User Guide 以了解步骤和过程。
【讨论】:
在 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
【讨论】: