Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
Search
Ryo Takaishi
December 18, 2025
900
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
Ryo Takaishi
December 18, 2025
More Decks by Ryo Takaishi
See All by Ryo Takaishi
通知再考 ~ 最高のアラート通知を今改めて考える ~
takaishi
0
590
スロークエリとの戦いの軌跡2024 / ゆるSRE勉強会 #10
takaishi
1
940
AWSを使ったカンファレンスの 配信アーキテクチャ - 吉祥寺.pm37
takaishi
2
680
どうやればインシデント対応能力を鍛えられるのか? / SRE Kaigi 2025
takaishi
13
13k
Podcastを3年半続ける技術と得た物 / ya8-2024
takaishi
5
2.1k
入門!ClusterAPI 〜 k8s クラスターも k8s API で管理したい 〜 / k8s_meetup_31
takaishi
3
4.9k
CloudNativeへの道 リーダーシップとフォロワーシップ / 201911-cndjp13
takaishi
2
1k
ClusterAPI v1alpha1 → v1alpha2 / k8s_meetup_23
takaishi
1
1.7k
実録!CloudNativeを 目指した230日 / cloud-native-days-tokyo-2019
takaishi
2
2.7k
Featured
See All Featured
We Are The Robots
honzajavorek
0
380
Designing Experiences People Love
moore
143
24k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
250
Done Done
chrislema
187
17k
Scaling GitHub
holman
464
140k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
740
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Navigating Team Friction
lara
192
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
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 採用中!ありがとうございました!