我应该如何在 AWS 无服务器应用程序中运行数据库迁移?在传统的 NodeJS 应用程序中,我通常先让
npm start
运行 sequelize db:migrate
。但是对于 Lambda 我应该怎么做呢?
我的数据库将位于私有子网中。想知道 CodeBuild 是否能够做到这一点?还在考虑让 Lambda 函数运行迁移...不确定是否推荐。
有多种方法可以实现这一目标。实际上,您使用 CodeBuild 的方式是在正确的轨道上,至少采用这种方法应该不会有任何问题。
由于您的数据库位于私有子网中,因此您需要配置 CodeBuild 来访问您的 VPC。配置完成后,允许从 CodeBuild 安全组访问您的数据库就很简单了。
您可能想将整个事情设置为CodePipeline。您甚至可以使用多个构建规范文件来设置它以用于不同的 CodeBuild 运行。这样你就可以拥有一个如下所示的 CodePipeline:
Source → CodeBuild (test) → Approval → CodeBuild (migrations) → Lambda
理论上,您还可以创建一个 Lambda 函数来执行迁移,并根据需要触发该函数。如果迁移需要很长时间,您还可以使用 AWS Batch 来运行它们。但使用 CodeBuild 作为部署管道的一部分非常有意义。
由于运行时间短,Lambda 可能不是执行此任务的正确工具。
您最好使用在 CodeBuild 上运行的自定义脚本。并且在 Codepipeline 中有一个连续的 CodeBuild 任务,其中第一个 CodeBuild 将完成第一个 CodeBuild 的迁移,并且在第一个 CodeBuild 完成后,您可以执行将部署您的 lambda 的新 CodeBuild。如果您的数据库迁移失败,您可以退出 CodePipeLine。
您的 CodePipeLine 将如下所示。
pre_build:
commands:
- DB migration command
finally:
- CleanUp Command
build:
commands:
- Deploy lambdas command
finally:
- Cleanup command