再起動を伴う仮想マシン メンテナンスへの新しいエクスペリエンス

※ 本記事は、"A new Planned Maintenance experience for your virtual machines" の翻訳、ならびに、補足解説を行う内容となります。

 

Azure 仮想マシンの再起動を伴うメンテナンスについて、新機能をご紹介します。

Azure においては信頼性・パフォーマンス・セキュリティの向上のためメンテナンスを行っております。多くの更新は、VM の再起動を行わず、一時停止状態にして行われますが、一部のメンテナンス内容によって再起動が必要となります。

 

新しい機能は以下の通りです。

 

"より良い通知" : メンテナンス通知が Azure Monitor に統合され、好きなメール アドレスで受け取ることができる

Azure VM の再起動を伴うメンテナンスは、従来の「共同管理者・サービス管理者」向けの通知に加え、Azure Monitor という機能によって行われます。「共同管理者」という全権限ではなく、Azure リソース マネージャーとなってより細かいアクセス制御をするという管理方式にも対応するものとなります。

※ メンテナンスの時期についての公式な通知・説明は、Azure Monitor から一元的に行われます。

Azure Monitor を使ってメンテナンス通知を受け取る https://blogs.technet.microsoft.com/jpaztech/2017/09/15/maintenance_notification/

 

"さらなる制御" : お客様自身で、好きなタイミングに VM をメンテナンス再起動させ、先行してメンテナンス完了させる機能

メンテナンスの通知が行われる中で、指定された一部の期間において、お客様の任意のタイミングで VM を再起動し、メンテナンスを先行して完了させることが選択肢として登場します。セルフサービス (プロアクティブ) メンテナンスと呼び、VM のダウンタイムがコントロール出来る点がメリットです。
(※ 詳細は [フェーズ 2: Azure Monitor からのメンテナンス通知 - セルフサービス期間] の項にて記載いたします。一部のリージョン・一部のサイズにおいては当オプションが利用できない可能性がありますため、詳細説明のポータルの VM ブレードにて利用可否をご確認ください。)

 

"可視性の向上" : メンテナンスの状況をより詳しく知ることができる機能

メンテナンスの期間は、Azure ポータルの [Virtual Machines] ブレードや、ポータルのサービス正常性画面で確認が出来るようになります。また、補足的な機能として、Instance Metadata Service によって、VM の内部からアプリケーションは VM のシャットダウンを知ることが可能となりました。特殊な実装は必要となりますが、猶予時間内に適切な処理を行うことができます。

 

上記新機能を交えた考慮点について実例を交えてご紹介します。

 

以下がタイムラインとなります。

"メンテナンス突入前(平常時)"、"セルフサービス期間"、"予定メンテナンス期間" の 3 フェーズに分けて、お客様が何を検討すべきなのかについて、ご説明します。

 

 

 

 

 [フェーズ 1: メンテナンス期間前(平常時)]

この期間は、Azure Monitor からのメンテナンス通知が行われていない期間、つまり平常時です。この期間にお客様にてご検討・実施いただきたい内容は以下の通りです。

・Azure Monitor にて、メンテナンス通知を受け取れるよう、確実に設定をしてください。

 

Azure Monitor を使ってメンテナンス通知を受け取る
https://blogs.technet.microsoft.com/jpaztech/2017/09/15/maintenance_notification/

・セルフサービス期間、予定メンテナンス期間の特性をそれぞれ理解します。まだこの時点では実施できませんので、方針検討を行ってください。

<セルフサービス期間の特徴>  Azure Monitor に記載のセルフサービス (プロアクティブ) メンテナンスの期間、お客様の任意のタイミングで VM を再起動し、メンテナンスを完了していただける機能です。この機能で再起動完了をした VM は、後続の予定メンテナンス期間で再起動されることはありません。
可用性セットの有無によらず、VM 単位でメンテナンスを完了していただけます。補足となりますが、VM の一時ディスクはクリアーされ、中のデータは消滅します。

※ ただし、日常的に停止 (割り当て解除) するような運用をしている場合にはセルフサービスのメンテナンスは利用できません。セルフサービス期間中にセルフサービスでメンテナンスし、その後、VM を停止・開始すると、メンテナンス未完了状態となる場合があります。このような場合、予定メンテナンス期間の再起動を抑止するのであれば、メンテナンス期間中は VM を起動したままとする必要があります。詳しくは末尾 FAQ もご参照下さい。

 

<予定メンテナンス期間の特徴>  セルフサービス期間が終わった後、Azure 基盤側からメンテナンス未実施の VM 再起動を伴うメンテナンスを行います。可用性セットの更新ドメインが考慮されるため、同時に可用性セット内の VM が再起動されることはありません。Azure 上で可用性セットが構成され、お客様のサービスが冗長化されている場合、こちらに任せてしまえばよい、ということになります。補足的に、VM の一時ディスクはこのメンテナンスでは保持されます。(ただし、元来、一般論としては一時ディスク内のデータは失われるリスクがありますので、それを目的としてこちらを選択するということはやめたほうがよいでしょう。)
予定メンテナンス期間、お客様の VM がいつ再起動が行われるかについては通知が無く、わかりません。このため、運用部門が不在の夜間・週末や、ユーザー利用がされている日中に再起動されるという可能性もあります。再起動により何かしらシステムに影響が出ないかの確認も含め、リスクをコントロールしたい場合、セルフサービス期間にてメンテナンスを完了してください。

・セルフサービス期間で自主的に再起動を行う場合、VM ごとのサービス構成を踏まえ、どのようなフローで動作確認を行うかについて確立しておいてください。例えば、Web サーバーのアプリケーションが VM 再起動後に開始し、外部から接続ができるようになること。SQL Server フェールオーバー クラスターのフェールオーバー・正常動作を確認しながら、順次 VM の再起動を行うこと等が挙げられます。これら、自社サービスの構成を踏まえて、VM を再起動するにあたっての影響や正常動作の確認ステップを事前に固めていただくことが、現段階で行えることです。

 

セルフサービス期間、予定メンテナンス期間についてそれぞれの環境を踏まえ、混乱が生じないように方針を立てていただくことが重要です。

 

[フェーズ 2: Azure Monitor からのメンテナンス通知 - セルフサービス期間]

Azure Monitor からメンテナンスの期日がアナウンスされ、いよいよ、セルフサービス期間 (プロアクティブ期間) に入ります。セルフサービス期間、お客様は、任意で、VM のメンテナンス再起動を実施いただくことが可能です。この期間でメンテナンス再起動していない VM は、その後のフェーズ 3: 予定メンテナンス期間にて強制再起動が行われます。

・Azure Monitor にて通知メールが届き、セルフサービス期間の開始から最終期限も把握いただけることになります。
・ポータルの Virtual Machines ブレードでは、[メンテナンス] 列にて、メンテナンスが行える旨が確認できます。
・また、Virtual Machine ブレードから VM 名を選択し、メニュー下の [再デプロイ] から、セルフサービスで先行して VM 再起動が行えます。
・リージョンの状況によっては一部の VM において当オプションが利用できない場合もございます。後述の Virtual Machine ブレードより、セルフサービスのメンテナンスが行える環境であるかご確認下さい。

※ この期間では、弊社から VM の強制再起動をすることはありません。

セルフサービスのメンテナンスの具体的な手順は以下となります。セルフサービスにて VM のメンテナンス再起動を完了させ、その際の動作確認を行う、ということがこの期間中のタスクとなります。
新しく、Virtual Machines ブレードの右端に [メンテナンス] という列が加えられています。メンテナンス列は、メンテナンス期間以外では空白ですが、近日にメンテナンスが予定されている仮想マシンには [今すぐ開始] という表記がされます。

※ さらに、画面上の [列] UI から、"メンテナンス - プロアクティブ ウィンドウ" と "メンテナンス - 自動スケジュールされたウィンドウ" という列を追加すると、VM ごとにセルフサービス期間、予定メンテナンス期間についても表示できます。

 

このように、[メンテナンス] 列が空白ではない VM では、[再デプロイ] メニューから期日が確認できます。(テスト用の画面のため、日程はサンプルとお考え下さい。)

 

注意: 通常の仮想マシンの [再起動] ボタンや、[停止] からの [開始] ではセルフサービスのメンテナンスは行われません。

 

[メンテナンスを開始する] ボタンを押し、再起動を行うと以下のように通知が行われ、しばらく待つと完了します。

メンテナンスが完了すると、[Virtual Machines] ブレード上の [メンテナンス] 列にも"完了" の表記となります。

 

また、補足となりますが、アクティビティ ログにもメンテナンスが行われた旨が残ります。

※ ポータルではなく、Azure PowerShell でメンテナンス実施をしたい場合、後述の FAQ コーナーにてご説明していますので、お役立てください。

[フェーズ 3: 予定メンテナンス期間 (強制再起動期間)]

セルフサービス期間中にメンテナンスを行っていない VM については、当該期間に突入後、予告無しで再起動が行われます。どの VM がいつ再起動されるのか、具体的な再起動の日時は把握できませんが、可用性セット内の VM が同時にダウンしないよう、更新ドメインを考慮して順番に行われます。可用性セットが機能するサービス構成となっているお客様は、この期間まで何もせずとも、自社サービス稼働に影響無くメンテナンスが終えられる仕組みです。なお、VM の内部からは、自分のシャットダウン タイミングが把握できるサービスもプレビューされています。以下のサンプルをご一読いただき、お役立て下さい。

自分の VM に何が起きるか把握する Instance Metadata Service のご紹介
https://blogs.technet.microsoft.com/jpaztech/2017/10/04/instance-metadata-service/

 

以上が、今回用意された新機能を踏まえたメンテナンスの流れとなります。
末尾 Q&A コーナーもご参照ください。

 

[参考資料]

Azure での仮想マシンに対する計画的なメンテナンス (Windows)
/ja-jp/azure/virtual-machines/windows/maintenance-and-updates

Azure での仮想マシンに対する計画的なメンテナンス (Linux)
/ja-jp/azure/virtual-machines/linux/maintenance-and-updates

新規で追加された機能を含む、計画メンテナンスについての公開技術情報です (英文)
A new Planned Maintenance experience for your virtual machines
https://azure.microsoft.com/en-us/blog/a-new-planned-maintenance-experience-for-your-virtual-machines/

 

以下技術情報に、メンテナンス対応マシンを Azure PowerShell でクエリする方法、ならびに、Azure PowerShell からメンテナンスを実行する方法について紹介されています。ただし、メンテナンス対応マシンは、「セルフサービス期間」に入ってから分かるようになりますので、ご注意ください。

Windows 仮想マシンに対する計画済みメンテナンスの通知の処理
/ja-jp/azure/virtual-machines/windows/maintenance-notifications

 

Azure CLI によるセルフサービスのメンテナンスは、以下がサンプルになります。

CLI を使用して VM に対するメンテナンスを開始する
/ja-jp/azure/virtual-machines/linux/maintenance-notifications#start-maintenance-on-your-vm-using-cli

Q&A

Q. クラシック デプロイメントの VM はメンテナンス対象か
はい、クラシック デプロイメント モデルの VM もメンテナンス対象となります。クラシック VM の場合も、Azure Portal からの [Virtual Machines] ブレードの [メンテナンス] 列でメンテナンスの必要有無の確認が行えます。また、同じく [再デプロイ] メニューからセルフサービスのメンテナンスを行う方法は同じです。

Q. クラシック デプロイメントの VM に Azure PowerShell からメンテナンスを行う方法

前述の技術情報にて記載のコマンドは Azure リソース マネージャー (ARM) モデルでのコマンドとなります。クラシック デプロイメント モデルの VM への Azure PowerShell でのセルフサービス メンテナンスの実施方法は上記参考資料に含まれておりませんので、以下にご紹介します。

 

 クラシック デプロイメント モデルの VM 用

<1. メンテナンス情報の参照>

Get-AzureVM -ServiceName <クラウドサービス名> -Name <VM名>

 

<サンプルのアウトプット>

※ 以下のような出力結果が表示されます。(セルフサービス メンテナンス期間に限られます。それ以前はメンテナンスに関連した情報は取得されません。)

data:    MaintenanceStatus IsCustomerInitiatedMaintenanceAllowed true
data:    MaintenanceStatus PreMaintenanceWindowStartTime 2017-07-12T05:00:00.000Z
data:    MaintenanceStatus PreMaintenanceWindowEndTime 2017-07-25T05:00:00.000Z
data:    MaintenanceStatus MaintenanceWindowStartTime 2017-08-02T05:00:00.000Z
data:    MaintenanceStatus MaintenanceWindowEndTime 2017-08-04T05:00:00.000Z

 

<2. セルフサービスでのメンテナンス実行>

Restart-AzureVM -InitiateMaintenance -ServiceName <クラウドサービス名> -Name <VM名>  

 

 

Q. セルフサービスのメンテナンス期間中に新規作成した VM や、停止状態から稼働した VM はメンテナンス対象となるか

メンテナンス象となる可能性がございます。
VM を開始した後、[Virtual Machines] ブレードをご参照いただき、[メンテナンス] 列から、メンテナンス対象と出ている場合にはセルフサービスでのメンテナンスを実行していただくことをお願いします。

 

Q. 一度セルフサービスでメンテナンスを完了した VM は、停止・割り当て解除した状態からも引き続きメンテナンス済みの状態が保持されるか?

保持されません。メンテナンスをセルフサービスで完了した後も、一度 停止 (割り当て解除) としてしまうと、次に開始した時にメンテナンス未実施の状態となる可能性があります。セルフサービスのメンテナンスは、あくまでも、起動状態であり続ける VM について、「予定メンテナンス期間 (強制再起動期間)」に再起動を避けられるというものとなります。

このことから、お客様の VM が夜間・週末など、定期的に停止・開始をしている場合にはセルフサービスのメンテナンスは有効ではありません。予定メンテナンス期間にて、強制再起動の対象となる可能性を無くしたい場合、セルフサービスのメンテナンスを実施後、VM を停止させず、予定メンテナンス期間の終了まで VM を起動しておく必要があります。

 

Q. メンテナンスの状況を PowerShell で一覧で形式で取得したい。  ※2017 年 12 月 28 日追記

リソース マネージャー モデル、クラシック モデルそれぞれで、以下の PowerShell スクリプトをご利用いただけます。あらかじめ、サインインとサブスクリプションの選択を行った状態で実行ください。

 # リソース マネージャー モデル
$array = @()
Get-AzureRmVM -Status | %{
  $obj = New-Object PSobject -property @{
    NAME = $_.Name;
    POWERSTATE = $_.PowerState;
    IsCustomerInitiatedMaintenanceAllowed  = $_.MaintenanceRedeployStatus.IsCustomerInitiatedMaintenanceAllowed;
    PreMaintenanceWindowStartTime = $_.MaintenanceRedeployStatus.PreMaintenanceWindowStartTime;
    PreMaintenanceWindowEndTime = $_.MaintenanceRedeployStatus.PreMaintenanceWindowEndTime;
    MaintenanceWindowStartTime = $_.MaintenanceRedeployStatus.MaintenanceWindowStartTime;
    MaintenanceWindowEndTime = $_.MaintenanceRedeployStatus.MaintenanceWindowEndTime;
    LastOperationResultCode = $_.MaintenanceRedeployStatus.LastOperationResultCode;
    LastOperationMessage = $_.MaintenanceRedeployStatus.LastOperationMessage;
  }
  $array += $obj
}
$array | Format-Table -Property `
  NAME, `
  POWERSTATE, `
  LastOperationResultCode, `
  LastOperationMessage, `
  PreMaintenanceWindowStartTime, `
  PreMaintenanceWindowEndTime, `
  IsCustomerInitiatedMaintenanceAllowed, `
  MaintenanceWindowStartTime, `
  MaintenanceWindowEndTime;
 # クラシック モデル
$array = @()
Get-AzureVM | %{
  $obj = New-Object PSobject -property @{
    NAME = $_.Name;
    INSTANCESTATUS = $_.InstanceStatus;
    IsCustomerInitiatedMaintenanceAllowed  = $_.MaintenanceStatus.IsCustomerInitiatedMaintenanceAllowed;
    PreMaintenanceWindowStartTime = $_.MaintenanceStatus.PreMaintenanceWindowStartTime;
    PreMaintenanceWindowEndTime = $_.MaintenanceStatus.PreMaintenanceWindowEndTime;
    MaintenanceWindowStartTime = $_.MaintenanceStatus.MaintenanceWindowStartTime;
    MaintenanceWindowEndTime = $_.MaintenanceStatus.MaintenanceWindowEndTime;
    LastOperationResultCode = $_.MaintenanceStatus.LastOperationResultCode;
    LastOperationMessage = $_.MaintenanceStatus.LastOperationMessage;
  }
  $array += $obj
}
$array | Format-Table -Property `
  NAME, `
  INSTANCESTATUS, `
  LastOperationResultCode, `
  LastOperationMessage, `
  PreMaintenanceWindowStartTime, `
  PreMaintenanceWindowEndTime, `
  IsCustomerInitiatedMaintenanceAllowed, `
  MaintenanceWindowStartTime, `
  MaintenanceWindowEndTime;

 


 

再起動を伴うメンテナンスがお客様のご負担を伴うものであるという事については、Azure チーム一同認識しております。今後も、お客様のご負担を極力緩和できるよう改善に努めます。フィードバックについては、以下 Web サイトから受付をしております。

 

Azure に関してのフィードバック サイト
https://feedback.azure.com/