Windows Azure の Linux 仮想マシンにおけるスワップ領域 – パート 2
このポストは、8 月 9 日に投稿された SWAP space in Linux VM’s on Windows Azure – Part 2 の翻訳です。
この記事は Azure CAT チームの Piyush Ranjan (MSFT) が担当しました。
前の記事「既成の Linux イメージを実行する Windows Azure 仮想マシンのスワップ領域 - パート 1」で説明したように、Azure IaaS でギャラリー イメージからプロビジョニングされる Linux 仮想マシンには、既定ではスワップ領域が構成されません。そこで前の記事では、リソース ディスク (/mnt/resource) にファイル ベースのスワップ領域を構成するための簡単な手順を紹介しました。ただ注意してほしいのは、その手順は、既にプロビジョニングされ、実行中の仮想マシンに対するものだという点です。それよりも、仮想マシンのプロビジョニングと同時に、スワップ領域が自動的に構成されれば理想的であり、後の段階で大量のコマンドを手動で実行する労力が省けます。
仮想マシンのプロビジョニング段階で自動的にスワップ領域を構成するうえで決め手となるのは、Windows Azure Linux エージェント (waagent) の使用です。大部分のユーザーは、Linux 仮想マシンの内部でエージェントが動作していることを漠然とは知っていても、よくわからないため放置している場合がほとんどです。実は、waagent に関する優れたドキュメントが Azure ポータルに用意されています。Windows Azure Linux エージェント ユーザー ガイドを参照してください。後ほど waagent について詳しく説明し、waagent を使って前述の問題を解決する方法を紹介しますが、その前に、もう 1 つ知っておくべきポイントがあります。それは、ユーザーが Linux 仮想マシンをカスタマイズし、今後プロビジョニングする際に再利用できるイメージとして、その Linux 仮想マシンをエクスポートする必要があるという点です。Azure ギャラリーにある未加工の Linux ベース イメージをそのまま使用する場合、waagent の機能を利用することはできません。これは実際のところ、制約ではありません。最も便利なユース ケース シナリオは、ギャラリー イメージを使ってプロビジョニングされた仮想マシンからスタートし、その後、自分が希望するコンポーネントを使ってカスタマイズする方法である、と考えるからです。たとえば、OpenJDK Java の代わりに標準の Java (英語) を使用することができます。あるいは、仮想マシンに Hadoop バイナリをインストールし、後でイメージを使用してマルチノード クラスターを作ってもいいでしょう。このようなシナリオでは、プロビジョニング プロセス中に自動的に実行したい追加的な処理を waagent で実行できるようにするほうが非常に簡単です。
Windows Azure Linux エージェント ユーザー ガイドで説明されているように、エージェントでさまざまな処理を実行するよう構成できます。たとえば次のような処理です。
- リソース ディスクの管理
- リソース ディスクのフォーマットとマウント
- スワップ領域の構成
ギャラリー イメージからプロビジョニングされる仮想マシンには waagent が既にインストールされているので、必要なのは "/etc/waagent.conf" にある構成ファイルの編集だけです。この構成ファイルは、次のようになっています。
構成ファイルで、上の図に示す 2 行を変更して次のように設定し、スワップを有効にします。
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=5120
したがってプロセス全体をまとめると、次のようになります。
IaaS で通常どおり、いずれかのギャラリー イメージを使用して Linux 仮想マシンをプロビジョニングする。
ユーザーの好みに応じてソフトウェア コンポーネントのインストールや削除を行い、その仮想マシンをカスタマイズする。
"/etc/waagent.conf" ファイルを編集して、スワップ関連の行を設定する (上記参照)。スワップ ファイルのサイズを調整する (上記の例では 5 GB に設定)。
こちらで説明されている手順で、仮想マシンの再利用可能なイメージをキャプチャする。
エクスポートしたイメージを使用して、新しい Linux 仮想マシンをプロビジョニングする。これらの仮想マシンでは、自動的にスワップ領域が有効に設定されている。
以上は Windows Azure Linux エージェントに関する説明でしたが、waagent にはその他にも、興味深い機能があります。同じ構成ファイル "/etc/waagent.conf" に含まれている Role.StateConsumer プロパティを使用して、ユーザーが指定する任意のスクリプトを実行することができるのです。たとえば、次のようなシェル スクリプト "do-cfg.sh" を作成します。
次に、構成ファイル内で Role.StateConsumer=/home/scripts/do-cfg.sh など、このスクリプトのパスを設定します。waagent は、仮想マシンのプロビジョニングの際、Azure ファブリックに "Ready" シグナルを送信する直前に、このスクリプトを実行し、カスタム スクリプトにコマンド ライン引数 "Ready" を渡します。スクリプトでは、上の例のようにこの引数を確認し、何らかのカスタムな初期化を実行します。同様に、仮想マシンのシャットダウン時にも、waagent は同じスクリプトを実行し、コマンド ライン引数 "Shutdown" をスクリプトに渡します。それにより、この引数を確認したうえで、仮想マシン上で何らかのカスタムなクリーンアップ タスクを実行することができます。