【问题标题】:How to schedule a GCP VM Instance with a custom python command when the instance gets started?如何在实例启动时使用自定义 python 命令调度 GCP VM 实例?
【发布时间】:2021-12-12 14:43:31
【问题描述】:

我有一个网络抓取工具,可以从电子商务网站抓取数据,现在,我的数据从 pandas 数据帧存储在 BigQuery 表中。但我正在手动完成所有这些事情。例如,从 GCP 站点启动 VM 实例,然后用远程 SSH 连接我的本地计算机,然后在项目文件夹中打开终端,然后运行

$ python main.py

开始抓取。然后在该过程完成后,我再次手动关闭 VM 实例。 现在,我想要的是自动化这个任务,它会在每个月的第一个日期自动启动VM实例,然后抓取电子商务站点数据,然后当程序完成时,它会自动关闭虚拟机实例。

我的程序需要将近 40 小时才能完成从电子商务网站获取所有数据。我一直在寻找 Cloud Functions,我看到最大时间限制是 540 seconds 。由于我的程序需要很长时间才能执行,我不确定云功能是否适合我的情况。

是否有任何解决方案可以自动化这些流程?我是 GCP 的新手,如果是一个非常琐碎的问题,我很抱歉。

【问题讨论】:

    标签: python google-cloud-platform google-cloud-functions


    【解决方案1】:

    Cloud Functions 不适合长时间运行的任务。 所以我认为在 GCE 上设置自动化任务是正确的决定。

    您可以使用 Compute Engine API 自行关闭您的实例。例如,您可以将 gcloud CLI 工具与 gcloud compute instances stop $instance[1] 之类的命令一起使用。

    注意
    不要忘记设置具有正确权限的 ServiceAccount 并将其附加到您的 VM 以通过 Compute Engine API 自行停止。[2]

    您还可以使用 GCE 的 startup_script[3] 功能,可以在 VM 启动后运行命令。

    因此,您可以像下面这样创建 startup_script,它将为您的自动化工作。

    • 步骤 1. 执行python main.py
    • STEP 2. 在 STEP 1 之后执行。gcloud compute instance stop $instance

    参考文献

    [1] gcloud CLI 参考
    https://cloud.google.com/sdk/gcloud/reference/compute/instances/stop

    [2] 带有实例的 ServiceAccount
    https://cloud.google.com/compute/docs/access/service-accounts#associating_a_service_account_to_an_instance

    [3] 启动脚本
    https://cloud.google.com/compute/docs/instances/startup-scripts

    【讨论】:

      【解决方案2】:

      例如,您可以执行以下架构:

      1. 在 Compute Engine 中创建 VM,安装 python 并将 python 脚本放在那里。编辑 VM 并将其添加为启动脚本命令以启动 python 脚本。所以每次你重启虚拟机时——这个python脚本都会运行。
      2. 创建 PubSub 主题。
      3. 在最后部分添加您的 python 代码,将信息发送到 PubSub 主题。
      4. 创建将启动 VM Compute Engine 的云函数。 Cloud Function 应该由 HTTP 触发。
      5. 创建将停止 VM Compute Engine 的云函数。 Cloud Function 应该由您定义的 PubSub 主题触发。
      6. 创建 Cloud Scheduler,它将触发每月启动一次 Cloud Function(第 4 点)或其他方式。

      所以它会像这样工作: 月初云调度器会触发云功能启动虚拟机。 VM 将自动启动并启动您的 ma​​in.py 启动脚本。 脚本完成后,消息将发送到 PubSub 主题。 PubSub 主题将触发第二个云函数,该函数将停止 VM 机器。

      下个月也一样。 下个月也一样。 等等

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 2022-01-19
        • 2021-09-16
        • 1970-01-01
        • 1970-01-01
        • 2018-09-26
        相关资源
        最近更新 更多