【问题标题】:AWS lambda Java open http socket times outAWS lambda Java 打开 http 套接字超时
【发布时间】:2017-02-10 21:57:30
【问题描述】:

我在 AWS Lambda 中的处理函数中运行以下命令:

URL url = new URL("www.sfsuperiorcourt.org");
URLConnection connection = url.openConnection();
connection.setConnectTimeout(2000);
connection.connect();

这是在处理函数内部。在本地运行时,它很好,并且立即连接,并且我能够检索内容。在 Lambda 上,它以 java.net.SocketTimeoutException: connect timed out 失败。如果我没有在连接上设置超时,Lambda 本身会在 10 秒后超时。这种情况始终如一地发生,并且在我的本地计算机上,它始终成功,所以我确信这不是我要连接的站点的问题。

我能够在 Lambda 上成功进行 IP 地址解析,所以这不是问题。似乎完全与打开套接字有关。

也许我的角色需要打开套接字的权限?还有其他类似的明显的事情吗?任何已知的调试 TCP 层的方法?

【问题讨论】:

  • 通常当我们看到这个时,它是与 VPC 相关的,但你已经表明不可能是这种情况。有一件事,地址解析可能无法证明连接性。 EC2 和 Lambda 内部的 DNS 解析器实现在网络基础设施中以特殊状态运行,并且几乎不受所有可以想象的错误配置的影响。角色或权限中没有任何内容与套接字相关。不要太确定它不是站点——源地址将来自 Lambda 公共池,因此基于该源 IP 的站点行为是一个通配符。尝试其他网站。
  • 确实是目标站点上的东西。切换到我的个人网站效果很好。谢谢你的提示。我一直以为这是本地问题!
  • 你能发布 lambda 配置吗?
  • 抱歉,我不知道该怎么做。但我不认为这会很有趣。这只是一个默认设置。我们免除了我的配置是问题的根源。

标签: java sockets amazon-web-services aws-lambda


【解决方案1】:

如果您在 VPC 中设置了 lambda,而您在该 VPC 中不需要它,则完全将 lambda 放在 no VPC 中。

否则,请阅读我的回答 here

【讨论】:

  • 它不在 VPC 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-09
  • 1970-01-01
  • 2013-05-23
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多