Renovate を EventBridge Scheduler で定期実行してみた
製造ビジネステクノロジー部の小林です。
前回、CodeCommit のリポジトリを対象に、Renovate を CodeBuild 上で実行して依存関係の更新プルリクエストを作成するところまでを試しました。
前回はビルドを手動実行しましたが、これでは Dependabot のように「気づいたら更新 PR ができている」状態にはなりません。今回は EventBridge Scheduler を使って、CodeBuild を定期起動する設定を追加します。
Renovate の起動は誰が担うのか
Renovate 本体にはスケジューラや常駐の仕組みがありません。1 回起動すると「対象リポジトリを読む → 更新を計算する → PR を作る」を一巡して終了する CLI プログラムです。
GitHub で Renovate を使う場合は Mend がホストする App が定期起動を肩代わりしてくれますが、セルフホストでは「いつ・どこで動かすか」を自分で用意する必要があります。前回のハンズオンで「どこで」を CodeBuild が担う部分を作ったので、今回は「いつ」にあたる部分を EventBridge Scheduler で作ります。
Renovate 側の schedule 設定は使わない
Renovate 自体にも schedule という設定がありますが、これは起動の仕組みではなく、起動された実行の中で「どの時間帯なら更新を処理してよいか」を絞り込むフィルタです。
今回のように EventBridge 側で起動タイミングを決める構成では、Renovate 側は既定(常に許可)のままにしておくのがシンプルです。両方に時間指定を書くと、なぜ PR が作られないのかを追うのが難しくなります。
cron 式のスケジュールで動作確認する
本番運用では cron ベースのスケジュールを使うので、動作確認も同じ cron ベースのスケジュールで行います。日付・月・年を今日の値に固定した cron 式にすると、その 1 日だけ指定時刻に発火するスケジュールになります。
EventBridge のコンソールで「スケジュールを作成」し、次の値を設定します。
- スケジュール名:
renovate-schedule - スケジュールのタイプ: 定期的なスケジュール
- cron 式: 任意の時刻
、タイムゾーン:Asia/Tokyo` - フレックスタイムウィンドウ: オフ
- ターゲット: AWS CodeBuild の
StartBuild、プロジェクト:renovate - 実行ロール: 「このスケジュール用に新しいロールを作成」を選択(対象プロジェクトへの
codebuild:StartBuildが付与されます)



閉じた PR が再作成されることも合わせて確認する
起動の確認だけでなく、実際に PR が作られる一連の流れも確認したいので、前回の記事で作成済みの更新 PR(axios、react、express、typescript の 4 件)をあらかじめ閉じておきました。


ここで 1 点、Renovate の既定の挙動を押さえておく必要があります。Renovate は閉じられた PR をブランチ名と PR タイトルで識別しており、既定(recreateWhen: "auto")では「ユーザーが意図して却下した更新」とみなして、同じ内容の PR を自動では作り直しません。
閉じた PR をそのまま次回実行時に復活させて確認したい場合は、recreateWhen を "always" にする必要があります。
{
"extends": ["config:recommended"],
"recreateWhen": "always"
}
buildspec の RENOVATE_CONFIG にはすでにこの設定を加えてあるので、閉じた 4 件の PR は次回実行時に同じ内容で再作成されるはずです。
動作確認する
指定した時刻を過ぎたら、次の点を確認します。
CodeBuild のコンソールでプロジェクト renovate のビルド履歴を開きます。指定時刻の直後に新しいビルドが増えていて、その「イニシエータ」が自分の IAM ユーザーではなくスケジューラの実行ロールになっていれば、手動ではなくスケジュール経由で起動したことが分かります。

続けて CodeCommit のコンソールで、先ほど閉じた 4 件の PR と同じタイトルの PR がオープン状態で増えていることを確認します。番号は新しく採番されますが、タイトルとブランチ名は閉じたものと同じになります。
この 2 点が揃っていれば、スケジュールによる起動から PR 作成までの一連の流れが機能しています。


まとめ
CodeBuild で手動実行できるようになった Renovate に、EventBridge Scheduler で定期起動を組み合わせることで、AWS 内で完結した「気づいたら更新 PR ができている」仕組みができました。
次回はグルーピングや除外設定を試したいと思います。
この記事がどなたかの参考になれば幸いです。




