Ознакомьтесь с документацией:
Использование флагов --trigger-resource MY_RESOURCE и --trigger-event MY_EVENT - это наиболее явный способ указать триггер для фоновой функции. Однако gcloud предоставляет сокращения для Pub / Sub и Cloud Storage:
Это Shorthands . Таким образом, это неявно выполняет за вас выбор. Чтобы узнать больше о том, что делает команда, я рекомендую вам использовать опцию --log-http
для просмотра http-вызова, выполняющего gcloud. Для этой команды много, и на данный момент я получил это
==== request start ====
uri: https://cloudfunctions.googleapis.com/v1/projects/<MyProject>/locations/us-central1/functions?alt=json
method: POST
== headers start ==
b'Authorization': --- Token Redacted ---
b'accept': b'application/json'
b'accept-encoding': b'gzip, deflate'
b'content-length': b'903'
b'content-type': b'application/json'
b'user-agent': b'google-cloud-sdk gcloud/293.0.0 command/gcloud.functions.deploy invocation-id/480b4938d2e1469bab2e1a236c5ac53a environment/devshell environment-version/None interactive/True from-script/False python/3.7.3 term/screen (Linux 4.1
9.112+)'
== headers end ==
== body start ==
{"eventTrigger": {"eventType": "google.storage.object.finalize", "resource": "projects/_/buckets/<myBucket>"}, ....
Вы видите "eventType": "google.storage.object.finalize"
, поэтому поведение, которое вы видите, является правильным. Только когда файл завершен и событие запускается для вашей функции. Этот выбор был сделан за вас.
Теперь, как решить ваш вариант использования. 2 способа
- Развертывание 4 облачных функций, по одной для каждого типа события (финализация, удаление, обновление метаданных и архивирование) (не моя любимая рекомендация, см. Ниже)
- Создать одну тему PubSub c. Создайте 4 уведомления pubsub в облачном хранилище , по одному для каждого типа события. А затем подключите свою функцию к pubsub topi c
--trigger-topic=...
вместо --trigger-bucket=...