2017-09-04 328 views
0

我想從我的亞馬遜s3存儲桶之一下載文件到Ubuntu EC2 instance.I在兩個不同區域創建了兩個存儲桶,我可以從一個區域的存儲桶訪問和下載文件,但是當我嘗試訪問其他人面臨的問題。aws s3下載文件

Here is the error, 
Traceback (most recent call last): 
    File "listbucket.py", line 7, in <module> 
    bucket = conn.get_bucket('train-faces') 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 509, in get_bucket 
    return self.head_bucket(bucket_name, headers=headers) 
    File "/usr/local/lib/python2.7/dist-packages/boto/s3/connection.py", line 556, in head_bucket 
    response.status, response.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 400 Bad Request 

但我可以從另一個區域的桶下載文件。

+0

當你設置你的AWS憑證你應該設置默認區域。這可能是爲什麼它爲一個而不是另一個工作。你在命令中指定區域嗎?例如。 --region us-east-1 – slipperyseal

+0

沒有iam沒有在命令中指定任何區域,但我已配置區域。 – Raj

+0

但如果我改變任何其他地區的配置其不工作 – Raj

回答

1

您可以在與Amazon S3連接時指定區域。

博託

import boto 
conn = boto.s3.connect_to_region('ap-southeast-2') 
conn.get_bucket('train-faces') 

boto3

這些天來,我們建議您使用boto3

import boto3 
s3 = boto3.resource('s3', region_name = 'ap-southeast-2') 
bucket = s3.Bucket('train-faces') 

import boto3 
client = boto3.client('s3', region_name = 'ap-southeast-2') 
+0

非常感謝!我得到了它的工作 – Raj

0

您可以使用下面的命令來下載

import boto3 
s3 = boto3.client('s3','region_name') 
s3.download_file("bucket-name", "key-name", "tmp.txt") 

請參閱http://boto3.readthedocs.io/en/latest/guide/s3.html

解釋 - 我們首先做一個連接到特定區域的S3。您從一個Bucket獲取文件的原因可能是您在配置boto時設置的值。在建立連接時提供region_name是個好習慣。 另一個原因可能是文件無法訪問或權限被拒絕。如果以後是這個問題,那麼你應該是同樣的錯誤說權限被拒絕