Мы можем написать облачную функцию (например, в 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}
Тем не менее, я нахожу обременительным каждый раз развертывать две функции и поэтому задаюсь вопросом, может быть, есть более разумный способ сделать это за один раз?