2017-06-19 14 views
2

MySQLデータベースにクエリを実行し、分析のために結果をGeckoboardにアップロードするAWSラムダ関数を設定しようとしています。ただし、は常にタイムアウトになります。ここに私のコードです:AWS Lammbdaを使用してデータベースにクエリを実行し、結果をGeckoboardにプッシュ

'use strict'; 

var API_KEY = [API KEY]; 
var gb = require('geckoboard')(API_KEY); 
var AWS = require('aws-sdk'); 
var mysql = require('mysql'); 

var connection = mysql.createConnection({ 
    [DATABASE DETAILS] 
}); 

var mysqlQuery = '  
    SELECT DATE(created_at) as date, COUNT(DATE(created_at)) as number_of_entries 
    FROM table 
    WHERE updated_at IS NOT NULL 
    GROUP BY date 
    '; 

var schema = { 
    id: 'geckoboard_target', 
    fields: { 
     date: { 
      type: 'datetime', 
      name: 'date' 
     }, 
     number_of_entries: { 
      type: 'number', 
      name: 'number_of_entries' 
     } 
    } 
}; 

function uploadToGeckoboard(schema, data, context) { 
    gb.datasets.findOrCreate(schema, 
     function (err, dataset) { 
      if (err) { 
       console.error('Error connecting to Geckoboard:',err); 
       context.fail('Failed'); 
      } 
       dataset.put(
       data, 
       function (err) { 
        if (err) { 
         console.error('Error uploading to Geckoboard',err); 
         context.fail('Failed'); 
        } 
        console.log('Dataset created and data added'); 
        context.succeed('Success'); 
       } 
      ); 
     } 
    ); 
} 

exports.handler = (event, context) => { 

    connection.connect(function(err) { 
     if (!err) { 

      connection.query(mysqlQuery, function(err, data) { 
       if (!err) { 

        console.log("Results:", JSON.stringify(data)); 
        uploadToGeckoboard(schema, data, context); 

        connection.end(); 


       } else { 
        console.log("Query error:", err); 
        context.fail(); 
       } 
      }); 
     } else { 
      console.log("Error connecting database:", err.message); 
      context.fail(); 
     } 
    }); 
}; 

それはポイントまでアップ成功したデータが戻るとuploadToGeckoboard関数が呼び出されます。その後、ただ時間切れになります。ラムダハンドラとコンテキストを削除して同じコードを試しましたが、ローカルマシンから正常に実行されます。

ご協力いただければ幸いです!

答えて

0

このコードはわかりました。問題は、開発プロセスに沿って、ラムダ設定でVPCを有効にしていたことです。これは、必要なRDS読み取り能力であると考えたものを可能にするためです。

これをオフにすると、永続的なタイムアウトが解決され、RDSクエリを作成するためにVPCが必要ないことが明らかになりました。おっとっと!

関連する問題