2013-11-25 72 views
0

我已經寫了一個python腳本來連接到亞馬遜s3服務器,但它似乎失敗時嘗試創建一個存儲桶(超時錯誤)。由於顯而易見的原因,我省略了密鑰和ID密鑰。任何人都可以看到這個腳本有什麼問題嗎?在此先感謝爲什麼此腳本無法在s3中創建存儲桶?

import boto 
import sys, os 
from boto.s3.key import Key 
from boto.s3.connection import S3Connection 
from boto.exception import S3ResponseError 

LOCAL_PATH = '/Users/****/test' 
aws_access_key_id = '****' 
aws_secret_access_key = '****' 
bucket_name = aws_access_key_id.lower() + '****' 

class TimeoutException(Exception): 
    pass 

conn = boto.connect_s3(aws_access_key_id, aws_secret_access_key) 
try: 
    print "bucket name " + bucket_name; 
    bucket = conn.get_bucket(bucket_name) 
except TimeoutException: 
    sys.exit("Connection timed out; this usually means you're offline.") 
except S3ResponseError, exception_data: 
    sys.exit(exception_data.error_message) 

這是錯誤消息我得到:

文件 「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py」第941行,請求 self._send_request(method,url,body,headers) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py」,第975行, in_send_request self.endheaders(正文) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py」,行937,在內容中 self._send_output(message_body) 文件「/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py」,第797行,在_send_output中 self.send(msg) 文件「/ System/Library/Frameworks /Python.framework/Versions/2.7/lib/python2.7/httplib.py「,第759行,發送 self.connect() 文件」/System/Library/Frameworks/Python.framework/Versions/2.7/lib /python2.7/httplib.py「,第1140行,連接 self.timeout,self.source_address) 文件」/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket。 py「,第571行,在create_connection中 引發err socket.timeout:超時

回答

1

你說你試圖創建一個存儲桶但get_bucket()方法不會創建存儲桶,它會返回一個現有的存儲桶。如果您想創建新的存儲桶,請改爲使用create_bucket()。正常的做法是首先使用get_bucket()來查看桶是否存在,如果不存在,則調用create_bucket()

另外,我不明白這是什麼代碼的目的是要做到:

try: 
    print "bucket name " + bucket_name; 
    bucket = conn.get_bucket(bucket_name) 
except TimeoutException: 
    sys.exit("Connection timed out; this usually means you're offline.") 
except S3ResponseError, exception_data: 
    sys.exit(exception_data.error_message) 

TimeoutException類是已在本地創建一個類,並調用get_bucket()永遠不會提高是例外,因爲它不」不瞭解任何事情。對get_bucket()的調用應在正常操作中返回現有存儲桶或引發S3ResponseError。

您從socket模塊獲得超時錯誤的事實似乎表明您的網絡設置有問題。你在代理服務器後面嗎?您可以針對S3服務執行任何操作(例如,在存儲桶中列出密鑰等)?

+0

我在創建連接後試過這個:bucket = conn.create_bucket(bucket_name);但我收到以下錯誤消息未指定的位置約束與此請求發送到的特定於區域的端點不兼容。我迄今一直無法執行操作。 – godzilla

+0

好吧我已經想通了上述,我沒有指定一個位置,但現在我得到一個訪問被拒絕的消息:消息>訪問被拒絕 – godzilla

相關問題