新しくなった Windows Azure では、Virtual Machines (VMs) の機能が追加されており、IaaS の基盤として使用できるようになっています。
Virtual machines については Windows virtual machines にまとめられています。
デフォルトでイメージがいくつか用意されており、その中から使用するイメージを選択する他に、オンプレミスの Hyper-V の環境で作成した VHD をアップロードして Azure 上で起動することも可能になっています。
今回の投稿ではカスタマイズした VHD を Azure 上にで使用するための基本的な流れを見ていきたいと思います。
■VHD の準備
基本的な流れは Creating and Uploading a Virtual Hard Disk that Contains the Windows Server Operating System を見るのが良いと思います。
Hyper-V 上のゲスト OS として OS のインストールを行います。
VM Role の場合はインスタンスのサイズに応じた VHD を作成する必要がありましたが現状の VMs では VHD のサイズはインスタンスのサイズとは関係がないようです。
40GB の VHD を使用して XS のインスタンスを起動するといったことも可能です。
現状サポートされているのは、Windows Server 2008 R2 SP1 の英語版と Windows Server 2012 RC の英語版の全エディションになるようですね。
# 日本語版の Windows Server 2008 R2 はも起動しようと思えば起動できます。
ゲスト OS のインストールをしたら一般化した Sysprep を実行してシャットダウンを行います。
VM Role を展開する場合は、VM Role 用の統合コンポーネントをインストールする必要がありますが、VMs の場合は Azure 上で実行するための特別なモジュールをインストールする必要はありません。
ちなみに Sysprep 前に手動でリモートデスクトップを有効にしておかないと RDP で接続ができなくなって起動した際に少し悲しいことになりますので注意が必要です。
# 正確には VHD をアップロードする前までにですが。
■ストレージアカウントの準備
VHD は Azure ストレージ上にアップロードするため、アップロード先のストレージアカウントを準備します。
以前から使用しているストレージアカウントを使用して VHD をアップロードしようとしたところ、[does not support durable VMs] となってしまいアップロードすることができませんでした。
新規にストレージアカウントを作ったところアップロードできました。
新規に作ったものと新しく作ったものではパッと見の設定は同じだったのですが何がいけなかったのでしょう??
コンテナのセキュリティはどちらも Private となっており、権限周りも変わらなさそうだったのですが。
■VHD のアップロード
アップロード先となるストレージアカウントが準備出来たら作成した VHD のアップロードを行います。
VHD のアップロードは VM Role の時と同様に CSUpload を使用します。
VMs のアップロードに対応した CSUpload はこちらから ダウンロードすることができます。
# Azure SDK からではないようですね。 (どちらから入れたかど忘れしました…)
コマンドの説明については CSUpload Command-Line Tool に記載されています。
CSUpload の Add-PersistentVMImage を使用することで VHD をアップロードすることができます。
# [Windows Azure] → [Windows Azure SDK for .NET] → [June 2012] → [Windows Azure Command Prompt] から CSUpload を実行することができます。
Creating and Uploading a Virtual Hard Disk that Contains the Windows Server Operating System のコマンド例を見ると、[ServiceManagementEndpoint] が [https://management-preview.core.windows-int.net] となっていますが、私の環境ではこの URL では、[The subscription ID was not found.] となってしまいアップロードすることができませんでした。
調べてみたところ MSDN フォーラムの The subscription ID was not found with csupload 1.7 で情報がありました。
このエラーになった場合、[ServiceManagementEndpoint] を [https://management.core.windows.net] にすることで回避ができました。
# CSUpload Command-Line Tool だとこちらの URL になっているので、こちらが正しいのかもですね。
実際のコマンドとしては以下のような形式になります。
set _CSVERBOSE=1 csupload Set-Connection "SubscriptionId=<サブスクリプション ID>; CertificateThumbprint=<管理証明書拇印>; ServiceManagementEndpoint=https://management.core.windows.net" csupload Add-PersistentVMImage -Destination "http://<BLOB ストレージの URL>/vhds/2008R2.vhd" -Label "Windows Server 2008 R2 SP1" -LiteralPath "E:2008R2.vhd" -OS Windows |
[set _CSVERBOSE=1] は詳細なメッセージを表示するために設定をしているので省略しても問題はありません。
アップロードが終了すると、VMs の IMAGES にイメージが追加されます。
# 追加されていなかった場合は、CREATE IMAGE から BLOB にアップロードされている VHD を選択できます。
後はVM を作成する際に [FROM GALLERY] を選択して、[ALL] または [MY IMAGES] からアップロードした VHD を選択して仮想マシンを作成します。
後は、作成した VM を起動すれば完了です。
VMs では VHD を展開する際にカスタマイズされた応答ファイルを使用して起動がされているようです。
使用されている応答ファイルに関しては、[C:WindowsPantherunattend.xml] で確認をすることができます。
Azure 側で用意された応答ファイルを使用して無応答セットアップを実現しているようですね。
OS のライセンス認証に関しては KMS が使用されるようです。
Azure の Virtual Machines はオンプレミスのイメージがそのまま使えるのでいろいろな用途に利用できそうですね。