migration - 将多个“.tfstate”和“.tfvars”文件迁移到“s3”后端
问题描述
我有一个大型遗留 terraform 设置,它使用多个本地.tfvars
来表示多个堆栈。这些堆栈又具有一个.tfstate
来表示它们。terraform 项目的结构如下所示
.
└── 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 个主要的“环境”(或堆栈)。eu-prod
, eu-staging
,us-prod
和us-staging
. 但是,基本.tf
文件位于master/apps
. 这是用于创建每个堆栈的实际 HCL。堆栈之间唯一不同的是大小、名称和其他变量。我们使用 cli 参数来指定使用哪个集合.tfvars
以及.tfstate
写入哪个集合。一个例子看起来像这样(运行从master/apps
:
terraform apply -var-file=./environments/eu/eu-prod/eu-prod.tfvars -state=./environments/eu/eu-prod/eu-prod.tfstate
将其迁移到像后端这样的远程后端的最佳方法是什么s3
?我已经能够通过这样做来设置s3
后端main.tf
terraform {
backend "s3" {
bucket = "foobar-terraform-state"
key = "foobar/terraform.tfstate"
region = "us-west-1"
dynamodb_table = "foobar-terraform-state-lock"
encrypt = true
}
}
但是我不知道如何区分不同的堆栈。我可以.tfvars
为每个堆栈设置,但无法动态指定键名。
解决方案
推荐阅读
- powershell - 如何使用 PowerCLI 列出 BIOS 主要/次要版本?
- java - 当我在 VSCode 中运行时程序运行良好,但是 maven 扩展构建的包没有运行
- automated-tests - 在函数中使用包含的空手道 DSL 过滤器数组
- javascript - 比较用户名+密码的两个数组
- swift - 尝试获取与当前在 Xcode IOS 中使用 Swift 登录的用户匹配的数据
- vb.net - 通过数据读取器获取 SQL 时间戳值
- javascript - 如何将随机设置的单词值分配给变量 Javascript?(不和谐 JS v12H
- sql - 在oracle中按降序对包含字符、句点和数字组合的字符串进行排序
- python - YT Data API 仅针对一个视频引发错误 403
- javascript - JavaScript - 组合 3 个数组并保持相同的索引