我的terraform远程状态和锁在aws帐户下的s3和dynamodb上配置,在gitlab runner上一些计划任务已经崩溃,在下一个执行计划中会弹出以下错误:
Error: Error locking state: Error acquiring the state lock: ConditionalCheckFailedException:
The conditional request failed
Lock Info:
ID: <some-hash>
Path: remote-terrform-states/app/terraform.tfstate
Operation: OperationTypePlan
Who: root@runner-abc-project-123-concurrent-0
Version: 0.14.10
Created: 2022-01-01 00:00:00 +0000 UTC
Info: some really nice info
当试图解锁这个储物柜以便再次执行额外的执行计划时-我得到以下错误:
terraform force-unlock <some-hash-abc-123>
#output:
Local state cannot be unlocked by another process
我们怎样才能释放这个地形储物柜?
发布于 2022-04-20 13:47:53
根据terraform命令的引用:force-unlock
手动解除定义配置的状态。
这不会修改您的基础结构。此命令移除当前配置的状态锁。此锁的行为取决于所使用的后端。本地状态文件不能由另一个进程解锁。
解释:显然,执行计划正在本地处理计划输出文件,并应用于terraform步骤的第二阶段,如以下示例所示:
第一阶段:terraform plan -out execution-plan.out
第二阶段:terraform apply -input=false execution-plan.out
确保文件名在第1和第2阶段是相同的
但是,如果第1阶段被终止或意外崩溃,储物柜将被分配到本地状态文件,因此必须被删除在dynamodb本身,而不是使用terraform强制解锁命令。
解决方案:在dynamodb表中找到这个特定项,并显式地删除锁定项,您可以使用aws或通过完成。例如,:
aws dynamodb delete-item \
--table-name terraform-locker-bucket \
--key file://key.json
Key.json的内容:
{
"LockID": "remote-terrform-states/app/terraform.tfstate",
"Info": {
"ID":"<some-hash>",
"Operation":"OperationTypePlan",
"Who":"root@runner-abc-project-123-concurrent-0",
"Version":"0.14.10",
"Created":"2022-01-01 00:00:00 +0000 UTC",
"Info":"some really nice info"
}
}
发布于 2022-05-25 03:12:01
terraform force-unlock <lock id>
对于terragrunt,在<terragruntfile>.hcl
目录中运行terragrunt force-unlock <lock id>
。如果没有工作,请删除terragrunt.lock.hcl
和.terragrunt-cache/
,然后重试。
也是
发布于 2022-09-19 21:08:24
如果面临这一问题,则在销毁:
添加-lock=false将有助于进一步推进
https://stackoverflow.com/questions/71940888
复制相似问题