[アップデート] AWS CodeBuild が非コンテナ環境でのビルドをサポートするようになりました
いわさです。
AWS CodeBuild はソースコードのビルドやテスト実行の自動化に利用できる実行基盤です。
これまで CodeBuild の実行はコンテナ化された環境上でビルドプロセスが実行されるというものでした。
しかし先日のアップデートで、非コンテナビルドというのがサポートされました。
これによって CodeBuild が提供する実行環境上のホスト OS でビルドコマンドが実行できるようになったみたいです。
私はホスト OS にアクセスしたいケースに直面したことはなかったのですが、上記アナウンスによるとデバイスドライバーの開発や、ホストマシンへのアクセスが必要なツールの操作などで採用できるとのことです。なるほど。
コンテナ環境と非コンテナ環境での実行結果を比較してみた
ということで試してみたいと思います。
今回は非コンテナ環境とコンテナ環境で同じビルドスクリプトを実行し、結果を比較しました。
まず CodeBuild プロジェクトの作成ですが、環境設定で Running mode というのが追加されています。
従来どおりのコンテナ環境の場合は Container を、非コンテナ環境の場合は Instance を選択します。
ちなみに本日時点ではオンデマンドフリートのみでサポートされており、リザーブドキャパシティでは利用できません。
また、カスタムイメージも選択は出来ません。
Running mode で Instance を選択後、オペレーティングシステムを選択することが出来ます。
本日時点では Amazon Linux と Windows Server 2022 です。
なお、Amazon Linux は本日時点では AL2 みたいです。
[Instance] 2025/03/05 20:10:05.962859 Running command uname -a
Linux ip-10-0-10-131.ap-northeast-1.compute.internal 4.14.355-275.572.amzn2.x86_64 #1 SMP Sat Jan 11 09:58:24 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Windows は x86 のみ、Linux は x86 と ARM の AMI が用意されていました。
レガシーなビルドツールを使いたいとかだとカスタムイメージを使いたい気もしますが、本日時点では利用できません。
次のような buildspec を用意して実行してみました。
version: 0.2
phases:
build:
commands:
- cat /proc/1/cgroup
- dmesg | head -n 5
- ls -l /dev | head -n 5
- mount | head -n 5
- ps aux | head -n 5
まず、以下は従来どおりのコンテナ環境での実行結果です。
[Container] 2025/03/05 20:10:06.011441 Running command cat /proc/1/cgroup
11:perf_event:/ecs/30d2010e-dbe1-49f5-9959-4e7850f8b372/bd0050c8244e3ff0ec52ce17e1af3ba91f289ece005012e8a304aed7ba648cfb
10:hugetlb:/ecs/30d2010e-dbe1-49f5-9959-4e7850f8b372/bd0050c8244e3ff0ec52ce17e1af3ba91f289ece005012e8a304aed7ba648cfb
9:blkio:/ecs/30d2010e-dbe1-49f5-9959-4e7850f8b372/bd0050c8244e3ff0ec52ce17e1af3ba91f289ece005012e8a304aed7ba648cfb
...
[Container] 2025/03/05 20:10:06.017772 Running command dmesg | head -n 5
dmesg: read kernel buffer failed: Operation not permitted
[Container] 2025/03/05 20:10:06.022485 Running command ls -l /dev | head -n 5
total 0
lrwxrwxrwx 1 root root 11 Mar 5 20:20 core -> /proc/kcore
lrwxrwxrwx 1 root root 13 Mar 5 20:20 fd -> /proc/self/fd
crw-rw-rw- 1 root root 1, 7 Mar 5 20:20 full
drwxrwxrwt 2 root root 40 Mar 5 20:20 mqueue
cgroup 見てみると ECS に依存した情報になってますね。
dmesg ではエラーが確認できます。
以下は今回のアップデートで使えるようになった非コンテナ環境での実行結果です。
[Instance] 2025/03/05 20:17:51.797777 Running command cat /proc/1/cgroup
11:perf_event:/
10:pids:/
9:devices:/
8:cpuset:/
7:hugetlb:/
...
[Instance] 2025/03/05 20:17:51.808930 Running command dmesg | head -n 5
[ 0.000000] Linux version 4.14.355-275.572.amzn2.x86_64 (mockbuild@ip-10-0-52-105) (gcc version 7.3.1 20180712 (Red Hat 7.3.1-17) (GCC)) #1 SMP Sat Jan 11 09:58:24 UTC 2025
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.14.355-275.572.amzn2.x86_64 root=UUID=8dee18ad-cf16-4447-94e3-731d5bda23e8 ro console=tty0 console=ttyS0,115200n8 net.ifnames=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.shell=0 LANG=en_US.UTF-8 KEYTABLE=us
...
[Instance] 2025/03/05 20:17:51.820673 Running command ls -l /dev | head -n 5
total 0
crw-r--r-- 1 root root 10, 235 Mar 5 20:16 autofs
drwxr-xr-x 2 root root 280 Mar 5 20:15 block
crw------- 1 root root 10, 234 Mar 5 20:15 btrfs-control
drwxr-xr-x 2 root root 2380 Mar 5 20:16 char
cgroup が普通というかシンプルなのと、dmesg アクセス出来ていますね。
/dev
の見え方も違っています。
さいごに
本日は AWS CodeBuild が非コンテナ環境でのビルドをサポートするようになったので使ってみました。
従来のコンテナ環境でシステムレベルのアクセスが出来ずに CodeBuild をビルドやテストの環境として採用できなかったという方はこれを機に試してみてください。