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
Taisei Ito
February 17, 2022
Technology
0
2.3k
20220214_Future Tech Night
Taisei Ito
February 17, 2022
Tweet
Share
More Decks by Taisei Ito
See All by Taisei Ito
Cloudflare Meetup Nagano Vol.3
kaedemalu
0
63
Cloudflare Meetup Nagano Vol.2
kaedemalu
0
1.5k
20210910_nyle
kaedemalu
0
960
20210827 Future Tech Night
kaedemalu
0
4.4k
CNDO2021 Open Policy Agent
kaedemalu
1
1.4k
20210210 Terraform meetup ONLINE
kaedemalu
0
650
Future Talk Night 20201118
kaedemalu
0
220
20201114 GCPUG Shonan
kaedemalu
0
440
Future New Graduate Session
kaedemalu
0
78
Other Decks in Technology
See All in Technology
プロダクトエンジニアリング組織への歩み、その現在地 / Our journey to becoming a product engineering organization
hiro_torii
0
130
データプラットフォーム技術におけるメダリオンアーキテクチャという考え方/DataPlatformWithMedallionArchitecture
smdmts
5
650
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
3
910
「良さそう」と「とても良い」の間には 「良さそうだがホンマか」がたくさんある / 2025.07.01 LLM品質Night
smiyawaki0820
1
330
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1.2k
作曲家がボカロを使うようにPdMはAIを使え
itotaxi
0
140
生成AI活用の組織格差を解消する 〜ビジネス職のCursor導入が開発効率に与えた好循環〜 / Closing the Organizational Gap in AI Adoption
upamune
5
4k
2025-06-26_Lightning_Talk_for_Lightning_Talks
_hashimo2
2
100
CursorによるPMO業務の代替 / Automating PMO Tasks with Cursor
motoyoshi_kakaku
0
370
AIのAIによるAIのための出力評価と改善
chocoyama
2
580
Model Mondays S2E03: SLMs & Reasoning
nitya
0
100
Lambda Web Adapterについて自分なりに理解してみた
smt7174
5
130
Featured
See All Featured
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Navigating Team Friction
lara
187
15k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Agile that works and the tools we love
rasmusluckow
329
21k
Done Done
chrislema
184
16k
Into the Great Unknown - MozCon
thekraken
39
1.9k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Why Our Code Smells
bkeepers
PRO
337
57k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Scaling GitHub
holman
459
140k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
710
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