【发布时间】:2020-08-24 22:22:41
【问题描述】:
构建服务器通常与运行实例的 VPC 分离。无论是基于 GCP 的 Cloud Build,还是利用现有的众多 CI 工具之一(CircleCI、Codeship 等),因此运行数据库模式更新尤其具有挑战性。
所以,这让我想知道...... 什么时候运行数据库架构迁移的最佳位置?
在我看来,有四种机会可以在 CD 管道中自动运行架构迁移或种子:
- 在构建阶段
- 实例启动时
- 通过预热脚本(同步或异步)
- 通过端点,自动或手动调用部署后
选项 1 的主要问题是安全性。使用 Google Cloud Sql/Google Cloud Build,我可以通过构建步骤和 SQL 代理运行(非常困难)、模式迁移/种子。老实说,设置起来真是让人头疼……但它确实有效。
我最新的项目是使用 MongoDb,如果我需要移动一些数据/播种一些数据,我已经在 migrate-mongo 中连接了它。不幸的是,没有这样的 SQL 代理可以安全地将 MongoDb(atlas)连接到 Cloud Build(或任何其他 CI 工具),因为它不在实例的 VPC 中运行。因此,在我看来,这是一条死胡同。
因此,我对热身脚本的概念表示热情(不是双关语)。
使用 App Engine,预热脚本会在提供流量之前调用,并且会在已经可以通过 VPC 访问的主机上调用。预热脚本旨在用于打开数据库连接以加快连接速度,但假设没有未完成的迁移,它会这样做 - 一个非常轻量级的 select 语句。
谁能想到这种方法有什么问题?
选项 4 也很合适(本质上是一样的)。不过,这些端点可能需要更多保护 - 特别是如果存在“向下”迁移脚本(!)
【问题讨论】:
-
嗨@prout.james 我想和你确认一下,你打算如何在 App Engine 上实现启动脚本? App Engine 不适用于启动脚本,即使您可以在预热请求中发送代码。你能说明一下你打算怎么做吗?
-
嗨@gso_gabriel,可以通过代码添加启动脚本,既可以在 Start NPM 脚本中,也可以在应用程序本身中。由于启动时间很短,尤其是使用无服务器技术时,我现在已经打折了这个选项;冷启动已经很慢了。
标签: mongodb google-app-engine sequelize.js google-cloud-build schema-migration