我在不同地區有一個EC2實例和一個S3存儲桶。存儲區包含我的EC2實例定期使用的一些文件。 我想以編程方式下載我的EC2實例上的文件(使用python)從EC2實例訪問Amazon S3存儲桶
有沒有辦法做到這一點?
我在不同地區有一個EC2實例和一個S3存儲桶。存儲區包含我的EC2實例定期使用的一些文件。 我想以編程方式下載我的EC2實例上的文件(使用python)從EC2實例訪問Amazon S3存儲桶
有沒有辦法做到這一點?
很多方法可以做到這一點從蟒蛇
博託內有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角色嚮應用程序授予權限 Amazon EC2實例」),以瞭解步驟和過程。
如上所述,您可以使用Boto來做到這一點。爲了使其更安全並且不用擔心用戶憑證,您可以使用IAM將EC2計算機訪問權限授予特定存儲區。希望有所幫助。
我使用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 mc來MC鏡命令來執行相同的。你可以將它添加到cron。
$ mc mirror s3/mybucket localfolder
注:
安裝Minio客戶:
的GNU/Linux
下載MC爲:
來自的ARM
$ chmod 755 mc $ ./mc --help
將您的S3憑據
$ ./mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
注:更換接入&與你的密鑰。
如果你想使用python,你可能想使用更新的boto3 API。我個人比原來的博託包更喜歡它。它適用於python2和python3,而differences是最小的。
您可以在創建新存儲區時指定區域(請參閱boto3.Client文檔),但存儲區名稱是唯一的,因此您不需要連接到該存儲區。而且您可能不想在實例中使用不同區域的存儲區,因爲您將支付區域之間的數據傳輸。