Migration 正在迁移多个“.tfstate”&;`。tfvars`文件到's3'后端

Migration 正在迁移多个“.tfstate”&;`。tfvars`文件到's3'后端,migration,terraform,Migration,Terraform,我有一个大型的传统terraform设置,它使用多个本地.tfvars来表示多个堆栈。这些堆栈依次有一个.tfstate来表示它们。地形项目的结构如下所示 . └── master └── apps ├── environments │ ├── eu │ │ ├── eu-prod │ │ │ ├── eu-prod.tfstate │ │ │ ├── eu-prod.tf

我有一个大型的传统terraform设置,它使用多个本地
.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
,但我认为取消您现有的命令会很有帮助。正是这样!我更新了问题以反映这一点。