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
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryo Takaishi
December 18, 2025
450
0
Share
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
Ryo Takaishi
December 18, 2025
More Decks by Ryo Takaishi
See All by Ryo Takaishi
スロークエリとの戦いの軌跡2024 / ゆるSRE勉強会 #10
takaishi
1
880
AWSを使ったカンファレンスの 配信アーキテクチャ - 吉祥寺.pm37
takaishi
2
610
どうやればインシデント対応能力を鍛えられるのか? / SRE Kaigi 2025
takaishi
13
13k
Podcastを3年半続ける技術と得た物 / ya8-2024
takaishi
5
2.1k
入門!ClusterAPI 〜 k8s クラスターも k8s API で管理したい 〜 / k8s_meetup_31
takaishi
3
4.8k
CloudNativeへの道 リーダーシップとフォロワーシップ / 201911-cndjp13
takaishi
2
990
ClusterAPI v1alpha1 → v1alpha2 / k8s_meetup_23
takaishi
1
1.6k
実録!CloudNativeを 目指した230日 / cloud-native-days-tokyo-2019
takaishi
2
2.7k
Consul Connect and Kubernetes Integration / cloud native meetup tokyo 7
takaishi
2
2.4k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
A designer walks into a library…
pauljervisheath
211
24k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
170
Marketing to machines
jonoalderson
1
5.2k
Faster Mobile Websites
deanohume
310
31k
Amusing Abliteration
ianozsvald
1
160
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.2k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
160
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
320
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.7k
Transcript
2025 年私の Terraform に関する ふりかえり @r_takaishi / ゆる SRE 勉強会
2025-12-18
自己紹介 • @r_takaishi / 髙石 諒 @ フライル • ソフトウェアエンジニア
/ ポッドキャスター • OSS ◦ takaishi/tfclean ◦ takaishi/tftargets ◦ takaishi/tfdiff ◦ reproio/terraform-j2md
None
今年の取り組み • tftargets, tfdiff を作った • ルートモジュール分割にトライした • 静的検査にトライした
作ったツール • takaishi/tftargets: モジュール間の依存関係を考慮した plan/apply 対象リ ストアップ • takaishi/tfdiff: HCL
の構造を考慮したルートモジュール間の差分出力
なぜ tftargets が必要だったか • Terraform のルートモジュールを細かく分割した ◦ planの時間短縮や未変更箇所に対する不要なplan抑制 • ルートモジュール設計、いろいろある
◦ 環境単位(プロダクション/ステージング) ◦ さらに細かくレイヤー単位(ネットワーク/ストレージ/アプリケーション) → ルートモジュール分割に伴いある課題解決が必要
ルートモジュールの課題 : plan対象の検知 • どのルートモジュールについて plan するか判断したい • ステージング用ルートモジュールに変更 →
ステージングだけ plan • プロダクションルートモジュールに変更 → プロダクションだけ plan • 共通モジュールにのみ変更 → 両方で plan が必要 GitHub Actions のpath-filterでは難しい
takaishi/tftargets とは • PRの変更差分を解析し、plan対象とす るべきルートモジュール一覧を出力す る • ルートモジュールからのモジュール呼 び出しを解析 →
plan対象の検知の問題を解決
tftargets の成果 • 公開してしばらく経った時、Issue がきた • 数十のアカウント・数百のモジュールを管理しており、シェルスクリプトで 対応している • tftargets
でシェルスクリプトを取り除けるが動かないケースがある • エラーを修正して使ってもらえた
ルートモジュール分割してみてどうだったか • 粒度を小さくしすぎたのか、混乱が生じている ◦ 依存関係や apply の順序など考慮することが増えてしまった ◦ もう少し荒く分けた方がよかったかも •
案外 plan 時間は短縮されなかった ◦ terragrunt で依存関係にあるモジュールを順番に plan するとそこそこ時間がかかる
tfdiff: 環境間の差分確認 • プロダクション/ステージングでルートモジュールを分けて管理し、あまり共 通モジュールがないリポジトリ • 環境間の差分を確認したい • diffコマンドはプレーンテキスト比較 •
Terraform の構造を考慮していない
tfdiff とは • HCL の構造を考慮したルートモジュール間の差分出力 • リソースの有無の違いを検出 ◦ ステージングでは定義したが、プロダクションで定義し忘れている •
引数の値の違いを検出 ◦ ステージング・プロダクション両方にリソースがあるが、引数の値が異なる
tfdiff とは • 片方でのみ定義して、もう片方で定義し忘れている場合を考えます。
tfdiff とは • このとき、tfdiff は以下のように差分として検出します。
tfdiff の利用 • リソース差分がないかをアドホックにチェック • CI に組み込んで変更漏れを検知したい(今後の課題)
静的検査の取り組み • tflint のカスタムルール実装 • checkov のカスタムポリシー実装
tflint: allowed_account_ids の必須化 • 間違ったアカウントに apply しないためのガードレールの一つ • これはエラーになる
tflint: allowed_account_ids の必須化 • 間違ったアカウントに apply しないためのガードレールの一つ • これはエラーにならない
tflint: gp2 を指定している場合 Warning • 試験的に導入中
tflint: モジュール間の循環参照を禁止する • モジュール間の循環参照はエラーで はない • 可読性の低下に繋がる可能性あり • https://github.com/takaishi/tflint -ruleset-takaishi
checkov のカスタムポリシー • plan ファイルを見てリソース名が命名規則に従っているか検査 • https://future-architect.github.io/coding-standards/documents/forA WSResource/AWSインフラリソース命名規約.html
静的検査にトライしてみて • tflint ◦ Go でカスタムルールを書けるのはうれしい • checkov ◦ plan
ファイルのチェックなので新規追加・変更時にしか検知できない ◦ 既存リソースで命名規則に従っていないものを洗い出せればよりよい ▪ tflint だと変数を使った名前の検査ができない?
まとめ • takaishi/tftargets: モジュール間の依存関係を考慮した plan/apply 対象リ ストアップ • takaishi/tfdiff: HCL
の構造を考慮したルートモジュール間の差分出力 • ルートモジュール分割 • 静的検査にトライ(tflint, checkov) 似たような課題で困っている方がいたら使ってもらえると嬉しいです!
SRE 採用中!ありがとうございました!