Logo文档
数据库

AWS RDS 数据库

NEXTDEVKIT 的完整 AWS RDS 设置指南,包含 SST 配置和托管 PostgreSQL 服务。

AWS RDS 是 NEXTDEVKIT 的 SST AWS 部署的默认数据库,提供具有企业级功能、自动扩展和高可用性的托管 PostgreSQL。

🚀 为什么选择 AWS RDS?

选择 AWS RDS 用于 SST AWS 部署是因为:

  • 🛡️ 托管服务:自动备份、补丁和维护
  • 📈 自动扩展:自动存储和计算扩展
  • 🔒 企业安全:VPC 隔离、加密和 IAM 集成
  • 🌐 高可用性:生产工作负载的多可用区部署
  • ⚡ 性能:为高性能应用程序优化
  • 📊 监控:CloudWatch 集成和性能洞察

🏗️ 架构概述

SST + RDS 架构

NEXTDEVKIT 使用 SST 来配置和管理 AWS RDS 基础设施:

组件Next.js 应用 (Lambda)AWS RDS (PostgreSQL)AWS VPC (网络)
核心功能🚀 API 路由🗄️ 主数据库🔒 私有子网
⚙️ 服务器📖 只读副本🛡️ 安全组
🧩 组件💾 备份
📊 监控
支持服务☁️ CloudFront (CDN)🔗 RDS 代理 (连接)🔐 密钥管理器

🔧 SST 配置

1. SST 配置设置

在您的 sst.config.ts 中将默认数据库提供商更改为 AWS RDS:

例如,您可以将实例类型更改为其他类型,如 t4g.mediumt4g.large 以获得更好的性能。

您需要将数据库名称更改为您自己的数据库名称。

// sst.config.ts
// 创建 RDS PostgreSQL 实例
const database = new sst.aws.Postgres("NextDevKitDB", {
  instance: "t4g.micro",          // 实例类型
  storage: "20 GB",               // 存储大小
  version: "16.4",                // PostgreSQL 版本
  vpc,                            // VPC 引用
  proxy: true,                    // 启用 RDS 代理
  password: $dev
    ? process.env.DATABASE_PASSWORD
    : new sst.Secret("NextDevKitDBPassword").value,
  dev: {
    host: process.env.DATABASE_HOST,
    port: Number(process.env.DATABASE_PORT || 5432),
    database: process.env.DATABASE_NAME,
    username: process.env.DATABASE_USERNAME,
    password: process.env.DATABASE_PASSWORD,
  },
});

🔧 环境配置

1. 开发环境

设置本地开发环境变量:

# .env.local
DATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=your-database-name
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=your-local-password
DATABASE_URL=postgresql://postgres:your-local-password@localhost:5432/your-database-name

2. 生产密钥

使用 SST 配置生产密钥:

# 设置生产密钥
sst secret set NextDevKitDBPassword "your-secure-database-password"

其他字段由 sst 自动设置。

src/database/client.ts
const pool = new Pool({
	host: Resource.NextDevKitDB.host,
	port: Resource.NextDevKitDB.port,
	user: Resource.NextDevKitDB.username,
	password: Resource.NextDevKitDB.password,
	database: Resource.NextDevKitDB.database,
});

export const db = drizzle(pool);

🗄️ 数据库架构和客户端

数据库客户端配置

为 AWS RDS 配置数据库客户端:

src/database/client.ts
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
import { Resource } from "sst";

const pool = new Pool({
	host: Resource.NextDevKitDB.host,
	port: Resource.NextDevKitDB.port,
	user: Resource.NextDevKitDB.username,
	password: Resource.NextDevKitDB.password,
	database: Resource.NextDevKitDB.database,
});

export const db = drizzle(pool);

🚀 部署和管理

1. 部署基础设施

部署您的 SST 基础设施:

# 部署到开发环境
npx sst deploy --stage dev

# 部署到生产环境
npx sst deploy --stage production

2. 数据库迁移

在部署后运行数据库迁移:

# 生成迁移
pnpm db:generate

NEXTDEVKIT 使用 lambda 处理程序运行迁移,它会在部署时自动触发。

// sst.config.ts
if (!$dev) {
  new aws.lambda.Invocation("DatabaseMigratorInvocation", {
    input: Date.now().toString(),
    functionName: migrator.name,
  });
}

🔍 监控和可观察性

CloudWatch 集成

SST 自动设置 CloudWatch 监控:

🛠️ 故障排除

常见问题

连接超时

  • 检查 VPC 安全组
  • 验证 RDS 代理配置
  • 确保 Lambda 具有 VPC 访问权限

连接限制

  • 使用 RDS 代理进行连接池
  • 优化连接生命周期
  • 监控连接指标

🔗 相关资源


🎯 下一步

现在您了解了数据库架构,深入了解您选择的平台的具体设置: