前回、Lambda MicroVMsでStreamlitを起動する記事を投稿しました。
調子に乗って、VSCode(code-server)をLambda MicroVMsで動作させたら、いい感じに動いてしまったので、こちらもご紹介。
Code Serverとは
こちらのcode-serverですが、おそらくオープンソース版のvscodeをもとに、ブラウザでアクセスできたりその他色々な機能を追加したものだと覆います。
細かいことはわかりません..
Lambda MicroVMs向けコンテナイメージの作成
MicroVMsのドキュメントで使用されているベースイメージはpublic.ecr.aws/lambda/microvms:al2023-minimalというものです。MicroVMs用にカスタマイズされているようですが、詳細は不明です。
まずはCode Serverをインストールします。
これだけでCode Serverとしては使えるのですが、VSCodeでの開発環境としてはちょっと心もとない。なので、色々インストールします。
そして、rootユーザーを一般ユーザーにしようと思ったのですが、sudoがどうもうまく動かない(ホスト側で禁止されている?)ようだったので、rootユーザーなんだけど名前とホームディレクトリが違う的な設定を行いました。
あとは、VSCodeのデフォルト設定と拡張機能を初期設定として行うようにしました。
最後に起動設定です。
なんとなくできました。
Lambda MicroVMsへのデプロイ
Lambda MicroVMsへのデプロイは、Dockerfileとその他のアセットをZipで固めてデプロイします。
Lambda MicroVMsはすでにCloudFormationに対応しているので、CDK化を進めていたのですが、どうもコンテナのビルドに時間がかかるとリソース作成失敗と判断されるようでした。なので、裏技的に、別でイメージを作ってECRに登録、そして、そのイメージをFROMに指定するだけのDockerfileをzipに含めることにしました。おそらく将来的にはECRから直接pullできるようになるでしょう。
ワークショップ環境としての相性の良さ
使ってみていいなーと思ったことです。
- ブラウザごと(ユーザーごと)に新しいMicroVMsが起動する
- デプロイするインフラとしては一つですが、ブラウザごとにインスタンスが作成されます
- ブラウザを起動している間は稼働し続ける&ブラウザを閉じたら一時停止になる
- 一定時間後に破棄される。破棄しない設定がない
- 使った分だけ課金、不要な課金が発生しない
- MicroVMsの実行ロールを調整すればAWSリソースにアクセスさせることもできるし、アクセスさせないこともできる
動作の様子はこちら。初回だけちょっと時間がかかりますが、それ以降はいい感じです。
ソースはこちらを参照のこと