如何将旧S3存储桶中的Terraform state迁移至新S3存储桶
方案可行性判断
- S3存储桶重命名方案:不可行,AWS S3官方不支持存储桶重命名操作,该方案直接排除。
- 手动迁移S3桶文件方案:不推荐,手动复制状态文件到新存储桶的操作如果没有同步匹配Terraform后端配置,极易出现状态不一致问题,若遗漏DynamoDB锁表的对应配置,后续部署还可能出现状态冲突,风险较高。
- Terraform原生状态迁移方案:完全可行,是当前场景下的最优方案,你梳理的流程符合Terraform的设计逻辑,以下是细化的可落地操作步骤:
可落地操作步骤
- 提前在对应AWS账号下创建符合命名规范的新S3存储桶、新DynamoDB锁表,确认操作账号对新旧存储桶、新旧锁表均拥有读写权限
- 本地执行
rm -rf .terraform删除残留的旧后端配置缓存,避免干扰 - 切换到对应环境当前在用的旧配置Git tag,执行
terraform init,确保本地后端配置与线上旧存储桶完全同步 - 切换到修改了新S3桶、新DynamoDB表配置的新Git tag,执行
terraform init -migrate-state,Terraform会自动识别后端配置变更,弹出状态迁移确认提示,输入yes即可自动完成状态从旧桶到新桶的迁移 - 迁移完成后执行
terraform plan验证,若返回无任何资源变更的结果,即说明迁移成功,状态完全一致 - 验证完成后可保留旧存储桶的状态文件作为备份,也可在确认所有环境都切换完成后手动删除旧桶、旧锁表资源
迁移全程确保无其他人员执行Terraform相关操作,满足你提到的迁移期间无运行中Terraform任务的前置条件,即可完全避免锁冲突问题。
内容的提问来源于stack exchange,提问作者Mukund Jalan
相关产品推荐
相关产品推荐

