>我正在尝试自动化三个模块的部署:通过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 Cloud 的部署工具。根据我的经验,它的主要好处是它是服务器端的,但最终,你只是自动化了与gcloud
一起使用的相同 API。
如果你想学习一种工具来管理你的基础设施即代码,我推荐Terraform而不是部署管理器。
更新
调度程序 API 支持"修补"作业:
https://cloud.google.com/scheduler/docs/reference/rest/v1beta1/projects.locations.jobs/patch
并且这种机制得到了gcloud
的支持:
gcloud alpha scheduler jobs update