使用谷歌云平台时Terraform状态锁定的机制是什么



当使用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(上的可配置前缀和存储桶中。

相关内容

  • 没有找到相关文章

最新更新