2016-10-03 63 views
0

我跑在AWS LAMBDA以下,我的处理函数里面:AWS拉姆达Java开源HTTP套接字超时

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层的方法?

+1

通常当我们看到这个,它是VPC相关的,但你已经表明,情况并非如此。有一件事,地址解析可能无法证明连通性。 EC2和Lambda内部的DNS解析器实现在网络基础架构中以特殊状态运行,并且几乎不受所有可以想象的错误配置的影响。与套接字相关的角色或许可中没有任何内容。不要确定它不是网站 - 源地址将来自Lambda公共池,因此基于该源IP的网站行为是一个完全通配符。尝试一个不同的网站。 –

+0

这确实是在目标网站上的东西。切换到我的个人网站运行良好。谢谢你的提示。我很坚持认为这是一个本地问题! – philo

+0

你可以发布lambda配置吗? – johni

回答

1

如果你在VPC中设置你的lambda,并且你不需要它在VPC中,只需要在没有 VPC的lambda。

否则,请阅读我的回答here

+0

它不在VPC中。 – philo