zur*_*rol 4 google-cloud-storage google-cloud-platform terraform terraform-provider-gcp
使用 Terraform 时锁定状态文件的 Google Cloud Platform 机制是什么?像DynamoDB在 AWS 上的东西...
谢谢
小智 26
gcs后端通过使用带有扩展名的特殊锁定文件来实现 Terraform 状态锁定.tflock。在 Terraform 状态操作期间,此文件放置在 Terraform 状态本身旁边。例如,如果状态文件位于路径
gs://BUCKET/PREFIX/WORKSPACE.tfstate
Run Code Online (Sandbox Code Playgroud)
那么相应的锁定文件将位于路径
gs://BUCKET/PREFIX/WORKSPACE.tflock
Run Code Online (Sandbox Code Playgroud)
资料来源:hashicorp/terraform
锁定的原子性是通过使用称为前提条件的 GCS 功能来保证的。Terraform 本身使用GCP Go SDK 的DoesNotExist 条件,而 GCP Go SDK 又使用GCS Precondition。在下面,这会将此 HTTP 标头添加x-goog-if-generation-match: 0到 GCS 复制请求中。
根据GCS 文档:
当前
Match提条件使用值 0 而不是代号时,仅当 Cloud Storage 存储桶中不存在具有请求中指定名称的活动对象时,请求才会成功。
这正是 Terraform 状态锁定所需要的。
与大多数远程后端一样,谷歌云平台本身支持锁定。AWS 不支持通过 S3 本地锁定,但正如您通过 DynamoDB 提到的那样。
要运行terraform apply,Terraform 会自动获取锁;如果其他人已经在运行应用程序,他们将已经拥有锁,您将不得不等待。
您可以apply使用-lock-timeout=<TIME>参数运行以告诉 Terraform 等待TIME释放锁定(例如,-lock-timeout=10m将等待 10 分钟)。
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |