锁定状态时出错:获取状态锁时出错:状态 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 Init
和 Terraform Plan
时遇到了这个问题。将所有 terraform 命令移动到任务的单个实例,这应该可以解决问题。
我在尝试执行任何操作时遇到此错误:
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 Init
和 Terraform Plan
时遇到了这个问题。将所有 terraform 命令移动到任务的单个实例,这应该可以解决问题。