Azure VM Image Builder の Isolated Image Builds について
Azure VM Image Builder (AIB) が、いつのまにか Azure Container Instance (ACI) のコンテナの中で Packer を動かすサービスに変わっていた。
あわてて AIB のリリースノートを確認すると、2023年11月ごろには ACI を利用するようになっていたらしい。今日たまたま AIB を動かしてみて初めて気がついた。
これは Isolated Image Builds と呼ばれるものの一部らしい。 従来の方法で作成した ImageTemplates リソースは変更なく動作するが、Azure サブスクリプションで ACI のリソースプロバイダを有効化し、必要なクォータを確保しておく必要がある。
ImageTemplates のビルドを開始した後に自動的に作られる AIB リソースグループの中を Azure Portal で覗くと ACI のリソースができている。こちらから AIB ジョブのログを確認するだけでなく Packer を実行中のコンテナのシェルを開くことができる。
コンテナでは Azure Linux (旧称 CBL-Mariner) が動いている。最小構成であるため最初は ps
コマンドすら使えないが、yum で必要なパッケージをインストールすれば AIB のコンテナや仮想ネットワークの探検・診断ができる。 Packer がビルドしている Azure VM インスタンスにちょっかいを出すこともできそうである。
root [ / ]# yum install -y procps htop strace lsof iputils iproute nmap
root [ / ]# ps auxf
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1179 0.0 0.0 4644 3852 pts/3 Ss 22:00 0:00 /bin/bash
root 1383 0.0 0.0 3484 1200 pts/3 R+ 22:05 0:00 \_ ps auxf
root 61 0.0 0.0 1584 4 ? Ss 21:19 0:00 tail -f /dev/null
root 55 0.3 0.5 759720 45944 ? Ssl 21:19 0:10 /aib/packerInput/packer build -on-error=cleanup /aib/packerInput/packer_config.json
root 152 0.0 0.5 760236 46324 ? Sl 21:20 0:01 \_ /aib/packerInput/packer build -on-error=cleanup /aib/packerInput/packer_config.json
root 172 0.0 0.6 751092 49112 ? Sl 21:20 0:02 \_ /aib/packerInput/packer-plugin-azure start builder arm
root 183 0.0 0.5 759468 42984 ? Sl 21:20 0:00 \_ /aib/packerInput/packer plugin packer-provisioner-file
root 192 0.0 0.5 759724 41052 ? Sl 21:20 0:00 \_ /aib/packerInput/packer plugin packer-provisioner-powershell
root 201 0.0 0.5 759724 43532 ? Sl 21:20 0:00 \_ /aib/packerInput/packer plugin packer-provisioner-powershell
root 211 0.0 0.2 1242992 19680 ? Sl 21:20 0:00 \_ /aib/packerInput/packer-plugin-windows-update start provisioner -packer-default-plugin-name-
root 221 0.0 0.5 759724 43156 ? Sl 21:20 0:00 \_ /aib/packerInput/packer plugin packer-provisioner-powershell
root 1 0.0 0.0 1024 4 ? Ss 21:19 0:00 /pause
root [ / ]# lsof -i -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
packer-pl 172 root 9u IPv4 13349 0t0 TCP 10.0.0.4:58026->10.0.1.4:5986 (ESTABLISHED)
root [ / ]# nmap -Pn 10.0.1.4
Starting Nmap 7.93 ( https://nmap.org ) at 2024-03-12 22:17 UTC
Nmap scan report for pkrvm3a7x50zlx3.internal.cloudapp.net (10.0.1.4)
Host is up (0.0017s latency).
Not shown: 999 filtered tcp ports (no-response)
PORT STATE SERVICE
3389/tcp open ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 8.22 seconds
ACI のシェルは Azure Portalの別のページに行くと接続が失われてコンテナ内に bash のプロセスが残留してしまうので、継続してなにか作業する気であれば最初に tmux などを動かしておくことをおすすめする。
コンテナの中の Packer の入力・出力は /aib/packerInput
と /aib/packerOutput
ディレクトリに配置されている。 AIB によって生成された Packer への入力を直接確認するだけでなく、 tail -f /aib/packerOutput/packer.log
で Packer のログ出力をリアルタイムに監視できるので、AIB のトラブルシューティングが格段に楽になった。
Isolated Image Builds ではない従来の AIB では、Packer プロセスはユーザーからは見えない Azure VM リソースで動作しており、その出力ログがストレージアカウントの append blob に追記されるだけだったので、動作状況の監視やトラブルシューティングがすこぶる面倒だった。そのために自分は昔 customazed という CLI ツールまで作っていたのだが、もうこれは必要なくなったようだ。
2024/03/13(水) 12:00 追記
なお、この記事を公開したあとに Azure から AIB の Isolated Image Builds への移行に関するお知らせのメールが送信されていた。
改めて別の AIB のビルドを開始してみたところ、また ACI を使わない従来のビルドに戻っていた。未明に自分が ACI ビルドを引き当てたのはたまたま運がよかっただけらしい。
Discussion