使用 PubSub 和 Google Scheduler 一致地部署 Cloudfunction

Consistently deploying Cloudfunction with PubSub and Google Scheduler

我正在尝试自动部署三个模块:通过 Cloud Scheduler 的 PubSub 订阅调用的 Cloud Function。目前我有以下脚本,它使用 gcloud 命令:

    gcloud beta pubsub topics create $SCHEDULE_NAME || echo "Topic $SCHEDULE_NAME already created."
    gcloud beta functions deploy $SCHEDULE_NAME
      --region $CLOUD_REGION
      --memory 128MB
      --runtime nodejs10
      --entry-point $ENTRY_POINT
      --trigger-topic $SCHEDULE_NAME
      --vpc-connector cloud-function-connector
    # gcloud scheduler jobs delete $JOB_NAME # does not work as it needs YES non-interactively
    gcloud scheduler jobs create pubsub $SCHEDULE_NAME --message-body='RUN' --topic=$SCHEDULE_NAME --schedule='27 2 * * *' --time-zone='Europe/London' || true

这可行,但我不确定这是否是最正确的方法。例如,如果作业已经存在,则无法仅对其进行更新。我正在考虑 terraform,但我不确定仅用于部署这三个小模块是否有用。我还发现了 serverless 工具,但它似乎只能部署云功能,但不能部署调度程序和 pubsub 主题。

我觉得你的方法简单明了。

Terraform 是否提供作业更新功能?如果是这样,您可能会发现它只是删除然后(重新)创建作业。我认为这种更新作业的方法(删除然后重新创建)也很好,而且似乎提供了更多的控制;您可以在更新之前|之后检查计划是否即将触发。

Google 提供 Deployment Manager 作为 Google-云特定的部署工具。根据我的经验,它的主要好处是它是服务器端的,但最终,您只是自动化了与 gcloud.

一起使用的相同 APIs

如果您想学习一种工具来管理您的基础架构即代码,我建议您使用 Terraform 而不是 Deployment Manager。

更新

调度程序 API 支持 'patching' 个作业:

https://cloud.google.com/scheduler/docs/reference/rest/v1beta1/projects.locations.jobs/patch

并且gcloud支持此机制:

gcloud alpha scheduler jobs update