SST项目中使用AWS Aurora MySQL数据库的实践指南
概述
在现代云原生应用开发中,数据库是核心组件之一。本文将详细介绍如何在SST框架中配置和使用AWS Aurora MySQL数据库服务。Aurora是AWS提供的高性能关系型数据库服务,与MySQL完全兼容但性能更优。
环境配置
首先,我们需要在sst.config.ts
文件中定义应用的基本配置:
export default $config({
app(input) {
return {
name: "aws-aurora-mysql",
removal: input?.stage === "production" ? "retain" : "remove",
home: "aws",
};
},
// ...
});
这段代码定义了应用名称为"aws-aurora-mysql",并设置了资源删除策略:生产环境保留资源,非生产环境则移除资源。
VPC网络配置
为了安全地部署Aurora数据库,我们需要先配置VPC(虚拟私有云):
const vpc = new sst.aws.Vpc("MyVpc", {
nat: "ec2",
bastion: true,
});
这里我们创建了一个VPC,并启用了两个重要特性:
nat: "ec2"
- 使用EC2实例作为NAT网关bastion: true
- 启用堡垒主机功能,便于本地开发调试
创建Aurora MySQL数据库
接下来是核心部分 - 创建Aurora MySQL数据库实例:
const mysql = new sst.aws.Aurora("MyDatabase", {
engine: "mysql",
vpc,
});
这个配置创建了一个MySQL兼容的Aurora数据库集群,并将其部署在我们刚刚创建的VPC中。SST框架会自动处理许多底层细节,如安全组配置、子网分配等。
函数应用集成
为了展示数据库的实际使用,我们创建一个Lambda函数并将其连接到数据库:
new sst.aws.Function("MyApp", {
handler: "index.handler",
link: [mysql],
url: true,
vpc,
});
关键点说明:
link: [mysql]
- 将函数与数据库实例链接,自动注入连接信息url: true
- 为函数生成可访问的URLvpc
- 确保函数运行在与数据库相同的VPC中
数据库连接实践
在函数代码中,我们可以这样连接数据库:
const connection = await mysql.createConnection({
database: Resource.MyDatabase.database,
host: Resource.MyDatabase.host,
port: Resource.MyDatabase.port,
user: Resource.MyDatabase.username,
password: Resource.MyDatabase.password,
});
SST会自动将数据库连接信息注入到Resource
对象中,避免了硬编码敏感信息。
本地开发支持
为了方便本地开发,SST提供了隧道功能:
- 首先安装隧道工具(只需执行一次):
sudo npx sst tunnel install
- 然后启动开发环境:
npx sst dev
隧道功能通过堡垒主机建立安全连接,使开发者可以直接从本地机器访问VPC内的数据库资源。
输出数据库信息
最后,我们返回数据库连接信息供其他资源使用:
return {
host: mysql.host,
port: mysql.port,
username: mysql.username,
password: mysql.password,
database: mysql.database,
};
最佳实践建议
-
生产环境安全:在实际生产环境中,应考虑使用AWS Secrets Manager管理数据库凭证,而非直接暴露在输出中。
-
性能调优:根据应用负载调整Aurora实例规格,SST支持通过配置参数指定实例类型。
-
备份策略:生产环境应配置适当的备份保留策略和快照计划。
-
监控告警:集成CloudWatch监控数据库性能指标,设置合理的告警阈值。
通过SST框架,开发者可以轻松地在AWS上部署和管理Aurora MySQL数据库,同时保持开发和生产环境的一致性。框架提供的抽象层简化了基础设施配置,让开发者可以更专注于业务逻辑的实现。