LinuxのAzure VM作成時にcloud-initを利用する方法(日本語化やパッケージのインストール)

2021-12-26Azure,Others,Rocky Linux/CentOS,Virtual Machines

Azure VM作成時に、カスタムデータとしてcloud-initを利用してパッケージのインストールやOSの設定を行う手順です。
TimeZoneやlocaleの設定、パッケージのアップデートおよびインストール、サービスの起動設定などの手順を紹介しています。

Azure 仮想マシンでのカスタム データと cloud-init
Azure での仮想マシンに対する cloud-init のサポート

Azure Portalで仮想マシンを作成する際、詳細タブ内にカスタムデータという項目があります。
カスタムデータを設定すると、仮想マシン作成時にスクリプトなどのユーザーデータをOSに配置することができます。
Linux OSの場合、仮想マシン作成時にcloud-initを利用してOSの初期設定が可能です。

今回は、Rocky Linuxを例に、TimeZoneやlocaleの設定、パッケージのアップデートおよびインストール、サービスの起動設定などの手順を紹介しています。

※動作確認には、Rocky Linux release 9.4 (Blue Onyx)を利用しています。
※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。

スポンサーリンク

cloud-initやカスタムデータとは

cloud-initとは

cloud-initは、Linux OSを初期化および設定するためのツールです。
仮想マシン作成時に、パッケージのインストールやユーザー追加などの初期設定を自動化できます。
Red Hat Linux、Rocky Linux、Ubuntuなどの主要なLinuxディストリビューションで利用されています。

cloud-init Documentation

cloud-initは主にクラウド環境で使用されます。
元々はAWS EC2インスタンス用に開発されましたが、Azureの仮想マシンでも利用可能です。
設定方法としては、cloud-config、Bashスクリプト、MIMEマルチパート形式などが利用できます。

マイクロソフト公式サイトでもcloud-initについて紹介されています。

cloud-init を深く知る

カスタムデータとは

カスタムデータは、仮想マシン作成時にcloud-initの設定情報を渡すための方法です。
カスタムデータにcloud-initの設定を記載しておくことで、仮想マシンのデプロイ時に自動的に初期設定を実行できます。
仮想マシン作成時の詳細タブに、カスタムデータの設定項目があります。

カスタムデータ

詳細タブに"カスタムデータとcloud-init"という項目があります。
ここにcloud-initで実行したい設定内容を記載します。

※Rocky Linuxのイメージを選択している場合、"cloud-initによって処理されます"というメッセージが表示されます。

カスタムデータとCloud-Initの項目(Azure VMの作成画面の詳細タブ)

拡張機能にカスタムスクリプトもあります

仮想マシンの拡張機能には、カスタムスクリプトと呼ばれるスクリプトを実行する機能があります。
カスタムスクリプトについては、こちらの記事で紹介しています。

cloud-initを使って仮想マシン作成と同時にTimeZoneやLocaleを設定

cloud-initのサンプルやモジュール

cloud-initの設定方法は公式サイトに記載されています。
モジュールの使い方についても解説されています。

Cloud config examples
Modules

cloud-config形式でTimeZoneやlocaleを日本に設定する方法

cloud-initを利用して、OSのTimeZoneとLocaleを日本に設定します。
公式サイトにTimeZoneとLocaleのサンプルがあるので、こちらを利用します。

Locale
Timezone

最初に#cloud-configと記載します。
これにより、cloud-config形式で記載していることを宣言します。

cloud-configのサンプル

カスタムデータに設定したcloud-initです。
TimeZoneとLocaleを指定しています。

#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
カスタムデータとCloud-Initの設定例(TimeZoneやlocale)(Azure VMの作成画面の詳細タブ)

仮想マシン作成後にTimeZoneとLocaleの設定を確認

カスタムデータにcloud-initを設定した場合と、設定しない場合を比較して確認します。
仮想マシン作成直後にOSへログインして確認しています。

    • カスタムデータにcloud-initを設定いない場合
      • Time zone: UTC (UTC, +0000)
      • LANG=C.UTF-8
    • カスタムデータにcloud-initを設定した場合
      • Time zone: Asia/Tokyo (JST, +0900)
      • LANG=ja_JP.utf8
カスタムデータの設定有無による比較

timedatectl status、locale、localectlコマンドの実行結果を比較します。
カスタムデータに設定したcloud-initの内容が反映されていることが確認できます。

カスタムデータにcloud-initを設定してない場合

[root@test-vm-01 ~]# timedatectl status
Local time: Sun 2024-06-09 06:42:59 UTC
Universal time: Sun 2024-06-09 06:42:59 UTC
RTC time: Sun 2024-06-09 06:43:00
Time zone: UTC (UTC, +0000)
~(以下略)~
[root@test-vm-01 ~]# locale
LANG=C.UTF-8
LC_CTYPE="C.UTF-8″
~(以下略)~

[root@test-vm-01 ~]# localectl
System Locale: LANG=C.UTF-8
VC Keymap: us
X11 Layout: us

カスタムデータ設定済みの場合

[root@test-vm-01 ~]# timedatectl
Local time: Sun 2024-06-09 15:54:44 JST
Universal time: Sun 2024-06-09 06:54:44 UTC
RTC time: Sun 2024-06-09 06:54:44
Time zone: Asia/Tokyo (JST, +0900)
~(以下略)~
[root@test-vm-01 ~]# locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8″
~(以下略)~
[root@test-vm-01 ~]# localectl
System Locale: LANG=ja_JP.utf8
VC Keymap: us
X11 Layout: us

cloud-initのModuleに記載があるModule frequencyとは何?

cloud-initのモジュールを確認すると、Module frequencyという項目があります。
これは、モジュールがいつ実行されるかを示しています。

CLOUD-INIT モジュールはフェーズごとに実行される

Localeの場合はonce-per-instanceと記載されています。
これは、インスタンスの初回起動時に1回だけ実行されることを意味します。

—広告—

cloud-initを使ったコマンド実行、パッケージインストールやアップデート

cloud-initのサンプル

マイクロソフト公式サイトで、パッケージの更新やインストールのサンプルが公開されています。

cloud-init で VM を更新する

公式サイトでも、cloud-initのサンプルが紹介されています。

Modules

パッケージのアップデート、Apacheインストールから自動起動設定

Webサーバー作成をイメージした、cloud-initのサンプルを作成してみます。

    • 設定内容
      • TimeZoneをAsia/Tokyoに設定
      • localeをja_JP.utf8に設定
      • keymapをjp106に設定
      • パッケージをすべてアップデート(dnf -y update)
      • glibc-langpackの関連パッケージをインストール
      • Apache(httpd)のパッケージをインストール
      • Apache(httpd)の起動設定
cloud-configのサンプル

package_upgradeの項目は、パッケージアップデートの設定です。
アップデートする場合はtrueを設定します。

packagesの項目は、追加するパッケージの設定です。
指定したパッケージがインストールされます。

runcmdの項目は、実行するコマンドの設定です。
記載したコマンドが実行されます。

※仮想マシン作成直後に確認すると、cloud-initで設定した処理が完了していない場合があります。特にpackage_upgradeをtrueにした場合、cloud-initの完了までに時間がかかることがあります。

#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.UTF8
package_upgrade: true
packages:
– glibc-langpack-en.x86_64
– glibc-langpack-ja.x86_64
– httpd
runcmd:
– systemctl start httpd
– systemctl enable httpd
localectl set-keymap jp106

カスタムデータとCloud-Initの設定例(Webサーバーの場合)

仮想マシン作成後にcloud-initの設定が反映されているかを確認

仮想マシン作成後に、cloud-initの設定内容が反映されているか確認します。

カスタムデータ(cloud-init)の反映状況

dnf check-updateでパッケージのアップデート状況を確認します。
アップデート済みであることが確認できます。

Apache(httpd)のステータスが起動中であることが確認できます。
自動起動も有効になっています。

※/var/log/cloud-init.logにも結果が出力されています。

[root@test-vm-01 ~]# dnf check-update
メタデータの期限切れの最終確認: 0:06:11 前の 2024年06月09日 17時27分56秒 に実施 しました。

[root@test-vm-01 ~]#
timedatectl status

Local time: 日 2024-06-09 17:34:26 JST
Universal time: 日 2024-06-09 08:34:26 UTC
RTC time: 日 2024-06-09 08:34:27
Time zone: Asia/Tokyo (JST, +0900)

[root@test-vm-01 ~]# locale
LANG=ja_JP.UTF8
LC_CTYPE="ja_JP.UTF8″

[root@test-vm-01 ~]# localectl
System Locale: LANG=ja_JP.UTF8
VC Keymap: jp106
X11 Layout: jp
X11 Model: jp106

[root@test-vm-01 ~]# systemctl status httpd
● httpd.service – The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; preset: di>
Active: active (running) since Sun 2024-06-09 17:33:21 JST; 1min 47s ago

最後に

仮想マシン作成時のcloud-init設定について確認してみました。
OSの日本語化やパッケージのインストールといった初期設定ができるため、とても便利です。
ユーザー追加などについてもサンプルが公開されており、他にもさまざまなことができそうです。

cloud-init で VM にユーザーを追加する

引き続き、いろいろ試してみたいと思います。

Rocky Linuxの仮想マシン作成手順については、こちらで紹介しています。
初期設定に関する内容もあわせて紹介しています。

Rocky Linuxの仮想マシン作成時の管理者アカウントについては、こちらで紹介しています。
初期設定に関する内容もあわせて紹介しています。

スポンサーリンク