[アップデート] AWS CodeBuild の Lambda コンピューティング環境でもカスタムイメージを使えるようになり、マネージド型イメージに含まれていないツールも使いやすくなりました

2024.03.20

いわさです。

今朝、AWS CodeBuild が Lambda コンピューティングのカスタムイメージをサポートするというアップデートアナウンスがありました。

昨年 11 月に CodeBuild の実行環境に従来の EC2 ではなく Lambda を選択することが出来るようになりました。
これによって、EC2 コンピューティング環境よりも高速に起動できるビルド環境を作成出来るようになっています。

ただし、これまでは Lambda 環境の場合はマネージド型イメージのみがサポートされており、ビルド用に使えるツールとしてもプリインストールされた以下の特定バージョンのみがサポートされていました。

  • AWS CLI v2
  • AWS SAM CLI
  • git
  • go
  • Java
  • Node.js
  • Python
  • pip
  • Ruby
  • .NET

EC2 と同様にカスタムイメージが選択可能に

今回のアップデートでマネージド型イメージのみでなく、カスタムイメージを Lambda 環境でも使用出来るようになります。
マネージド型イメージで含まれていないツールやバージョンをプリインストールした環境が必要な場合に使用するこが出来そうです。

環境タイプとしては ARM Lambda と Linux Lambda の 2 つが用意されています。
Lambda では Windows や GPU は引き続きサポート外で、x86 と ARM アーキテクチャのイメージがそれぞれ使えます。

また、イメージは Amazon ECR 経由での取得となります。
EC2 の場合だと、外部のレジストリを指定することが出来たのですが、Lambda の場合だと ECR のみとなるようです。

Rust 公式イメージを CodeBuild Lambda 環境で試してみた

今回はお試しで Rust の公式イメージを取得して CodeBuild Lambda で使えるのかを試してみました。

Rust 公式イメージをダウンロードして ECR へプッシュ

よく考えたらプルスルーキャッシュを使えたかもなと後から気がついたのですが、今回は Docker からプルしたイメージにタグ付けし、ECR へプッシュしています。

% docker pull rust
Using default tag: latest
latest: Pulling from library/rust
6ee0baa58a3d: Pull complete 
992a857ef575: Pull complete 
3861a6536e4e: Pull complete 
e5e6faea05ea: Pull complete 
6a4969aa4e1d: Pull complete 
Digest: sha256:d36f9d8a9a4c76da74c8d983d0d4cb146dd2d19bb9bd60b704cdcf70ef868d3a
Status: Downloaded newer image for rust:latest
docker.io/library/rust:latest

% docker tag docker.io/library/rust:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg:latest       

% docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg:latest                             
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg]
a8edf9f37ec8: Pushed 
a2ccf25052d9: Pushed 
b2959535127e: Pushed 
39047ed7849e: Pushed 
59bd0a52c319: Pushed 
latest: digest: sha256:034479bd9f0e7de5756511070f175e82f4b2c46a3a50691a5adc75ec72cf9f02 size: 1379

Lambda + カスタムイメージを使用する CodeBuild プロジェクトを作成し実行

特にオプションを指定せずに M1 Mac 環境でイメージを取得していました。 念の為次の記事を参考にさせて頂き、イメージのアーキテクチャーを事前に確認しています。

% docker images                                                                 
REPOSITORY                                                      TAG            IMAGE ID       CREATED       SIZE
rust                                                            latest         ee95a1a43dfd   8 days ago    1.78GB
748796684458.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0320reg   latest         ee95a1a43dfd   8 days ago    1.78GB
public.ecr.aws/sam/build-dotnet8                                latest-arm64   b6c0e310039b   3 weeks ago   2.76GB
ghcr.io/rancher-sandbox/rancher-desktop/rdx-proxy               latest         6bd31b8fe6c5   N/A           4.98MB

% docker inspect ee95a1a43dfd | jq -r '.[] | .Architecture'                                                    
arm64

ARM Lambda タイプで作成してみます。

ビルドコマンドは何でも良いのですが、Cargo のバージョンでも確認しておきますか。

ビルドプロジェクトを作成後、開始してみました。
Cargo のバージョンが出力されていることが確認出来ます。カスタムイメージが使用されていますね。

さいごに

本日は AWS CodeBuild の Lambda コンピューティング環境でもカスタムイメージを使えるようになり、マネージド型イメージに含まれていないツールも使いやすくなったので、Rust 公式イメージを使って実際に確認してみました。

外部レジストリが使えなかったり、CodeBuild Lambda の制限事項は相変わらずありますが、ユースケースが少し広がったのではないでしょうか。