Microsoft Azure のカスタム データと Cloud-Init
このポストは、4 月 22 日に投稿された Custom Data and Cloud-Init on Microsoft Azure の翻訳です。
カスタムデータとは
プロビジョニング時における Microsoft Azure 仮想マシン (VM) へのスクリプトまたはその他のメタデータの挿入方法に関するお問い合わせが、お客様からたびたび寄せられています。この概念は他のクラウド サービスで「ユーザー データ」と呼ばれることも多いですが、Microsoft Azure には「カスタム データ」という同様の機能が備わっています。
カスタム データは、新しいホスト名、ユーザー名、パスワード、証明書、キーなどの他のプロビジョニング構成情報と共に VM に送信されます。このデータは Base64 でエンコードされたデータとして Azure API に渡されます。Windows では、このデータは最終的にバイナリ ファイルとして %SYSTEMDRIVE%\AzureData\CustomData.bin に保存されます。Linux では、このデータは ovf-env.xml ファイルを介して VM に渡されます。このファイルはプロビジョニング中に /var/lib/waagent ディレクトリにコピーされます。新しいバージョンの Microsoft Azure Linux Agent でも同様に、Base64 でエンコードされたデータが /var/lib/waagent/CustomData にコピーされるため便利です。
Cloud-Init について
現在では、cloud-init があらかじめインストールされ、プロビジョニング中に送信されるカスタム データに基づいて動作するように構成されているのは、Microsoft Azure ギャラリーの Ubuntu イメージのみです。つまり、Ubuntu では cloud-init 構成ファイルを使用する方法で、カスタム データを使用して VM をプロビジョニングできます。あるいは単純にプロビジョニング中に cloud-init で実行されるスクリプトを送信することもできます。詳細については、cloud-init のドキュメント (英語) をご覧ください。
cloud-init がイメージで利用できない場合でも、データを読み取ることができるスクリプトまたはその他のツールがシステムにあらかじめインストールされている場合に限り、カスタム データを使用できます。
この場合、起動時に実行されるようにスクリプトをインストールすることができます。 %SYSTEMDRIVE%\AzureData\CustomData.bin ファイル (Windows) または /var/lib/waagent/ovf-env.xml ファイル (Linux) をデコードして、そのファイルからカスタム データを読み取り、そのデータに基づいて動作するスクリプトをインストールします。スクリプトがインストールされた後で、Windows (英語) イメージまたは Linux (英語) イメージをプロビジョニング解除して取り込み、再利用することができます。
しくみについて
現在、IaaS VM にカスタム データを挿入する最も簡単な方法として、Windows Azure コマンドライン ツール (英語) を使用する方法があります。Microsoft Azure Powershell コマンドレットではまだこの機能はサポートされていませんが、将来のリリースで追加される予定です。
バージョン 0.7.5 の CLI ツールには、 --custom-data という新しいパラメーターがあります。このパラメーターには引数としてファイル名を指定します。すると、このツールによってファイルの内容が Base64 でエンコードされ、プロビジョニング構成情報と共に送信されます。この場合の唯一の制限は、ファイルのサイズを 64 KB 未満にする必要があることです。このサイズを超えると、Azure API で要求が受け入れられません。
次に、カスタム データをプロビジョニングして Ubuntu Linux VM に渡す簡単な例を示します。
この例では、custom-data.txt を cloud-init 構成ファイルにすることができます。単純にシェル スクリプトにしてもかまいません (#! で開始すると、cloud-init で実行されます)。ぜひお試しください。
参考資料