gcloud run & Firebase Admin SDK - PullRequest
       7

gcloud run & Firebase Admin SDK

0 голосов
/ 15 марта 2020

Я развернул приложение JVM в облачной среде Google, которое использует Firebase Admin SDK для отправки уведомлений в Firebase Cloud Messaging. Все отлично работает локально, используя 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 Run с учетной записью службы, которая имеет права администратора разрешения для Cloud Run.

Насколько я понимаю, приложение, развернутое в любой службе GCP, автоматически получает учетные данные приложения. Есть ли разница в комбинации Cloud Run и Firebase Admin SDK?

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 15 марта 2020

У вас есть два варианта:

  1. Запрос к облачной службе метаданных , чтобы найти идентификатор проекта, в котором развернут ваш экземпляр Cloud Run. Это можно сделать только в Cloud Run - он не будет работать, если вы проводите локальное тестирование.
  2. Сделать идентификатор проекта доступным для Cloud Run каким-либо образом во время развертывания.

Простой способ реализации # 2 - поместить идентификатор проекта в среду для автоматического подбора Admin SDK. Например, сценарий оболочки:

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"

Обратите внимание на --update-env-vars, который заполняет GOOGLE_CLOUD_PROJECT.

...