Zenn Book で公開している「LocalStack 実践入門 | AWS アプリケーション開発ワークショップ」と「LocalStack 実践入門 | AWS サーバレスパターン開発ワークショップ」ではワークショップ環境として GitHub Codespaces を使っている💡できる限りセットアップの負荷を下げて,誰もが同じ環境でサクッと実施できるようにしている👌
課題
しかし GitHub Codespaces を起動するときにコンテナ (devcontainers) のビルドをするため,ワークショップ環境のセットアップに少し待ち時間が発生してしまうという課題があった💨 特に「LocalStack 実践入門 | AWS サーバレスパターン開発ワークショップ」では LocalStack CLI / LocalStack AWS CLI / LocalStack AWS SAM CLI もセットアップしているため,少し長くなってしまう.
- aws-application-workshop-using-localstack/.devcontainer/devcontainer.json at main
- aws-serverless-pattern-workshop-using-localstack/.devcontainer/devcontainer.json at main
そして,どちらかと言えば初学者向けに執筆しているため,セットアップの待ち時間がワークショップの離脱ポイントになったら嫌だな〜という不安もあった😇
計測
GitHub Codespaces のビルドログから時間を計測してみた⌛️
個人的な体感ではもう少し長いかな〜と思っていた.
aws-application-workshop-using-localstack
- 1回目: 2分54秒
- 2回目: 1分57秒
$ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-03 03:47:12.819Z: Creating container... 2025-01-03 03:50:06.007Z: Finished configuring codespace. $ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-03 21:43:53.092Z: Creating container... 2025-01-03 21:45:50.808Z: Finished configuring codespace.
aws-serverless-pattern-workshop-using-localstack
- 1回目: 3分40秒
- 2回目: 3分30秒
$ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-03 03:47:17.704Z: Creating container... 2025-01-03 03:50:57.604Z: Finished configuring codespace. $ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-03 21:55:40.029Z: Creating container... 2025-01-03 21:59:10.466Z: Finished configuring codespace.
GitHub Codespaces prebuilds
GitHub Codespaces には GitHub Codespaces prebuilds(プレビルド)という機能がある.簡単に言うと,事前に GitHub Codespaces 環境をビルドしておいて,必要になったらすぐに起動できるという仕組みで,ドキュメントに詳しく載っている👌
導入するべき条件として「ビルドに2分以上」と書いてあって,今回は該当しそうだった📝
If it currently takes more than 2 minutes to create a codespace for a repository, you are likely to benefit from using prebuilds.
なお,ドキュメントには GitHub Codespaces のストレージ課金の注意点が書いてあったけど,実際に Billing summary も確認して無料利用枠(GitHub Pro プラン)で問題なさそうだった.
プレビルド設定
プレビルド設定はリポジトリ画面でポチポチする必要があって,.github/
ディレクトリに設定ファイルを置くことはできなかった.今回はデフォルト設定のままにした.
- プレビルドの対象ブランチは
main
- プレビルドのトリガーは
main
ブランチに対するpush
- プレビルドを保存するリージョンは
Southeast Asia
のみ - ストレージ使用量を抑えるため保持するバージョンは
1
GitHub Actions
プレビルドを設定すると自動的に GitHub Actions ワークフローが実行される.GitHub Codespaces 環境をビルドした後に codespaces prebuild upload
コマンドでプレビルドをアップロードしていたり,内部的な挙動も少し見え隠れしていた👀
/.codespaces/agent/bin/codespaces prebuild upload --storage-type v2 --target-locations CentralIndia --target-locations SouthEastAsia --repo-name kakakakakku/aws-serverless-pattern-workshop-using-localstack --devcontainer-path $DEVCONTAINER_PATH --config-id $CONFIGURATION_ID --flush-only --image-version Raw --features-env FEATURE_FLAGS_JSON
プレビルド効果
再度 GitHub Codespaces のビルドログから時間を計測してみたところ,なんと爆速で起動できるようになった❗️
aws-application-workshop-using-localstack
- 1回目: 10秒 🎉
- 2回目: 10秒 🎉
$ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-05 00:32:20.970Z: Creating container... 2025-01-05 00:34:06.618Z: Finished configuring codespace. 2025-01-05 11:11:07.996Z: Creating container... 2025-01-05 11:11:17.251Z: Finished configuring codespace. $ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-05 00:32:20.970Z: Creating container... 2025-01-05 00:34:06.618Z: Finished configuring codespace. 2025-01-05 11:17:37.527Z: Creating container... 2025-01-05 11:17:47.075Z: Finished configuring codespace.
aws-serverless-pattern-workshop-using-localstack
- 1回目: 8秒 🎉
- 2回目: 9秒 🎉
$ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-05 00:01:33.305Z: Creating container... 2025-01-05 00:05:04.747Z: Finished configuring codespace. 2025-01-05 11:11:16.128Z: Creating container... 2025-01-05 11:11:24.384Z: Finished configuring codespace. $ egrep 'Creating container...|Finished configuring codespace.' /workspaces/.codespaces/.persistedshare/creation.log 2025-01-05 00:01:33.305Z: Creating container... 2025-01-05 00:05:04.747Z: Finished configuring codespace. 2025-01-05 11:21:37.582Z: Creating container... 2025-01-05 11:21:46.436Z: Finished configuring codespace.
まとめ
GitHub Codespaces prebuilds(プレビルド)を使って GitHub Codespaces の起動時間を速くできた👏
もし興味を持ってもらえたら「LocalStack 実践入門 | AWS アプリケーション開発ワークショップ」と「LocalStack 実践入門 | AWS サーバレスパターン開発ワークショップ」を試してもらえればと〜🙏