来自一个 Git 存储库的多个地形环境?

Multiple terraform environments from one Git repo?

我正在使用 GitHub Actions 通过 Terraform 部署我的代码。每当代码被推送到 master 分支时,都会触发构建代码和 运行s terraform apply 的 GitHub 操作。这很好用。

问题是现在我也想要一个 staging 环境。每当代码被推送到 staging 分支时,它应该被构建并且 terraform apply` 应该是 运行 针对 不同的后端 .

但是,这需要不同的 Terraform 配置:

terraform {
  backend "s3" {
    bucket         = "bucket-for-my-terraform-state" 
    key            = "global/s3/terraform.tfstate"
    region         = "eu-west-2"
    dynamodb_table = "terraform-locks"
    encrypt        = true
  }
}

我不能使用 Terraform 变量,因为 backend 块中不允许使用这些变量。

如何从一个具有多个分支的 Git 存储库部署多个 Terraform?


$ terraform --version
Terraform v0.14.4
+ provider registry.terraform.io/hashicorp/aws v3.23.0

您可以使用partial configuration

terraform {
  backend "s3" {}
}

然后为每个环境准备文件:

  • 产品
bucket         = "bucket-prod" 
key            = "global/s3/terraform.tfstate"
region         = "eu-west-2"
dynamodb_table = "terraform-locks"
encrypt        = true
  • 分期
bucket         = "bucket-staging" 
key            = "global/s3/terraform.tfstate"
region         = "eu-west-2"
dynamodb_table = "terraform-locks"
encrypt        = true

然后 prod 你会打电话给

terraform init -backend-config=backend.prod.hcl

对于分期,它将是

terraform init -backend-config=backend.staging.hcl