目标
我正在尝试修复在 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
来自哪里?
最佳答案
您仍然可以使用应用程序默认凭据而不是服务帐户来完成此操作。
在 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/