You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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项目。报错的核心原因是:

  1. 服务启用顺序错误:你在创建google_firebase_project资源之后才启用Firebase API,但创建Firebase项目本身需要先启用Firebase API。Terraform默认依赖关系未处理这个前置条件,导致请求Firebase服务时API尚未启用,系统回退到使用内部默认项目ID报错。
  2. Provider配置缺失:如果google-beta provider未明确指定project参数,部分底层API调用可能会使用Provider默认关联的项目(甚至Google内部服务项目),而非你传入的var.gcp_project。

修复步骤

  1. 调整资源依赖顺序:将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]
    }
    
  2. 明确配置Provider项目参数:在google-beta provider块中指定项目,确保所有API调用使用正确项目:
    provider "google-beta" {
        project = var.gcp_project
        # 其他配置如region、credentials等
    }
    
  3. 检查账号权限:确保Terraform使用的服务账号拥有firebase.projects.create权限,以及启用Firebase API的权限,避免因权限不足导致的异常。

内容的提问来源于stack exchange,提问作者lmonninger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:15:43