Slide 1

Slide 1 text

Stateの分割戦略 ~Modulesと Workspacesを利用して~ 2022/2/14 Thu. Taisei Ito Copyright © 2022 by Future Corporation #future_tech_night

Slide 2

Slide 2 text

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"] }

Slide 3

Slide 3 text

State管理 ● ちゃんとしていますか? ● 意志を持って分けていますか? ● 機能を理解して管理していますか? Copyright © 2022 by Future Corporation #future_tech_night

Slide 4

Slide 4 text

State管理 ● すでに作り変えたい! →棚井さんのセッションへ Copyright © 2022 by Future Corporation #future_tech_night

Slide 5

Slide 5 text

Agenda ● Modules使ったStateの分け方 ● Workspaces使ったStateの分け方 ● ModulesとWorkspacesの合わせ技 Copyright © 2022 by Future Corporation ※経験に基づいた「多分良さそう」なことを話します #future_tech_night

Slide 6

Slide 6 text

はじめに ● Stateの分かれ目 ○ =責任の分かれ目 ○ =管理の分かれ目 Copyright © 2022 by Future Corporation #future_tech_night

Slide 7

Slide 7 text

よくある話だけど。。 ● ModulesとWorkspacesは全く別の機能 ● 流派とか言われるレベルで似ているものでもない Copyright © 2022 by Future Corporation #future_tech_night

Slide 8

Slide 8 text

ModulesでのStateの取り扱い Copyright © 2022 by Future Corporation 1

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

リソース分割① Copyright © 2022 by Future Corporation

Slide 11

Slide 11 text

リソース分割① Copyright © 2022 by Future Corporation vpc module lb module eks module ecs module rds module

Slide 12

Slide 12 text

リソース分割① Copyright © 2022 by Future Corporation . ├── modules // Modulesを格納するディレクトリ │ ├── ecs │ ├── eks │ ├── lb │ ├── rds │ └── vpc ├── dev // 開発環境用 ├── stg // 検証環境向け └── prd // 本番環境向け #future_tech_night

Slide 13

Slide 13 text

リソース分割② Copyright © 2022 by Future Corporation

Slide 14

Slide 14 text

リソース分割② Copyright © 2022 by Future Corporation vpc module rds module service A module service B module

Slide 15

Slide 15 text

リソース分割② Copyright © 2022 by Future Corporation . ├── modules // Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ ├── rds │ └── vpc ├── dev // 開発環境用 ├── stg // 検証環境向け └── prd // 本番環境向け #future_tech_night

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Moduleにおける権限分離 Copyright © 2022 by Future Corporation ● ディレクトリ構成で分離ができる ○ =各々にStateが生成されるから ● サービス群の単位で設定ができる ○ Workspacesよりリソースに対して柔軟に対応できる

Slide 18

Slide 18 text

例)STG ① Copyright © 2022 by Future Corporation vpc module rds module service A module service B module

Slide 19

Slide 19 text

例)STG ② Copyright © 2022 by Future Corporation vpc module rds module service B module

Slide 20

Slide 20 text

リソース分割② 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

Slide 21

Slide 21 text

Moduleにおける権限分離 Copyright © 2022 by Future Corporation ● ディレクトリ構成で分離ができる ○ =各々にStateが生成されるから ● サービス群の単位で設定ができる ○ Workspacesよりリソースに対して柔軟に対応できる ● 開発者単位でインフラもコントロール可能 #future_tech_night

Slide 22

Slide 22 text

WorkspacesでのStateの取り扱い Copyright © 2022 by Future Corporation 2

Slide 23

Slide 23 text

Workspacesとは Copyright © 2022 by Future Corporation ● Stateに名前をつけて、リソースの管理を分割する機能 ○ =Terraformにおける管理が分かれる ○ =リソースの依存関係を断ち切れる ● =「ヒト」の権限を分ける境界とすることもできる #future_tech_night

Slide 24

Slide 24 text

Workspacesによる権限分離 Copyright © 2022 by Future Corporation State Stg State Prd Admin Developer #future_tech_night

Slide 25

Slide 25 text

Workspacesによる権限分離 Copyright © 2022 by Future Corporation State Stg State Prd Admin Developer #future_tech_night

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Workspacesとは Copyright © 2022 by Future Corporation ● Stateに名前をつけて、リソースの管理を分割する機能 ○ =Terraformにおける管理が分かれる ○ =リソースの依存関係を断ち切れる ● =「ヒト」の権限を分ける境界とすることもできる #future_tech_night

Slide 28

Slide 28 text

まとめ Copyright © 2022 by Future Corporation ● Modules ○ 単一のサービスとその環境を分けるために利用 ○ サービスのサブ環境→本番でフルセット ● Workspaces ○ 複数のサービスと環境面が少ない場合 ● まとめて利用するときは適材適所 #future_tech_night

Slide 29

Slide 29 text

両方使う Copyright © 2022 by Future Corporation 3

Slide 30

Slide 30 text

アプローチが違うものの組み合わせ Copyright © 2022 by Future Corporation ● Modules ○ サービスを分割して管理することには有効 ● Workspaces ○ 環境の単純なレプリケーションには有効 #future_tech_night

Slide 31

Slide 31 text

リソースの特性 Copyright © 2022 by Future Corporation ● ネットワーキング系 ○ リソースの環境差異が生まれにくい →Workspaces向きのリソース ● コンピュート系・運用系 ○ 環境差異が生まれやすい(数、スペック、etc…) →Modules向きなリソース #future_tech_night

Slide 32

Slide 32 text

再掲) Copyright © 2022 by Future Corporation vpc module rds module service A module service B module

Slide 33

Slide 33 text

再掲) Copyright © 2022 by Future Corporation vpc module rds module service A module service B module Workspaces化する

Slide 34

Slide 34 text

再掲) Copyright © 2022 by Future Corporation vpc module rds module service A module service B module Workspaces化する

Slide 35

Slide 35 text

Stateがどう分かれるか Copyright © 2022 by Future Corporation . ├── modules // Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ └── rds ├── stg1 // 検証環境① ├── stg2 // 検証環境② ├── prd // 本番環境向け └── vpc #future_tech_night

Slide 36

Slide 36 text

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)

Slide 37

Slide 37 text

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に変更が入らない!

Slide 38

Slide 38 text

事前にやること Copyright © 2022 by Future Corporation ● VPC側 ○ Outputsを詳細に書く(これが多分一番面倒) ● 各環境側 ○ Data Resourceで引っ張れるようにする #future_tech_night

Slide 39

Slide 39 text

まとめ Copyright © 2022 by Future Corporation ● ModulesとWorkspacesは異なるもの ● Modules ○ リソースのまとまりで分ける ■ マイクロサービス的思考(疎結合) ● Workspacesは ○ 環境(責任も込み)を分けるのには最適 ● Stateの分かれ目=責任の分かれ目 #future_tech_night

Slide 40

Slide 40 text

Fin Copyright © 2022 by Future Corporation

Slide 41

Slide 41 text

Appendix Copyright © 2022 by Future Corporation

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

参考資料 ● 書籍 ○ Terraform Up & Running 2nd Edition ○ Infrastructure as Code 2nd Edition Copyright © 2022 by Future Corporation

Slide 44

Slide 44 text

過去資料 ● 技術ブログ ○ Terraformerとしてコードを書いて思うこと ● Qiita ○ 僕がTerraformをできるようになるまで ○ Terraformで使った黒魔術2021 ● 過去登壇資料 ○ 今晩から始めるTerraform ○ 20210210 Terraform Meetup ONLINE Copyright © 2021 by Future Corporation