バックアップしてますか?してますよね(自戒)
いざリカバリをする際に、肝心のバックアップジョブが正しく機能していなくて、「データがなかった」「あったあった、、、あれ、、、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は以下のような感じです。
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を設定します。
確認
hipchatで確認すると...
こんな感じでお知らせしてくれました!
注意点
-
AWS Lambdaは、2015/05現在、バージニア、オレゴン、アイルランドにしか対応していません。つまり対応するS3バケットもそこにする必要があります。
-
バックアップデータが大きい場合、Lambdaがタイムアウトしてしまいます(default: 3秒)。ぐいっと30秒ぐらいにしましょう