我有一个简单的脚本,它从 API 检索数据并将其加载到 BigQuery 中。我正在使用 Cloud Functions,它运行得很顺利,但是有一次达到了 9 分钟的运行时间限制。
在 GCP 中执行此操作的最佳方法是什么(花费脚本所需的时间)?我正在考虑创建另一个云功能,每天启动一个抢占式虚拟机,该虚拟机执行脚本并最终自行关闭。为了保持较低的价格,虚拟机总是会在数据加载结束时关闭。它将在第二天选定的时间开始。
我不知道从哪里开始这样做,但我想知道这是否是最好的方法。
云函数并不真正适合运行时间可能超过 10 分钟的批处理作业。我建议使用 Compute Engine VM 运行您的作业,并结合云功能/云调度程序对其进行调度。
这是一个粗略的轮廓:
import googleapiclient.discovery
def start_job(event, context):
"""Triggered from a message on a Cloud Pub/Sub topic.
Args:
event (dict): Event payload.
context (google.cloud.functions.Context): Metadata for the event.
"""
compute = googleapiclient.discovery.build('compute', 'v1')
compute.instances().insert(
project='project_id',
zone='us-east1-b',
body=vm_config).execute()
这可以让您避免永远在线的虚拟机的成本。请参阅此博客文章了解更多详细信息。
这可行吗?
import schedule
import time
def run_daily():
do something
do something else
schedule.every().day.at("08:20:30").do(run_daily) # HH MM SS
while True:
schedule.run_pending()
time.sleep(1)