首页 > 解决方案 > 如何将旧 S3 存储桶中的 Terraform 状态移动到新的 S3 存储桶?

问题描述

我们有一些 terraform 配置,我们使用 s3 作为后端。我们有多个 AWS 账户,每个环境一个。

在所有环境中和跨多个区域,我们使用了不同的 s3 存储桶和 dynamodb_table 名称,到目前为止,它们不遵循有效的约定,并且很难从名称中识别存储桶的用途。我们现在要为所有 s3 terraform 状态存储桶遵循基于约定的命名。为此,我需要将现有 terraform 资源的状态迁移到新的 s3 存储桶。

我不确定实现这一目标的最佳方法是什么,而不必在旧状态存储桶上运行破坏并应用于新存储桶。

我能想到的几个选项如下,但我不确定它们是否正确。

  1. 重命名 s3 存储桶:我知道这是不可能的(或者是吗?)
  2. 移动 s3 存储桶:这里提到了重命名的解决方案。不确定这种方法是否会干扰我们的设置。
  3. 状态迁移:terraform 源代码受 Git 控制,但.terraform不是。因此,我可以使用新存储桶对源代码进行更改,提交它并从该提交中创建一个新的 git 标签。现在,当实际进行迁移时,我会检查在我的环境中使用的旧 git 标签,运行terraform init,检查新的 git 标签并terraform init再次运行,理想情况下会问我是否要进行迁移并做必要的事情。这个过程类似于 terraform在这里所建议的,但我不确定这种方法是否会在我期望的那种运动中起作用。

PS:我假设重命名 DynamoDB 表或仅使用新表而不是旧表可以开箱即用,因为我会确保在进行状态迁移时,我没有任何实时 terraform 正在运行。

标签: amazon-web-servicesamazon-s3terraform

解决方案


将 Terraform 状态文件移动到新的 S3 存储桶,然后更改bucketS3 后端配置中的参数以指向存储桶。

如果您只想移动状态文件的位置,则无需执行任何其他操作 - 这就像更改应用程序的位置,然后将快捷方式指向新位置。


推荐阅读