Google Cloud Terraform部署报错:Provider执行apply后结果不一致
解决Terraform部署Google Container Registry时的"Provider produced inconsistent result after apply"错误
这个错误源于google_container_registry资源在新版Google Terraform Provider中存在状态维护缺陷,且该资源已被官方标记为弃用。Provider在创建资源后无法正确读取并维护其状态,导致执行terraform apply时出现状态不一致的报错。
方案一:使用Artifact Registry替代(官方推荐)
Google Container Registry(GCR)已逐步迁移至Artifact Registry(AR),官方推荐使用google_artifact_registry_repository资源管理容器镜像仓库:
terraform { required_providers { google = { source = "hashicorp/google" version = "5.24.0" } } backend "local" { path = "tf.tfstate" } } provider "google" { project = "tayarim-project" region = "europe-west1" } resource "google_storage_bucket" "tayarim_s3" { name = "NAME" # 注意:GCS桶名需全局唯一,建议替换为实际唯一名称 location = "EU" } # 替换原google_container_registry资源 resource "google_artifact_registry_repository" "tayarim_registry" { location = "europe-west1" repository_id = "tayarim-repo" # 自定义仓库ID format = "DOCKER" # 指定为Docker镜像仓库 }
方案二:直接管理GCR对应的Cloud Storage桶
如果需要继续使用传统GCR,可以直接创建其对应的Cloud Storage桶(GCR的EU区域桶命名格式为artifacts.<project-id>.appspot.com):
terraform { required_providers { google = { source = "hashicorp/google" version = "5.24.0" } } backend "local" { path = "tf.tfstate" } } provider "google" { project = "tayarim-project" region = "europe-west1" } resource "google_storage_bucket" "tayarim_s3" { name = "NAME" # 注意:GCS桶名需全局唯一,建议替换为实际唯一名称 location = "EU" } # 直接创建GCR对应的存储桶 resource "google_storage_bucket" "tayarim_gcr" { name = "artifacts.tayarim-project.appspot.com" location = "EU" storage_class = "STANDARD" }
清理异常状态
如果已经执行过terraform apply导致状态异常,先执行以下命令清理错误的资源状态:
terraform state rm google_container_registry.tayarim_regitstry
之后执行terraform plan确认变更,再执行terraform apply即可完成部署。
内容的提问来源于stack exchange,提问作者quentin coqueran
相关产品推荐
相关产品推荐

