avi*_*amg 10 amazon-dynamodb terraform tfstate locker
我的 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
Run Code Online (Sandbox Code Playgroud)
在尝试解锁此储物柜以便再次执行额外的执行计划时 - 我收到以下错误:
terraform force-unlock <some-hash-abc-123>
#output:
Local state cannot be unlocked by another process
Run Code Online (Sandbox Code Playgroud)
我们如何释放这个地形储物柜?
avi*_*amg 16
根据terraform命令的参考:force-unlock
手动解锁已定义配置的状态。
这不会修改您的基础设施。此命令取消对当前配置状态的锁定。此锁的行为取决于所使用的后端。本地状态文件不能 被其他进程解锁。
解释:显然执行计划正在本地处理计划输出文件并应用于 terraform 步骤的第二阶段,如下例所示:
阶段1:terraform plan -out execution-plan.out
阶段2:terraform apply -input=false execution-plan.out
确保第 1 阶段和第 2 阶段的文件名相同
但是,如果第 1 阶段被终止或意外崩溃,锁定器将被分配给本地状态文件,因此必须在 dynamodb 本身上删除,而不是使用 terraform 强制解锁命令。
解决方案:在 dynamodb terraform lockers 表下找到此特定项目并显式删除锁定的项目,您可以使用 aws 控制台或通过 api 执行此操作。 例如:
aws dynamodb delete-item \
--table-name terraform-locker-bucket \
--key file://key.json
Run Code Online (Sandbox Code Playgroud)
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"
}
}
Run Code Online (Sandbox Code Playgroud)
terraform force-unlock <lock id>
对于 terragrunt,在<terragruntfile>.hcl目录中运行
terragrunt force-unlock <lock id>. 如果不起作用,请删除terragrunt.lock.hcl并重.terragrunt-cache/试。
还
| 归档时间: |
|
| 查看次数: |
20750 次 |
| 最近记录: |