Migration 正在迁移多个“.tfstate”&;`。tfvars`文件到's3'后端
我有一个大型的传统terraform设置,它使用多个本地Migration 正在迁移多个“.tfstate”&;`。tfvars`文件到's3'后端,migration,terraform,Migration,Terraform,我有一个大型的传统terraform设置,它使用多个本地.tfvars来表示多个堆栈。这些堆栈依次有一个.tfstate来表示它们。地形项目的结构如下所示 . └── master └── apps ├── environments │ ├── eu │ │ ├── eu-prod │ │ │ ├── eu-prod.tfstate │ │ │ ├── eu-prod.tf
.tfvars
来表示多个堆栈。这些堆栈依次有一个.tfstate
来表示它们。地形项目的结构如下所示
.
└── master
└── apps
├── environments
│ ├── eu
│ │ ├── eu-prod
│ │ │ ├── eu-prod.tfstate
│ │ │ ├── eu-prod.tfstate.backup
│ │ │ └── eu-prod.tfvars
│ │ └── eu-staging
│ │ ├── eu-staging.tfstate
│ │ ├── eu-staging.tfstate.backup
│ │ └── eu-staging.tfvars
│ └── us
│ ├── us-prod
│ │ ├── us-prod.tfstate
│ │ ├── us-prod.tfstate.backup
│ │ └── us-prod.tfvars
│ └── us-staging
│ ├── us-staging.tfstate
│ ├── us-staging.tfstate.backup
│ └── us-staging.tfvars
├── main.tf
├── outputs.tf
├── other_resources.tf
├── variables.tf
└── versions.tf
在本例中,您可以看到我们有4个主要的“环境”(或堆栈)<代码>欧盟产品,欧盟阶段
,美国产品
和美国阶段
。但是,基本.tf
文件位于master/apps
中。这是用于创建每个堆栈的实际HCL。堆栈之间唯一不同的是大小、名称和其他变量。我们使用cli参数指定要使用的.tfvars
集和要写入的.tfstate
。这方面的示例如下所示(从master/apps
运行):
terraform apply-var文件=./environments/eu/eu-prod/eu-prod.tfvars-state=./environments/eu/eu-prod/eu-prod.tfstate
将其迁移到远程后端(如s3
后端)的最佳方法是什么?我已经能够在main.tf
中设置s3
后端
terraform {
backend "s3" {
bucket = "foobar-terraform-state"
key = "foobar/terraform.tfstate"
region = "us-west-1"
dynamodb_table = "foobar-terraform-state-lock"
encrypt = true
}
}
但是,我不知道如何区分不同的堆栈。我可以为每个堆栈设置
.tfvars
,但无法动态指定键名。你能解释一下你以前是如何指定堆栈的吗?我假设只使用-var file
和-state
,但我认为取消您现有的命令会很有帮助。正是这样!我更新了问题以反映这一点。