我应如何为AWSless Serverless应用程序迁移(更新数据库架构)数据库

时间:2018-07-21 13:51:19

标签: node.js amazon-web-services migration aws-lambda

我应该如何在无AWS服务器应用程序中运行数据库迁移?在传统的NodeJS应用中,我通常首先运行npm start sequelize db:migrate。但是使用Lambda怎么办?

我的数据库将位于专用子网中。想知道CodeBuild是否能够做到吗?也正在考虑让Lambda函数运行迁移...不确定是否推荐使用tho。

3 个答案:

答案 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实例上运行它,该实例将在运行迁移时扩展完成后,返回到定义的最小尺寸。