SST.dev 开发技能为使用 SST(Serverless Stack)构建 AWS 基础设施提供全面指导,涵盖基础设施模式、最佳实践和常见用例。
核心哲学 SST 遵循以下原则:类型安全基础设施:从基础设施到运行时提供完整 TypeScript 支持;资源绑定:通过 Resource 类型安全地访问资源;约定优于配置:提供合理默认值,需要时再定制;开发者体验:快速反馈循环,优秀的本地开发体验。
关键概念:资源绑定 资源绑定是 SST 最强大的特性——类型安全的资源访问。在 sst.config.ts 中,可通过 link 将资源连接到函数;在代码中通过 import { Resource } from "sst" 并以 Resource.[ResourceName] 访问。要点包括:使用 link 连接资源;通过 Resource.[ResourceName] 访问;获得完整 TypeScript 自动补全与类型安全;无需环境变量。
关键概念:基础设施即代码 在 sst.config.ts 中定义资源。示例中展示了 $config 的 app 与 run 结构、定义 Bucket 与 Function、通过 url: true 启用函数 URL,并返回 api 与 bucket 信息。
常见模式 模式 1:带数据库访问的函数。定义 Dynamo 表并使用 link: [db],在处理函数中通过 Resource.Database.name 引用表名,并使用 AWS SDK 执行 PutCommand。 模式 2:Remix 与 SST。定义 Bucket,创建 sst.aws.Remix 并 link 资源、配置 domain;在 Remix 的 loader/action 中通过 Resource.Uploads.name 生成签名 URL。 模式 3:带认证的 API。创建 sst.aws.Auth 与 sst.aws.ApiGatewayV2,通过 transform 为路由处理函数 link 认证资源,并通过 api.route 设置 GET /private 路由及 auth: { iam: true }。 模式 4:按环境区分配置。通过 $app.stage 判断是否为 production,并据此设置 Dynamo 的 pointInTimeRecovery 等参数。
资源类型 计算:Function(Lambda 函数,开发体验好)、Remix(Remix 应用)、Nextjs(Next.js 应用)、Astro(Astro 应用)。存储:Bucket(带有自动策略的 S3 桶)、Dynamo(带类型化索引的 DynamoDB 表)。API:ApiGatewayV2(HTTP/WebSocket API)、Router(路由处理)。认证与安全:Auth(认证设置)、Secret(安全密钥管理)。队列与事件:Queue(SQS 队列)、SnsTopic(SNS 主题)、EventBus(EventBridge 总线)。
最佳实践
- 优先使用资源绑定而非环境变量:不要用 process.env.TABLE_NAME,而应使用 Resource.Database.name。
- 保持基础设施简单:不要过度设计(如不必要的配置构建器),直接创建 Function 并设置 handler、timeout 即可。
- 恰当地链接资源:只链接所需的资源,例如函数仅需要桶时就只链接桶,而不是整个数据库、认证等。
- 针对 AWS 特定需求使用 transforms:当需要直接访问 AWS 资源时,可通过 transform 配置底层资源,例如为桶设置生命周期规则。
- 正确标注处理函数类型:使用 aws-lambda 的 APIGatewayProxyEventV2 与 APIGatewayProxyResultV2 类型。
- 组织大型栈:在 run 中按模块动态导入 infra/storage、infra/api、infra/web,并依次传递依赖。
本地开发 运行 sst dev 启动 SST 开发模式,在另一终端运行 npm run dev 启动应用。使用 sst console 打开对应阶段的控制台,使用 sst deploy --stage production 部署到指定阶段。SST 会自动设置本地版本,代码在本地与部署后表现一致:Resource.Database.name 会根据上下文指向本地或已部署资源。
常见注意事项
- 资源名称变更:重命名资源可能导致问题,必要时使用显式 ID。
- 循环依赖:避免循环链接(如 A link B 且 B link A),可改用 SNS/SQS 或在数据库中存储状态。
- 冷启动:Lambda 冷启动真实存在,应优化,例如将客户端等初始化代码放在处理函数外部。
更新与迁移 更新 SST 可使用 npm update sst 或 pnpm update sst。升级大版本时应始终检查变更日志,SST 为破坏性变更提供迁移指南。
进一步阅读 官方文档:https://sst.dev/docs;示例:https://github.com/sst/examples;SST Discord:适合提问与获取支持。