今回は、Lambdaを使ってEBSスナップショットを作成をNode.jsで書いてみました。
要件
- EC2インスタンスにアタッチしているEBSボリュームが対象
- バックアップは5日間保持
ソースコード
const AWS = require('aws-sdk'); const ec2 = new AWS.EC2({region: 'ap-northeast-1'}); const sts = new AWS.STS(); const date = new Date(); exports.handler = (event, context, cb) => { // スナップショット作成処理 Promise.resolve().then(() => { var params = { Filters: [ { Name:"status", Values: [ "in-use" ] } ]}; return ec2.describeVolumes(params).promise(); }).then(response => { for (var i = 0; i < response['Volumes'].length; i++) { var params = { Description: 'cron backuped snapshot' + response['Volumes'][i].Attachments[0].InstanceId, VolumeId: response['Volumes'][i].Attachments[0].VolumeId }; ec2.createSnapshot(params).promise(); } }).then(response => { console.log('create complete'); }); // スナップショット削除処理 Promise.resolve().then(() => { // アカウント情報を取得する var params = {}; return sts.getCallerIdentity(params).promise(); }).then(response => { // snapshot一覧を取得する var params = { OwnerIds: [ response.Account ] }; return ec2.describeSnapshots(params).promise(); }).then(response => { // 5日前を求める date.setDate(date.getDate() - 2); date.setHours(23,59,59,999); console.log(response.Snapshots.length); // 5日より前のスナップショットを削除する for (var i = 0; i < response.Snapshots.length; i++) { if (date > response.Snapshots[i].StartTime) { console.log(response.Snapshots[i].StartTime); var params = { SnapshotId: response.Snapshots[i].StartTime }; ec2.deleteSnapshot(params).promise(); } } }).then(response=> { console.log('delete complete'); }); };