Azure AutomationをAzure Site Recoveryと組み合わせて使ってみました。
Azure Automationを普通に動かすところは既に色々な方の記事があるので、ここでは前回書いた、Azure Site Recoveryの復旧計画内でAzure Automationを使う簡単なシナリオを作ってみました。
Azure Site Recoveryでフェールオーバー後の固定IP割り当てを自動化
Azure Site Recoveryを使うってフェールオーバーをかけると、フェールオーバー後にAzure側で立ち上がった仮想マシンにはDHCPで自動的に割当たったIPが設定されています。しかし、固定IPを割り当てたいという要件もあると思います。そこで復旧計画の1アクションとして固定IPの割り当てを行ってみました。
アセットの設定
Azure Automationにはアセットとして事前に共通利用可能な変数などを定義することが可能です。
フェールオーバー処理で使う変数として以下を登録してみました。
| 種別 | 名前 | 備考 |
|---|---|---|
| 接続(Azure) | DRAzureConnection | CertificationにはDRCertを指定 |
| 変数(文字列) | DRSubscriptionName | DR時に利用するサブスクリプション名 |
| 証明書 | DRCert | 管理証明書と対になるPFXファイルをアップロード |
固定IP割り当て用のRunBook
固定IP割り当て用のWorkflowをRunbookに作成します。上記で作成した変数もスクリプト内から利用しています。作成したRunbookは忘れずに「発行」します。
workflow Set-AzureVMStaticIP
{
param(
# Service Name
[parameter(Mandatory=$true)]
[String]$ServiceName,
# VM Name
[parameter(Mandatory=$true)]
[String]$VMName,
# IP Address
[parameter(Mandatory=$true)]
[String]$IPAddress
)
#アセット情報の取得
$azureConn = Get-AutomationConnection -Name "DRAzureConnection"
$subscripionName = Get-AutomationVariable -Name "DRSubscriptionName"
$certificate = Get-AutomationCertificate -Name $AzureConn.AutomationCertificateName
#Azure接続情報のセットアップ
Set-AzureSubscription -SubscriptionName $subscripionName `
-SubscriptionId $azureConn.SubscriptionID `
-Certificate $certificate
Select-AzureSubscription $subscripionName
#固定IPの設定
$vm = (Get-AzureVM -ServiceName $ServiceName -Name $VMName).VM
Set-AzureStaticVNetIP -VM $vm -IPAddress $IPAddress
Update-AzureVM -VM $vm -ServiceName $ServiceName -Name $VMName
}
フェールオーバー後処理時のメインRunbook
Azure Automationでは一つのRunBookの内部から別のRunbookを呼び出すことが可能です。
ここではそれぞれの上記の固定IP割り当て用のRunbookを実行し、複数の仮想マシンに対して固定IP割り当てを行う形にしてみました。
workflow DR-PostAct-IPSettings
{
$ServiceName = "DR-DEMO-test"
Set-AzureVMStaticIP -ServiceName $ServiceName -VMName "AD-test" -IPAddress "192.168.20.137"
Set-AzureVMStaticIP -ServiceName $ServiceName -VMName "Web-test" -IPAddress "192.168.20.138"
}
なお、サービス名や仮想マシン名の最後に付いている"-test"はテストフェールオーバ時に自動的に付加されるものです。本番フェールオーバー用のメインRunBookには別のサービス名や仮想マシン名を入れてあげます。
Azure Site Recoveryに組み込み
Azure Site Recoveryの復旧計画を設定することでフェールオーバー時のアクションの順番を定義することができます。例えばADの起動後に上記のAzure Automationで定義したスクリプトを実行する場合などは以下のように定義できます。
実行後にフェールオーバージョブを確認すると復旧計画のアクションレベルで進捗が確認できます。

実際にスクリプトで設定した通りに内部IPアドレスが設定されているのがわかります。

使ってみての所感
- かなり多くのことが自動化できる
手元のPowerShellモジュールをAzure Automationにインポートすることなども可能なので、かなり多くのことが自動化できます。
ただし、.Netを直接呼び出す処理をPowerShellから書くとエラーが出て使えないようです。
- 同じコマンドレットも少し違う挙動に
例えば固定IPをAzure仮想マシンに割り当てるSet-AzureStaticVNetIPのコマンドレットはPCや手元のサーバで実行した時と動きが違いました。
普通はこちらで動くはず。
$vm = Get-AzureVM -ServiceName $ServiceName -Name $VMName Set-AzureStaticVNetIP -VM $vm -IPAddress $IPAddress
動かなかったのでエラー内容とデバッグ内容からVMプロパティを利用するよう修正。
$vm = (Get-AzureVM -ServiceName $ServiceName -Name $VMName).VM Set-AzureStaticVNetIP -VM $vm -IPAddress $IPAddress
- デバッグが大変
このように手元と動きが異なる場合など、Azure Automation側でデバッグが必要なのですが、スクリプトを保存してからテスト実行するまでに毎回1分近くかかるので、かなり大変でした。
参考リンク
- Azure Automationのページ
http://azure.microsoft.com/ja-jp/services/automation/
- Azure AutomationでHello World
http://azure.microsoft.com/ja-jp/documentation/articles/automation-create-runbook-from-samples/
- 開発チーム作成のサンプルPowerShellスクリプト
Powershell, VB Script, SQL and JavaScript - TechNet IT Pro's and Scripting Guys
- Azureへの固定IP設定(このブログの記事)
Azureの仮想マシンに固定IPを割り当てることができるようになったようです - YOMON8.NET
- Azure Site Recovery(このブログの記事)
Azure Site RecoveryでオンプレミスからAzureに仮想マシンをレプリケーションしてみる - YOMON8.NET


