首页
/ SST框架中AWS PostgreSQL数据库集成实战指南

SST框架中AWS PostgreSQL数据库集成实战指南

2025-07-05 06:09:33作者:钟日瑜

前言

在现代无服务器架构中,数据库集成是一个关键环节。本文将深入解析如何使用SST框架在AWS环境中配置和集成PostgreSQL数据库,并创建与之交互的无服务器函数。

配置文件结构解析

这个sst.config.ts文件是SST项目的核心配置文件,它定义了应用的基础架构即代码(IaC)。让我们分解这个配置文件的关键部分:

应用基础配置

app(input) {
  return {
    name: "aws-postgres",
    removal: input?.stage === "production" ? "retain" : "remove",
    home: "aws",
  };
}

这部分定义了应用的基本属性:

  • name: 应用名称标识符
  • removal: 根据部署环境(production/非production)决定资源删除策略
  • home: 指定云服务提供商为AWS

基础设施定义

async run() {
  // NAT Gateways are required for Lambda functions
  const vpc = new sst.aws.Vpc("MyVpc", { bastion: true });
  const postgres = new sst.aws.Postgres("MyDatabase", {
    vpc,
  });
  // ...其余代码
}

这里创建了两个关键资源:

  1. VPC网络:为Lambda函数提供网络隔离,bastion: true表示启用堡垒机访问
  2. PostgreSQL数据库:在指定的VPC中创建数据库实例

无服务器函数配置

const app = new sst.aws.Function("MyApp", {
  handler: "index.handler",
  url: true,
  link: [postgres],
  nodejs: {
    esbuild: {
      external: ["pg"],
    },
  },
});

这段代码定义了一个AWS Lambda函数:

  • handler: 指定函数入口点
  • url: 为函数启用HTTP访问端点
  • link: 将函数与PostgreSQL数据库连接
  • nodejs.esbuild: 配置构建选项,external指定不打包的依赖项

关键技术点解析

VPC与NAT网关

在AWS环境中,Lambda函数访问VPC内资源(如RDS)需要NAT网关。SST自动处理这些网络配置,开发者只需声明VPC需求即可。

数据库连接管理

SST的link属性自动处理了:

  • 数据库连接字符串注入
  • 安全组规则配置
  • IAM权限管理

依赖管理技巧

通过external: ["pg"]配置,我们告诉构建系统不要将pg(PostgreSQL客户端)打包到函数代码中,而是使用Lambda层或运行时提供的版本,这可以减小部署包大小。

输出变量说明

return {
  app: app.url,
  host: postgres.host,
  port: postgres.port,
  username: postgres.username,
  password: postgres.password,
  database: postgres.database,
};

这些输出变量可以在部署后获取,用于:

  • 前端应用调用后端API(app.url)
  • 外部系统连接数据库(host/port等)
  • 调试和验证目的

最佳实践建议

  1. 环境分离:利用SST的stage概念区分开发、测试和生产环境
  2. 敏感信息管理:考虑使用AWS Secrets Manager管理数据库凭证
  3. 连接池优化:在Lambda函数中实现数据库连接池以提高性能
  4. 监控配置:为数据库和函数添加适当的CloudWatch监控

总结

通过这个示例,我们看到了SST如何简化AWS环境中无服务器应用与PostgreSQL数据库的集成。SST的抽象层处理了大量底层细节,让开发者可以专注于业务逻辑而非基础设施配置。这种模式特别适合需要快速迭代的现代应用开发场景。