【问题标题】:Schedule Google Cloud Tasks to Invoke Firebase Function安排 Google Cloud Tasks 调用 Firebase 功能
【发布时间】:2020-01-10 06:54:06
【问题描述】:

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

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

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);

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

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

这是云功能的外观。

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

【问题讨论】:

    标签: firebase google-app-engine google-cloud-functions google-cloud-tasks


    【解决方案1】:

    要触发云函数,您必须使用HTTP targets,而不是App Engine targets。对于 App Engine 目标,任务是尝试找到通往 App Engine 应用程序的特殊路由。你可以在你的任务对象中改变它:

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

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

    【讨论】:

    • 我按照此处的建议包含了 url,并按照链接中包含的服务帐户部分教程进行操作,但是当我的任务尝试向我的 fire base 函数发出请求时,我仍然收到“不可用”状态.我正在为 onCreate 使用 firebase-sdk 来启动这些功能。这会引起我的问​​题吗?
    • 使用onCreate 会在实时数据库中创建新数据时创建触发器。要被 Cloud Tasks 调用,它需要响应 HTTP 请求;因此你应该使用onRequest
    • 澄清一下,我有一个 onCreate 函数,一旦将新数据对象插入实时数据库,就会触发该函数。 onCreate 函数安排一个任务(成功),该任务向我的 onRequest 函数发出一个 http POST。需要观众吗?我相信我的 oidc 令牌地址具有适当的访问权限。
    • 为了澄清您根本没有看到 onRequest 函数被调用?您是如何创建 HTTP 任务的?
    • 感谢您提供这些详细信息。所需的最小权限集应该是:创建任务 GCF 服务帐户 = 任务队列和服务帐户用户,而添加到任务的服务帐户 = GCF 调用者。您应该看到服务帐户作为接受任务 GCF 的调用者添加到令牌中。您还可以通过将其设置为您的 gcloud 帐户来测试调用该函数的服务帐户,然后 curl 函数 url: curl --header "Authorization: Bearer $(gcloud auth print-identity-token)" URL
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-18
      • 2020-07-18
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 2018-07-01
      • 2018-12-28
      • 2018-06-30
      相关资源
      最近更新 更多