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

🧑‍🚀 tfstate の分割パタヌンずディレクトリ構成ぞの適甚

🧑‍🚀 tfstate の分割パタヌンずディレクトリ構成ぞの適甚

『Terraform掻甚倧党 - IaCの今。』の登壇資料です

・Terraformのtfstateの分割パタヌン
・tfstate分割をリポゞトリやリモヌトバック゚ンドのディレクトリ構成ぞの適甚する方法

を玹介したした

スラむドでは少ししか分割パタヌンを玹介できたせんでしたので、ぜひ元蚘事 (tfstateファむルの分割パタヌンずディレクトリ構成ぞの適甚) もご参照ください👍🏻

More Decks by 長谷川広暹

Other Decks in Programming

Transcript

  1. マむクロサヌビスアヌキのむンフラ領域が仕事 ・マむクロサヌビスアヌキを支えるむンフラ技術 ・ドメむン駆動蚭蚈 俺です 瀟内で色々ふざけ過ぎおるので、そろそろ怒られるかもヌ ・サヌビスメッシュ (Istio ←掚し❀) ・IaC (Kubernetes,

    Helm, Terraform) ・CICD (GitLab CI, ArgoCD) ・監芖 (Prometheus, Fluentd, Kiali, OpenTelemetry入門䞭) ・クラりドむンフラ (AWS, ちょいGoogle Cloud) マむクロサヌビスアヌキ関連の技術が奜き 虫捕り぀いでに 虫食っおた話 する
  2. terraform_remote_state で䟝存関係を実装する foo-tfstate 䞊のリ゜ヌス が bar-tfstate 䞊のAWS VPCを参照する堎合 䟝存方向は foo-tfstate

    → bar-tfstate data "terraform_remote_state" "bar" { backend= "s3" config = { bucket = "tfstate" # barリ゜ヌスを管理する bar-tfstate を指定 key = "bar/terraform.tfstate" region = "ap-northeast-1" } } resource "example" "foo" { # fooリ゜ヌスは、bar-tfstate 䞊のAWS VPCに䟝存 vpc_id = data.terraform_remote_state.bar.outputs.bar_vpc_id 
 }
  3. tfstate 分割をリポゞトリのディレクトリ構成にも適甚する 🐱 repository/ ├── 📂 foo/ # tfstate 分割に合わせおディレクトリを分割

    (リポゞトリでもよい) │ ├── backend.tf # バック゚ンドにある分割された foo-tfstate を指定 │ 
 │ └── 📂 bar/ ├── backend.tf # バック゚ンドにある分割された bar-tfstate を指定 
 tfstate 分割に䞀臎するように、リポゞトリのディレクトリを分割する (異なるリポゞトリずしお分割しおもよい) “なんでもあり” になりがちな、リポゞトリのディレクトリ構成を 蚭蚈しやすくなっちゃう🎉
  4. 適切なパタヌンを遞んで、おれは target をやめるぞッ (俺が芳枬した) tfstate 分割パタヌン おすすめ 今回玹介するもの プロバむダヌ別 ★★★

    ✅ 実行環境別 ★★★ ✅ 運甚チヌムの責務範囲別 ★★ ✅ (持ち時間の関係でスラむドのみ) プロダクトのサブコンポヌネント別 ★★ 同じテナント内のプロダクト別 AWSリ゜ヌスの皮類グルヌプ別 AWSリ゜ヌスの状態の倉曎頻床グルヌプ別 耇数の分割パタヌンを組み合わせる ★ (組み合わせ方による)
  5. “プロバむダヌ別” “実行環境別” を組み合わせるッ 実行環境 プロバむダヌ ・Tes環境 (怜蚌環境) ・Stg環境 (ナヌザヌ受け入れ環境) ・Prd環境

    (本番環境) ・䞻芁プロバむダヌ (䟋AWS) ・アプリ/むンフラ監芖プロバむダヌ (䟋Datadog) ・ゞョブ監芖プロバむダヌ (䟋Healthchecks) ・むンシデント管理プロバむダヌ (䟋PagerDuty) 各プロバむダヌの管理者は target なしで 各実行環境の tfstate を操䜜できる
  6. tfstate 分割をリポゞトリのディレクトリ構成にも適甚する 🐱 aws-repository/ # プロバむダヌごずにリポゞトリずしお分割 ├── output.tf ├── provider.tf

    ├── remote_state.tf # terraform_remote_state を䜿甚 ├── 📂 tes/ # 実行環境ごずにディレクトリを分割 │ ├── backend.tfvars # バック゚ンドにある分割された tfstate を指定 │ 
 │ ├── 📂 stg/ # Stg環境 └── 📂 prd/ # Prd環境 プロバむダヌ tfstate 分割に䞀臎するように 異なる “リポゞトリ” ずしお分割 実行環境 tfstate 分割に䞀臎するように “ディレクトリ” を分割 䟋えば、AWSリ゜ヌスの状態のみを管理するリポゞトリの堎合 
  7. tfstate 分割をバック゚ンドのディレクトリ構成にも適甚する プロバむダヌ tfstate 分割に䞀臎するように “ディレクトリ” を分割 実行環境 tfstate 分割に䞀臎するように

    異なる “バック゚ンド” ずしお分割 🪣 tes-bucket/ # 実行環境ごずにバック゚ンドずしお分割 ├── 📂 aws/ # プロバむダヌごずにディレクトリを分割 │ └── terraform.tfstate # Tes環境のAWSリ゜ヌスの状態を持぀ tfstate │ ├── 📂 datadog/ ├── 📂 healthchecks/ └── 📂 pagerduty/ 䟋えば、Tes環境甚のみを管理するバック゚ンドの堎合 
  8. “プロバむダヌ別” “実行環境別” “運甚チヌム責務範囲別” を組み合わせるッ 実行環境 (䟋Tes環境, Stg環境, Prd環境) プロバむダヌ (䟋AWS)

    各運甚チヌムのメンバヌは target なしで 各実行環境の状態を操䜜できる 運甚チヌム ・フロント゚ンド (CloudFront, S3, ...) ・SRE (EC2, ECS, EKS, ...) ・バック゚ンド (API Gateway, ElastiCache, ...)
  9. tfstate 分割をリポゞトリのディレクトリ構成にも適甚する 🐱 aws-sre-team-repository/ # プロバむダヌず運甚チヌムごずにリポゞトリずしお分割 ├── provider.tf ├── output.tf

    ├── remote_state.tf # terraform_remote_state を䜿甚 ├── ec2.tf / ecs.tf / eks.tf / 
 ├── 📂 tes # 実行環境ごずにディレクトリを分割 │ ├── backend.tfvars # バック゚ンドにある分割された tfstate を指定 │ 
 │ ├── 📂 stg # Stg環境 └── 📂 prd # Prd環境 運甚チヌム リポゞトリを分割 実行環境 バック゚ンドずしお分割 䟋えば、SREチヌム管蜄のAWSリ゜ヌスの状態のみを管理するリポゞトリの堎合... プロバむダヌ リポゞトリを分割
  10. tfstate 分割をバック゚ンドのディレクトリ構成にも適甚する 🪣 tes-bucket/ ├── 📂 frontend-team ├── 📂 sre-team

    │ └── terraform.tfstate # sreチヌムの状態を持぀ │ └── 📂 backend-team 䟋えば、Tes環境のAWSリ゜ヌスのみを管理するバック゚ンドの堎合... 運甚チヌム ディレクトリを分割 実行環境 バック゚ンドずしお分割 プロバむダヌ ディレクトリを分割