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

如何在GCP中每天运行Python脚本?,python,google-cloud-platform,google-cloud-functions,google-compute-engine,Python,Google Cloud Platform,Google Cloud Functions,Google Compute Engine,我有一个简单的脚本,它从API检索数据并将其加载到BigQuery中。我使用的是云计算功能,它运行得很顺利,但是有一段时间达到了9分钟的运行时间限制 在GCP中,花脚本所需的时间完成这项工作的最佳方法是什么?我在考虑创建另一个云函数,每天启动一个可抢占的VM,VM执行脚本,最后关闭自己。为了保持低价格,VM总是在数据加载结束时关闭。它将在第二天选定的时间开始 我不知道从哪里开始,但我想知道这是否是最好的方法。这行吗 import schedule import time def run_dai

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

在GCP中,花脚本所需的时间完成这项工作的最佳方法是什么?我在考虑创建另一个云函数,每天启动一个可抢占的VM,VM执行脚本,最后关闭自己。为了保持低价格,VM总是在数据加载结束时关闭。它将在第二天选定的时间开始

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

这行吗

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)

云功能并不真正适合于运行时间可能超过10分钟的批处理作业。我建议您使用计算引擎VM运行作业,并使用云功能/云调度器的组合对其进行调度

这里有一个大致的轮廓:

  • 设置容器化计算引擎VM
  • 创建一个云函数以在发布子触发器上启动VM
  • 创建一个云计划程序,根据您的计划触发发布订阅

  • 这使您可以避免总是在虚拟机上的成本。请参阅此了解更多详细信息。

    为什么不使用cron作业?使用云调度器的GCP cron作业?我今天已经用它来激活云功能了。我会用它来启动创建、执行和关闭VM的函数吗?我是这样想的,我只是不确定这是否真的是理想的。谢谢您也可以考虑使用VM。IIRC您可以从GCP免费获得一个f1微型实例。如果您的脚本有很高的内存需求,那么您可能需要一个更大的实例。我将使用计算引擎上的VM。谢谢我将寻找一种方法来创建它,运行Python脚本并每天关闭它。您的脚本运行多长时间?它如何使用内存?它使用多CPU吗?需要永久磁盘吗?谢谢!起初,我考虑在加载数据后关闭VM(对不起,我只是在帖子中包含了这些信息,它丢失了)。也就是说,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()