Azure VMのカスタム データを使ってデプロイと同時にLinuxの日本語化やパッケージインストール
Azure Portalを使ってAzure VM(仮想マシン)を作成する時詳細タブ内にカスタムデータと言う項目が表示されます。
何かと思って調べてみると、cloud-initを使って仮想マシン(Linux)デプロイ時に処理を実行させる事が出来る機能でした。
Azure 仮想マシンでのカスタム データと cloud-init
Azure での仮想マシンに対する cloud-init のサポート
Cent OS 8の仮想マシン作成時のカスタムデータを使ってタイムゾーン、ロケールの設定やパッケージのインストールを試してみました。
※Windowsの場合はファイル生成はされますが処理はされないそうです。処理されるようにするにはカスタムイメージの作成が必要だそうです。詳細はこちら。
cloud-initやカスタムデータとは
cloud-initとは
cloud-initとはLinuxで初回起動時に色々処理を行ってくれるLinux パッケージになります。
CLOUD-INIT の概要
cloud-init Documentation
具体的に言うと、初回作成時にパッケージのインストールやユーザー追加等、OS作成後に実施するような初期設定が出来ます。
元々はAWSのEC2のインスタンス用に開発されたそうですが、現在では幅広いLinuxディストリビューションで使う事が出来ますし、Azureの仮想マシンでも利用可能です。
cloud-config、Bashスクリプト、MIMEマルチパート形式と言った形式での設定が可能です。
マイクロソフト公式サイトでもcloud-initの解説がされております。
カスタムデータとは
カスタムデータは仮想マシン作成時にcloud-initの設定情報を渡す方法になります。
カスタムデータにcloud-initを記載しておくと仮想マシンデプロイ時に自動的に処理させる事が出来ます。
仮想マシン作成時の詳細タブの真ん中あたりに設定項目があります。
拡張機能にもカスタムスクリプトがあります
仮想マシンの拡張機能にもカスタムスクリプトと呼ばれるスクリプトを実行させる機能があります。
カスタムデータを使ってAzure VM(仮想マシン)デプロイ時にTimeZoneやLocaleを設定
cloud-initのサンプルやモジュールを探す
最初にcloud-initの公式サイトでサンプルやモジュールの解説を確認します。それぞれのモジュールの使い方が解説されています。
今回はCent OSでしたので、念のためRed Hatのサイトでサポートされているモジュールも併せて確認します。
RED HAT はこれらの CLOUD-INIT モジュールをサポートします
こちらのサイトを参考に設定してみます。今回は勉強も兼ねていますのでcloud-configを使っています。
TimeZoneやlocaleを日本に設定
サンプルを参考にTimeZoneとLocaleを日本に設定してみます。
仮想マシンデプロイ後にTimeZoneとLocaleを確認
仮想マシンデプロイ後にカスタムデータを設定した場合としていない場合を比較して確認してみます。
カスタムデータを使ってみた場合の結果 | ||
timedatectl statusとlocaleコマンドの抜粋で比較してみました。 カスタムデータを設定しない場合は、Time zone: Etc/UTC、LANG=en_US.UTF-8になっているのに対して、日本語対応用のカスタムデータを設定してデプロイした仮想マシンではTime zone: Asia/Tokyo 、LANG=ja_JP.utf8となっているのが確認出来ました。 |
カスタムデータを設定せずにCent OS8.4をデプロイ
|
|
カスタムデータを設定してCent OS8.4をデプロイ
|
cloud-initのModuleに記載があるModule frequencyとは何か?
cloud-initのモジュールを確認しているとModule frequencyと言う項目がありますが、これはいつ実行されるのかを表記しています。
Red Hatのサイトに解説がありますのでこちらを参考にLocaleの場合について確認してみます。
Localeの場合はonce-per-instanceと記載があります。これはモジュールがインスタンスの初回起動時に1回だけ実行されるという事になります。
カスタムデータを使ってAzure VM(仮想マシン)デプロイ時にパッケージのインストールから起動設定
パッケージインストールやアップデートのサンプルを探す
マイクロソフト公式サイトにパッケージの更新やインストールのサンプルがあります。
また、コマンドの実行についてはcloud-initのサイトにサンプルがあります。
こちらのサイトを参考に設定してみます。
パッケージのアップデート、httpdのインストールから起動設定
パッケージインストールのサンプルとしてhttpdを使って試してみます。
-
-
- 設定内容
- TimeZoneをAsia/Tokyoに変更(前回実施内容)
- localeをja_JP.utf8を変更(前回実施内容)
- パッケージアップデート
- httpdのインストール
- httpdの起動設定
- 設定内容
-
cloud-configのサンプル | ||
マイクロソフト公式サイトを参考に設定を進めます。 package_upgradeの項目がアップデートの設定になります。trueにするとアップデートを行います。 packages:の項目が追加するパッケージの設定になります。httpdと記載するとhttpdのパッケージが追加されます。 runcmdの項目で実行コマンドが設定出来ます。今回はhttpdの起動と自動起動設定のコマンドを記載しています。 ※アップデートをtrueにするとすべてのパッケージがアップデートされますのでcloud-init完了まで時間が掛かります。 |
|
|
![]() |
仮想マシンデプロイ後にhttpdのステータスやパッケージのアップデートを確認
仮想マシンデプロイ後にカスタムデータを設定した場合としていない場合を比較して確認してみます。
カスタムデータを使ってみた場合の結果 | ||
カスタムデータを設定していない場合はhttpdパッケージのインストールがされておらず、yum updateも実行されていない事が分かります。 一方でカスタムデータの設定した場合はhttpdのステータスが起動中(自動起動も有効)になっている事が分かります。またyumもアップデート済みの為、check-updateでパッケージリストが表示されていない事が分かります。 ※/var/log/cloud-init.logにyum updateの結果が出力されていますので、こちらでも確認が可能です。 |
カスタムデータを設定せずにCent OS8.4をデプロイ
|
|
カスタムデータを設定してCent OS8.4をデプロイ
|
最後に
Azure 仮想マシン作成時のカスタムデータを使うとデプロイ時に一緒に設定が出来る為非常に便利かと思いました。
その他ユーザー追加等についてもマイクロソフト公式サイトにサンプルがあります。今後も色々試してみたい所です。