Terraform中google_artifact_registry_repository忽略depends_on属性问题
问题原因
你配置的depends_on依赖规则实际已经生效,问题根源是GCP云服务的最终一致性特性:
- Terraform GCP Provider对
google_project_service资源的创建完成判定标准,仅为GCP返回已接收API启用请求,而非API服务全局完全就绪可用。GCP的API启用请求提交后,相关权限配置、服务路由需要几秒到几十秒的异步传播时间才能在所有区域生效,这个过程Terraform无法感知,会直接标记google_project_service资源创建完成。 - 首次执行
terraform apply时,google_project_service刚标记完成就立刻启动Artifact Registry仓库的创建流程,此时artifactregistry.googleapis.com在你选择的europe-west1区域还未完成生效,因此报出权限不足错误。第二次执行时API传播已经完成,所以可以正常创建资源。
解决方案
- 方案1:新增固定等待延迟资源,确保API传播完成后再创建AR仓库
# 引入time provider terraform { required_providers { time = { source = "hashicorp/time" version = ">= 0.10.0" } } } # API启用后等待30秒用于传播 resource "time_sleep" "wait_for_ar_api_propagation" { create_duration = "30s" depends_on = [google_project_service.artifactregistry_googleapis_com] } # 修改AR仓库依赖,等待延迟结束后再创建 resource "google_artifact_registry_repository" "my_ar" { provider = google-beta format = "DOCKER" repository_id = "myreponame" location = "europe-west1" project = google_project.my_project.project_id depends_on = [time_sleep.wait_for_ar_api_propagation] }
- 方案2:调整Provider重试策略
你可以在GCP Provider配置中增加超时重试参数,让Provider遇到临时权限错误时自动重试,无需手动二次执行,适合不希望增加固定等待时间的场景。
内容的提问来源于stack exchange,提问作者Jan Krynauw
相关产品推荐
相关产品推荐

