【发布时间】: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