Есть ли способ настроить триггеры firestore, происходящие из нескольких коллекций firestore, для запуска только одной облачной (javascript) функции?

Поэтому обычно на базовом уровне вы часто видите функции, запускаемые коллекцией firestore, написанные следующим образом:

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

При этом я запускаю свои развертывания немного по-другому, хотя структурно идентичен.

  • I have a exports.main = (content, event) where:
    • event holds the EVENT information:
    • eventId (например: 66e9e123-d3fg-1234-123a-1234f110b71b-0)
    • eventType (например, провайдеры / cloud.firestore / eventTypes / document.create)
    • notSupported (например, {})
    • параметры (например: {eventId: 1CB89AD0-5AS0-1233-SD70-E3B7DS52D23D})
    • ресурс (e.x: projects / its-the-project-id / databases / (по умолчанию) / documents / TheCollection / 1CB89AD0-5AS0-1233-SD70-E3B7DS52D23D
    • отметка времени (например, 2021-05-19T20: 00: 24.131151Z)
  • а контент - это данные

Я развертываю функции через Terraform, где определяю:

  • event_trigger:
    • event_type = providers/cloud.firestore/eventTypes/document.create
    • ресурс = $ {TheCollection} / {eventId}

Итак, как вы можете видеть, хотя то, как я это делаю, безусловно, требует дополнительной настройки, он очень идентичен, он просто настроен более подходящим для GCP способом (если хотите)

Итак, в этом контексте:

  1. Is there any possible way to have more than one collection/document trigger, trigger only 1 cloud function?
    • So say I have collection x and collection y, I want them both to trigger the same cloud function
  2. Если есть способ, не стесняйтесь писать его в стиле, который часто пишут с помощью Firebase, и я могу попытаться перевести его для развертывания в Firestore.

person insta catering    schedule 09.06.2021    source источник


Ответы (1)


Да, вы можете сделать это, используя несколько подстановочных знаков:

exports.myFunction = functions.firestore
  .document('{collectionId}/{docId}')
  .onWrite((change, context) => {
    console.log(context.params.collectionId);
    console.log(context.params.docId);
});

Дополнительная информация здесь.

person Tim    schedule 11.06.2021