[アップデート] AWS SAM CLI v1.172.1 で AWS Lambda MicroVMs のイメージをビルドできるようになったので試してみた
いわさです。
SAM CLI v1.172.1 で、AWS Lambda MicroVMs のイメージを SAM のテンプレートからビルドとパッケージできるようになりました。
リリースノートみると、ビルド、パッケージ、x86_64 対応の変更がいくつか記載されていますね。
私これまであまり使ってなかったのですが、実は SAM CLI で MicroVM イメージを扱うには、これまで課題がいくつかあったようです。
AWS::Serverless::MicrovmImage 自体は 7 月に追加されていたのですが、プロパティ CodeUri は、S3 の URI しか受け付けませんでした。
そのためローカルのフォルダを指定しても、sam buildはできず、事前に zip にして S3 にアップロードしておく必要がありました。
また、上記 Issue に記載されているように利用者が独自にアップロードの処理を書いていることが紹介されています。
アップロード先のキーが固定だと、コードを変えても CloudFormation が変更を検知しません。今回の v1.172.1 では、sam package でローカルのフォルダを zip して S3 にアップロードし、CodeUri を S3 の URI に書き換えてくれるようになったようです。
v1.171.0 からの差分を見ると、新しいコマンドやオプションも追加されておらず、--parallel の説明文に MicroVM が加わっただけのように見えるのでインターフェースとしては変わらずに「できるようになった」みたいなアップデートっぽいです。
sam buildの対象に、MicroVM イメージの2種類(AWS::Serverless::MicrovmImageとAWS::Lambda::MicrovmImage)が加わりました。--parallelで、関数とレイヤーに加えて MicroVM イメージも並列にビルドするようになりました。sam build <リソース ID>で、MicroVM イメージを名前で指定してビルドできるようになりました。- ビルドの完了時に、MicroVM イメージの一覧と、アーキテクチャ、Docker のプラットフォームが表示されるようになりました。
sam packageで、MicroVM イメージのCodeUriが S3 の URI に書き換わるようになりました。
このうち、ビルドの対象追加、完了時の表示、sam package の書き換えを試してみたので紹介します。
やってみた
まず、手元の SAM CLI のバージョンを最新にしておきます。
sam --version
SAM CLI, version 1.172.1
次に、MicroVM イメージを定義するテンプレートを作りました。リソースの種類は AWS::Serverless::MicrovmImage です。こんな感じかな。
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31
Description: MicroVM image verification sample
Resources:
SampleMicrovmImage:
Type: AWS::Serverless::MicrovmImage
Properties:
Name: sam-microvm-verify
CodeUri: app/
BaseImageArn: arn:aws:lambda:ap-northeast-1:aws:microvm-image:al2023-1
BaseImageVersion: "3"
BuildRoleArn: <build role の ARN>
CpuConfigurations:
- Architecture: ARM_64
Resources:
- MinimumMemoryInMiB: 512
CodeUri には、Dockerfile とアプリのファイルを置いたローカルフォルダを指定します。公式ドキュメントでは、MicroVM イメージを次のように説明しています。
A MicroVM image is a resource that defines the filesystem and application environment of a MicroVM.
ARM_64 のテンプレートは、sam validate で有効と判定されました。sam build も、ARM64 のイメージをビルドしました。
sam build --template template.yaml --build-dir .aws-sam/build
Built MicrovmImages
===================
[*] SampleMicrovmImage -> samplemicrovmimage:latest (linux/arm64)
CpuConfigurations は X86_64 に変えてビルドしました。ただ初回のビルドは、キャッシュにあった ARM64 版の基になるイメージが原因で失敗しました。
image with reference sha256:... was found but its platform (linux/arm64) does not match the specified platform (linux/amd64)
ドキュメントには、コンテナの基になるイメージは MicroVM イメージと同じ CPU アーキテクチャ向けにビルドされている必要があると書かれていますのでそのせいですね。
docker pull --platform linux/amd64 で AMD64 版を取得してから再実行すると、ビルドは成功しました。
[*] SampleMicrovmImage -> samplemicrovmimage:latest (linux/amd64)
Error: [InvalidResourceException('SampleMicrovmImage', "Property 'CpuConfigurations.0.Architecture' value is not a valid dict.")]
ただし、X86_64 のテンプレートは sam validate で拒否されてしまいました。
色々試してみたのですが、なんか手元の SAM CLI に入っているスキーマが、x86_64 に追いついていないように見えます。結局今回はうまくこの先にいけなかったです。
x86_64 は、MicroVM のベースイメージのバージョン 3 から使えます。東京リージョンでは、バージョン 3 が ARM_64 と X86_64 の両方に対応していました。バージョン 1 と 2 は ARM_64 だけでした。
関連するアップデートとして 2026年11月のアナウンスで、AWS Lambda MicroVMs が x86 CPU アーキテクチャに対応したと発表されています。
ビルドの次に、sam package を実行しました。検証用の S3 バケットに成果物をアップロードします。ARM64 と x86_64 のそれぞれで、ビルド結果のテンプレートを指定しました。
sam package --template-file <ビルド結果のテンプレート> \
--s3-bucket <検証用バケット> --s3-prefix sam-package \
--region ap-northeast-1 --output-template-file <出力先のテンプレート>
パッケージ後のテンプレートでは、CodeUri が S3 の URI に置き換わっていました。従来利用者がやっていたこのあたりを SAM CLI で一括でやってくれますね。楽です。
CodeUri: s3://<検証用バケット>/sam-package/<ハッシュ値>
続けて sam deploy を実行しました。結果は、ARM64 と X86_64 で分かれました。
- ARM64 版: changeset の作成は通りました。ただ
AWS::Lambda::MicrovmImageの作成が失敗してロールバックしました。エラーは「did not stabilize」(NotStabilized) - x86_64 版: changeset の作成で失敗しました。エラーは
sam validateと同じものです。東京リージョンとバージニア北部で試しましたが、どちらもダメでした。
同じ zip を AWS CLI で作成すると、どちらも成功したので、ビルド自体はいけていそうです。
CloudFormation のリソース仕様でも、CpuConfigurations の Architecture に X86_64 が含まれているのですが、なんでだろうー。
さいごに
本日は、SAM CLI v1.172.1 の MicroVM イメージを、ビルドからデプロイまで確認してみました。
ビルドとパッケージは、ARM64 と x86_64 の両方で通りました。CloudFormation でのデプロイは、x86_64 は変換の段階で、ARM64 はイメージ作成の段階で止まりました。同じイメージは、AWS CLI では作成できました。








