[アップデート] AWS CodeBuild のランナープロジェクトが Buildkite をサポートしました
いわさです。
AWS CodeBuild には 2 つのプロジェクトタイプがあります。
通常のタイプは CodeBuild 上で Buildspec.yaml に基づくビルドステップを実行しますが、ランナープロジェクトとして作成すると GitHub や GitLab のセルフホステッドランナーを実行する環境として利用することもできます。
そのランナープロジェクトが新たに Buildkite のランナーをサポートしました。
What's New at AWS のアナウンスはまだ出ていないのですが、AWS 公式ドキュメントには 2025 年 1 月 31 日で追加されています。
AWS CodeBuild User Guide document history - AWS CodeBuild より
Buildkite 自体もビルド機能は備えていますが、特に AWS 環境へデプロイする場合などにサービスロールや Secrets Manager、VPC などの AWS の機能とパイプラインを統合しやすくなるのがメリットでしょうか。
私は Buildkite を使ったことがなかったので、これは良い機会だなと思い触ってみることにしました。
Buildkite とは
コンテナビルドの Buildkit と間違えやすそうなのですが全然別で、Buildkite は 2013 年に設立された会社が提供する CI/CD プラットフォームです。
基本的な CI/CD に必要な機能は備わっていそうですが、同時実行が無制限のため大規模なビルド・デプロイに対応できたり、Mac M2 Pro によるビルド環境や fastlane / App Store Connect と統合済みのデプロイ環境などモバイルアプリの CI/CD 環境に力を入れていそうな点が特徴的かなと思いました。
ケーススタディを見たところ、Elastic、PagerDuty、Shopify などで採用されているようです。
CodeBuild との統合
今回の機能は Buildkite 側で何かサポートされたという形ではなくて、CodeBuild 側が Buildkite ランナーを CodeBuild プロジェクトでサポートされたというものになります。
以下の公式ドキュメントに従って設定してみます。
仕組みしては Buildkite でパイプラインが実行されると Webhook にリクエストが送信され、Buildkite のセルフホステッドランナーが実行されている CodeBuild 環境上でビルドステップが実行されるという流れです。
今回の機能は CodeBuild がサポートする全リージョンで使えるようです。
以下は東京リージョンでの CodeBuild プロジェクト作成の様子です。
ランナープロバイダーに Buildkite が選択できるようになっていますね。
Buildkite エージェントトークンを生成し Secrets Manager へ保存
今回の機能を使うと CodeBuild 側で自動で Buildkite エージェントをセットアップしてくれます。そのエージェントが認証にトークンを使うのですが、事前に Buildkite 側で払い出しておきます。
クラスター設定のエージェントトークンメニューから作成します。
Buildkite 側で取得できたら保存しておきます。
AWS CodeBuild では、Secrets Manager シークレットを経由してトークンへアクセスする必要があります。
CodeBuild プロジェクト作成中にシークレットの作成が可能なので以下から設定してみます。
先ほど取得したトークンを保存します。
次のように Buildkite agent token で作成したシークレットが選択されていれば OK です。
CodeBuild ペイロード URL とシークレットの取得
後は特に意識せずに CodeBuild プロジェクトを作成して大丈夫です。
ランナープロジェクトの場合は基本的には Buildspec は無視されます。(パイプライン側で上書きも可能)ビルドステップは Buildkite 側で設定します。
プロジェクトを作成するとペイロード URL とシークレットが払い出されると思います。
こちらを保存しておき、Buildkite 側の構成に使います。
Buildkite 側の設定にまた戻ります。
パイプラインを作成する前に、まず組織設定を追加します。
Settings -> Notification Services から Webhook を追加しましょう。
ここで CodeBuild 側から取得したしたペイロード URL やシークレットを設定します。
デフォルトで選択されているはずですが、「X-Buildkite-Token」が送信される設定になっていることを確認してください。
対象イベントにjob.scheduled
を選択して組織設定は完了です。
パイプラインで CodeBuild プロジェクト名を指定する
Buildkite 側でパイプラインを新規作成します。
今回は echo コマンドを実行する単純なパイプラインステップにしてみます。
パイプライン差kす英語、ビルドステップを編集しagents
プロパティを追加します。
ここで、CodeBuild プロジェクト名を設定する必要があります。codebuild-<プロジェクト名>
と次のように設定しましょう。
ビルドしてみる
これで設定は完了です。Buildkite 側でビルドを開始してみます。
CodeBuild コンソールを確認してみると、CodeBuid でビルド実行の様子が確認できますね。
送信者はBuildkite-Request
となっていました。
完了後に CodeBuild プロジェクトの実行ログを確認してみると、Buildkite のセルフホステッドランナーが開始され、コマンドを受信して実行されていることが確認できました。
さいごに
本日は AWS CodeBuild のランナープロジェクトが Buildkite をサポートしたので試してみました。
私の周りであまり Buildkite の採用事例を聞いていないので、これを機に使っていきましょうという感じではまだないのですが、AWS が GitHub / GitLab に次いで Buildkite をサポートしたということなので、今後の動向はちょっと気になりますね。
なお、Buildkite は Amazon Eventbridge パートナーでもあります。
そのため、パートナーイベントバスを通して AWS 側でイベント駆動なアーキテクチャーを実装することもできます。
次の例ではビルドメトリクスを AWS で監視したり可視化したりしていますね。このあたりを組み合わせるのもおもしろそうです。