amazon-web-services - 如何使用无服务器框架在 aws aurora 无服务器中自动创建表
问题描述
npm migrate
每当我们使用无服务器框架部署任何更改时,我都会尝试自动创建表。当我使用极光数据库时,它很好。但是我已经转移到Aurora Serverless RDS(悉尼地区),它根本不起作用。因为Aurora Serverless RDS本身在 VPC 内部工作,所以当我们需要访问它时,lambda 函数必须在同一个 VPC 上。
PS:我们使用 Github Action 作为管道将所有内容部署到 Lambda。
请告诉我如何解决这个问题,谢谢。
解决方案
只有两种基本方法可以解决此问题:打开通往 VPC 的隧道或在 VPC 内运行更新。以下是我过去使用过的一些方法:
进入 VPC 的隧道:
VPN,例如 OpenVPN。
设置相对容易,但设计用于将两个网络连接在一起,并代表服务器始终在线收费。如果您正在从您的公司网络运行迁移,但不是您想尝试为 GitHub Actions(或任何第三方构建工具)配置的东西,它会很好地工作。
堡垒主机
这是一个在公有子网中运行并向全世界公开 SSH 的 EC2 实例。您与堡垒建立 SSH 连接,然后通过隧道传输您想要的任何协议。通常作为“始终开启”实例运行,但您可以以编程方式启动和停止。
我认为这会给您的构建增加很多复杂性。假设您只想按需运行,您需要一个脚本来启动实例并等待它准备好接受连接。您可能还想调整安全组入口规则以仅允许来自您的构建机器的流量(其 IP 可能会因每次构建而改变)。然后您必须通过
ssh
在后台运行来打开隧道,并在构建完成后再次关闭它。
在 VPC 内运行迁移:
最简单的方法 (imo) 是使用 CodeBuild 将您的构建移动到 VPC 中。如果您这样做,您将需要一个 NAT,以便构建可以与外界通信。将 CodeBuild 配置为与 GitHub 对话也并不像应有的那么容易(有一个手动步骤,您需要提供访问令牌)。
如果您使用 ECS 进行容器化部署,那么我建议将您的迁移打包在一个容器中,并将其部署到运行应用程序的同一个集群上。然后你会用aws ecs run-task触发运行(我假设 EKS 有类似的东西,但没有使用它)。
如果您还没有使用 ECS/EKS,那么您可以使用AWS Batch实现相同的想法。
推荐阅读
- swift - 如何在第二个故事板中使图像视图填满 Swift 中的所有屏幕
- flutter - 如何在 Flutter 中强制文本自动填充 10 行
- typeclass - 导入 `Cubical.Data.Nat` 会破坏 `isOfHLevel→isOfHLevelDep`
- javascript - 从数据库和全局变量发回用户信息的 javascript/ 函数
- php - 通过php将mysql导出为excel时在第一列中添加序列号
- c++ - 如何将 websocket 客户端连接到服务器?
- c# - 单元测试中的堆栈溢出错误(Resharper、C#、NUnit)。测试中止
- python - 将菜单从另一个模块导入到 tkinter 中的主模块
- android - Firebase FCM - 通过 ADMIN SDK 在 android 上显示通知时间戳
- java - 如何启动 Java API(后端)