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
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / La...
Search
SUZUKI Masashi
September 04, 2026
Technology
320
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / Lazy Terraform
https://3-shake.connpass.com/event/402777/
で話した内容
SUZUKI Masashi
September 04, 2026
More Decks by SUZUKI Masashi
See All by SUZUKI Masashi
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
4
690
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
2
870
2026-07-28 3-shakeテックランチ Cloud Run のデプロイパラメータを考える / Cloud Run Deploy Parameter
masasuzu
0
110
2026-07-24 tfpolicyを試してみたのですが、、、、
masasuzu
1
170
2026-06-18 ecspressoのtfstate参照が便利すぎた話
masasuzu
1
510
2026-04-14 Jagu'e'r Cloud Native分科会 Terraform Stateにおけるシークレットの平文保存という課題とその解決
masasuzu
1
94
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
1
520
2026-03-23 Ops-JAWS Meetup39 Session Managerを使った セキュアなサーバーアクセス
masasuzu
3
200
2026-03-11 JAWS-UG 茨城 #12 改めてALBを便利に使う
masasuzu
3
530
Other Decks in Technology
See All in Technology
品質と信頼性を地続きにする
grimoh
2
910
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
470
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.5k
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
25
17k
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
2.3k
なぜ「決定性」が 決定的に重要なのか? Durable Execution 基盤の数理的理解 #serverlessjp / ServerlessDays Tokyo 2026
ytaka23
3
1.1k
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
660
AIによるクリエイティブ生成を行う上での試行錯誤
plaidtech
PRO
0
170
AI de Idea
kawaguti
PRO
2
130
人間はどの意思決定を手放せるのか
kawasima
15
7.9k
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.5k
サーバーレスをどこまで使う? WebRTC対戦ゲームで選んだVPSとの共存設計
kaidouji85
0
310
Featured
See All Featured
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
470
YesSQL, Process and Tooling at Scale
rocio
174
15k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
Odyssey Design
rkendrick25
PRO
2
810
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Product Roadmaps are Hard
iamctodd
55
13k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Designing Experiences People Love
moore
143
24k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
530
Between Models and Reality
mayunak
4
460
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
怠惰なTerraform / Lazy Terraform 2026-09-04 SRE Tech Talk #15 すずきまさし
Copyright © 3-shake, Inc. All Rights Reserved.
おまえだれよ • • • すずきまさし/masasuzu/@masasuz 株式会社スリーシェイクSreake事業部シニアアーキテクト クラウドインフラなんでも屋さんをしてます ◦ お客様の外部から ▪
設計、運用、構築等の技術支援を行います。 ◦ お客様の内部から ▪ インフラチームの一員として内製化支援も行います。 • 得意領域 ◦ AWS ▪ AWS Community Builder Cloud Operation Since 2024~2026 ▪ 2026 Japan All AWS Certifications Engineers ◦ Google Cloud ▪ Google Cloud Partner Top Engineer 2026 ◦ Terraform Copyright © 3-shake, Inc. All Rights Reserved. 2
怠惰 - Lazy • • • • プログラマの三大美徳の 1つ ◦
怠惰、短期、傲慢 Perl開発者ラリー・ウォールの言葉 全体として必要となる労力を減らすためには努力をおしまないこと あとからめんどくさくなるなるものは先回りして実装整備して、あとあとの面倒を減らす Copyright © 3-shake, Inc. All Rights Reserved. 3
怠惰にTerraformを使いたいでござる
怠惰と横着 • • • • 人間楽をしたいんですよ。 ◦ 私は楽して暮らしたいです。 気をつけたいのは怠惰のために減らすのは眼の前の労力でなく、全体の労力 ◦
眼の前だけ減らすのは横着であとから利子付きで返済が求められます ◦ トイルが襲ってくるのです 怠惰は先払い、横着は後払い ◦ ただし、必ずしも先払いが正解とは限らないのは留意したい 横着はその場で書けてしまうが、痛みが出るのは先の話なのが厄介なところ Copyright © 3-shake, Inc. All Rights Reserved. 5
怠惰になるためにのコスト • • 項目 項目 Copyright © 3-shake, Inc. All
Rights Reserved. 6
01 まず、機械に見つけさせる Copyright © 3-shake, Inc. All Rights Reserved. 7
apply で初めて落ちるミスを先に潰す(TFLint) resource "aws_instance" "main" { instance_type = "t1.2xlarge" #
invalid type } 無効なインスタンスタイプを指定しています。 validate も plan も 通ります。apply で初めて落ちます。めんどくさいですね。 tflintで事前にわかるものはわかるようにしておく その他以下のものも検出してくれます • 非推奨構文 • 宣言まわりの不備 ◦ 未使用変数 https://github.com/terraform-linters/tflint Copyright © 3-shake, Inc. All Rights Reserved. 8
セキュリティ観点の設定ミスを事前に防ぐ(trivy config) セキュリティの指摘も後からされるのはめんどくさいですね。 trivy config(旧tfsec) で先に潰せるものは潰しておきます 以下のものも検出してくれます • S3のパブリックアクセスブロックが有効になってない •
S3 の暗号化に CMK を使っていない • Security Groupで0.0.0.0/0が空いている https://github.com/aquasecurity/trivy Copyright © 3-shake, Inc. All Rights Reserved. 9
楽するためにローカルでフックをしかける • • • • git pushしたあとにCIに指摘されて直すのめんどくさいですよ ね。 言われる前に先に気付ける。修正できる仕組みにしておきま す
pre-commitを仕掛けることでコミット前に各種チェックを仕掛 けることができます ◦ pre-commit-terraform: https://github.com/antonbabenko/pre-commit-terraf orm ▪ fmt, terraform-docs, trivy configなどをgit pre commit hookに仕掛けてくれます ◦ Coding AgentのHooksでpre-commit runを発火する ようにすれば設定使い回せるはず VS CodeならformatOnSaveでfmtを実行させるようにすると 手動変更のときに楽になります Copyright © 3-shake, Inc. All Rights Reserved. "[terraform]": { "editor.defaultFormatter": "hashicorp.terraform", "editor.formatOnSave": true, "editor.formatOnSaveMode": "file" }, "[terraform-vars]": { "editor.defaultFormatter": "hashicorp.terraform", "editor.formatOnSave": true, "editor.formatOnSaveMode": "file" } 10
人間に見せる前に、機械に見せる • • • • レビューする側もされる側も楽したいのです。機械が見れるところは機械が見てほしい pre-commitは設定されていないと動かないのでゲートにはできないです。 ◦ 最終的にはCIで担保します fmtに関しては指摘されても直すだけなので、そのまま
CIにコミットさせます 機械が決定論的にチェックできるものは全部任せて、人間は設計と意図の議論に集中できます Copyright © 3-shake, Inc. All Rights Reserved. 11
02 規約、設計で先回りする Copyright © 3-shake, Inc. All Rights Reserved. 12
リソース名を考えたくない resource "aws_lb" "main" {} # そのタイプで唯一なら main resource "aws_instance"
"main" { # 複数リソースあるならmapのキー名をつける for_each = var.instances } resource "aws_db_instance" "primary" {} # 複数リソース使いたい特別なときだけ名前付けする resource "aws_db_instance" "replica" {} • • • コンソール上に見えるリソースの名前ではなく、 Terraformの管理上のリソース IDの話です。 基本的にはmainを使用する ◦ 上のレイヤー、モジュールやアプリで名前がついているのでその中で改めて名前をつける必要があ まりない(と感じてます) ただし HashiCorp 公式は main を使えとは言っていません ◦ 言っているのは Google Cloud と AWS のガイダンス Copyright © 3-shake, Inc. All Rights Reserved. 13
タグも書きたくない • default_tags(AWS)、default_labels(Google Cloud)をprovierブロックで指定しておけば、設定できるリ ソースに関してはデフォルトでタグ、ラベルを設定してくれます。 provider "google" { project =
var.project region = var.region default_labels = { project = var.project managedBy = “Terraform” } } Copyright © 3-shake, Inc. All Rights Reserved. 14
ファイル配置も考えたくない • • 基本形 ◦ main.tf ◦ variables.tf ◦ outputs.tf
◦ providers.tf リソースが増えてくるとリソースごとに分けたくなりますが、複数ファイルを見ると見通しが悪くなる +そこま で規模が大きいなら State分割した方がよいかも Copyright © 3-shake, Inc. All Rights Reserved. 15
READMEを書きたくない • • • 先述してますが、 terraform-docsでインターフェースドキュメントの自動生成を任せられます TF_DOCSブロックの外に StateやModuleでやることの説明を書きます あとで質問されるよりドキュメントを先に書いたほうがめんどくささが少ないです ◦
怠惰なので先回りします <!-- BEGIN_TF_DOCS --> <!-- END_TF_DOCS --> Copyright © 3-shake, Inc. All Rights Reserved. 16
Stateが大きくなりすぎるとつらい • • • 例えばVPCは一度作ると変更頻度はそんなに高くありません。 ◦ 一方ワークロードに関連するリソースは頻繁に変わりうります ◦ これが同じ state
にあると、毎回 変更がないVPC まで巻き込みます。 規模が小さいうちは良いですが大きくなると 1つの変更の影響範囲が広くなります ◦ plan/applyの実行速度が遅くなります ◦ コードの見通しも悪くなります 規模がそれなりに大きくなることを見越しているなら先回りして state分割しておくとよいです Copyright © 3-shake, Inc. All Rights Reserved. 17
state分割の観点 変更頻度・ライフサイク ル ステートフル /レス 責任境界
規模・パフォーマンス ステートフルなデータベースと、 ステートレスなワークロードを分 離します。 インフラチーム、開発チームな ど、管理・運用する組織の境界 に合わせます。 planの実行に数分かかるようで あれば、分割を検討する余地が あります。 NetworkとWorkloadなど変更頻 度、ライフサイクルは違うものを まず考えます。 ただし、分けすぎると複雑性を生みます • state間の依存関係が複雑化するリスク • applyの実行順序管理が複雑化するリスク Copyright © 3-shake, Inc. All Rights Reserved. 18
個人的にはこの分け方にすることが多い • • • • Network(VPC, Subnet, Route) Database(RDS, ElastiCache)
◦ 取り回しによっては Workloadに含めるときもある Workload(ALB, ECS, Security Group) Monitoring Copyright © 3-shake, Inc. All Rights Reserved. 19
03 記述量を減らす(Terragrunt) Copyright © 3-shake, Inc. All Rights Reserved. 20
provider と backend を毎回書きたくない # root.hcl に1回だけ書く remote_state { backend
= "s3" config = { key = "${path_relative_to_include()}/terraform.tfstate" } } generate "provider" { path = "provider.tf" ... } • • • 素の Terraform では backend に変数が使えません。それゆえに毎回ベタに書かないとなりません ◦ Terragruntを使うといい感じに自動生成してくれ、記述量が減ります ◦ OpenTofuなら、、、 dependency + run --all で、apply の順序も手で管理しなくて済みます ◦ 実行順をよしなに判断してくれます Terragruntは便利なのですが、説明するには 30分くらい語れるのでまたの機会に Copyright © 3-shake, Inc. All Rights Reserved. 21
環境ごとにディレクトリをコピーしたくない • • • 素直に書くと環境 *Stateの掛け算でディレクトリが増殖します 環境追加するごとにコピペして、差分箇所を修正する形になります Terragrunt Stacks使うことでunitとenvの組み合わせで Stateを増やせるので組み合わせ起きない
Copyright © 3-shake, Inc. All Rights Reserved. 22
04 まとめ Copyright © 3-shake, Inc. All Rights Reserved. 23
怠惰は先払い、横着は後払い • • • グラフ画像はイメージです (Claudeさん作) 何も根拠はないですが、感覚値としては合ってる気がします 逆に言うと後払い利率が低いものであれば横着がより正しい場面もある Copyright ©
3-shake, Inc. All Rights Reserved. 24
まとめ • • • 怠惰は全体の労力を減らすこと。目の前の労力を減らすのは横着です ◦ 後払いで痛い目見ます 決定論的なレビューの指摘は機械に任せられます。 fmt →
validate → tflint → trivy config ◦ 怠惰な人間は設計レビューに集中します 機械に強制できるのは形の揃え方まで。その先はチームが決める規約です ある程度の規模が見えてるなら State分割を最初から視野に入れるとよいです terragruntを使うと怠惰の極みになります • 各トピックに関してざっくりしか話していないので細かいところはブログに書きます • • Copyright © 3-shake, Inc. All Rights Reserved. 25
怠惰にTerraformを使いたいでござる