Возможно ли иметь функцию Firebase, которая вызывается изменениями в Firestore, который живет в отдельном проекте Firebase для функции? - PullRequest
1 голос
/ 28 февраля 2020

Допустим, у меня есть проект Firebase с именем "A". В этом проекте у меня есть функция Firebase, запускаемая Cloud Firestore, которая должна запускаться при изменении документа в Firestore. По умолчанию функция Firebase будет прослушивать изменения в Firestore в проекте A.

Однако, скажем, у меня есть особый вариант использования, когда существует второй проект Firebase с именем "B". Мне нужно, чтобы функция Firebase в проекте A была запущена при изменениях Firestore, которые происходят с Firestore в проекте B.

Возможно ли это? Документы Firebase показывают инициализацию нескольких проектов, что позволило бы мне подключиться к нескольким базам данных следующим образом:

const admin = require("firebase-admin");
const serviceAccount = require("path/to/serviceAccountKey.json");

const secondaryAppConfig = {
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://<DATABASE_NAME>.firebaseio.com"
};

// Initialize another app with a different config
const secondary = firebase.initializeApp(secondaryAppConfig, "secondary");

// Retrieve the database.
const secondaryDatabase = secondary.database();

Но это не позволяет мне запускать функцию Firebase Triggered Firebase в моем дополнительном проекте. Функции Firebase напрямую вызывают методы firebase-functions, тогда как вызов базы данных вызывает инициализированный проект.

const functions = require('firebase-functions');

exports.myFunction = functions.firestore
  .document('...')
  .onWrite((change, context) => { /* ... */ });

Возможно ли то, что я хотел бы сделать? Или у кого-нибудь есть обходной путь (кроме создания этой функции Firebase в проекте B)?

Ответы [ 3 ]

3 голосов
/ 28 февраля 2020

Это невозможно. Триггеры Cloud Functions могут срабатывать только в ответ на изменения ресурсов проекта, в котором они развернуты. Это верно для всех типов триггеров, включая Firestore.

Если вы хотите, чтобы код запускался в ответ на изменения в другом проекте, функцию необходимо будет развернуть в этом проекте.

0 голосов
/ 28 февраля 2020

Я не уверен, что это можно сделать в одной кодовой базе - хотя это из-за недостатка опыта. Я бы сказал, что, учитывая ваши настройки, ваша вызывающая функция может запускать вашу функцию вызываемого абонента через HTTP-вызов ( документация )

Для этого может потребоваться платный план Firebase, но Я не уверен в этом ( источник )

0 голосов
/ 28 февраля 2020

В настоящее время записи в Cloud Firestore могут запускать только те облачные функции, которые являются частью одного и того же проекта. Невозможно запустить облачные функции, которые определены в другом проекте.

Типичным решением является, например, вызов функции HTTP во вторичном проекте, для которого затем можно настроить полный URL-адрес.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...