当使用Terraform时,Google Cloud Platform用于锁定状态文件的机制是什么?类似于AWS上的DynamoDB
之类的东西...
谢谢
当使用Terraform时,Google Cloud Platform用于锁定状态文件的机制是什么?类似于AWS上的DynamoDB
之类的东西...
谢谢
gcs
后端通过使用具有.tflock
扩展名的特殊锁定文件来实现Terraform状态锁定。在Terraform状态操作期间,将此文件放置在Terraform状态旁边。例如,如果状态文件位于路径中,则可以找到该锁定文件
gs://BUCKET/PREFIX/WORKSPACE.tfstate
那么相应的锁定文件将位于路径
gs://BUCKET/PREFIX/WORKSPACE.tflock
源代码: hashicorp/terraform
使用GCS功能称为Precondition来保证锁定的原子性。 Terraform本身使用GCP Go SDK的DoesNotExist条件,该SDK又使用GCS Precondition。在底层,这将向GCS复制请求添加此HTTP标头x-goog-if-generation-match: 0
。
根据GCS文档:
当
Match
预条件使用值0而不是生成号码时,仅当云存储桶中没有指定请求中指定名称的活动对象时,请求才成功。
这正是Terraform状态锁定所需的。
Google云平台和大部分远程后端一样会原生地支持锁定,这里有详细说明。AWS不支持通过S3来原生地锁定,但正如您所提到的那样,它可以通过DynamoDB实现。
运行 terraform apply
时,Terraform将自动获得锁定;如果其他人已经在运行apply,则他们已经拥有锁定,您将不得不等待。
您可以使用 -lock-timeout=<TIME>
参数运行 apply
命令,让Terraform等待最多 TIME
的时间以释放锁定(例如,-lock-timeout=10m
将等待10分钟)。