2016-10-03 61 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