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 中实现此功能?
运行时可以使用
-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 为每个环境自动生成远程后端。