如何使用无服务器框架在 aws aurora serverless 中自动创建 table

how to create table automatically in aws aurora serverless with serverless framework

每当我们使用无服务器框架部署任何更改时,我都会尝试使用 npm migrate 自动创建 table。我用极光数据库的时候挺好的。但是我已经搬到了 Aurora Serverless RDS(悉尼地区),它根本不起作用。因为Aurora Serverless RDS本身是运行在VPC里面的,所以当我们需要访问它的时候,lambda函数必须在同一个VPC里面。

PS:我们正在使用 Github 操作作为将所有内容部署到 Lambda 的管道。

请告诉我如何解决这个问题,谢谢。

只有两种基本方法可以解决此问题:打开通往 VPC 的隧道或 运行 在 VPC 内进行更新。以下是我过去使用过的每种方法的一些方法:

进入 VPC 的隧道:

  • VPN,例如OpenVPN。

    相对容易设置,但旨在将两个网络连接在一起,并且代表服务器始终在线收费。如果您 运行 从您的公司网络进行迁移,但不是您想要尝试为 GitHub 操作(或任何第三方构建工具)配置的内容,则效果会很好。

  • 堡垒主机

    这是一个 EC2 实例,运行 位于 public 子网中,并向全世界公开 SSH。您与 Bastion 建立 SSH 连接,然后在下方隧道传输您想要的任何协议。通常 运行 作为 "always on" 实例,但您可以通过编程方式启动和停止。

    我认为这会给您的构建增加很多复杂性。假设您只想按需 运行,您需要一个脚本来启动实例并等待它准备好接受连接。您可能还想调整安全组入口规则以仅允许来自构建机器的流量(其 IP 可能会因每次构建而改变)。然后你必须在后台通过 运行ning ssh 打开隧道,并在构建完成后再次关闭它。

运行VPC内部迁移:

  • 最简单的方法 (imo) 是使用 CodeBuild 将您的构建移动到 VPC 中。如果这样做,您将需要一个 NAT,以便构建可以与外界对话。将 CodeBuild 配置为与 GitHub 通信也不像应有的那样容易(有一个手动步骤需要提供访问令牌)。

  • 如果您正在使用 ECS 进行容器化部署,那么我建议将您的迁移打包到一个容器中,并将其部署到 运行 应用程序所在的集群上。然后你用 aws ecs run-task 触发 运行 (我假设 EKS 有类似的东西,但没有使用它)。

  • 如果您还没有使用 ECS/EKS,那么您可以使用 AWS Batch 实现相同的想法。

Here 是一个关于如何使用 Amazon API Gateway、AWS Lambda、Amazon Aurora Serverless (MySQL) 和 Python CDK 进行数据库模式迁移的示例.