■ はじめに
通常、複数環境(dev/stage/prod)へ Terraform を使って デプロイすることを考える そこで、複数環境へデプロイする際に使えそうなTipsをまとめる
目次
【1】Backend の切り替え 1)サンプル 2)補足:terraform init -migrate-state 【2】variable の切り替え 1)サンプル 【3】Module 【4】Workspace 1)使用上の注意 【5】ディレクトリ構成 1)Moduleを使う場合
【1】Backend の切り替え
* variable に関しての詳細は、以下の関連記事を参照のこと
Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
* 以下は、サンプルとは違う方法
https://dev.classmethod.jp/articles/multiple-provisionings-with-terraform-backend-config-option/
1)サンプル
# -backend-config=【環境】.tfbackendで指定 terraform init -backend-config=dev.tfbackend -migrate-state
backend.tf
terraform { backend "s3" {} }
dev.tfbackend
bucket = "your-s3-dev-bucket" key = "tf/dev/terraform.tfstate" region = "us-west-2" encrypt = true
2)補足:terraform init -migrate-state
* 一度backendの設定をした後に変更する場合は -reconfigureも指定する必要がある
https://techblog.nhn-techorus.com/archives/29535
https://dev.classmethod.jp/articles/multiple-provisionings-with-terraform-backend-config-option/
【2】variable の切り替え
* variable に関しての詳細は、以下の関連記事を参照のこと
Terraform ~ local / variable ~
https://dk521123.hatenablog.com/entry/2023/12/24/173633
1)サンプル
# 環境ごとにファイル名を変えて実行していく terraform plan -var-file=dev.tfvars
variables.tf
variable "env" { type = string } # その他変数。。。
dev.tfvars
env = "dev" # その他、値。。。
prod.tfvars
env = "prod" # その他、値。。。
【3】Module
* 各環境の共通処理をModule化する(ただ、なくても実現できる) * Module に関しての詳細は、以下の関連記事を参照のこと
Terraform ~ 基本編 / Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
* 以下、参考になりそうなサイト
https://dev.classmethod.jp/articles/multiple-provisioning-with-terraform-module/
【4】Workspace
* Workspace に関しての詳細は、以下の関連記事を参照のこと
Terraform ~ Workspace ~
https://dk521123.hatenablog.com/entry/2024/06/01/144048
* 以下、参考になりそうなサイト
1)使用上の注意
* 関連記事にも書いたが、 環境を切り替えても、tfstate保存先のS3バケットは同一のものが使用される
【5】ディレクトリ構成
1)Moduleを使う場合
ディレクトリ構成例
-- <project-name>/ -- environments/ -- dev/ -- backend.tf -- providers.tf -- versions.tf -- main.tf # ここから各moduleを呼ぶ -- stage/ -- backend.tf -- providers.tf -- versions.tf -- main.tf # ここから各moduleを呼ぶ -- prod/ -- backend.tf -- providers.tf -- versions.tf -- main.tf # ここから各moduleを呼ぶ -- modules/ -- <module-name>/ -- main.tf -- variables.tf -- outputs.tf -- README.md -- (other modules/)
参考文献
https://zenn.dev/smartround_dev/articles/5e20fa7223f0fd
関連記事
Terraform ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/04/05/000224
Terraform ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/12/09/222057
Terraform ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/05/03/000000
Terraform ~ 基本編 / Module ~
https://dk521123.hatenablog.com/entry/2023/05/19/113544
Terraform ~ local / variable ~
https://dk521123.hatenablog.com/entry/2023/12/24/173633
Terraform ~ tfstate / Backend ~
https://dk521123.hatenablog.com/entry/2023/05/05/004939
Terraform ~ Workspace ~
https://dk521123.hatenablog.com/entry/2024/06/01/144048
Terraform ~ AWS S3 ~
https://dk521123.hatenablog.com/entry/2023/04/09/104204
Terraform ~ AWS IAM ~
https://dk521123.hatenablog.com/entry/2023/04/12/214311
Terraform ~ AWS Glue ~
https://dk521123.hatenablog.com/entry/2023/04/08/220411
Terraform ~ AWS Secrets Manager ~
https://dk521123.hatenablog.com/entry/2023/04/11/152801
Terraform ~ Docker ~
https://dk521123.hatenablog.com/entry/2023/04/10/193239
Terraform ~ 特定リソースのみデプロイする ~
https://dk521123.hatenablog.com/entry/2023/04/20/172823