LoginSignup
8
7

More than 5 years have passed since last update.

S3 + Lambdaを使って、バックアップ完了をhipchatに通知する

Last updated at Posted at 2015-05-13

バックアップしてますか?してますよね(自戒)

いざリカバリをする際に、肝心のバックアップジョブが正しく機能していなくて、「データがなかった」「あったあった、、、あれ、、、0byteだと...(;´༎ຶД༎ຶ`)」。。なんてことも。
しかし一々、巡回チェックはしたくありません。

そこでLambdaを使って、バックアップファイルがS3にuploadされるのをトリガーに、hipchatに自動通知してもらいましょう。

準備

以下2つのLibraryを開発環境にインストールしましょう

npm install hipchatter --save
npm install aws-sdk

以上をインストールすると以下の通りnode_modulesディレクトリ以下に保存されます。

[~] ls node_modules
aws-sdk    hipchatter

Lambda function

Lambda functionは以下のような感じです。

index.js
console.log("Loading event")
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var Hipchatter = require('hipchatter');

exports.handler = function(event, context) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    var bucket = event.Records[0].s3.bucket.name;
    var key = event.Records[0].s3.object.key;
    var size = event.Records[0].s3.object.size;
    var hipchatter = new Hipchatter('hipchatのAPIトークン');
    s3.getObject({Bucket: bucket, Key: key},
        // hipchatへの通知処理
        function(err, data) {
            if (err){
                context.done('error', 'error getting file' + err);
            } else {
                hipchatter.notify('hipchatルームID', 
                    {
                        message: 'Backup completed : ' + key + ', file size: ' + size , // ファイル名とファイルサイズを通知
                        color: 'green',
                        token: 'hipchatルームのトークン', // 
                        notify: true
                    })
                }
        }
    );
};

バックアップデータのファイル名とファイルサイズをhipchatの特定ルームに通知する内容です。

Lambda Functionのupload手順

1: Lambda Function Listの追加

詳細は省略します

2: Function Codeのupload

先ほどインストールしたnode_modules(aws-sdk, hipchatter), index.jsをまるっとzipで固めて、uploadします

zip -r bkup_hipchat.zip index.js node_modules

3: 対象S3バケットのイベントフック作成

最後に対象S3バケットで、下図の通りEvent Notificationsを設定します。

lambda1

確認

hipchatで確認すると...

lambda2

こんな感じでお知らせしてくれました!

注意点

  • AWS Lambdaは、2015/05現在、バージニア、オレゴン、アイルランドにしか対応していません。つまり対応するS3バケットもそこにする必要があります。

  • バックアップデータが大きい場合、Lambdaがタイムアウトしてしまいます(default: 3秒)。ぐいっと30秒ぐらいにしましょう

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7