安排 Google 个云任务来调用 Firebase 函数

Schedule Google Cloud Tasks to Invoke Firebase Function

我正在尝试设置调用云函数的云任务。我能够设置云任务并且设置了一些云函数,但我似乎无法让云任务调用云函数。

我正在使用此代码从我的本地主机创建任务

const serviceAccount = require('./serviceAccount.json');
const {CloudTasksClient} = require('@google-cloud/tasks');
const client = new CloudTasksClient({
    credentials: serviceAccount
});
const parent = client.queuePath("my-firebase-app-name-is-here", "us-central1", "matchmaking-queue-cleanup");
const task = {
    appEngineHttpRequest: {
        httpMethod: 'POST',
        relativeUri: '/leave-queue'
    },
};
task.appEngineHttpRequest.body = Buffer.from(JSON.stringify({
    id: "test"
})).toString('base64');
task.scheduleTime = {
    minutes: 13
};
const request = {parent, task};
client.createTask(request).then((response) => {
    console.log(`created task ${response.name}`);
}).catch(console.log);

这会导致任务显示在我的控制台中的云任务下。

任务一直失败并重试。我没有看到来自云功能端的任何日志。

这是云函数的样子。

知道我需要做什么才能让云任务调用云函数吗?

您是否启用了 App Engine API? Cloud Function 需要此 API 启用。

要触发云函数,您必须使用 HTTP targets, not App Engine targets。使用 App Engine 目标时,任务是尝试找到通往 App Engine 应用程序的特殊路径。您将在您的任务对象中更改它:

const task = {
    httpRequest: {
        httpMethod: 'POST',
        url: <URL_FOR_FUNCTION>
    },
};

这里有一个关于如何使用 Cloud Tasks with Cloud Functions 的教程。