2017年2月12日日曜日

AWS Lambda RDSにデータをInsertするとError発生時にアラート通知

  • このエントリーをはてなブックマークに追加


AWS Lambda RDSにデータをInsertするとError発生時にアラート通知 AWS LambdaでRDSにデータをインサートする処理を実現しています。
正しくインサートするときに何もしなく、そのまま終了、
インサートするときにエラーが発生した場合は、Alertメールで通知したい。

Sample Code

var mysql = require('mysql');
exports.handler = function(event,context,callback){
    var No = event.No
    var Birth = event.Birth
    var Email = event.Email
    var Name = event.Name

    if(No == null || Birth == null || Email == null || Name == null){
        context.done('FAILED');
    }

    var connection = mysql.createConnection({
      host     : 'rds endpoint url', //RDSのエンドポイント
      user     : 'root', //MySQLのユーザ名
      password : 'password', //MySQLのパスワード
      database : 'db'
    });

    connection.connect();

    var insert_sql = "insert into User (No, Birth, Email, Name) value ('" + No + "','" + Birth +"','" + Email +"','" + Name + "')"
    connection.query(insert_sql, function(err, rows, fields) {
      if (err)
      {
        console.log("--err");
        console.log(err);
        callback(new Error("FAILED"));
      }
    });

    connection.end(function(err) {
        context.done('SUCCESSED');  
    });
}

Lambdaモニタリング設定

「Lambda ⇒ 「関数」 ⇒ 「モニタリング」タブで【呼び出しエラー】というものがあります。
monitoring
これを設定すればエラー発生したら、設定したメールアドレスにメールが飛びます。
エラー(Errors)
が>=1
を1回連続した場合

間隔:5分間
統計:Standard
などの値を設定し、通知の送信先を選択する。
alert
これでうまくいくかと思いきゃ、実は成功のときも、エラーが通知されてしまいます。よくないね。いろいろ調べたところ、このエラーは以下の意味を示しています。
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/lam-metricscollected.html
- 処理された例外 (context.fail(error) など)
- コードの終了を起こす処理されない例外
- メモリ不足例外
- タイムアウト
- 権限エラー

解決

ソースコードの以下の部分が悪かった。
 connection.end(function(err) {
        context.done('SUCCESSED');  
    });
これだと、実行後常にエラーメッセージSuccessedで以上終了してしまいます。
以下のように変更すれば、正常に終了されます。
 connection.end(function(err) {
        context.done();  
    });
結構ハマりました。

この記事がお役にたちましたらシェアをお願いします:)

  • このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿