AppEngine:使用SSL连接boto到AWS云端点

AppEngine:使用SSL连接boto到AWS云端点

问题描述:

我试图通过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

使用的办法解决这个问题,我发现最简单的是这样的:

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

这个技巧使得博托的实现与基于urlfetch兼容google.appengine.dist27.gae_override.httplib.HTTPConnection