ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Automation で Virtual Machines の起動と停止を自動化する

Azure Automation は、PowerShell ベースの Runbook を実行することで、Azure 環境の作成や展開を自動化することができます。Azure Virtual Machines の起動と停止をスケジュールで自動化するシナリオを試してみました。こちらのブログを参考にしましたので、内容はほとんど同じです。

clemmblog.azurewebsites.net

Azure に認証する証明書を登録する

Azure PowerShell を使うので、認証の準備として証明書が必要です。自己署名の証明書でも大丈夫なので、makecert コマンドで作成します。

#makecert
makecert -r -pe -n CN=azure-test -sky exchange azure-test.cer -sv azure-test.pvk
pvk2pfx -pvk azure-test.pvk -spc azure-test.cer -pfx azure-test.pfx -pi password

上記のコマンドで作成された証明書(azure-test.cer)は、管理ポータルから管理用証明書としてアップロードしておきます。

Automation Account の作成

管理ポータルから、Automation のアカウントを作成します。今はまだプレビュー版なので、選択可能なデータセンターは East US のみです。

auto01

Assets の作成

Runbook で Azure PowerShell を使うため、認証周りの情報を Assets に登録します。Assets には、いくつか種類がありますが、CREDENTIAL を選択して、証明書(azure-test.pfx)をアップロードします。Credential Type で「Certificate」を選択し、「azure-cert」という名前で登録します。

auto02

auto03

次に、VARIABLE を選択して、認証に必要な情報を登録します。

  • CertificateName:azure-cert
  • SubscriptionID:サブスクリプションID
  • SubscriptionName:サブスクリプション名

Variable Type で「String」を選択し、NAME と VALUE を登録します。

auto04

auto05

Runbook の作成

Azure Virtual Machines を起動する Runbook は、次のようなスクリプトファイル(.ps1)を作成します。

#Runbook
workflow AzureVM-Start
{
    Param (
        [parameter(Mandatory=$true)]
        [String] $VMName,
        [parameter(Mandatory=$true)]
        [String] $ServiceName
        )
 
    $subscriptionName = Get-AutomationVariable -Name "SubscriptionName"
    $subscriptionID = Get-AutomationVariable -Name "SubscriptionID"
    $certificateName = Get-AutomationVariable -Name "CertificateName"
    $certificate = Get-AutomationCertificate -Name $certificateName
 
    Set-AzureSubscription -SubscriptionName $subscriptionName -SubscriptionId $subscriptionID -Certificate $certificate
    Select-AzureSubscription $subscriptionName
 
    Start-AzureVM -Name $VMName -ServiceName $ServiceName
}

Azure Virtual Machines を停止する Runbook は、コマンドの「Start-AzureVM」が「Stop-AzureVM」に変わるだけです。

#Runbook
Stop-AzureVM -Name $VMName -ServiceName $ServiceName -Force

上記の2つのスクリプトファイルをインポートしたら、Author タブから Publish しておきます。

Schedule の作成

今回は、毎日AM9:00に起動し、PM17:00に停止するスケジュールを自動化します。Azure Virtual Machines を起動する Runbook に、スケジュールを登録します。

auto06

PowerShell の Start-AzureVM コマンドの引数に必要な ServiceName と VMName を指定します。

auto07

Azure Virtual Machines を停止する Runbook にも、同様にスケジュールを登録します。

結果確認

Runbook の Job を確認すると、スケジュール通りに Azure Virtual Machines を起動できたことが分かります。

auto08

まとめ

今はまだプレビュー版なので、Azure のモジュールしかありませんが、オンプレミスの System Center の Orchestrator のようにモジュールが増えれば、カバーできるシナリオの幅が広がりそうです。運用に限らず、テストや動作確認でもクラウド環境の作成や展開を自動化していくうえで、Azure Automation は活用できそうなサービスです。