2016-10-26 5 views
0

ラムダ関数を記述して、指定されたOpsWorksレイヤーで実行されているすべてのインスタンスのエンドポイントに接続しようとしています。私の問題は、テストしようとすると機能がタイムアウトすることです。出力には他にエラーがないので、どこでこの問題のデバッグを開始するのかはわかりません。ラムダ関数からOpsWorksに接続するタイムアウト

私はthis StackOverflowの質問を見つけましたが、VPCなしで機能を作成しようとしましたが、問題は解決しません(問題のOpsWorksスタックはVPCの背後にあります)。

問題のラムダコードは次のとおりです。

exports.handler = function(event, context) { 
    var done = false; 

    var awsOptions = { 
     region: 'us-east-1' 
    }; 

    var AWS = require('aws-sdk'); 
    var opsWorks = new AWS.OpsWorks(awsOptions); 

    var appIds = ["MY_APP_ID"]; 
    var layerIds = ["MY_LAYER_ID"]; 
    var stackId = "MY_STACK" 

    var isOnline = function(instance) { 
     return instance.Status == 'online'; 
    } 

    console.log("Have all the variables set up, time to run..."); 

    opsWorks.describeLayers({StackId: stackId, LayerIds: layerIds}, 
     function(error, layers) { 

     console.log("Described the layer..."); 
     console.log(layers); 

     opsWorks.describeInstances({LayerId: layers[0].LayerId}, 
      function(err, instances) { 

      console.log("Described the instances on the layer"); 
      if (err) { 
       console.error("No instances found!"); 
      } 

      console.log("No errors, keep going..."); 
      instances.Instances.filter(isOnline).forEach(function(instance) { 

       console.log("Filtered out the offline instances."); 
       var options = { 
        method: "GET", 
        path: "/endpoint", 
        port: 123, 
        timeout: 10000, 
        url: instance.Hostname  
       }; 

       http.request(options, function(response) { 

        if (response.statusCode != 200) { 

         console.error("Instance " + instance.InstanceId 
          + " is not responding!"); 

        } else { 

         console.log("Got a response, time to do stuff!"); 

        } 
       }); 

      }); 

      done = true; 

     }); 
    }); 

    while (!done) { 
     // Keep waiting... 
    } 
}; 

答えて

0

エリック、

は、私は2つの方法で直面していた同様の問題を解決:あなたはすでにあなたが言及したVPCを(削除

  1. それを試してみました)
  2. JSコードの問題は、JSコードにエラーが発生した場合、ラムダ関数の実行を停止します。ラムダをフリーズし、ラムダコンソールで指定したタイムアウト後にタイムアウトします。私の場合は、変数を宣言して使用し始めてタイムアウトエラーが発生しましたが、宣言して他のJS関連のエラーを解決したとき、それは魅力的でした。

希望します。

+0

ありがとうございました!私はノードをあきらめてJavaで書いていましたが、これは私のために働いていました。 –

関連する問題