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
20220214_Future Tech Night
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Taisei Ito
February 17, 2022
Technology
0
2.5k
20220214_Future Tech Night
Taisei Ito
February 17, 2022
Tweet
Share
More Decks by Taisei Ito
See All by Taisei Ito
Grafana Meetup Japan Vol. 6
kaedemalu
1
700
Cloudflare Meetup Nagano Vol.3
kaedemalu
0
96
Cloudflare Meetup Nagano Vol.2
kaedemalu
0
1.9k
20210910_nyle
kaedemalu
0
1k
20210827 Future Tech Night
kaedemalu
0
4.5k
CNDO2021 Open Policy Agent
kaedemalu
1
1.4k
20210210 Terraform meetup ONLINE
kaedemalu
0
690
Future Talk Night 20201118
kaedemalu
0
230
20201114 GCPUG Shonan
kaedemalu
0
480
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
6.8k
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
230
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
320
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
190
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
170
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
190
~Everything as Codeを諦めない~ 後からCDK
mu7889yoon
3
420
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
Context Engineeringの取り組み
nutslove
0
360
We Built for Predictability; The Workloads Didn’t Care
stahnma
0
140
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
120
The untapped power of vector embeddings
frankvandijk
1
1.6k
Producing Creativity
orderedlist
PRO
348
40k
Faster Mobile Websites
deanohume
310
31k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
Scaling GitHub
holman
464
140k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.4k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Building Applications with DynamoDB
mza
96
6.9k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
Become a Pro
speakerdeck
PRO
31
5.8k
Transcript
Stateの分割戦略 ~Modulesと Workspacesを利用して~ 2022/2/14 Thu. Taisei Ito Copyright © 2022
by Future Corporation #future_tech_night
Copyright © 2022 by Future Corporation 自己紹介 resource "introduction" "me"
{ name = "Taisei Ito" account = "@kaedemalu" group = "Technology Innovation Group" position = ["Senior Consultant", "TechBlog Editor"] like = ["GCP", "Terraform", "AWS"] hobby = ["Sauna", "Drive", "Camera"] }
State管理 • ちゃんとしていますか? • 意志を持って分けていますか? • 機能を理解して管理していますか? Copyright © 2022
by Future Corporation #future_tech_night
State管理 • すでに作り変えたい! →棚井さんのセッションへ Copyright © 2022 by Future Corporation
#future_tech_night
Agenda • Modules使ったStateの分け方 • Workspaces使ったStateの分け方 • ModulesとWorkspacesの合わせ技 Copyright © 2022
by Future Corporation ※経験に基づいた「多分良さそう」なことを話します #future_tech_night
はじめに • Stateの分かれ目 ◦ =責任の分かれ目 ◦ =管理の分かれ目 Copyright © 2022
by Future Corporation #future_tech_night
よくある話だけど。。 • ModulesとWorkspacesは全く別の機能 • 流派とか言われるレベルで似ているものでもない Copyright © 2022 by Future
Corporation #future_tech_night
ModulesでのStateの取り扱い Copyright © 2022 by Future Corporation 1
Modulesとは A module is a container for multiple resources that
are used together. • 共に使う複数リソース群の「まとまり」 ◦ ≠クラウドのサービスごと ◦ =アーキテクチャを踏まえた構成 • State自体は単一になる Copyright © 2022 by Future Corporation 参考:https://www.terraform.io/language/modules
リソース分割① Copyright © 2022 by Future Corporation
リソース分割① Copyright © 2022 by Future Corporation vpc module lb
module eks module ecs module rds module
リソース分割① Copyright © 2022 by Future Corporation . ├── modules
// Modulesを格納するディレクトリ │ ├── ecs │ ├── eks │ ├── lb │ ├── rds │ └── vpc ├── dev // 開発環境用 ├── stg // 検証環境向け └── prd // 本番環境向け #future_tech_night
リソース分割② Copyright © 2022 by Future Corporation
リソース分割② Copyright © 2022 by Future Corporation vpc module rds
module service A module service B module
リソース分割② Copyright © 2022 by Future Corporation . ├── modules
// Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ ├── rds │ └── vpc ├── dev // 開発環境用 ├── stg // 検証環境向け └── prd // 本番環境向け #future_tech_night
Stateがどう分割されるか Copyright © 2022 by Future Corporation . ├── modules
// Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ ├── rds │ └── vpc ├── dev // 開発環境用 ├── stg // 検証環境向け └── prd // 本番環境向け State Dev State Stg State Prd #future_tech_night
Moduleにおける権限分離 Copyright © 2022 by Future Corporation • ディレクトリ構成で分離ができる ◦
=各々にStateが生成されるから • サービス群の単位で設定ができる ◦ Workspacesよりリソースに対して柔軟に対応できる
例)STG ① Copyright © 2022 by Future Corporation vpc module
rds module service A module service B module
例)STG ② Copyright © 2022 by Future Corporation vpc module
rds module service B module
リソース分割② Copyright © 2022 by Future Corporation . ├── modules
// Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ ├── rds │ └── vpc ├── stg1 // 検証環境① ├── stg2 // 検証環境② └── prd // 本番環境向け State Stg1 State Stg2 State Prd • service_a • service_b • rds • vpc • service_a • service_b • rds • vpc • service_a • service_b • rds • vpc #future_tech_night
Moduleにおける権限分離 Copyright © 2022 by Future Corporation • ディレクトリ構成で分離ができる ◦
=各々にStateが生成されるから • サービス群の単位で設定ができる ◦ Workspacesよりリソースに対して柔軟に対応できる • 開発者単位でインフラもコントロール可能 #future_tech_night
WorkspacesでのStateの取り扱い Copyright © 2022 by Future Corporation 2
Workspacesとは Copyright © 2022 by Future Corporation • Stateに名前をつけて、リソースの管理を分割する機能 ◦
=Terraformにおける管理が分かれる ◦ =リソースの依存関係を断ち切れる • =「ヒト」の権限を分ける境界とすることもできる #future_tech_night
Workspacesによる権限分離 Copyright © 2022 by Future Corporation State Stg State
Prd Admin Developer #future_tech_night
Workspacesによる権限分離 Copyright © 2022 by Future Corporation State Stg State
Prd Admin Developer #future_tech_night
Workspacesによる権限分離 Copyright © 2022 by Future Corporation State Stg State
Prd Admin Developer • Admin OK • Developer OK • Admin OK • Developer NG S3 Object Policy #future_tech_night
Workspacesとは Copyright © 2022 by Future Corporation • Stateに名前をつけて、リソースの管理を分割する機能 ◦
=Terraformにおける管理が分かれる ◦ =リソースの依存関係を断ち切れる • =「ヒト」の権限を分ける境界とすることもできる #future_tech_night
まとめ Copyright © 2022 by Future Corporation • Modules ◦
単一のサービスとその環境を分けるために利用 ◦ サービスのサブ環境→本番でフルセット • Workspaces ◦ 複数のサービスと環境面が少ない場合 • まとめて利用するときは適材適所 #future_tech_night
両方使う Copyright © 2022 by Future Corporation 3
アプローチが違うものの組み合わせ Copyright © 2022 by Future Corporation • Modules ◦
サービスを分割して管理することには有効 • Workspaces ◦ 環境の単純なレプリケーションには有効 #future_tech_night
リソースの特性 Copyright © 2022 by Future Corporation • ネットワーキング系 ◦
リソースの環境差異が生まれにくい →Workspaces向きのリソース • コンピュート系・運用系 ◦ 環境差異が生まれやすい(数、スペック、etc…) →Modules向きなリソース #future_tech_night
再掲) Copyright © 2022 by Future Corporation vpc module rds
module service A module service B module
再掲) Copyright © 2022 by Future Corporation vpc module rds
module service A module service B module Workspaces化する
再掲) Copyright © 2022 by Future Corporation vpc module rds
module service A module service B module Workspaces化する
Stateがどう分かれるか Copyright © 2022 by Future Corporation . ├── modules
// Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ └── rds ├── stg1 // 検証環境① ├── stg2 // 検証環境② ├── prd // 本番環境向け └── vpc #future_tech_night
Stateがどう分かれるか Copyright © 2022 by Future Corporation . ├── modules
│ ├── service_a │ ├── service_b │ └── rds ├── stg1 ├── stg2 ├── prd └── vpc State Stg1 State Stg2 State Prd State Stg (Workspaces) State Prd (Workspaces)
Referする Copyright © 2022 by Future Corporation . ├── modules
│ ├── service_a │ ├── service_b │ └── rds ├── stg1 ├── stg2 ├── prd └── vpc State Stg1 State Stg2 State Prd State Stg (Workspaces) State Prd (Workspaces) • Data Resourceでやりとり →VPCに変更が入らない!
事前にやること Copyright © 2022 by Future Corporation • VPC側 ◦
Outputsを詳細に書く(これが多分一番面倒) • 各環境側 ◦ Data Resourceで引っ張れるようにする #future_tech_night
まとめ Copyright © 2022 by Future Corporation • ModulesとWorkspacesは異なるもの •
Modules ◦ リソースのまとまりで分ける ▪ マイクロサービス的思考(疎結合) • Workspacesは ◦ 環境(責任も込み)を分けるのには最適 • Stateの分かれ目=責任の分かれ目 #future_tech_night
Fin Copyright © 2022 by Future Corporation
Appendix Copyright © 2022 by Future Corporation
Modulesでの変数の追い方 Modules Environment VPC WEB DB : main variable resources
variables resources variables resources variables instance_type = “t2.micro” module “web” { … instance_type = local.instance_type … } Copyright © 2022 by Future Corporation
参考資料 • 書籍 ◦ Terraform Up & Running 2nd Edition
◦ Infrastructure as Code 2nd Edition Copyright © 2022 by Future Corporation
過去資料 • 技術ブログ ◦ Terraformerとしてコードを書いて思うこと • Qiita ◦ 僕がTerraformをできるようになるまで ◦
Terraformで使った黒魔術2021 • 過去登壇資料 ◦ 今晩から始めるTerraform ◦ 20210210 Terraform Meetup ONLINE Copyright © 2021 by Future Corporation