如何在谷歌云调度程序(Python)中定义的谷歌云函数中使用主体参数?

Kau*_*ole 1 python google-bigquery google-cloud-functions google-cloud-scheduler

在我的云函数中,我有一个查询,我正在执行该查询并将作业结果写入新的 bigquery 表。我希望我的查询应该基于某些单位值(使用外部动态参数)是动态的,我正在从谷歌云调度程序触发这个云函数(其中包含 Body 部分中的一些参数值(使用 post 方法和 http 调用)),任何人都可以建议如何将此参数值从云调度程序的主体部分使用到我的云函数中,以使我的查询动态化

在云调度器的主体部分传递某些参数,但不知道如何在云函数中使用它们。

云调度器的主体:

{
'unit': 'myunitname'
'interval':'1'
}
Run Code Online (Sandbox Code Playgroud)

云功能:

import flask
from google.cloud import bigquery

app = flask.Flask(__name__)


def main(request):
    with app.app_context():
        query = "SELECT unitId FROM `myproject.mydataset.mytable` 
        where unit ='{}' and interval='{}'".format(unit,interval)
        client = bigquery.Client()
        job_config = bigquery.QueryJobConfig()
        dest_dataset = client.dataset('mydataset', 'myproject')
        dest_table = dest_dataset.table('mytable')
        job_config.destination = dest_table
        job_config.create_disposition = 'CREATE_IF_NEEDED'
        job_config.write_disposition = 'WRITE_APPEND'
        job = client.query(query, job_config=job_config)
        job.result()

        return "Triggered"
Run Code Online (Sandbox Code Playgroud)

MyN*_*leb 5

最好的方法是使用 pub/sub 将所有内容保留在 Google Cloud 内部:

谷歌官方教程

您的 Cloud Scheduler 向 Pub/Sub 发送一条消息,其中包含您的 Cloud Function 所需信息的有效负载对象。Cloud Function 应该从 Pub/Sub 主题触发,然后您可以访问message.attributes您正在引用的动态部分所需的内容。

Cloud Scheduler-- 发布到 --> Pub/Sub Topic-- 订阅者推送 -->Cloud Function


如果你想继续使用 HTTP,你可以按照这里描述如何从你的函数使用 POST。您正在使用该requests模块来提取您在 Cloud Scheduler 作业中传递的主体属性。