如何将旧 S3 存储桶中的 Terraform 状态移动到新 S3 存储桶?

Muk*_*lan 8 amazon-s3 amazon-web-services terraform

我们有一些使用 s3 作为后端的 terraform 配置。我们有多个 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 运行。

小智 8

您是否尝试将 StateFile 从旧存储桶复制到新存储桶,然后在 terraform 后端配置中更改 S3 存储桶