我应该如何为我的 AWS 无服务器应用程序迁移(更新数据库架构)我的数据库

问题描述 投票:0回答:3

我应该如何在 AWS 无服务器应用程序中运行数据库迁移?在传统的 NodeJS 应用程序中,我通常先让

npm start
运行
sequelize db:migrate
。但是对于 Lambda 我应该怎么做呢?

我的数据库将位于私有子网中。想知道 CodeBuild 是否能够做到这一点?还在考虑让 Lambda 函数运行迁移...不确定是否推荐。

node.js amazon-web-services migration aws-lambda
3个回答
12
投票

有多种方法可以实现这一目标。实际上,您使用 CodeBuild 的方式是在正确的轨道上,至少采用这种方法应该不会有任何问题。

由于您的数据库位于私有子网中,因此您需要配置 CodeBuild 来访问您的 VPC。配置完成后,允许从 CodeBuild 安全组访问您的数据库就很简单了。

您可能想将整个事情设置为CodePipeline。您甚至可以使用多个构建规范文件来设置它以用于不同的 CodeBuild 运行。这样你就可以拥有一个如下所示的 CodePipeline:

Source → CodeBuild (test) → Approval → CodeBuild (migrations) → Lambda

理论上,您还可以创建一个 Lambda 函数来执行迁移,并根据需要触发该函数。如果迁移需要很长时间,您还可以使用 AWS Batch 来运行它们。但使用 CodeBuild 作为部署管道的一部分非常有意义。


2
投票

由于运行时间短,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

1
投票

两种方法(lambda 和 codebuild)都可以,这取决于您的持续部署/集成流程。例如,如果您需要在多个环境中运行这些迁移,Codebuild 会更适合。

如果你没有 CI/CD 机制,你可以在 lambda 上运行它,因为它在内存方面非常灵活(你只需要注意最大执行时间),或者使用已经存在的制作了这样的包(这是一个建议,取决于您的数据库)。

作为最后的意见,如果您的进程确实很重和/或需要执行大量读/写操作,您还可以尝试在 AWS ECS 实例上运行它,该实例将在您运行迁移时和完成后进行扩展,返回到定义的最小尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.