[アップデート] AWS CodeBuild のランナープロジェクトが Buildkite をサポートしました

[アップデート] AWS CodeBuild のランナープロジェクトが Buildkite をサポートしました

Clock Icon2025.02.02

いわさです。

AWS CodeBuild には 2 つのプロジェクトタイプがあります。
通常のタイプは CodeBuild 上で Buildspec.yaml に基づくビルドステップを実行しますが、ランナープロジェクトとして作成すると GitHub や GitLab のセルフホステッドランナーを実行する環境として利用することもできます。

そのランナープロジェクトが新たに Buildkite のランナーをサポートしました。
What's New at AWS のアナウンスはまだ出ていないのですが、AWS 公式ドキュメントには 2025 年 1 月 31 日で追加されています。

9FCF08E6-6CE9-483E-B747-0F8DA450BC62.png
AWS CodeBuild User Guide document history - AWS CodeBuild より

Buildkite 自体もビルド機能は備えていますが、特に AWS 環境へデプロイする場合などにサービスロールや Secrets Manager、VPC などの AWS の機能とパイプラインを統合しやすくなるのがメリットでしょうか。

私は Buildkite を使ったことがなかったので、これは良い機会だなと思い触ってみることにしました。

Buildkite とは

コンテナビルドの Buildkit と間違えやすそうなのですが全然別で、Buildkite は 2013 年に設立された会社が提供する CI/CD プラットフォームです。

https://buildkite.com/

基本的な CI/CD に必要な機能は備わっていそうですが、同時実行が無制限のため大規模なビルド・デプロイに対応できたり、Mac M2 Pro によるビルド環境や fastlane / App Store Connect と統合済みのデプロイ環境などモバイルアプリの CI/CD 環境に力を入れていそうな点が特徴的かなと思いました。

ケーススタディを見たところ、Elastic、PagerDuty、Shopify などで採用されているようです。

https://buildkite.com/resources/case-studies/

CodeBuild との統合

今回の機能は Buildkite 側で何かサポートされたという形ではなくて、CodeBuild 側が Buildkite ランナーを CodeBuild プロジェクトでサポートされたというものになります。
以下の公式ドキュメントに従って設定してみます。

https://docs.aws.amazon.com/codebuild/latest/userguide/buildkite-runner.html

仕組みしては Buildkite でパイプラインが実行されると Webhook にリクエストが送信され、Buildkite のセルフホステッドランナーが実行されている CodeBuild 環境上でビルドステップが実行されるという流れです。

今回の機能は CodeBuild がサポートする全リージョンで使えるようです。
以下は東京リージョンでの CodeBuild プロジェクト作成の様子です。

35104F8D-213C-4596-9483-4E0FC3A90EA8.png

ランナープロバイダーに Buildkite が選択できるようになっていますね。

Buildkite エージェントトークンを生成し Secrets Manager へ保存

今回の機能を使うと CodeBuild 側で自動で Buildkite エージェントをセットアップしてくれます。そのエージェントが認証にトークンを使うのですが、事前に Buildkite 側で払い出しておきます。

クラスター設定のエージェントトークンメニューから作成します。

F7B29128-B7AB-4D5F-B22B-45DD2598F318.png

Buildkite 側で取得できたら保存しておきます。

2B6383FA-3370-4F14-862B-1B097A839398.png

AWS CodeBuild では、Secrets Manager シークレットを経由してトークンへアクセスする必要があります。
CodeBuild プロジェクト作成中にシークレットの作成が可能なので以下から設定してみます。

15573BA5-D37A-4ED7-B0B7-F6D792F16902.png

先ほど取得したトークンを保存します。

C53998CA-05E8-454D-95CB-DE95D715218D.png

次のように Buildkite agent token で作成したシークレットが選択されていれば OK です。

EEF51E52-B10C-4020-8371-3B51AA8FCC18.png

CodeBuild ペイロード URL とシークレットの取得

後は特に意識せずに CodeBuild プロジェクトを作成して大丈夫です。
ランナープロジェクトの場合は基本的には Buildspec は無視されます。(パイプライン側で上書きも可能)ビルドステップは Buildkite 側で設定します。

6AEB3BB0-9DB5-46ED-A363-33DE9FD1954A.png

プロジェクトを作成するとペイロード URL とシークレットが払い出されると思います。
こちらを保存しておき、Buildkite 側の構成に使います。

734A8DB2-A1B9-4D67-8E5B-A424D6CE123D.png

Buildkite 側の設定にまた戻ります。
パイプラインを作成する前に、まず組織設定を追加します。
Settings -> Notification Services から Webhook を追加しましょう。

CE8F58B7-FAEC-4033-A4FC-7A600583EFE0.png

ここで CodeBuild 側から取得したしたペイロード URL やシークレットを設定します。
デフォルトで選択されているはずですが、「X-Buildkite-Token」が送信される設定になっていることを確認してください。

C3480350-5663-47CC-A7F8-800CD77B06C5.png

対象イベントにjob.scheduledを選択して組織設定は完了です。

パイプラインで CodeBuild プロジェクト名を指定する

Buildkite 側でパイプラインを新規作成します。
今回は echo コマンドを実行する単純なパイプラインステップにしてみます。

D3DA0252-CD4F-4BA7-ACCB-9A0E92D52E03.png

パイプライン差kす英語、ビルドステップを編集しagentsプロパティを追加します。
ここで、CodeBuild プロジェクト名を設定する必要があります。codebuild-<プロジェクト名>と次のように設定しましょう。

C55C3DC1-ACFC-4174-A2A7-6CC56C923519.png

ビルドしてみる

これで設定は完了です。Buildkite 側でビルドを開始してみます。

FE7B3D59-7D0D-4EE8-995B-89317A30C18D.png

CodeBuild コンソールを確認してみると、CodeBuid でビルド実行の様子が確認できますね。
送信者はBuildkite-Requestとなっていました。

70E64EC6-70D6-42D1-B997-07CFA487EF96.png

完了後に CodeBuild プロジェクトの実行ログを確認してみると、Buildkite のセルフホステッドランナーが開始され、コマンドを受信して実行されていることが確認できました。

80FADF27-BA76-4A7D-B8BF-C45E6053F6C8.png

さいごに

本日は AWS CodeBuild のランナープロジェクトが Buildkite をサポートしたので試してみました。

私の周りであまり Buildkite の採用事例を聞いていないので、これを機に使っていきましょうという感じではまだないのですが、AWS が GitHub / GitLab に次いで Buildkite をサポートしたということなので、今後の動向はちょっと気になりますね。

なお、Buildkite は Amazon Eventbridge パートナーでもあります。
そのため、パートナーイベントバスを通して AWS 側でイベント駆動なアーキテクチャーを実装することもできます。

589D92CD-9DF7-4ED6-AAB7-C4176738CCA7.png

次の例ではビルドメトリクスを AWS で監視したり可視化したりしていますね。このあたりを組み合わせるのもおもしろそうです。

https://aws.amazon.com/eventbridge/integrations/buildkite/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.