Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20220214_Future Tech Night

Taisei Ito
February 17, 2022

20220214_Future Tech Night

Taisei Ito

February 17, 2022
Tweet

More Decks by Taisei Ito

Other Decks in Technology

Transcript

  1. 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"] }
  2. Agenda • Modules使ったStateの分け方 • Workspaces使ったStateの分け方 • ModulesとWorkspacesの合わせ技 Copyright © 2022

    by Future Corporation ※経験に基づいた「多分良さそう」なことを話します #future_tech_night
  3. 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
  4. リソース分割① Copyright © 2022 by Future Corporation . ├── modules

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

    // Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ ├── rds │ └── vpc ├── dev // 開発環境用 ├── stg // 検証環境向け └── prd // 本番環境向け #future_tech_night
  6. 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
  7. Moduleにおける権限分離 Copyright © 2022 by Future Corporation • ディレクトリ構成で分離ができる ◦

    =各々にStateが生成されるから • サービス群の単位で設定ができる ◦ Workspacesよりリソースに対して柔軟に対応できる
  8. 例)STG ① Copyright © 2022 by Future Corporation vpc module

    rds module service A module service B module
  9. リソース分割② 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
  10. Moduleにおける権限分離 Copyright © 2022 by Future Corporation • ディレクトリ構成で分離ができる ◦

    =各々にStateが生成されるから • サービス群の単位で設定ができる ◦ Workspacesよりリソースに対して柔軟に対応できる • 開発者単位でインフラもコントロール可能 #future_tech_night
  11. Workspacesとは Copyright © 2022 by Future Corporation • Stateに名前をつけて、リソースの管理を分割する機能 ◦

    =Terraformにおける管理が分かれる ◦ =リソースの依存関係を断ち切れる • =「ヒト」の権限を分ける境界とすることもできる #future_tech_night
  12. 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
  13. Workspacesとは Copyright © 2022 by Future Corporation • Stateに名前をつけて、リソースの管理を分割する機能 ◦

    =Terraformにおける管理が分かれる ◦ =リソースの依存関係を断ち切れる • =「ヒト」の権限を分ける境界とすることもできる #future_tech_night
  14. まとめ Copyright © 2022 by Future Corporation • Modules ◦

    単一のサービスとその環境を分けるために利用 ◦ サービスのサブ環境→本番でフルセット • Workspaces ◦ 複数のサービスと環境面が少ない場合 • まとめて利用するときは適材適所 #future_tech_night
  15. アプローチが違うものの組み合わせ Copyright © 2022 by Future Corporation • Modules ◦

    サービスを分割して管理することには有効 • Workspaces ◦ 環境の単純なレプリケーションには有効 #future_tech_night
  16. リソースの特性 Copyright © 2022 by Future Corporation • ネットワーキング系 ◦

    リソースの環境差異が生まれにくい →Workspaces向きのリソース • コンピュート系・運用系 ◦ 環境差異が生まれやすい(数、スペック、etc…) →Modules向きなリソース #future_tech_night
  17. 再掲) Copyright © 2022 by Future Corporation vpc module rds

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

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

    module service A module service B module Workspaces化する
  20. Stateがどう分かれるか Copyright © 2022 by Future Corporation . ├── modules

    // Modulesを格納するディレクトリ │ ├── service_a │ ├── service_b │ └── rds ├── stg1 // 検証環境① ├── stg2 // 検証環境② ├── prd // 本番環境向け └── vpc #future_tech_night
  21. 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)
  22. 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に変更が入らない!
  23. 事前にやること Copyright © 2022 by Future Corporation • VPC側 ◦

    Outputsを詳細に書く(これが多分一番面倒) • 各環境側 ◦ Data Resourceで引っ張れるようにする #future_tech_night
  24. まとめ Copyright © 2022 by Future Corporation • ModulesとWorkspacesは異なるもの •

    Modules ◦ リソースのまとまりで分ける ▪ マイクロサービス的思考(疎結合) • Workspacesは ◦ 環境(責任も込み)を分けるのには最適 • Stateの分かれ目=責任の分かれ目 #future_tech_night
  25. 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
  26. 参考資料 • 書籍 ◦ Terraform Up & Running 2nd Edition

    ◦ Infrastructure as Code 2nd Edition Copyright © 2022 by Future Corporation
  27. 過去資料 • 技術ブログ ◦ Terraformerとしてコードを書いて思うこと • Qiita ◦ 僕がTerraformをできるようになるまで ◦

    Terraformで使った黒魔術2021 • 過去登壇資料 ◦ 今晩から始めるTerraform ◦ 20210210 Terraform Meetup ONLINE Copyright © 2021 by Future Corporation