WebJobs によるシンプルな Web サイトのバックアップ アイテム保時ポリシー
このポストは、4 月 28 日に投稿された Simple Web Site Backup retention policy with WebJobs の翻訳です。
Azure では、Web サイトのコンテキストでのコードの実行に WebJobs (英語) を使用できます。この機能を使用することで、Web サイトのアプリケーション シナリオ ソリューションにおける汎用性が大幅に高まると共に、Azure リソースへのアクセス時にさまざまな解決方法を使用できるようになります。この Web サイトのバックアップ機能 (英語) がスケジュールに従って実行され、これに Azure のストレージが使用されます。この点がここでご紹介する例の興味深いところです。今回の記事では、簡単な WebJob を作成して、古い Web サイトのバックアップ ファイルを定期的にクリーンアップする方法の詳細について説明します。
バックアップ ファイルのレイアウト
コンテキストを設定するにあたって、まずこのバックアップ機能の一部の詳細をご説明しましょう。この情報はこのソリューションを理解するためにも役立ちます。この設計の最も優れた点の 1 つは、お客様向けにバックアップ コンテンツの利用と管理が容易になっている点です。バックアップが正常に実行されるたびに、指定されたストレージ アカウントに 2 つのファイルが格納されます。1 つはバックアップ コンテンツを記述する XML ファイルで、もう 1 つはバックアップされた実際のファイルを含む ZIP ファイルです。ファイルの命名規則は、 <Web サイト名>_<タイムスタンプ>.<拡張子> です。以下のスクリーンショットがその例です。
お客様の多くは、1 日に 1 回などのスケジュールに従って実行されるように、バックアップ処理をセットアップしていることと思います。1 日 1 回に設定すると毎日 2 つのファイルが作成されるため、時間の経過と共にバックアップ ストレージ アカウントに多くのファイルが蓄積されます。プレビュー モードではまだこの機能にアイテム保持ポリシーが標準で搭載されていませんが、サイトを構成することでこのクリーンアップを実行できます。
ソリューションの概要
古いバックアップをクリーンアップする簡単な方法の 1 つとして、バックアップ ファイルのアイテム保持ポリシーを適用して、スケジュール済みの WebJob を実行する方法があります。WebJobs の詳細については、Azure Web サイトのこちらの記事 (英語) を参照してください。クリーンアップに WebJobs を使用するには、簡単なアプリケーションを作成して、毎日実行されるように WebJob を構成する必要があります。このアプリケーションによってバックアップ フォルダーのすべてのファイルが認識され、その作成日時が確認されて、定義されたポリシーより古いファイルが削除されるようになります。
サンプル コード
このアプリケーションは、さまざまな方法で記述しデプロイできます。以下の例では、C# で記述され、コンソール アプリケーション (.exe) としてデプロイされていますが、他の言語でも簡単に実行できます。メモ: このコードを直接使用する場合は、次のセクションの説明に従ってコードの完全版をダウンロードしてください。アプリケーションを WebJob としてビルドおよびデプロイするために使用できます。
このコードの最初の部分によって、バックアップ ストレージ アカウント、バックアップ フォルダーの場所、最大保有期間 (日数)、Web サイト名の構成が収集されます。構成値 (以下の大文字の文字列) は、Web サイトのアプリケーション設定から取得されます。これらの設定に対する値のセットアップ方法については、この後のセクションで説明します。
適切に設定されていると、コードの 2 つ目の部分によって、バックアップ ファイルが保管されている BLOB ストレージに接続されます。次に、最大保有期間ポリシーに対する現在の時間から、日時のオフセットが計算されます。その後、foreach ループが使用され、フォルダー内のそれぞれのファイルが認識されて、zip または xml の拡張子を持った、バックアップ処理の規則に従って命名されたファイルが検出されます。そして、このプログラムによって各ファイルの保有期間が計算され、定義された最大保有期間よりも保有期間が長いファイルがコードによって削除されます。
バイナリ (.exe) のビルドおよびパッケージ化
コマンドライン実行ファイル (.exe) のビルドにあまり慣れていない方は、以下に示す Visual Studio 2013 と Azure SDK (いずれも事前にインストールが必要) を使用した、実行ファイルのビルドの手順を参考にしてください。
1.新しいコンソール アプリケーションを作成し、テンプレートを Visual C# に指定して [Console Application] を選択し、「WebJobProject」などの名前を指定します。
2.Program.cs のコンテンツを上記の完全版のコードに置き換えます。コードはこちら (英語) から取得できます。
a.これには、ライブラリへの参照 (using ステートメント)、標準出力への進捗状況とエラーのログ、名前空間とクラスの定義、追加のコードのコメントが含まれます。
3.参照を追加します (ソリューション エクスプローラーで [References] を右クリックし、[Add Reference] をクリック)。
a.[Framework]、[System.Configuration] の順にクリック
b.[Extensions]、[Microsoft.WindowsAzure.Storage] の順にクリック
4.ソリューションをビルドします (Ctrl+Shift+B)。
5.「デバッグ」プロジェクトのコンテンツを圧縮し、「WebJobProject.zip」などの名前を付けます。
a.[Debug] フォルダーにアクセスするには、ソリューション エクスプローラーで [Show All Files] アイコンをクリックし、[bin] フォルダーを展開して [Debug] フォルダーを表示します。ここで [Debug] フォルダーを右クリックして [Open Folder in File Explorer] をクリックします。
b.Windows 8 マシンでコンテンツを圧縮するには、すべてのコンテンツを選択し、その上で右クリックして、[Send To]、[Compressed (zipped) folder] の順に選択します。
WebJob のセットアップ
WebJob のセットアップを以下のスクリーンショットのとおりに行います。WebJob コンテンツの zip ファイルの作成方法については、後続のセクションで説明します。
スケジュールの詳細は以下のとおりです。バックアップ機能を毎日実行している場合は、WebJob のスケジュールも同様にセットアップされます。
アプリケーションのパラメーターのセットアップ
この WebJob により、セットアップに必要な特定の Web サイトのアプリケーション設定が検索されます。セットアップを行うには、Azure ポータルで [CONFIGURE] タブを選択して、[app settings] まで下にスクロールします。ここでバックアップ ファイルのアイテム保持ポリシー (日数) を定義し、バックアップ処理に使用するストレージ アカウントを指定します (画像では実際の情報は表示されていません)。すべての Web サイトで「WEBSITE_SITE_NAME」設定が事前に入力されるため、追加する必要はありません。すべてのアプリケーション設定を表示するには、<Web サイト名>.scm.azurewebsites.net に移動し、[Environment] をクリックします。
結果
セットアップが完了し、正常に実行されると、以下のように表示されます。
正常に実行された後の WebJobs ダッシュボード
WebJob のログファイル
WebJobs ダッシュボードのログへのリンクを使用すると、以前のすべての実行結果を含む Web ページが表示されます。ログは、WebJob 実行時のエラーを把握したり、あるいは単にジョブが期待どおりに実行されたことを確認するために非常に便利です。
特定の実行結果をクリックすると、WebJobs からのテキスト出力が表示されます。次のスクリーンショットには、WebJob インフラストラクチャ (“SYS INFO”) によるログ エントリと、この WebJob (“INFO”) によって出力されたエントリが表示されています。
アイテム保持ポリシーの機能を強化するアイデア
アイテム保持ポリシーは、コンテンツのサイズ、対数周期 (新しいバックアップを多く、古いバックアップを少なく保持)、または zip コンテンツの差異の比較に基づいて、削除するバックアップが選択されるように、より高度なものに簡単に変更することができます。この記事 (英語) で説明しているように、WebJob のコードを作成してデプロイする方法は、他にもたくさんあります。機能強化のためのご意見やアイデアがございましたら、ぜひお寄せください。