我应该如何在无AWS服务器应用程序中运行数据库迁移?在传统的NodeJS应用中,我通常首先运行npm start
sequelize db:migrate
。但是使用Lambda怎么办?
我的数据库将位于专用子网中。想知道CodeBuild是否能够做到吗?也正在考虑让Lambda函数运行迁移...不确定是否推荐使用tho。
答案 0 :(得分:3)
有多种方法可以实现这一目标。实际上,您在CodeBuild上处于正确的轨道,至少采用这种方法应该没有什么问题。
由于您的数据库位于专用子网中,因此您将需要configure CodeBuild to access your VPC。配置完成后,只需从CodeBuild安全组访问数据库即可。
您可能希望将整个内容设置为CodePipeline。您甚至可以使用multiple buildspec个文件针对不同的CodeBuild运行对其进行设置。这样,您可以拥有一个类似于以下代码的CodePipeline:
Source -> CodeBuild (test) -> Approval -> CodeBuild (migrations) -> Lambda
从理论上讲,您还可以创建一个执行迁移的Lambda函数,并根据需要触发该函数。如果迁移需要很长时间,则还可以使用AWS Batch运行它们。但是将CodeBuild用作部署管道的一部分很有意义。
答案 1 :(得分:2)
由于运行时间短,Lambda可能不是适合此任务的工具。
最好使用在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
答案 2 :(得分:0)
两种方法(lambda和codebuild)都可以,这取决于您的持续部署/集成流程。例如,如果您需要在多个环境中运行这些迁移,则Codebuild会更好。
如果您没有CI / CD机制,则可以在lambda上运行它,因为它在内存方面非常灵活(您只需要在maximum execution time中小心)或使用已经完成的package like this(这是一个建议,取决于您的数据库)。
作为最后的意见,如果您的进程确实很繁重和/或需要执行大量读/写操作,则还可以尝试在AWS ECS实例上运行它,该实例将在运行迁移时扩展完成后,返回到定义的最小尺寸。