首页 > 解决方案 > 使用 lambda 和 aurora postgresql 时如何处理数据库模式迁移?

问题描述

我在 lambda 上部署应用程序并使用 aurora postgresql 作为数据库。在开发过程中,数据库架构变化非常频繁,我正在寻找一种迁移架构的方法。我知道 flyway 可以完成这项工作,但它适用于部署在 EC2 实例而不是 lambda 上的应用程序。在 lambda 中完成这项工作的最佳方法是什么?

我可以想到一个解决方法。我的 lambda 在typescript里面,所以它在 nodejs 环境中运行。

标签: postgresqlamazon-web-servicesaws-lambdaamazon-aurora

解决方案


我正在使用 loopback4 创建我的模型和数据库模式。我有一个 AWS 自定义资源,它调用处理程序以将架构迁移到 RDS。这是你需要做的:

  1. 为 RDS 1.1 创建一个安全组。添加入站规则:允许来自 TCP 3306 1.2 上的 lambda SG。添加出站规则:允许所有协议,所有端口上的所有
  2. 为 lambda 2.1 创建一个安全组。添加出站规则:允许所有协议,所有端口上的所有

这是我使用 CDK 的代码:

/** Lambda Security Group */
const lambdaSecurityGroup = new SecurityGroup(this, "LambdaSecurityGroup", {
  securityGroupName: "lambda-security-group",
  description: "Lambda security group",
  vpc: vpc,
  allowAllOutbound: true,
});

/** Security Group */
const securityGroup = new SecurityGroup(this, "SecurityGroup", {
  securityGroupName: "rds-security-group",
  description: "instance security group",
  vpc: vpc,
  allowAllOutbound: true,
});
/** Security Group Inbound rules - Lambda security group*/
securityGroup.addIngressRule(
  SecurityGroup.fromSecurityGroupId(
    this,
    "LambdaSecurityGroupId",
    lambdaSecurityGroup.securityGroupId
  ),
  Port.tcp(config.DatabasePort),
  "Allow from Lambda security group on TCP 3306"
);
const customResourceMigrateProvider = new CustomResources.Provider(
  this,
  "CustomResourceMigrateProvider",
  {
    onEventHandler: new Function(this, "CustomResourceMigrateLambda", {
      runtime: Runtime.NODEJS_12_X,

      code: /*this.lambdaCode ||*/ Code.fromAsset("dist"),
      handler: "loopback/handlers/custom-resource-migrate.handler",
      timeout: Duration.seconds(30),
      vpc: vpc,
      vpcSubnets: { subnets: [appSubnet1aId, appSubnet1bId] },
      securityGroups: [lambdaSecurityGroup],
      environment: environmentVariables,
      role: customRole,
      layers: [layer],
    }),
    //isCompleteHandler: isComplete,
    logRetention: logs.RetentionDays.ONE_DAY,
  }
);

推荐阅读