gcloud 运行 和 Firebase 管理 SDK

gcloud run & Firebase Admin SDK

我已经将 JVM 应用程序部署到 Google 云 运行,它使用 Firebase Admin SDK 在 Firebase 云消息传递上发送通知。 使用 GOOGLE_APPLICATION_CREDENTIALS 在本地一切正常。然而,部署的应用程序会抛出如下错误:

java.lang.IllegalArgumentException: Project ID is required to access messaging service. Use a service account credential or set the project ID explicitly via FirebaseOptions. Alternatively you can also set the project ID via the GOOGLE_CLOUD_PROJECT environment variable.

我将 FirebaseMessaging 实例创建为:

FirebaseMessaging.getInstance(
FirebaseApp.initializeApp(
    FirebaseOptions.Builder().setCredentials(
        GoogleCredentials.getApplicationDefault()
    ).build()

我已经使用具有 Cloud 运行 管理员权限的服务帐户部署了 Cloud 运行 实例。

我的理解是部署到任何 GCP 服务的应用程序会自动获取应用程序凭据。 Cloud 运行 和 Firebase Admin SDK 的组合有区别吗?

如有任何帮助,我们将不胜感激。

您有两个选择:

  1. Query the cloud metadata service 找到您的 Cloud 运行 实例部署到的项目 ID。这只能在 Cloud 运行 中完成 - 如果您在本地测试,它将无法工作。
  2. 在部署期间以某种方式使项目 ID 可用于 Cloud 运行。

实现#2 的一种简单方法是将项目 ID 放入环境中,以便 Admin SDK 自动获取。例如,一个 shell 脚本:

service_id="your-service-id"
project_id="your-project-id"

gcloud run deploy "$service_id" \
    --project "$project_id" \
    --image "..." \
    --platform managed \
    --update-env-vars "GOOGLE_CLOUD_PROJECT=$project_id"

请注意填充 GOOGLE_CLOUD_PROJECT--update-env-vars