当使用Terraform时,谷歌云平台锁定状态文件的机制是什么?类似AWS上的DynamoDB
。。。
感谢
谷歌云平台与大多数远程后端一样,本机支持锁定。AWS不支持通过S3本地锁定,但正如您通过DynamoDB提到的那样。
要运行terraform apply
,Terraform将自动获取一个锁;如果其他人已经在运行application,那么他们将已经拥有锁,您将不得不等待。
您可以使用-lock-timeout=<TIME>
参数运行apply
,告诉Terraform等待直到TIME
才能释放锁(例如,-lock-timeout=10m
将等待10分钟(。
gcs
后端通过使用扩展名为.tflock
的特殊锁定文件来实现Terraform状态锁定。在Terraform状态操作期间,此文件被放置在Terraform州本身旁边。例如,如果状态文件位于路径
gs://BUCKET/PREFIX/WORKSPACE.tfstate
则相应的锁定文件将位于路径
gs://BUCKET/PREFIX/WORKSPACE.tflock
来源:hashicorp/terraform
锁定的原子性是通过使用称为预条件的GCS功能来保证的。Terraform本身使用了GCP Go SDK的DoesNotExist条件,而该条件又使用了GCS预条件。在下面,这将这个HTTP头x-goog-if-generation-match: 0
添加到GCS复制请求中。
根据GCS文件:
当
Match
前提条件使用值0而不是生成号时,只有在云存储桶中没有具有请求中指定名称的活动对象时,请求才会成功。
这正是Terraform状态锁定所需要的。
存储状态文件(使用后端定义(的位置与部署到的位置不同。它们可以相同,但不必相同。例如,您可以将资源部署到Azure,同时将状态文件存储在AWS S3存储桶中。
如果您有兴趣将状态文件存储在Google Cloud中,Terraform有一个名为gcs的后端,其中包括锁定。引用文件:
gcs将状态作为对象存储在谷歌云存储(gcs(上的可配置前缀和存储桶中。