Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
大規模 Terraform リポジトリで頑張る Continuous Version Upda...
Search
YuyaKoda
PRO
October 23, 2025
Technology
2.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
大規模 Terraform リポジトリで頑張る Continuous Version Update / CI/CD Test Night #8
YuyaKoda
PRO
October 23, 2025
More Decks by YuyaKoda
See All by YuyaKoda
Introduction to dag-andersen/argocd-diff-preview
ponkio_o
PRO
0
76
KubeCon + CloudNativeCon Japan 2025 Recap by CA
ponkio_o
PRO
0
530
Kubernetes だけじゃない!Amazon ECS で実現するクラウドネイティブな GitHub Actions セルフホストランナー / CNDW2024
ponkio_o
PRO
6
820
Renovate ではじめる運用レスなライブラリ更新 / 令和最新版 他人に自慢したいヤバいCI/CD LT会 @ yabaibuki.dev #2
ponkio_o
PRO
1
350
Amazon ECS で作るスケーラブルなセルフホストランナー / GitHub Actions Meetup Tokyo #4
ponkio_o
PRO
2
1.2k
業務で使えるかもしれない…!?GitHub Actions の Tips 集 / CI/CD Test Night #7
ponkio_o
PRO
49
23k
aqua で始める CI-Friendly なツール管理
ponkio_o
PRO
3
1.4k
set-terraform-matrix という Actions を作った / set-terraform-matrix-actions
ponkio_o
PRO
0
700
NGINX Ingress Controller を活用した Retty のサービス開発とモニタリング / NGINX ユーザー会 2022 春
ponkio_o
PRO
0
280
Other Decks in Technology
See All in Technology
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
310
Claude Codeとハーネスについて考えてみる
oikon48
18
9.2k
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.7k
SRE Next 2026 何でも屋からの脱却
bto
0
580
Kaggleで成長するために意識したこと
prgckwb
1
240
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
190
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
2.9k
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
400
Claude Code公式skillで 自分の仕事を少しずつ手放そう!(Claude Code開発ノウハウ大公開スペシャル by クラスメソッド)
kaym
0
130
ゼロをイチにする仕事が終わったあと
smasato
0
330
最近評価が難しくなった
maroon8021
0
330
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
Featured
See All Featured
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
350
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
Crafting Experiences
bethany
1
210
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Transcript
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
1 大規模 Terraform リポジトリで頑張る Continuous Version Update 2025 Oct 23rd Yuya Koda
AbemaTV, Inc. All Rights Reserved Yuya Koda ABEMA の Cloud
Platform チーム所属のエンジニア Google Cloud を中心とした ABEMA のインフラ周りを手広く みています。業務では YAML か JSON か HCL か Markdown を書いていることが多いです。たまに Go も。 趣味はコーヒーでマイブームはぬか漬けを作ること 2 Profile ponkio_o
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
Terraform 使っている人?✋ 3
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
(自動/手動/頻度問わず) バージョン更新できている人?✋ 4
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
(自動/手動問わず) 継続的にバージョン更新できている人?✋ 5
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
継続的に自動でバージョン更新できている人?✋ 6
AbemaTV, Inc. All Rights Reserved ABEMA の Terraform 事情 7
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
8 ABEMA の Terraform リポジトリ ABEMA の Terraform リポジトリは、Platform Team 以外の開発者も PR を出し、自身で plan / apply とマージまでを行う • 単一リポジトリに複数のサービスが存在する monorepo 構成 • サービスごとにディレクトリを区切って各ディレクトリにオーナーが存在 ◦ CODEOWNERS で設定し、コードーオーナーのレビューを必須にしている • ステートファイルはサービス x 環境ごとに分割 ◦ 現時点で 2000 以上
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
9 ディレクトリ構成イメージ 各サービスごとにオーナーが存在しており「サービス x 環境」でステートファイルが分割されている
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
10 Atlantis Terraform の実行には Atlantis を利用していて、開発者自身で plan / apply を行えるようにしている (IAM など一部の変更は Platform Team のレビューを必須にする仕組みを入れている) https://www.runatlantis.io/
AbemaTV, Inc. All Rights Reserved Terraform とバージョン更新 11
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
12 なぜ継続的なバージョン更新が必要か? 短期的には必須ではないが、Terraform / Terraform Provider を継続的にバージョンアップすることは とても大切 • Terraform 本体の新機能への追従 • 各 Provider の新機能への追従 ◦ 新機能を使わなくても Provider のバージョンは上がり続けるのでそのうち困る • Terraform を動かすキッカケを作る ◦ コード化しても、使い続けないとそのうち実リソースの乖離 (いわゆる Drift) が起き始める ▪ そして乖離がデカくなると IaC の運用を諦めてしまう
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
13 Terraform はバージョン更新を自動化しやすい Terraform はその性質上、アプリケーションのライブラリなどに比べてバージョン更新作業を自動化 しやすい • (最近は) 破壊的変更がほとんどない ◦ 単純にバージョンをインクリメントするだけで OK • terraform plan コマンドで実行計画を表示できる ◦ 基本的には plan が通って差分が出なければ OK ◦ CI では差分発生時に exit 2 してくれる plan の -detailed-exit オプションが便利 • 仮にバグが混入していても実リソースに影響を与えない ◦ 極論 terraform apply しない限り勝手に実リソースが壊れたりしない
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
14 バージョン更新作業を自動化する 定期的なアップデートを手動でやるのは結構大変なのと、数が増えると追いつかなくなるので何かしら自 動化の仕組みは必須。便利なサービスやツールがあるのでそれを活用するのがオススメ • 自動で PR を作ってくれるサービス ◦ Dependabot ◦ Renovate • ファイルを更新してくれるツール ◦ minamijoyo/tfupdate
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
15 Renovate ABEMA では Dependabot に比べて高度な設定ができ Automerge する仕組みも整備されているため Renovate (セルフホスト版) を採用している。セルフホスト版を利用している理由は後述 https://github.com/renovatebot/renovate
AbemaTV, Inc. All Rights Reserved 自動化で直面した課題 16
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
renovate-approve が使えない問題 17
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
18 renovate-approve とは Renovate では renovate-approve という GitHub Apps が提供されており、これを用いることで Automerge を有効化した PR に対して Approve を付与することができるため、Approve を必須にしている リポジトリで Renovate の PR を automerge したい時に便利 https://github.com/apps/renovate-approve
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
19 CODEOWNERS と GitHub Apps 先ほど話したように Terraform リポジトリでは CODEOWNERS ファイルを用いてコードオーナーを設定 し、コードオーナーの Approve を必須にしているが、GitHub App はコードオーナーに指定できない。 そのため renovate-approve で Approve を付与してもマージ条件を満たせない
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
20 解決策 マシンアカウントを指定することはできるので、renovate-approve の利用を諦めて、マシンアカウント を用いて Renovate の PR に Approve を付与する CI を作ることに…😭
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
マネージド版 Renovate が使えない問題 21
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
22 マネージド版 Renovate の制約 マネージド版の Renovate はマシンスペックやタイムアウトの制約が存在する。 最初は問題なかったが、対象ディレクトリを増やしていくと実行に時間がかかるように…(15分以上) https://docs.renovatebot.com/mend-hosted/overview/
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
23 解決策 Renovate はセルフホスト可能なので GKE クラスタ上で動かすことにした (CronJob で定期実行) これによりスペックやタイムアウトは自分たちでハンドリングできる上にキャッシュも利用可能になった
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
24 Tips: セルフホストの場合 renovate-approve はどうなる? セルフホスト版 Renovate を利用する場合、renovate-approve もセルフホストが必要になる ドキュメントは存在しないが、単なる Webhook サーバで実装が公開されているので比較的簡単に構築 できる (実装は70行ほど) https://github.com/renovatebot/renovate-approve-bot
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
Renovate の PR 通知がノイズになる問題 25
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
26 通知のノイズ問題 Branch Protection の「Require review from Code Owners」を有効化すると指定したコードオーナーが reviewer として強制アサインされ Renovate の PR が作られるたびにコードオーナーに通知される
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
27 解決策 バージョン等が記載される .tf ファイルの命名規則が揃っていたので、特定のファイルだけコードオーナー を外した。 CODEOWNERS ファイルでは明示的にオーナーを指定しない場合にコードオーナーを外すことができる
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
28 CODEONWERS Bypass 対策 コードオーナーを設定しないようにしたファイルに対して resource blockを書き込むことでコードオーナー のレビューをバイパスできてしまう 😱 Atlantis の Custom Workflows でバージョンなどが記載されるファイルをパースし resource block が存在 していたら CI を fail させることで Bypass を対策した
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
29 副次的な効果 特定ファイルのコードオーナーが不在になったことで、renovate-approve が使えるようになった 👍👍👍 (先ほど話した通り、Renovate がセルフホストのため renovate-approve もセルフホスト)
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
Drift 問題 30
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
31 Drift 問題 いざ Renovate を動かしてみると Drift が大量発生 🤯 • 手動変更が加えられていて差分が出ているパターン • apply を忘れてマージしたパターン (Atlantis では PR コメントで apply をトリガーするため) • 社内 Module がバグっていて無限に差分が出るパターン • Provider アップデートに伴うスキーマ変更 などなど…いずれも人間が手動で対応する必要がある
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
32 解決策 Drift が発生している PR は自動的に close し、更に Issue を自動生成して担当者をアサインするように した。対応ドキュメントも用意し、みんなでちまちま修正していった
AbemaTV, Inc. All Rights Reserved 今後について 33
AbemaTV, Inc. All Rights Reserved AbemaTV, Inc. All Rights Reserved
34 今後について • 頑張って全部ディレクトリ正常化したい ◦ 2000 以上対象があるうち、ようやく半分くらい正常化できた • 各サービスオーナーが自律的に Drift を解消できるようにしたい ◦ 今は Cloud Platform チームが直している
AbemaTV, Inc. All Rights Reserved