WindowsAzureモバイルサービスのスケジュールでスナップショットを取得する方法
Azureのモバイルサービスにはスケジューラが用意されいるため定期ジョブが実行できます。
このスケジューラのスクリプトを利用してBlobのスナップショットを作成&復元を行ってみました。
1.ストレージ内に適当なBlobを作成します
今回はスケジューラのスクリプトで以下のコードを実行し、ファイルを作成しました。
function testJob() { console.log("starting job testJob...."); var azure = require('azure'); var blobService = azure.createBlobService('アカウント名', 'アクセスキー', 'http://アカウント名.blob.core.windows.net/'); var containerName = 'testblob'; var blob = 'sample.txt'; createSampleBlob(); function createSampleBlob () { blobService.createBlockBlobFromText(containerName, blob, 'HelloWorld', function(error) { if (error) { console.log('Error! createSampleBlob :' + error); } else { console.log('Created SampleBlob'); } }); } }
結果はモバイルサービスのログから確認できます。
ストレージの管理画面からでもファイルが作成されている事が解ります。
Blobの内容を見てみるとこんな感じ
2.Blobのスナップショットを作成します
function createSnapshot () { blobService.createContainerIfNotExists(containerName, {publicAccessLevel : 'blob'}, function(error) { if (error) { console.log('Error! CreateContainer : ' + error); } else { blobService.createBlobSnapshot(containerName, blob, function(error2, snapshot) { if (error2) { console.log('Error CreateSnapshot : ' + error2); } else { console.log('Created Snapshot snapshotId is : ' + snapshot); } }); } }); }
createBlobSnapshotメソッドを利用してBlobのスナップショットを作成しています。
スナップショットはAzureの管理画面からは確認できないため、listBlobsメソッドを使用して
snapshotの確認とsnapshotIDを取得します。
blobService.listBlobs(containerName, { include: 'snapshots' }, function(error, blobResults) { if (error) { console.log(error); } else { console.log('Listing the blobs under the container ' + containerName); blobResults.forEach(function (blobResult) { console.log(' blob: ' + blobResult.name + ' snapshot: ' + blobResult.snapshot); }); } });
スケジューラのログを参照するとスナップショットが作成できている事が解ります。
3.Blobの内容を更新する
sample.txtの中身をUpdateHelloWorldに書き換えます。
blobService.createBlockBlobFromText(containerName, blob, 'UpdateHelloWorld', function(error) { if (error) { console.log('Error! updateSampleBlob :' + error); } else { console.log('Updated SampleBlob'); } });
Blobの内容を見てみると変更されている事が解ります。
4.スナップショットを復元する
var snapshot = '2013-06-23T07:22:30.0040628Z'; blobService.copyBlob(containerName, blob, containerName, blob, {snapshotId: snapshot}, function (error) { if (error) { console.log('Error copySnapshot : ' + error); } else { console.log('Copy snapshot ' + blob + ' ' + snapshot + ' => ' + blob); } });
copyBlobメソッドでsnapshotIdを指定することでスナップショットから復元ができます。
Blobの内容を見てみるとスナップショットが復元されている事が確認できます。
このようにcreateBlobSnapshotとcopyBlobを使用する事でバックアップ&リストアを
モバイルサービス経由でスケジューリングする事が可能です。