概要
GCP で Terraform を使用する際、異なるプロジェクトや環境に対して効率的に Terraform を適用する方法について調べたので、それを本記事にまとめました。
Terraform の backend 設定を使用して、GCP上の Cloud Storage を使って異なるプロジェクトや環境ごとに Terraform state を管理する方法を以下に記載します。
これにより、リソースの競合や誤操作を回避し、一貫性のあるインフラ管理を実現することができました。
実装手順
-
バケットの作成
最初に、Terraform state を保存する Cloud Storage バケットを作成します。 -
Terraform の設定ファイル (通常 main.tf または backend.tf など) に backend の設定を追加します
terraform { backend "gcs" { bucket = "default_gcs_bucket_name" prefix = "terraform/state" } }
-
backendの変更を適用するためにterraform initを実行します。
terraform init -backend-config="bucket=terraform-backend_for_<プロジェクトID>"
terraform init コマンドを実行する際に、-backend-config オプションを使用して動的に設定をオーバーライドすることができます。
このオプションを利用すると、環境に応じて異なるバケットを使用することができます。 -
このコマンドを実行すると、以下のようなプロンプトが表示される場合がありますので、この質問に
yes
と答えることで、現在の state が新しい GCS backend にコピーされます。Do you want to copy existing state to the new backend?
-
terraform init の実行が完了したら、そのディレクトリで terraform apply を実行します。このとき、上記で設定した GCS bucket が backend として使用されることになります。