firebase - Google-beta 似乎正在使用不存在的项目和 google_firebase_project。我应该怎么办?

标签 firebase google-cloud-platform terraform terraform-provider-gcp

目标

我正在尝试修复在 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
}

# enable billing API
resource "google_project_service" "cloud_billing" {
    provider = google-beta
    project = google_firebase_project.default.id
    service = "cloudbilling.googleapis.com"
}

# enable firebase
resource "google_project_service" "firebase" {
    provider = google-beta
    project = google_firebase_project.default.id
    service = "firebase.googleapis.com"
}

# enable access context manage 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"
│   }

这很奇怪,因为具有该编号的项目不存在(除非它是我找不到的某种根项目)。如果这是我提供给 google_firebase_project.default 的项目某个子项目的项目编号,那也很奇怪; var.gcp_project_name 当然启用了此服务。

到目前为止我尝试过的

  • 正在删除 tfstate。
  • 从旧模块来回重构。

我已仔细检查并确认,在使用 data.google_project 而不指定 时,google-beta 提供程序确实能够识别其配置中的正确项目项目ID

这个神秘的projects/764086051850来自哪里?

cross-post

最佳答案

您仍然可以使用应用程序默认凭据而不是服务帐户来完成此操作。

provider block 中包含以下内容:

        # google-beta
provider "google" {
  project               = var.project_id
  billing_project       = var.project_id
  user_project_override = true
}

从此提供商发送的所有请求都将利用 billing_project 作为配额项目,并且 user_project_override 控制对 GCP API 的请求以实现先决条件、配额和计费。

引用文献

关于firebase - Google-beta 似乎正在使用不存在的项目和 google_firebase_project。我应该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73641577/

相关文章:

tags - 如何列出所有标有特定标签的实例(在防火墙规则目标标签下指定)

python - 如何将机器学习算法连接到数据库

amazon-web-services - 将 OpenAPI 规范中描述的 REST API 转换为 Terraform 模板中描述的 AWS API Gateway REST API

html - Angular Firebase 3 Auth Ui-Router

java - FireStore 数据未显示正在访问隐藏方法 Lsun/misc/Unsafe;->putLong(Ljava/lang/Object;JJ)V(灰名单、链接、允许)

google-maps - 带有 Google Maps API 的云函数

azure - 如何使用 Terraform 将 VM 添加到 Azure 内的负载均衡器中?

firebase - 当应用程序处于前台时,Flutter FCM 推送通知不起作用

google-cloud-platform - GA4 到 BigQuery 历史回填

amazon-web-services - 有条件地创建 aws_security_group_rule 并在 terraform 中添加计数