amazon-web-services - 如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?
问题描述
我们有一些 terraform 配置,我们使用 s3 作为后端。我们有多个 AWS 账户,每个环境一个。
在所有环境中和跨多个区域,我们使用了不同的 s3 存储桶和 dynamodb_table 名称,到目前为止,它们不遵循有效的约定,并且很难从名称中识别存储桶的用途。我们现在要为所有 s3 terraform 状态存储桶遵循基于约定的命名。为此,我需要将现有 terraform 资源的状态迁移到新的 s3 存储桶。
我不确定实现这一目标的最佳方法是什么,而不必在旧状态存储桶上运行破坏并应用于新存储桶。
我能想到的几个选项如下,但我不确定它们是否正确。
- 重命名 s3 存储桶:我知道这是不可能的(或者是吗?)
- 移动 s3 存储桶:这里提到了重命名的解决方案。不确定这种方法是否会干扰我们的设置。
- 状态迁移:terraform 源代码受 Git 控制,但
.terraform
不是。因此,我可以使用新存储桶对源代码进行更改,提交它并从该提交中创建一个新的 git 标签。现在,当实际进行迁移时,我会检查在我的环境中使用的旧 git 标签,运行terraform init
,检查新的 git 标签并terraform init
再次运行,理想情况下会问我是否要进行迁移并做必要的事情。这个过程类似于 terraform在这里所建议的,但我不确定这种方法是否会在我期望的那种运动中起作用。
PS:我假设重命名 DynamoDB 表或仅使用新表而不是旧表可以开箱即用,因为我会确保在进行状态迁移时,我没有任何实时 terraform 正在运行。
解决方案
将 Terraform 状态文件移动到新的 S3 存储桶,然后更改bucket
S3 后端配置中的参数以指向存储桶。
如果您只想移动状态文件的位置,则无需执行任何其他操作 - 这就像更改应用程序的位置,然后将快捷方式指向新位置。
推荐阅读
- sql-server - 重新格式化来自 Azure 数据工厂 V2 中数据流的错误消息
- python - confluent kafka producer avro schema error ClientError: Schema parse failed: Unknown named schema
- database-design - 存储多对多模型(标签)数据的最佳实践
- vue.js - vuejs 支持 v-model 到 getdata
- command-line - 如何从命令行获取命令行变量到jupyter?
- scala - 通过在另一个表上查找对数据框列表的值进行排序
- javascript - JavaScript 在 html 中找到加载的 javascript 并阻止它们
- python - 在多索引 df 的列中创建计算
- python - 尝试运行 pyspark shell 时出现“未找到 Python”错误;尝试从“管理应用程序执行别名”禁用快捷方式并将 var 添加到 PATH
- flutter - 为什么使用 FirebaseAuth.instance.authStateChanges().listen() 时flutter_bloc会抛出错误的状态异常