在 gcp 上的 terraform 中参数化后端

问题描述 投票:0回答:1
terraform {
    required_version = ">= 0.13"
    required_providers {
          google = {
           source = "hashicorp/google
           version = "~> 4.9.0"
        }
    }
   backend = "gcs" {
        bucket = "my-bucket"
        prefix = "/tfstate/{_NONLIVE_OR_LIVE}/{country}"
   }
}

我尝试参数化“terraform init”,以便我可以将相同的 main.tf 文件用于六个不同的用例(_PREPROD_OR_PROD 可以是预生产或生产;国家可以是葡萄牙、意大利或西班牙)。

在 cloudbuild.yaml 文件中,我必须为所有六个用例使用相同的 terraform_apply.yaml 文件,并且我想将其指定为“terraform init -backend-config =”PREPROD_OR_PROD = ${_PREPROD_OR_PROD}”-backend-config =“{国家=${_COUNTRY}"

如何在 terraform 和 Google Cloud/GCP 中实现此功能?

google-cloud-platform terraform google-cloud-storage cloudbuild.yaml
1个回答
0
投票

运行时可以使用

-backend-config="KEY=VALUE"
选项
terraform init
(参见部分配置

考虑以下后端:

terraform {
  backend "local" {
    path = "foobar.tfstate"
  }
}

我可以使用以下命令更改

path

terraform init -backend-config="path=./dev.tfstate"

ENVIRONMENT="prod"
terraform init -backend-config="path=./$ENVIRONMENT.tfstate"

这将在本地文件夹中生成一个

prod.tfstate

现在,回到你的代码:

terraform {
  backend "gcs" {
    bucket = "my-bucket"
    prefix = ""
  }
}

我还没有测试过这个,但我想你可以这样做:

ENVIRONMENT="pre-prod"
COUNTRY="Portugal"

terraform init -backend-config="prefix=/tfstate/$ENVIRONMENT/$COUNTRY"

PS:作为替代方案,我建议您使用 terragrunt 为每个环境自动生成远程后端。

© www.soinside.com 2019 - 2024. All rights reserved.