使用Terraform部署Firebase遇未知项目SERVICE_DISABLED错误求助
Firebase Terraform部署问题排查:神秘项目ID 764086051850来源解析
目标
我正在尝试修复Terraform管理的Firebase部署,模块代码如下:
data "google_client_config" "default_project" { provider = google-beta } data "google_project" "project" { provider = google-beta project_id = var.gcp_project } resource "google_firebase_project" "default" { provider = google-beta project = var.gcp_project } # 启用账单API resource "google_project_service" "cloud_billing" { provider = google-beta project = google_firebase_project.default.id service = "cloudbilling.googleapis.com" } # 启用Firebase resource "google_project_service" "firebase" { provider = google-beta project = google_firebase_project.default.id service = "firebase.googleapis.com" } # 启用访问上下文管理API resource "google_project_service" "access_context" { provider = google-beta project = google_firebase_project.default.id service = "accesscontextmanager.googleapis.com" } resource "google_firebase_web_app" "app" { provider = google-beta project = data.google_project.project.project_id display_name = "firestore-controller-${google_firebase_project.default.display_name}" depends_on = [ google_firebase_project.default, google_project_service.firebase, google_project_service.access_context, google_project_service.cloud_billing ] } data "google_firebase_web_app_config" "app" { provider = google-beta web_app_id = google_firebase_web_app.app.app_id } resource "google_storage_bucket" "storage" { provider = google-beta name = "firestore-controller-${google_firebase_project.default.display_name}" location = "US" } locals { firebase_config = jsonencode({ appId = google_firebase_web_app.app.app_id apiKey = data.google_firebase_web_app_config.app.api_key authDomain = data.google_firebase_web_app_config.app.auth_domain databaseURL = lookup(data.google_firebase_web_app_config.app, "database_url", "") storageBucket = lookup(data.google_firebase_web_app_config.app, "storage_bucket", "") messagingSenderId = lookup(data.google_firebase_web_app_config.app, "message_sender_id", "") measurementId = lookup(data.google_firebase_web_app_config.app, "measurement_id", "") }) } resource "google_storage_bucket_object" "firebase_config" { provider = google-beta bucket = google_storage_bucket.storage.name name = "firebase-config.json" content = local.firebase_config }
问题
部署在google_firebase_project.default环节失败,报错信息如下:
{ "@type": "type.googleapis.com/google.rpc.ErrorInfo", "domain": "googleapis.com", "metadata": { "consumer": "projects/764086051850", "service": "firebase.googleapis.com" }, "reason": "SERVICE_DISABLED" }
奇怪的是,项目编号764086051850对应的项目并不存在(除非是难以查找的根项目)。我提供给google_firebase_project.default的项目已经启用了相关服务,却仍然出现这个问题。
已尝试操作
- 删除tfstate文件
- 在旧版模块间重构代码
我已经确认google-beta provider在不指定project_id使用data.google_project时能识别正确项目。请问这个神秘的projects/764086051850来自何处?
问题解析与修复方案
神秘项目ID的来源
这个764086051850是Google Firebase管理服务的默认内部消费者项目ID,并非你实际使用的GCP项目。报错的核心原因是:
- 服务启用顺序错误:你在创建
google_firebase_project资源之后才启用Firebase API,但创建Firebase项目本身需要先启用Firebase API。Terraform默认依赖关系未处理这个前置条件,导致请求Firebase服务时API尚未启用,系统回退到使用内部默认项目ID报错。 - Provider配置缺失:如果google-beta provider未明确指定
project参数,部分底层API调用可能会使用Provider默认关联的项目(甚至Google内部服务项目),而非你传入的var.gcp_project。
修复步骤
- 调整资源依赖顺序:将Firebase API启用放在
google_firebase_project之前,避免循环依赖:resource "google_project_service" "firebase" { provider = google-beta project = var.gcp_project service = "firebase.googleapis.com" } resource "google_firebase_project" "default" { provider = google-beta project = var.gcp_project depends_on = [google_project_service.firebase] } - 明确配置Provider项目参数:在google-beta provider块中指定项目,确保所有API调用使用正确项目:
provider "google-beta" { project = var.gcp_project # 其他配置如region、credentials等 } - 检查账号权限:确保Terraform使用的服务账号拥有
firebase.projects.create权限,以及启用Firebase API的权限,避免因权限不足导致的异常。
内容的提问来源于stack exchange,提问作者lmonninger
相关产品推荐
相关产品推荐

