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.2k
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.2
kaedemalu
0
1.2k
20210910_nyle
kaedemalu
0
900
20210827 Future Tech Night
kaedemalu
0
4.2k
CNDO2021 Open Policy Agent
kaedemalu
1
1.3k
20210210 Terraform meetup ONLINE
kaedemalu
0
610
Future Talk Night 20201118
kaedemalu
0
190
20201114 GCPUG Shonan
kaedemalu
0
410
Future New Graduate Session
kaedemalu
0
60
Google Cloud Next '20 Recap Security Section
kaedemalu
1
310
Other Decks in Technology
See All in Technology
DatabricksにおけるLLMOpsのベストプラクティス
taka_aki
4
1.6k
スクラムチームを立ち上げる〜チーム開発で得られたもの・得られなかったもの〜
ohnoeight
2
290
RustとWebAssemblyを使って高速な画像処理をWebアプリで実行しよう
rebonire626
0
110
mikroBus HAT を用いた簡易ベアメタル開発
tarotene
0
270
Microsoft Intune アプリのトラブルシューティング
sophiakunii
1
400
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
0
1.1k
LINEヤフー株式会社における音声言語情報処理AI研究開発@SP/SLP研究会 2024.10.22
lycorptech_jp
PRO
2
280
QAEチームが辿った3年 ボクらが改善業務にスクラムを選んだワケ / 20241108_cloudsign_ques23
bengo4com
0
590
Microsoft MVPになる前、なってから/Fukuoka_Tech_Women_Community_1_baba
nina01
0
170
2024年グライダー曲技世界選手権参加報告/2024 WGAC report
jscseminar
0
200
Forget efficiency – Become more productive without the stress
ufried
1
240
利きプロセススケジューラ
sat
PRO
4
2.6k
Featured
See All Featured
Speed Design
sergeychernyshev
24
600
It's Worth the Effort
3n
183
27k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Navigating Team Friction
lara
183
14k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Typedesign – Prime Four
hannesfritz
40
2.4k
Being A Developer After 40
akosma
86
590k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Building an army of robots
kneath
302
42k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
YesSQL, Process and Tooling at Scale
rocio
168
14k
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