锁定状态时出错:获取状态锁时出错:状态 blob 已被锁定

Error locking state: Error acquiring the state lock: state blob is already locked

我在尝试执行任何操作时遇到此错误:

Error locking state: Error acquiring the state lock: state blob is already locked

如何列出当前拥有锁的人以及获得锁的时间?

取决于用于状态锁定的机制。

您可以在配置中看到它(例如在 terraform.tf 中用作文件名时..)

terraform {
  required_version = "0.13.4"
  backend "s3" {
    bucket         = "my.state.bucket.for.terraform"
    key            = "infra/my.tfstate"
    region         = "eu-central-1"
    encrypt        = true
    dynamodb_table = "my.locking.table.in.dynamo"
  }
}

如果使用了 dynamobdb(在 aws 上),只需检查 table。对 PostgreSQL 或其他什么也一样。

要修复它,您可以从客户端释放状态:

terraform force-unlock <ID_OF_LOCK_SHOWN_IN_ERROR>

解决此问题的最简单方法是:

(1) 导航到存储帐户,

(2) 然后到 Azure 门户中保存状态文件的容器。

(3) blob 将在租用状态列下显示为“Leased”。

(4) Select 状态文件,然后点击“中断租约”按钮。

*仅供参考:您需要 PIM(特权身份管理 (PIM))来执行此操作。

引用自Fixing Terraform ‘Error acquiring state lock’ in Azure

也许不能完全回答您的问题描述,但可以通过以下方式避免这种无意的锁定情况。

我在尝试从两个不同的 AzureCLI 任务实例 运行 Terraform InitTerraform Plan 时遇到了这个问题。将所有 terraform 命令移动到任务的单个实例,这应该可以解决问题。