Использование Firebase из AWS Lambda приводит к превышению времени ожидания задачи - PullRequest
0 голосов
/ 08 января 2019

Я использую лямбда-функцию для создания пользователей с Firebase Authentication, а затем сохраняю их в своей собственной базе данных.

var firebase = require('firebase-admin')
const serviceAccount = require('./firebase.json')
firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccount),
    databaseURL: 'https://*****.firebaseio.com'
})

exports.handler = function(event, context, callback) {

    const {email, password, name, ...} = event

    firebase.auth().createUser({
        email,
        emailVerified: false,
        password,
        displayName: name,
        disabled: false
    })
    .then(firebaseResult => {
        const {uid} = firebaseResult
        return saveUserAtDatabase({email, name, ...})
    })
    .then(result => {
        callback(null, result)
    })
}

Пользователь создается в Firebase и в моей базе данных, но когда я запускаю его в AWS Lambda, он выдает эту ошибку:

{"errorMessage":"2019-01-07T21:25:49.095Z c...e9 Task timed out after 6.01 seconds"}

Неважно, на сколько раз я увеличил время ожидания функции или установил больший объем памяти, он все равно выдает ту же ошибку.

1 Ответ

0 голосов
/ 08 января 2019

Я решил проблему настройки context.callbackWaitsForEmptyEventLoop=false.

Это потому, что callback ожидает пустой цикл обработки событий, чего не происходит при использовании firebase.auth (). CreateUser (). Здесь задокументирована опция context.callbackWaitsForEmptyEventLoop http://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html

Когда для этого свойства установлено значение false, Lambda останавливает контейнер, но не очищает цикл обработки событий при вызове callback.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...