AWS Lambda MicroVMs
- AIエージェントの文脈で、isolatedでありながらステートを長い期間保持したい、というニーズに応えるものとして紹介されているように読める
- HTTPをしゃべるコンテナイメージが動かせるようなものとして読める
- pricingを読むとインスタンス時間による課金に読める(リクエスト数はなし?)
AWS Lambda is a serverless compute service that charges you only for what you use. Lambda Functions are priced per request and execution duration. Lambda MicroVMs are priced per instance-second.
AWS MicroVMsを味見してみよう
マネジメントコンソールでLambdaを見ると、MicroVMsというのが追加されている
「MicroVM イメージ」を作り、MicroVMを実行するということらしい。
MicroVM イメージを作成する
MicroVM イメージは、インスタンスタイプなどを指定して作るのだが、「Dockerfileを含むzipファイル」をS3に置いておくことが必要。
今回は筆者がメンテしているタイルサーバーのコンテナイメージをベースとしたDockerfileをzip化して配置しておく。
なお、UIがバグっているのか、環境変数を設定していると、「ライフサイクルフックがどうたら」というエラーが出てイメージの作成が失敗してしまった(なので環境変数は使わないことにした
すると作成中…となる。コンテナイメージをビルドしているのだろうか?1,2分待つと「作成済み」となった。
MicroVMを実行する
今回は全部デフォルトとするが、実行時間はさておき、アイドル期間を設定できるようになったことが従来のLambdaと大きく違う点と言えるかもしれない。
疎通確認
パブリックアクセスを許可できる設定はなさそうで、ドキュメントによれば以下のように認証ヘッダーを追加する必要がある。認証トークンはUIから吐ける。
curl 'https://<microvm-endpoint>' \
-H 'X-aws-proxy-auth: <TOKEN>' \
-H 'X-aws-proxy-port: 8080'
chiitilerは3000番ポートを利用していて、/debugでデバッグページを返却するので:
curl 'https://<uuid>.lambda-microvm.ap-northeast-1.on.aws/debug' \
-H 'X-aws-proxy-auth: <suppressed>' \
-H 'X-aws-proxy-port: 3000'
とすると
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>MapLibre GL JS</title>
<!-- maplibre gl js-->
<script src="https://unpkg.com/maplibre-gl@^4.0/dist/maplibre-gl.js"></script>
<link
rel="stylesheet"
href="https://unpkg.com/maplibre-gl@^4.0/dist/maplibre-gl.css"
/>
以下略
というレスポンスが得られる。200ms前後のレスポンスタイムだった。
chiitilerは本来、地図画像をレンダリングするサーバーなのでそのエンドポイントも試したが、そこは正常に動作しなかった。本筋ではないので掘り下げないが、おそらくエラーを起こしていて、そうなるとVM自体が勝手に終了してしまった。
終わりに
これまでもLambda Web Adapterを利用することで、HTTPをしゃべるコンテナならLambda基盤で動かせたが、今回のMicroVMsはLWAなしに好きなコンテナを動かせるもので、サーバーレスなコンテナ環境の選択肢となるポテンシャルを感じました。ただし以下の点でまだ実践投入は憚られるかんじです
- 認証方法が、一時アクセストークンをヘッダに載せるものしか提供されていなさそう
- zipファイルじゃなくてECRなどのコンテナイメージからVMを起動したい
- エラー時?にVMが終了してしまうのは厳しい
AIエージェントのための何か、というよりはLambdaより揮発性が低いコンテナ環境と捉えたら楽しそうなので、その方向に強化されることを期待します。




