【问题标题】:Ho to fix 'Connection aborted.', OSError(97, 'Address family not supported by protocol' in aws-lambda?如何修复 aws-lambda 中的“连接中止。”、OSError(97、“协议不支持地址系列”?
【发布时间】:2019-06-13 12:59:57
【问题描述】:

我正在创建一个新的 AWS 机器人,它必须连接到安装在 Apache Tomcat 服务器中的本地计算机上的应用程序。我可以使用 URL 'https://localhost:8080/iii' 向邮递员发出请求。但是,如果我使用 python 3.7 和 requests 函数在我的 lambda 代码中给出相同的 URL,则会引发以下错误:

[ERROR] ConnectionError: ('Connection aborted.', OSError(97, 'Address family not supported by protocol'))

日志是:

Traceback (most recent call last):
     File "/var/task/lambda_function.py", line 64, in lambda_handler
    request_status = request_ent(idenName_input,AppName_input,EntName_input,OpName_input)
  File "/var/task/lambda_function.py", line 47, in request_entitlement
    r = requests.post(url, json.dumps(data),auth=('username', 'password'))
  File "/var/runtime/botocore/vendored/requests/api.py", line 109, in post
    return request('post', url, data=data, json=json, **kwargs)
  File "/var/runtime/botocore/vendored/requests/api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "/var/runtime/botocore/vendored/requests/sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "/var/runtime/botocore/vendored/requests/sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "/var/runtime/botocore/vendored/requests/adapters.py", line 415, in send
    raise ConnectionError(err, request=request)
END RequestId: 0c190f74-9cd0-49f7-bb6c-be0a98805e83

【问题讨论】:

    标签: aws-lambda python-3.7 aws-lex


    【解决方案1】:

    Localhost 顾名思义是 localyour host。它不能通过互联网直接访问。要实现您的目标,您需要使用ngrok 之类的东西。它将在 Internet 上公开您的本地 apache 服务器,并为您提供一个公共 URL,您可以在其中发送请求,ngrok 会将其转发到您的本地 apache 服务器。现在,在您的 lambda 函数中使用这个 ngrok 公共 url,它应该可以工作。

    但请确保 Lambda 函数可以访问互联网。您需要配置 NAT 网关和一切。请阅读 my answer here 了解如何执行此操作。

    【讨论】:

    • 感谢 RayClank。我们计划在我的公司中进行 LEX 和应用程序之间的集成。该应用程序位于 VPN 内,并且在 VPN 之外无法访问该 URL。在这种情况下,如果我可以在 VPN 中连接到 aws lex,我是否可以建立从 LEX 到应用程序的直接连接,或者我是否需要进行任何配置更改?请在此处输入任何内容。
    • 我不确定我是否完全遵循。如果您的本地计算机和应用程序之间存在 VPN 连接,假设在 VPN 连接后可以通过 localhost:8080 访问它,然后如答案中所述,您可以使用 ngrok 进行开发,ngrok 将转发发往其公共 url 的数据包到本地机器上的 localhost:8080
    猜你喜欢
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2017-01-20
    • 2019-02-01
    • 2013-11-21
    • 1970-01-01
    • 2012-03-21
    • 2013-12-20
    相关资源
    最近更新 更多