2015-10-23 224 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文檔),但存儲區名稱是唯一的,因此您不需要連接到該存儲區。而且您可能不想在實例中使用不同區域的存儲區,因爲您將支付區域之間的數據傳輸。