Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
Search
Ryo Takaishi
December 18, 2025
0
99
2025 年私の Terraform に関するふりかえり / ゆるSRE勉強会 #14
Ryo Takaishi
December 18, 2025
Tweet
Share
More Decks by Ryo Takaishi
See All by Ryo Takaishi
スロークエリとの戦いの軌跡2024 / ゆるSRE勉強会 #10
takaishi
1
820
AWSを使ったカンファレンスの 配信アーキテクチャ - 吉祥寺.pm37
takaishi
2
550
どうやればインシデント対応能力を鍛えられるのか? / SRE Kaigi 2025
takaishi
13
12k
Podcastを3年半続ける技術と得た物 / ya8-2024
takaishi
5
1.9k
入門!ClusterAPI 〜 k8s クラスターも k8s API で管理したい 〜 / k8s_meetup_31
takaishi
3
4.7k
CloudNativeへの道 リーダーシップとフォロワーシップ / 201911-cndjp13
takaishi
2
960
ClusterAPI v1alpha1 → v1alpha2 / k8s_meetup_23
takaishi
1
1.6k
実録!CloudNativeを 目指した230日 / cloud-native-days-tokyo-2019
takaishi
2
2.6k
Consul Connect and Kubernetes Integration / cloud native meetup tokyo 7
takaishi
2
2.3k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Typedesign – Prime Four
hannesfritz
42
2.9k
Producing Creativity
orderedlist
PRO
348
40k
The Language of Interfaces
destraynor
162
25k
GraphQLとの向き合い方2022年版
quramy
50
14k
RailsConf 2023
tenderlove
30
1.3k
Statistics for Hackers
jakevdp
799
230k
The Cult of Friendly URLs
andyhume
79
6.7k
[SF Ruby Conf 2025] Rails X
palkan
0
540
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
390
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
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 採用中!ありがとうございました!