Terraform 错误:错误锁定状态:获取状态锁时出错:发生 2 个错误:

Posted

技术标签:

【中文标题】Terraform 错误:错误锁定状态:获取状态锁时出错:发生 2 个错误:【英文标题】:Terraform Error: Error locking state: Error acquiring the state lock: 2 errors occurred: 【发布时间】:2021-01-16 20:26:15 【问题描述】:

我尝试了 terraform 版本 v0.12.26 和 v0.13.3。都失败了。

地形规划

获取状态锁。这可能需要一些时间...

错误:错误锁定状态:获取状态锁定错误:发生 2 个错误: * ResourceNotFoundException: 未找到请求的资源 * ResourceNotFoundException: 未找到请求的资源

Terraform 获取状态锁以保护状态不被写入 多个用户同时使用。请解决上述问题并尝试 再次。对于大多数命令,您可以使用“-lock=false”禁用锁定 标记,但不建议这样做。

相关源码:

terraform 
  backend "s3" 
    encrypt        = false
    bucket         = "dev-terraform-state"
    key            = "dev/Oregon/eks/terraform.tfstate"
    region         = "us-west-2"
    dynamodb_table = "dev-lock-table"
  
  required_version = ">= 0.12.0"

【问题讨论】:

嗨。我注意到你有一堆问题的答案,但没有一个被接受。接受有帮助的问题是一种很好的做法,因为它可以帮助其他人将来遇到类似的问题。如果没有接受好的答案,它会提示人们提出重复的问题,并错误地假设给出的答案没有用处。 我愿意接受这些答案。但是,如何接受? 在upvote/downvote按钮下有一个“勾号”符号。 我发现 dev-lock-table 不是通过运行 terraform init 和 plan 在 AWS dynamodb 表中创建的。但是,为什么不创建呢? 我删除了 dynamodb_table = "dev-lock-table" 这一行。然后,“地形计划”起作用了。为什么? 【参考方案1】:

错误为ResourceNotFoundException,表示你的dev-lock-table不存在。

Terraform 不会创建它。相反,它必须在您使用它之前存在。来自docs:

dynamodb_table 字段到现有 DynamoDB 表名。

【讨论】:

任何来自 Google 的人,确保您在提供程序配置中指定的区域中创建了表 表需要主键作为LockID 感谢@chris 发生在我身上,您的消息解决了我的问题!欣赏它【参考方案2】:

我运行 terraform force-unlock <LOCK_ID> (docs) 来删除锁。

大量讨论here

【讨论】:

【参考方案3】:

确保创建的表和下面代码中指定的区域相同

terraform backend "s3" bucket = "" key = "" region = "us-east-1" dynamodb_table =

【讨论】:

以上是关于Terraform 错误:错误锁定状态:获取状态锁时出错:发生 2 个错误:的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Cloud Platform 时 Terraform 状态锁定的机制是啥?

无法使用 localstack dynamoDB 锁定 terraform 状态:UnrecognizedClientException

Terraform EC2(根块设备加密错误未能达到目标状态)

Terraform:尝试销毁 EKS 集群时出现“错误:删除 S3 存储桶时出错”

如何从 terraform 状态中删除资源?

地形:获取状态锁时出错:ConditionalCheckFailedException