仮想マシンにおけるプロビジョニングの失敗エラーについて
皆さんこんにちは、Azureサポートチームの平原です。よくお客様からお問い合わせのある内容として、「プロビジョニングの失敗」エラーについてご案内します。比較的、多くある設定に起因するものですので、少しでもご参考になれば幸いです。
※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。
プロビジョニングとは
まず、話を先に進める前に、「プロビジョニング」について説明します。あるイメージを用意して、そのイメージから仮想マシンを作成する際に、Azure 仮想化基盤では、通常以下のような挙動にて仮想マシンを有効化します。ちなみに、今回の場合は、固有情報の削除された一般化イメージ (sysprep されたイメージ) の場合を想定しています。
- 仮想マシンの配置が行われるブレードサーバーが、仮想マシン作成の命令を受け取ります。
- 仮想マシン作成対象のイメージをブレードサーバーにダウンロードします。
- ブレードサーバー上でイメージから、仮想化環境 (Hyper-Visor) 上に仮想マシンを作成します。
- OS が立ち上がります。(仮想ネットワークに参加し、Azure 側から IP 割り当てします)
- OS が立ち上がった際に、仮想マシン作成時に設定した構成を用いてOSを構成します。(マシン名などが更新されます)
- OSが一通り立ち上がった後で、診断機能などの拡張機能をインストールし、有効化します。
ここで「プロビジョニング」とは、OS作成後の 5 番 ~ 6番の処理を指します。プロビジョニングに失敗している場合には、ここのいづれかの処理で失敗をしています。
プロビジョニングの失敗
プロビジョニングの失敗の場合、症状としては、以下のような挙動が見受けられます。
- 「OSは立ち上がっているように見受けられる、、、が、いつまでも更新が終わらない 」
- 「更新が数十分かかったにも関わらず、最終的にタイムアウトが発生して失敗した」
- 「ステータスが失敗 (Failed) になっているにもかかわらず、リモートで接続ができる(場合がある)」
次は、どういった例があるが紹介をしていこうと思います。
よくある原因
#1 : 一般化されていないイメージを一般化イメージとして起動した
一般化されたイメージとして起動する場合、Windows の場合には sysprep を事前にしておく必要があり、Linux の場合には、 waagent –deprovision の処理をしておく必要があります。これを忘れた場合、上記「プロビジョニングとは」で記載した、5 番の処理で滞りが生じ、OS の固有情報の割り当てに失敗してしまい、プロビジョニングに失敗します。一般化されたイメージを使う場合には、必ず事前に固有情報を削除する処理を実施ください。
#2 : ファイアウォール設定がされて外部と接続できない
こちらは Linux 環境でお使いの際に、よくお問い合わせがある内容ですが、Linux で iptables でファイアウォールを構築した状態で、イメージを作成し、Azure に上げた際にインターネット接続ができず、プロビジョニングに失敗することがあります。Linux でイメージを作成の際には、iptables を一時的にオフにしておいてください。
#3 : 仮想ネットワーク・ネットワークインターフェースカードに存在しない DNS サーバーが設定されている
こちらは、よく検証環境をお使いの際にある間違いですが、テスト用に存在しない DNS サーバーをネットワークに設定されている場合があります。この場合、5 番までは処理は進むものの、6番の拡張機能の有効化の際に、問題が発生します。通常、ポータルなどから仮想マシン作成の際には、「診断」拡張機能が有効化されています。仮想マシンは、診断機能を有効化する際に、外部インターネットの接続ポイントから、zip 形式の診断用パッケージをダウンロードして、仮想マシン内部で有効化を行います。しかし、DNSサーバーが無効な場合、診断用パッケージの存在する URL のサーバー名を名前解決できないため、診断機能の有効化に失敗します。仮想マシンは、間隔をあけ何度かトライをしようとしますが、結果的に有効化できないため、最終的にプロビジョニングのタイムアウトし、プロビジョニング失敗として記録されます。この時、OS自体はきちんと有効化されているので接続自体はできます。対処方法としては、DNSサーバーをAzureの既定のものに変えていただくか、有効なDNSサーバーをお使いいただく方法になります。
失敗した仮想マシンは削除する必要はありません。有効な DNS サーバーを設定した後で、[拡張機能] の項目から、診断パッケージを一旦削除していただいた後に、再度診断機能を有効化することで、ご利用をいただけます。またこちらの項目は、「診断」拡張機能以外の拡張機能でも同じ事象が発生します。
#4 : インターネットに接続できない状況で診断を有効化した
構築環境の要件などで、インターネットに接続しないようにネットワークの制限をかける必要がある場合に、#3 と同じ状況が発生します。「プロビジョニングとは」の6番の拡張機能の有効化の際に、拡張機能のパッケージがダウンロードできず、結果として、プロビジョニングのタイムアウトが発生し、プロビジョニングに失敗します。どうしても、インターネットに接続できない要件の場合には、仮想マシン作成の際には「診断」機能を無効化しておいてください。「診断」機能は、ストレージサービスにパフォーマンスログやイベントログなどの情報を転送しますが、インターネット接続ができないと、いずれにしろご利用はいただけません。そのため、もし当該仮想マシンを監視されたいなどのご要望がある場合には、「診断」機能とは別の監視ソリューションをご利用いただく必要があります。
#5 : VPN / ExpressRoute でインターネットに接続できないオンプレミス環境へ強制トンネリングをしている
こちらはかなり複雑な状況ですが、Azureの環境とオンプレミスを VPN 通信などで結び、オンプレミス環境のインターネット接続が制限されており、強制トンネリングされている場合も、上記 #3 および #4 と同じ状況は発生します。この場合も、例えば拡張機能を有効化した際には、拡張機能パッケージをインターネットからダウンロードできないため、プロビジョニングタイムアウトが発生し、結果的にプロビジョニングエラーが発生します。よくある場合として、仮想マシン作成と同時に診断機能を有効化する際に事象が起きるので、仮想マシン作成の際に、診断機能を無効化 (その他の拡張機能も無効化) していただければ、プロビジョニングエラーは避けられます。#4 で記載した通り、「診断」機能を使った監視はできないため、何らかの別の監視ソリューションをご利用いただく必要があります。要件が許せば、オンプレミス経由で構わないのであれば、仮想マシン側にオンプレミスのファイアウォールの設定等をしていただき、インターネットに接続できるようする方法も考えられます。