如何在GCP中每天运行Python脚本?

问题描述 投票:0回答:3

我有一个简单的脚本,它从 API 检索数据并将其加载到 BigQuery 中。我正在使用 Cloud Functions,它运行得很顺利,但是有一次达到了 9 分钟的运行时间限制。

在 GCP 中执行此操作的最佳方法是什么(花费脚本所需的时间)?我正在考虑创建另一个云功能,每天启动一个抢占式虚拟机,该虚拟机执行脚本并最终自行关闭。为了保持较低的价格,虚拟机总是会在数据加载结束时关闭。它将在第二天选定的时间开始。

我不知道从哪里开始这样做,但我想知道这是否是最好的方法。

python google-cloud-platform google-cloud-functions google-compute-engine
3个回答
1
投票

云函数并不真正适合运行时间可能超过 10 分钟的批处理作业。我建议使用 Compute Engine VM 运行您的作业,并结合云功能/云调度程序对其进行调度。

这是一个粗略的轮廓:

  1. 设置容器化 Compute Engine 虚拟机。
  2. 创建一个云函数以在发布-订阅触发器上启动虚拟机。
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()
  1. 创建一个 Cloud Scheduler 以根据您的日程安排触发发布-订阅。

这可以让您避免永远在线的虚拟机的成本。请参阅此博客文章了解更多详细信息。


0
投票

这可行吗?

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)

0
投票

我已经实施了以下方法。

  1. 创建虚拟机
  2. 设置实例计划(以有效利用虚拟机)
  3. 设置 cron 作业每天运行脚本。

Warda Rahim 的博客帮助了我

© www.soinside.com 2019 - 2024. All rights reserved.