2016-10-08 10 views
1

ローカルでテストしたところうまく動作しましたが、AWS経由でラムダがHTTP getを実行していないように見える機能があります。次のように コードは次のとおりです。ラムダ関数はhttp.getを実行していません

function makeAPIRequest(path, responseControl, callback) { 

    var responseString = ''; 
    console.log("Executing makeAPIRequest to " + apiSettings.host + " and path " + path); 
    var options = { 
     host: apiSettings.host, 
     path: path, 
     method: 'GET', 
     headers: { 
      'X-Auth-Token': apiSettings.token 
     } 
    }; 
    http.get(options, function (res) { 
     console.log('Status Code: ' + res.statusCode); 
     if (res.statusCode != 200) { 
      callback(new Error("Non 200 Response")); 
     } 
     res.on('data', function (data) { 
      responseString += data; 
     }); 
     res.on('end', function() { 
      console.log('http end function hit...'); 
      callback(null, responseString); 
     }); 
    }).on('error', function (e) { 
     console.log("Communications error: " + e.message); 
     callback(new Error(e.message)); 
    }); 
} 

私は当初、要求NPMパッケージを使用してそれを書いたが、それは失敗したので、私はバニラhttp.getに戻って落ちますが、どちらも実行するようです。渡される正しいホストとパスで

console.log("Executing makeAPIRequest to " + apiSettings.host + " and path " + path); 

が、

console.log('Status Code: ' + res.statusCode); 

は、画面に出力されません:ラムダからのログ出力では、私は次の出力を見ることができます。ログに記録されるエラーはなく、私が打つAPIエンドポイントはAPIリクエストの数を報告しますが、これは変更されていないため、リクエストが行われているとは思われません。

誰もがhttp呼出をするためにラムダを持っていますか?もしそうなら、私はここで何をしていないのでしょうか?

おかげ

編集:「はVPCが」私は数日ごとにここにこの質問のいくつかのバリエーションを見るラムダ

+0

ラムダはタイムアウトで終了しますか?タイムアウト設定とは何ですか? – Leon

+1

ちょっと単純化されたコードのバージョンが私に適していることを確認しました。 'http.get()'のハンドラが開始されないようにする他のコールバックはありますか? – Leon

+0

レオンに感謝、あなたは正しい道を私に導いた。 ラムダ関数がレスポンスを「待っていない」ようにJavaScriptが私のコールバックの処理方法に問題があったスパゲッティコードが表示されます。 – LDJ

答えて

4

の高度な設定]セクションで設定されていないことを確認しました。ほぼすべての場合、VPCにラムダ関数を配置しているからです。ラムダ関数は、VPC内でそれらに割り当てられたパブリックIPアドレスを取得しないため、VPC外のものにはアクセスできません。その結果、VPC外のリソースへのネットワークコールが、あなたの説明どおりにハングアップします。

解決策は、VPCの外部でラムダ機能を移動するか、またはVPCにNATゲートウェイを追加することです。

+0

ちょうどログインし、それが「VPCなし」に設定されています。これは、わかっているように、デフォルトでインターネットアクセスを許可する必要があります。あれは正しいですか? – LDJ

+0

はい、正しいです。では、ヒットしようとしているAPIはどこですか?インターネットにさらされているのでしょうか? –

+0

はい、ここではサンプルの回答を見ることができます:http://api.football-data.org/v1/competitions/?season=2016 – LDJ

関連する問題