数据库
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.medium
或 t4g.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 自动设置。
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 配置数据库客户端:
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 代理进行连接池
- 优化连接生命周期
- 监控连接指标
🔗 相关资源
🎯 下一步
现在您了解了数据库架构,深入了解您选择的平台的具体设置: