本記事はAP Tech Blog Week Vol.5のものになります。
始めに
こんにちは、株式会社エーピーコミュニケーションズ クラウド事業部の藤江です。Azure Backupの利用上の注意点と注意点を回避するためのAzure Backupのコントロール方法について記します。
Azure Backupの概要
AzureVMやオンプレミスサーバなどのバックアップを取得するサービスです。バックアップの周期実行の設定や手動実行によるオンデマンド実行を行うことが出来ます。簡単な設定で自動的にバックアップを取ることが出来るサービスですがいくつか注意点があります。
Azure Backup利用上の注意点
バックアップが失敗する場合がある
Azure Backupは実行すれば確実に成功するとは保障されていません。そのためバックアップが失敗した場合に備えて監視設定やエラー処理を自前で準備する必要があります。
バックアップは指定した時刻に開始するとは限らない
別ユーザのリソースの利用状況などでバックアップの開始が遅延することがあります。
バックアップは一定時間内に完了するとは限らならない
バックアップの開始時刻と同様にバックアップは一定時間内に完了するとは限りません。ただし仕様上、24時間未満に完了すると定義されています。
バックアップの方法によってはアプリケーションレベルでのデータの整合性が保証されない
Azure BackupはOSの起動やファイルの整合性は保証してくれますが、アプリケーションレベルでのデータの整合性は保証されません。アプリケーションがバックアップ中にディスクに書き込むデータについてはバックアップには含まれないためバックアップのタイミングによっては、データの整合性が取れない状態でバックアップがとられる可能性があります。
Azure Backupをコントロールする方法
先ほど記した注意点について何かしらの対応が必要な場合はAzure Backupをコントロールする必要があります。今回は2点コントロールする方法について紹介します。
事前、事後スクリプトによるコントロール
Linux OS限定の機能になりますが、Azure Backupでディスクのスナップショット取得開始、終了のタイミングでVM内に置いたスクリプトを実行する機能があります。この機能を使えはDBなどのBackup中は停止しておきたいプログラムを停止してバックアップ後に起動することや、開始、終了時刻を判定して何かしらの処理を実行することなどが実現できます。今回の例はナップショット取得開始時にpostgresqlを停止、取得完了時に実行させる設定例を記します。
設定方法
設定例の概要
今回は/root/bin
に事前スクリプト/pre-script.sh
、事後スクリプトpost-script.sh
を設定する例をしまします。事前事後スクリプトの実行に係る設定ファイルは/etc/azure/VMSnapshotScriptPluginConfig.json
に固定で設置することが決まっています。設定はすべて管理者権限が必要なため管理者権限があるユーザで設定します。
事前、事後スクリプトの設置
事前、事後スクリプトを設置します。 設置場所やファイル名は任意でよいです。 最初にスクリプトの置き場と空スクリプトファイルを作成します。 実行権限の設定を忘れずに実施してください。
# スクリプト保存用のディレクトリの作成 $ mkdir /root/bin # 空のスクリプトファイルを作成する。 $ cd /root/bin $ touch pre-script.sh $ touch post-script.sh $ chown root:root pre-script.sh $ chmod 700 pre-script.sh $ chown root:root post-script.sh $ chmod 700 post-script.sh
スクリプトファイルをエディタで開き、実行する処理を記述します。
pre-script.sh
の内容は下記のとおりです。
#! /bin/bash systemctl stop postgresql.service
post-script.sh
の内容は下記の通りです。
#! /bin/bash systemctl start postgresql.service
設定ファイルの設置
設定ファイルを/etc/azure
に設置します。/etc/azure
が無ければ作成します。設定ファイル名はVMSnapshotScriptPluginConfig.json
です。
mkdir -p /etc/azure touch /etc/azure/VMSnapshotScriptPluginConfig.json $ chown root:root /etc/azure/VMSnapshotScriptPluginConfig.json $ chmod 600 /etc/azure/VMSnapshotScriptPluginConfig.json
設定内容は下記のページを参考にして設定します。
MicrosoftAzureBackup/VMSnapshotPluginConfig
今回の例に対応する設定ファイルの内容は下記のような内容です。設定内容の詳細については参考ページに記されているので確認してください。
{ "pluginName" : "ScriptRunner", "preScriptLocation" : "/root/bin/pre-script.sh", "postScriptLocation" : "/root/bin/post-script.sh", "preScriptParams" : ["", ""], "postScriptParams" : ["", ""], "preScriptNoOfRetries" : 0, "postScriptNoOfRetries" : 0, "timeoutInSeconds" : 30, "continueBackupOnFailure" : true, "fsFreezeEnabled" : true }
事前、事後スクリプトと設定ファイルを設置すると次回のAzure Backupから事前、事後スクリプトが動作するようになります。
注意事項
エラー処理の記述
Azure Backup側ではスクリプトがどの処理で失敗したのか判断できません。実際の運用ではエラー処理をスクリプトに記述してスクリプト実行時にエラーに対応する必要があります。今回の事前、事後スクリプトにはエラー処理は記載していませんが実際の運用ではエラー処理をスクリプトに記述してください。
スクリプトファイルおよび設定ファイルへの所有権及び、実行権限の設定
事前、事後スクリプト、設定ファイルの所有者と実行権限を間違えないように設定してください。事前、事後スクリプトファイルの所有者はrootを指定し、所有者のみ読み込み、書き込み、実行できるように設定します。設定ファイルの所有者はrootを指定し、所有者のみ書き込み、読み込みができるように設定してください。重要なポイントなため改めて設定方法を記します。
# 事前、事後スクリプトの所有者、実行権限の設定方法 $ chown root:root pre-script.sh $ chmod 700 pre-script.sh $ chown root:root post-script.sh $ chmod 700 post-script.sh # 設定ファイルの所有者、実行権限の設定方法 $ chown root:root /etc/azure/VMSnapshotScriptPluginConfig.json $ chmod 600 /etc/azure/VMSnapshotScriptPluginConfig.json
事前、事後スクリプトの内容にかかわらず実行しただけでアプリケーション整合性のあるバックアップと判定される
スクリプトの内容がアプリケーションのコントロールと関係がない内容でも、スクリプトの実行に成功すればAzure Backup側はアプリケーションレベルで整合性が取れたバックアップの取得が成功したと判定されます。 そのため事前、事後スクリプトを設定してバックアップを取得した後にスクリプトの動作検証を行い、アプリケーションレベルでの整合性が取れたバックアップが取得できたのか検証する必要があります。
Azure CLI、Azure Powershellなどのスクリプトによるコントロール
事前、事後スクリプト機能がないWindows OSや事前、事後スクリプトだけでは実現できないより細かいコントロールが必要な場合は、Azure CLIやAzure Powershellを使用してオンデマンドバックアップを実行してバックアップを取得するのが良いです。VM内にAzure CLIやAzure Powershellをインストールしてバックアップを行う方法でもよいですが、VMにこれらをインストールできない場合はAzure Automationを使い、Azure CLIやAzure Powershellを実行することが出来ます。Azure BackupをスクリプトによってコントロールするにはAzure Backup Recovery Services コンテナーにアクセスできる権限が必要になります。アクセス権限はバックアップ オペレーターの権限が必要で、このロールをマネージドidやシステムidに割り当てればバックアップを取得することが出来ます。
まとめ
Azure Backupは簡単な設定で自動バックアップを取得することが出来ますが、細かい制約があり、自力でコントロールする必要がある場合は事前、事後スクリプトやAzure CLI、Azure Powershellを使ってAzure Backupをコントロールしてバックアップを取得するのが良いです。