CTO統括室の黒崎(@kuro_m88)です。本日早朝に面白そうな発表を目にしました👀
AWS CodeBuild now supports managed GitHub Action runners
AWS CodebuildがGitHub Actionsに対応したという内容ですが、要するにAWSがホストするGitHub Actions Runnerが出たということですね🎉
AWSがマネージしてくれることで、EC2(x64, arm)はもちろん、GPUとカスタムイメージも利用できるようです。
さらに注目したのはGitHub Actions RunnerとしてAWS Lambdaが使えるようです。Lambdaが使えると嬉しいポイントはActionsのjobをより気軽に使えることです。
GitHub Actions Runnerの最小課金単位は1分であるため、例えば5秒で終わるような軽い自動化のスクリプト等のジョブを10個実行すると10分ぶん課金が発生するため、頻繁に実行されるとコスト効率が悪くなるデメリットがありました。 GitHub Actions の課金について
AWS Lambda on CodeBuildが使えるとこの単位が1秒単位となるため、以前より気軽に小さなジョブを作成できます。
AWS CodeBuild の料金 (※AWS Lambda自体は1ミリ秒単位の課金ですが、CodeBuildだと1秒単位のようです)
たまたまAWS Lambdaでいい感じにGitHub Actions Runnerを動かす方法がないものかと個人的に考えていたところ、公式で出たのでさっそく動作検証してみました。
セットアップ
公式ドキュメントどおりにセットアップを行いました。 Set up self-hosted GitHub Actions runners in AWS CodeBuild
一点注意が必要なのが、BuildSpecの設定はGitHub Actions Runnerとしての実行では使用されず、無視される点です。
しかしながら現時点では画面のバリデーション上空欄にできないようなので、適当な値を入れておけばOKです。
ここまで設定すれば、GitHubのリポジトリにWebHookが自動で設定され、GitHub上で発生したイベント(Actionsのジョブのキューイング)がAWS CodeBuildに通知され、Runnerが起動するようになるはずです。
実行してみた
以下のようなGitHub Actionsのワークフロー設定を作成しました。
name: hello-lambda-actions
on:
push:
jobs:
test:
runs-on: codebuild-poc-lambda-actions-${{ github.run_id }}-${{ github.run_attempt }}
steps:
- run: echo "Hello World!!"
- run: date -u
runs-on: codebuild-poc-lambda-actions-${{ github.run_id }}-${{ github.run_attempt }}
この一行には命名規則があるので、詳しくはドキュメントを参照してください。
pushイベントをトリガするように設定したので、git pushすれば即座に実行されます。
無事実行されたようです。上記画像では、日時の出力が00:19:30 UTCとなっていますが、手元でpushした時刻は00:18:59 UTCでした。pushしてから30秒ちょっとでした。
CodeBuild側のログを見てみましょう。
GitHub Actions Runnerが起動され、実行されていることがわかります。都度ephemeralなrunnerとして実行されているようなので、runner本体をダウンロード、起動する時間がいくらかオーバーヘッドになってはいそうです。
また、CodeBuild側にもビルドのログが残ることを期待したのですが、こちらに出力されているログはあくまでGitHub Actions Runnerのログであって、ビルドのログ(標準出力等)はなさそうでした。仕組みを考えれば妥当ですが、こちらにもビルドのログが残っていると便利そうですね。
以上、さっそく触ってみた結果のご紹介でした。
AWS公式でrunnerをホストしてもらえることで柔軟なコンピューティングリソースの使い方ができて便利そうです。早速プロダクト導入に向けた検討をしてみようと思います👏