はじめに
Ansible で Azure の Virtual Machine に対して IaaS VM Backup を有効化するのに苦戦したのでメモ。
モジュールが対応していない?
Azure IaaS VM backup は、Recovery Service Vault によって提供されます。しかし、Azure モジュールには、Recovery Serivce Vault が存在しません。Azure preview モジュールにも Recovery Serivce Vault が存在しません。困りました。
azure_rm_deployment を使う
Azure モジュールは、azure_rm_deployment で ARM テンプレートによるデプロイをサポートしています。Azure モジュールが Recovery Serivce Vault を抽象化してくれないので、ARM テンプレートを使って IaaS VM Backup を有効化します。
Playbook のサンプルは次の通りです。対象の Virtual Machine に対して、夜8時にバックアップを取得して三世代保管するバックアップポリシーを適用します。
- name: Create Recovery servive vault and policy
azure_rm_deployment:
state: present
resource_group: myResourceGroup
location: eastus
template_link: 'https://gist.githubusercontent.com/kongou-ae/c72aa929242c98d1016fa42c1ab0e608/raw/5d74c950cc2265738dee258c8108de09c548977c/createvault.json'
parameters:
vaultName:
value: vaulttest
policyName:
value: daily-0300
scheduleRunTimes:
value:
- "2019-02-08T20:00:00+00:00"
timeZone:
value: "Tokyo Standard Time"
dailyRetentionDurationCount:
value: 3
- name: Enable VM Backup
azure_rm_deployment:
state: present
resource_group: myResourceGroup
location: eastus
template_link: 'https://gist.githubusercontent.com/kongou-ae/447e0f82bfaf31720f48d35c9ecfdb8b/raw/c792b34b306e6fba2b335d6e19c5c01991c6ce19/enablevmbackup.json'
parameters:
existingVirtualMachinesResourceGroup:
value: myResourceGroup
existingVirtualMachines:
value:
- myVM
existingRecoveryServicesVault:
value: vaulttest
existingBackupPolicy:
value: daily-0300
azure_rm_deployment では、サーバ上のテンプレートを参照できません。上記のように template_link
を利用して Web サーバ上のテンプレートを参照するか、 template
を利用して Playbook の中に ARM テンプレートの内容を直接記載する必要があります。直接記載するサンプルは、 Ansible の公式ドキュメントに記載されています。
参考:azure_rm_deployment - Create or destroy Azure Resource Manager template deployments
気になったこと
時刻を UTC で指定したほうがよい
scheduleRunTimes
で指定するバックアップの開始時間は、UTC タイムゾーン付きの表記が良いようです。気を利かせて +09:00 にすると、UTC に変換された時間が設定されてしまいます。
20:00:00+09:00 のタイムゾーン表記を設定した場合、バックアップのポリシーに設定される時間は9時間引かれた11時になります。
scheduleRunTimes:
value:
- "2019-02-08T20:00:00+09:00"
20:00:00+00:00 のタイムゾーン表記を設定した場合、バックアップのポリシーに設定される時間は20時になります。
scheduleRunTimes:
value:
- "2019-02-08T20:00:00+00:00"
毎回 Change になってしまう
同じ Playbook を複数回実行すると、azure_rm_deployment の部分が必ず Change になります。実際にログを見ると、Virtual Machine のバックアップ設定が毎回実施されています。「 ARM テンプレートは、存在しており設定が変更されないリソースに対して何の操作もしない」という認識なのですが、何故だろう。
まとめ
Ansible で IaaS VM backup を有効化する方法をまとめました。毎回 change になるという不思議な動きをしますが、初期構築では十分に使える方法だと思います。