Azure AutomationとAzure Site Recoveryを組み合わせて使ってみる

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には別のサービス名や仮想マシン名を入れてあげます。


この時点で二つの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分近くかかるので、かなり大変でした。