Объединение триггеров данных Firebase .create .update (и, возможно, .remove) в облачных функциях - PullRequest
0 голосов
/ 21 января 2019

Мы можем написать облачную функцию (например, в python) следующим образом:

def some_function_update(data, context):
   # do some operations
   return True

И вызвать ее, когда произойдет изменение в базе данных Firebase.Например, если изменяется следующий узел с динамическими параметрами yyyymmdd и alert_id:

/alerts/{yyyymmdd}/{alert_id}

, мы можем захватить этот , используя context.resource:

trigger_resource = context.resource
temp_params = trigger_resource.split('/')
environment = temp_params[6]
client_id   = temp_params[7]

Кроме того, когда мы развертываем эту функцию в Cloud Functions, мы должны выполнить в терминале следующее:

gcloud functions deploy some_function_update --runtime python37 --trigger-event providers/google.firebase.database/eventTypes/ref.update --trigger-resource projects/_/instances/{INSTANE_NAME}/refs/alerts/{yyyymmdd}/{alert_id}

Однако я заметил, что функция some_function_update срабатывает только при наличии фактического .update.Однако, когда мы добавляем новый alert_id или день, функция не срабатывает.

Я решил эту проблему, создав новую функцию, которая вызывает другую функцию:

some_function_create(data, context)
    some_function_update(data, context)

И развернул ееиспользуя:

gcloud functions deploy some_function_create --runtime python37 --trigger-event providers/google.firebase.database/eventTypes/ref.create --trigger-resource projects/_/instances/{INSTANE_NAME}/refs/alerts/{yyyymmdd}/{alert_id}

Тем не менее, я нахожу обременительным каждый раз развертывать две функции и поэтому задаюсь вопросом, может быть, есть более разумный способ сделать это за один раз?

1 Ответ

0 голосов
/ 23 апреля 2019

Я нахожу довольно странным, что этот вопрос еще не получил ответа. Возможно, что-то мне не хватает, но firebase обычно предоставляет write триггер для облачных функций. Из документов это будет: providers/google.firebase.database/eventTypes/ref.write
Что сделает ваш код развертывания:

gcloud functions deploy some_function_create --runtime python37 --trigger-event providers/google.firebase.database/eventTypes/ref.write --trigger-resource projects/_/instances/{INSTANCE_NAME}/refs/alerts/{yyyymmdd}/{alert_id}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...