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

Terraformでmoduleを使わずに複数環境を構築して感じた利点

 Terraformでmoduleを使わずに複数環境を構築して感じた利点

Terraform活用大全 - IaCの今。 Lunch LT(https://findy.connpass.com/event/298972/) 登壇資料

参照先Zenn記事 https://zenn.dev/smartround_dev/articles/5e20fa7223f0fd

shonansurvivors

October 24, 2023
Tweet

More Decks by shonansurvivors

Other Decks in Technology

Transcript

  1. 自己紹介 株式会社スマートラウンド SRE/CorporateITグループ エンジニアリングマネージャー 山原 崇史 (やまはら たかし)  経歴等  ・SIer

    → 銀行 → Web系ベンチャー数社 → 現職  ・2023 Japan AWS Top Engineers  ・AWS Startup Community Core Member 好きな技術領域  AWS / Terraform / GitHub Actions shonansurvivors
  2. moduleを使う手法 環境別のディレクトリを作成し、その配下の main.tfから、それぞれ共通の moduleを呼び出す -- <project-name>/ -- envs/ -- dev/

    -- backend.tf -- providers.tf -- versions.tf -- main.tf -- stg/ -- backend.tf -- providers.tf -- versions.tf -- main.tf -- prod/ -- backend.tf -- providers.tf -- versions.tf -- main.tf -- modules/ -- <module-name>/ -- main.tf -- variables.tf -- outputs.tf -- README.md -- (other modules/)
  3. moduleを使わない手法 backendとtfvarsを切り替えることで、同一ディレクトリ内の同一 tfを複数の環境に適用する -- terraform.sh -- <project-name>/ -- backend.tf --

    dev.tfbackend -- stg.tfbackend -- prod.tfbackend -- variables.tf -- dev.tfvars -- stg.tfvars -- prod.tfvars -- terraform.sh -> ../terraform.sh -- providers.tf -- versions.tf -- vpc.tf -- ecs.tf -- ecs_iam.tf -- (other tfs) -- <component-name>/ -- (some files) -- (other components/) terraform { backend "s3" {} } bucket = "example-dev-terraform-state" key = "example.tfstate" encrypt = true profile = "example-dev" region = "ap-northeast-1" dynamodb_table = "terraform-state-lock" $ terraform init \ -backend-config=dev.tfbackend 1. 接続先AWSアカウントや tfstate保存先を決定 env = "dev" # 略 variable "env" { type = string } # 略 $ terraform plan \ -var-file=dev.tfvars 2. 環境ごとに変えたい値は tfvarsから読み込み
  4. moduleを使わない手法 backendとtfvarsを切り替えることで、同一ディレクトリ内の同一 tfを複数の環境に適用する -- terraform.sh -- <project-name>/ -- backend.tf --

    dev.tfbackend -- stg.tfbackend -- prod.tfbackend -- variables.tf -- dev.tfvars -- stg.tfvars -- prod.tfvars -- terraform.sh -> ../terraform.sh -- providers.tf -- versions.tf -- vpc.tf -- ecs.tf -- ecs_iam.tf -- (other tfs) -- <component-name>/ -- (some files) -- (other components/) $ terraform init \ -backend-config=dev.tfbackend 1. 接続先AWSアカウントや tfstate保存先を決定 $ terraform plan \ -var-file=dev.tfvars 2. 環境ごとに変えたい値は tfvarsから読み込み 毎回-backend-configと-var-fileを 正しく指定するのは 手間かつミスも起こり得るので、 1 & 2 を実施するラッパーを用意 $ ./terraform.sh dev plan 第一引数に環境名を取り、 以降はTerraformコマンドを指定
  5. moduleに付随する要素 moduleに付随する様々な要素については、これといったスタンダードは無い認識 moduleの粒度 variablesの 命名規則や 用途 . variablesの型に objectを 採用しているか

    否か moduleから moduleを 呼び出すことを 許容しているか 他 組織・人によって 様々なコードが 生まれる(※) ※それ自体に良し悪しは無い