11. Dependabot / Renovate
provider・module・GitHub Actions の バージョンアップを自動 PR 化。手動更新の漏れと「気づいたら 2 メジャーバージョン落ち」を防ぎます。
なぜ自動更新するか
- セキュリティ: provider のセキュリティ修正を見逃さない
- 互換性維持: 一気に 5 → 6 メジャーアップグレードは難しい。0.x.0 単位で追従する方が楽
- Terraform 自体のバージョンアップ: 1.x → 1.y への追従
- GitHub Actions の更新:
actions/checkout@v4からv5への追従 - 知らない間に古い lock file が改ざん耐性を失う: 古い provider バイナリがレジストリから消える事故もある
Dependabot vs Renovate
| Dependabot | Renovate | |
|---|---|---|
| 提供元 | GitHub Native | Mend Renovate(外部、無料) |
| セットアップ | ファイル 1 つ | Renovate App をインストール + 設定 |
| Terraform provider | 対応 | 対応 + より細かい制御 |
| module(Git URL) | 限定的 | 柔軟 |
| group 化 | 限定的 | 強力(同一系統の更新を 1 PR に) |
| スケジューリング | daily / weekly | 自由(cron 式) |
| 初学者向け | こちら | 慣れたらこちら |
Dependabot 設定
.github/dependabot.yml を置くだけ。
version: 2
updates:
# Terraform provider と module
- package-ecosystem: "terraform"
directory: "/" # ルート(複数なら別エントリで)
schedule:
interval: "weekly"
day: "monday"
time: "09:00"
timezone: "Asia/Tokyo"
open-pull-requests-limit: 5
commit-message:
prefix: "chore(deps)"
include: "scope"
labels:
- "dependencies"
- "terraform"
# 各環境ディレクトリも個別に
- package-ecosystem: "terraform"
directory: "/envs/dev"
schedule: { interval: "weekly" }
- package-ecosystem: "terraform"
directory: "/envs/stg"
schedule: { interval: "weekly" }
- package-ecosystem: "terraform"
directory: "/envs/prd"
schedule: { interval: "weekly" }
# GitHub Actions のバージョン
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
commit-message:
prefix: "chore(ci)"
これを置くと、毎週月曜 09:00 (JST) に provider / module / actions の更新 PR が自動で立つ。
Renovate 設定
Renovate は Renovate Bot を GitHub App としてリポジトリに権限付与。renovate.json を root に。
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
":dependencyDashboard",
":timezone(Asia/Tokyo)"
],
"schedule": ["before 9am on monday"],
"labels": ["dependencies"],
"terraform": {
"fileMatch": ["\\.tf$", "\\.tofu$"]
},
"packageRules": [
{
"description": "AWS provider はパッチだけ自動マージ",
"matchManagers": ["terraform"],
"matchPackagePatterns": ["hashicorp/aws"],
"matchUpdateTypes": ["patch"],
"automerge": true
},
{
"description": "minor 以上は人間レビュー",
"matchManagers": ["terraform"],
"matchUpdateTypes": ["minor", "major"],
"automerge": false,
"reviewers": ["your-org/sre"]
},
{
"description": "GitHub Actions の minor / patch は自動マージ",
"matchManagers": ["github-actions"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true
}
]
}
Dependency Dashboard
Renovate は「保留中の更新一覧」を Issue として自動作成し、進捗を可視化してくれる。便利。
自動 merge とテスト
パッチアップデートは安全性が高いので「CI 通れば自動で merge」も検討。GitHub Actions と組み合わせて:
name: Auto-merge dependabot PRs
on:
pull_request:
branches: [main]
permissions:
contents: write
pull-requests: write
jobs:
automerge:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- uses: dependabot/fetch-metadata@v2
id: meta
# patch / minor のみ自動 merge
- run: gh pr merge --auto --squash "$PR_URL"
if: contains(fromJSON('["version-update:semver-patch","version-update:semver-minor"]'), steps.meta.outputs.update-type)
env:
PR_URL: ${{ github.event.pull_request.html_url }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
本番直結リポジトリでは慎重に
Auto-merge を本番 IaC リポジトリに入れる場合、必ず CI で
terraform plan を通し、destroy が出ないことを 機械的に確認 する仕組み(plan diff チェッカー等)を併設する。