0

我試圖通過Python boto庫從AppEngine標準環境(或從dev_server)調用AWS端點。AppEngine:使用SSL連接boto到AWS雲端點

下面是一個例子:

import boto.sqs 
sqs = boto.sqs.connect_to_region(constants.AWS_REGION, 
           aws_access_key_id = constants.AWS_KEY, 
           aws_secret_access_key = constants.AWS_SECRET, 
           is_secure = 1) # <- this option makes the difference! 
queue = sqs.create_queue("my-new-queue") 

此代碼運行從我的本地控制檯很好,但是當我嘗試從AppEngine上做同樣的事情,我會看到這個錯誤堆棧:

File "C:\Work\xxx\app\lib\boto\connection.py", line 1192, in get_object 
    response = self.make_request(action, params, path, verb) 
File "C:\Work\xxx\app\lib\boto\connection.py", line 1116, in make_request 
    return self._mexe(http_request) 
File "C:\Work\xxx\app\lib\boto\connection.py", line 1030, in _mexe 
    raise ex 
error: [Errno 13] Permission denied 

以下是我已經嘗試沒有成功:

  • 要使用boto3代替boto
  • 要通過環境變量禁用urlfetchGAE_USE_SOCKETS_HTTPLIB
  • 要關閉is_secure。那麼,這有助於,但只有在某些終點。例如,STS會拒絕大多數不安全的電話。

歡迎任何想法。

+0

在'urlfetch'爲ENABLED的情況下,錯誤消息不同:'無法獲取URL:http://sts.amazonaws.com/錯誤:[Errno 10061]無法建立連接,因爲目標機器積極拒絕它 – eugals

回答

0

使用的辦法解決這個問題,我發現最簡單的是這樣的:

from boto.https_connection import CertValidatingHTTPSConnection 
CertValidatingHTTPSConnection._protocol = "https" 

這個技巧使得博託的實現與基於urlfetch兼容google.appengine.dist27.gae_override.httplib.HTTPConnection