Terraform失败,因为丢失了tfstate(S3后端)

时间:2019-01-10 06:18:23

标签: amazon-web-services terraform

我正在使用Terraform和S3后端配置创建AWS基础设施。现在的问题是,有人删除了存储状态的S3存储桶,现在每次我运行terraform时,它都说资源已经存在而失败。旧的tfstate丢失,而新的tfstate没有有关现有资源的信息。 注意:我没有对AWS环境的写权限。我通过Jenkins CD管道触发terraform,因此无法手动修改基础结构或运行任何terraform命令。

是否可以使用tf文件清除现有资源或强制重新创建资源(如果已经存在)?这是我唯一可以更改的地方。

2 个答案:

答案 0 :(得分:1)

您真的一团糟。您需要还原S3存储桶或新建一个存储桶,然后将代码指向该存储桶。 然后,您需要重新创建丢失的状态,或者删除通过Terraform创建的每个对象,然后重新开始。大多数对象都可以通过 Terraform import 命令导入现有对象。

这可能是一项巨大的任务。

您需要对存储桶进行写访问吗?仅当您还有状态文件时,Terraform刷新才有帮助。你不知道 如果您没有权限执行此操作,则可以放弃该权限或坚持获取足够的特权。

如果您无法在本地运行Terraform,那么您也在浪费时间。 祝你好运。

但是......

您不想再来这里。您如何删除/丢失存储桶? 您确实需要再也不会发生这种情况,因为 @ydaetskcoR 在存储桶上说了一些 MFA保护-一定要这样做,并向其中添加版本控制是一个非常好的主意。 另外,如果您还没有在存储桶中添加 DynamoDB锁定,那确实值得。

答案 1 :(得分:1)

如果您使用的是生产帐户,请遵循其他人的建议,不要手动处理帐户中的任何内容!

如果您刚开始使用 terraform 或 terragrunt 并且您正在尝试重置 terraform 状态:

  1. 确保您登录到正确的 AWS 帐户,它不是生产帐户,并且未被其他任何人使用
  2. Terraform 状态以相同的名称保存在两个位置:S3 和 DynamoDB。为了重置状态,您需要删除两者。
  3. 如果之前在帐户中创建了任何其他内容,您将需要手动删除这些内容。根据您创建的数量,这可能需要很长时间。
  4. 一旦您删除了以您的 terraform 状态存储桶命名的 S3 和 DynamoDB 并删除了由 terraform 创建的基础设施,您应该能够terraform initterraform plan 而不会再出现问题。