Cloud 运行:运行函数作为后台作业的端点

Cloud Run: endpoint that runs a function as background job

我正在尝试在云 运行 中部署 rest api,其中一个端点启动异步作业。该作业在代码中的函数内定义。

似乎一种方法是使用 Cloud Task,但这意味着要对已部署的另一个端点进行自调用 api。具体来说,创建一个包含作业代码的辅助端点(例如 /run-my-function)和另一个将队列设置为启动 /run-my-function?

的云任务

这是正确的做法还是我误解了什么?如果这是正确的方法,如何指定 /run-my-function 端点的 url 而无需明确硬编码云 运行 部署的 uRL 名称?

使用 run-my-function 代码启动端点的端点代码为:

from google.cloud import tasks_v2
client = tasks_v2.CloudTasksClient()
project = 'myproject'
queue = 'myqueue'
location = 'mylocation'
url = 'https://cloudrunservice-abcdefg-ca.b.run.app/run-my-function'
service_account_email = '12345@cloudbuild.gserviceaccount.com'

parent = client.queue_path(project, location, queue)
task = {
            "http_request": {  
                "http_method": tasks_v2.HttpMethod.POST,
                'url': url,
                "oidc_token": {"service_account_email": service_account_email},
            }
        }
response = client.create_task(parent=parent, task=task)

但是,这需要硬编码服务名称 https://cloudrunservice-abcdefg-ca.b.run.app 并定义可以通过 http

调用的辅助端点 /run-my-function

在您的代码中,您可以获取 Cloud 运行 URL 而无需对其进行硬编码或将其设置在环境变量中。

你可以看一下previous article that I wrote,在优美的结尾部分。我在 Go 中提供了一个工作代码,在 Python.

中重新实现并不难

原理在这里:

现在你拥有了!

如果您在实现该目标时遇到困难,请告诉我。我不擅长Python,但我一定能写出那段代码!