从 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
下载
AWS 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 用于:
- 64 位英特尔来自
https://dl.minio.io/client/mc/release/linux-amd64/mc
- 来自 https://dl.minio.io/client/mc/release/linux-386/mc
的 32 位英特尔
ARM 来自 https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod 755 mc
$ ./mc --help
正在添加您的 S3 凭据
$ ./mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
注意:用您的替换访问和密钥。
如果您想使用 python,您可能需要使用较新的 boto3 API。我个人更喜欢它而不是原始的 boto 包。它适用于 python2 和 python3,并且 differences 是最小的。
您可以在创建新存储桶时指定区域(请参阅 boto3.Client 文档),但存储桶名称是唯一的,因此您不需要连接到它。而且您可能不想在与您的实例不同的区域使用存储桶,因为 您将为区域之间的数据传输付费。
我在不同的区域有一个 EC2 实例和一个 S3 存储桶。该存储桶包含我的 EC2 实例经常使用的一些文件。 我想以编程方式将文件下载到我的 EC2 实例上(使用 python)
有办法吗?
在 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
添加@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 用于:
- 64 位英特尔来自 https://dl.minio.io/client/mc/release/linux-amd64/mc
- 来自 https://dl.minio.io/client/mc/release/linux-386/mc 的 32 位英特尔
ARM 来自 https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod 755 mc $ ./mc --help
正在添加您的 S3 凭据
$ ./mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
注意:用您的替换访问和密钥。
如果您想使用 python,您可能需要使用较新的 boto3 API。我个人更喜欢它而不是原始的 boto 包。它适用于 python2 和 python3,并且 differences 是最小的。
您可以在创建新存储桶时指定区域(请参阅 boto3.Client 文档),但存储桶名称是唯一的,因此您不需要连接到它。而且您可能不想在与您的实例不同的区域使用存储桶,因为 您将为区域之间的数据传输付费。