Активировать повторную попытку в облачной функции firebase программно

Я развертываю облачные функции Firebase, чтобы прослушивать изменения в нашем FireStore посредством непрерывного развертывания.

Я могу только найти способ активировать повторные попытки вручную. Что противоречит нашему подходу cd.

Глядя на обычный облачные функции gcp, флаг повторной попытки может быть задан при развертывании. Но я не могу найти аналогичную опцию в интерфейсе firebase-cli или firebase-functions (2.1.0)

Любые подсказки о том, как решить эту проблему? Карстен

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
4
0
642
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В настоящее время нет аналогичного варианта развертывания с использованием интерфейса командной строки Firebase.

Над этим работает команда Firebase, так что следите за обновлениями.

Вы можете включить повторные попытки в функциях Firebase вручную с помощью GCloud Console. Программные повторные попытки функций на основе триггера были добавлены в firebase-functions 3.10.0 (см. список изменений и связанный пул реквест).

Поскольку это не совсем очевидно из PR или документации, вот краткий пример синтаксиса:

export const myFirebaseFunc = functions
  .runWith({
    failurePolicy: {
      retry: {},
    },
    memory: '512MB',
    timeoutSeconds: 60,
  })
  .firestore.document('/path/to/some/doc')
  .onCreate(async (snap, context) => {
   /* do stuff */
 })

На момент написания этой статьи казалось, что политика отказа просто включена или выключена. Таким образом, это эквивалентно

export const myFirebaseFunc = functions
  .runWith({
    failurePolicy: true,
    memory: '512MB',
    timeoutSeconds: 60,
  })
  .firestore.document('/path/to/some/doc')
  .onCreate(async (snap, context) => {
   /* do stuff */
 })

Некоторые предостережения:

  • Вам также придется выполнить развертывание с помощью --force

  • Вы можете разрешить повторные попытки только для триггерных функций, а не для функций, вызываемых http.

  • Было бы идиотизмом не встроить некоторые гарантии. Максимальный срок действия политики повторных попыток составляет 7 дней, и она оплачивается так же, как и любой другой вызов функции, поэтому, если у вас есть какая-то необработанная ошибка, она может повторяться в течение целой недели. Вы можете использовать context.eventTimestamp, чтобы узнать, когда примерно началась первая попытка.

Прочитайте это: https://firebase.google.com/docs/functions/retries и убедитесь, что ваша функция в идемпотенте.

Также было трудно определить, что нужно вернуть, чтобы принудительно повторить попытку или избежать повторной попытки. Запущенные функции Firebase должны возвращать обещание. (см. этот видео)

Функция Firebase с повторными попытками повторит попытку, если:

  • возвращает отклоненное обещание
  • выдает исключение
  • или время ожидания функции истекло

Это означает, что если вы столкнетесь с ошибкой, которая, как вы знаете, в конечном итоге не разрешится при повторной попытке (т.е. вы хотите остановить выполнение функции и не повторять попытку), вы можете вернуть Promise.resolve({message: 'some message'});

Другие вопросы по теме