首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟ec2.describe_regions() (AWS)的代理

模拟ec2.describe_regions() (AWS)的代理
EN

Stack Overflow用户
提问于 2016-03-06 16:28:54
回答 1查看 383关注 0票数 1

我正在用烧瓶制作一个简单的代理,以模拟AWS的调用describe_regions()。

Flask服务器有以下代码:

代码语言:javascript
复制
from __future__ import unicode_literals

from flask import Flask
from flask import Response
from flask import stream_with_context
# from httpretty import HTTPretty, register_uri
import httpretty
import requests
from flask import request
import time


RESPONSE = u"""<DescribeRegionsResponse xmlns="http://ec2.amazonaws.com/doc/2015-10-01/">
   <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
   <regionInfo>
      <item>
         <regionName>us-east-1</regionName>
         <regionEndpoint>ec2.us-east-1.amazonaws.com</regionEndpoint>
      </item>
      <item>
         <regionName>eu-west-1</regionName>
         <regionEndpoint>ec2.eu-west-1amazonaws.com</regionEndpoint>
      </item>
   </regionInfo>
</DescribeRegionsResponse>"""


app = Flask(__name__)

@app.route('/<path:url>', methods=['GET', 'PUT', 'POST', 'DELETE', 'HEAD', 'PATCH', 'OPTIONS', 'CONNECT'])
def home(url):
    return Response(RESPONSE, mimetype='text/xml')

if __name__ == '__main__':
    app.run(debug=True)

然后,我有下面的代码来测试它。我使用Boto3来调用AWS的API。

代码语言:javascript
复制
from boto3.session import Session
import os

credentials = {
    'aws_access_key_id': 'sadasdasda',
    'aws_secret_access_key': 'dasdasdasd'
}

os.environ["HTTP_PROXY"] = 'http://localhost:5000/'
os.environ["HTTPS_PROXY"] = 'http://localhost:5000/'

session_boto3 = Session(**credentials)
ec2 = session_boto3.client('ec2', 'eu-west-1', verify=False)
regions = ec2.describe_regions()
print regions

问题是: Flask服务器获得了请求,但是响应不喜欢Boto3,我得到了以下跟踪错误:

代码语言:javascript
复制
    Traceback (most recent call last):
  File "/pruebas_mock/prueba.py", line 82, in <module>
    regions = ec2.describe_regions()
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/client.py", line 228, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/client.py", line 475, in _make_api_call
    operation_model, request_dict)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/endpoint.py", line 117, in make_request
    return self._send_request(request_dict, operation_model)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/endpoint.py", line 146, in _send_request
    success_response, exception):
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/endpoint.py", line 219, in _needs_retry
    caught_exception=caught_exception)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/hooks.py", line 226, in emit
    return self._emit(event_name, kwargs)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/hooks.py", line 209, in _emit
    response = handler(**kwargs)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/retryhandler.py", line 183, in __call__
    if self._checker(attempts, response, caught_exception):
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/retryhandler.py", line 250, in __call__
    caught_exception)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/retryhandler.py", line 273, in _should_retry
    return self._checker(attempt_number, response, caught_exception)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/retryhandler.py", line 313, in __call__
    caught_exception)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/retryhandler.py", line 222, in __call__
    return self._check_caught_exception(attempt_number, caught_exception)
  File "/mock_aws/local/lib/python2.7/site-packages/botocore/retryhandler.py", line 355, in _check_caught_exception
    raise caught_exception
botocore.vendored.requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

我该如何用酒瓶来回应呢?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 13:22:05

默认情况下,boto3 (以及所有其他AWS )将使用SSL连接到服务。代理Flask服务器似乎没有使用SSL,所以您可以在代理中使用SSL,或者告诉boto3不要在代理服务器上使用SSL:

代码语言:javascript
复制
ec2 = session_boto3.client('ec2', 'eu-west-1', use_ssl=False, verify=False)

verify参数告诉boto3不要尝试验证SSL证书,但它仍然会尝试通过SSL进行连接。use_ssl=False告诉它使用普通HTTP与您的端点对话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35829390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档