continuous-integration - 使用 PubSub 和 Google Scheduler 一致地部署 Cloudfunction
问题描述
我正在尝试自动化三个模块的部署:通过 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
工具,但它似乎只能部署云功能,而不能部署调度程序和发布订阅主题。
解决方案
我认为您的方法简单明了。
Terraform 是否提供作业更新功能?如果是这样,您可能会发现它只是删除然后(重新)创建作业。我认为这种更新作业的方法(删除然后重新创建)也很好,并且似乎提供了更多控制;您可以在更新之前/之后检查计划是否即将触发。
Google 提供Deployment Manager作为 Google-Cloud 特定的部署工具。以我的经验,它的主要好处是它是服务器端的,但最终,您只是自动化了与gcloud
.
如果您想学习一种将基础架构作为代码进行管理的工具,我建议您使用 Terraform 而不是 Deployment Manager。
更新
调度程序 API 支持“修补”作业:
https://cloud.google.com/scheduler/docs/reference/rest/v1beta1/projects.locations.jobs/patch
并且这种机制得到以下支持gcloud
:
gcloud alpha scheduler jobs update
推荐阅读
- javascript - 打字稿将字符串转换为地图
- google-bigquery - 如何遍历 BigQuery 查询结果并将其写入文件
- database - H2数据库表大小
- swift - swift扩展中的通用覆盖没有被调用
- php - 在您的集群中找不到活动节点 | 连接被拒绝(Docker,PHP)
- javascript - 如何在量角器中引入测试之间的延迟
- python - Python 的 time.process_time() 是否包括子进程花费的 CPU 时间?如何包含它?
- javascript - 如何将 JSON 数组从 ajax 解析为 html 表
- r - 使用 get() 在 Shiny R 中间接调用输入对象
- java - .getChildren().add() 需要一个节点并且无法添加我的对象