2017-04-26 4 views
0

AWS LambdaでJavaを使用して、サイトのURLソースコードを取得しています。私は次のコードを持っています:AWS Lambda - バッファ付きリーダー

URL yahoo = new URL(url); 
URLConnection yc = yahoo.openConnection(); 
yc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); 
BufferedReader in = new BufferedReader(newInputStreamReader(yc.getInputStream(), "UTF-8")); 
String inputLine; 
StringBuilder a = new StringBuilder(); 
while ((inputLine = in.readLine()) != null)a.append(inputLine); 
in.close(); 
System.out.println(a.toString()); 

いくつかのサイトでは、コードは絶対にうまく動作します。私のローカルマシンで毎回うまく動作します。 AWSラムダ上で実行している場合しかし、それは以下の部分に貼り付けます:

BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8")); 

は、次に私が取得:タスクは20.00秒後にタイムアウトになりました。ラムダログで

、私は次のエラーを取得する:

ペイロード:java.nio.HeapByteBuffer [POS = 0 LIM = 115キャップ= 115]

私の推測では、それが何かを持っているんですエンコーディングを行う?なぜいくつかのサイトは絶対にうまく処理され、そのコードの行にはまってしまうものがありますか?

すべてのお返事ありがとうございます。

+0

AWSが動作しているVPCに関連する問題があります。 VPC設定をチェックし、微調整する設定があるかどうかを確認してください。 – kosa

答えて

0

これは、接続が行われるポイント、送信された要求、および応答の最初の部分を読み取ります。明らかに、サーバーは1つ以上のもので遅いです。

+0

回避策はありますか?それともLambdaのバグですか? –

0

この作業を行うための簡単な解決方法は、今あなたのラムダをVPCから外しています。

これがなぜあなたに起こるのかの詳細な説明については、このスレッドで私の答えをお読みください。

AWS lambda invoke not calling another lambda function - Node.js

(注:答えはNodeJSとは関係ありません)

0
私はそれがこのバグ https://bugs.openjdk.java.net/browse/JDK-8149169

に関連していると思います

ラムダのタイムアウトが発生し、同じURLを(試してみてください機能)をローカルシステムから取得し、根本的な原因を見つけることができるかどうかを確認します。