SST
概述
SST(Serverless Stack)是一个用于在AWS上构建和部署全栈应用的框架,提供Lambda、API Gateway、DynamoDB、S3以及前端框架的高级结构化组件。它支持连接真实AWS服务的实时本地开发、类型安全的资源链接以及零配置TypeScript支持。
指令
- 定义基础设施时,使用带有类型化组件的
sst.config.ts,例如sst.aws.Function、sst.aws.Api、sst.aws.Bucket和sst.aws.Dynamo。 - 连接资源时,在函数上使用
link属性,以自动授予IAM权限并注入环境变量;在处理函数中通过Resource.Name访问链接的资源。 - 本地开发时,使用
sst dev命令,该命令会在本地运行Lambda并提供热重载功能,同时连接真实AWS服务(DynamoDB、S3、SQS),还支持VS Code断点调试。 - 部署时,使用
sst deploy --stage prod进行命名环境部署,使用sst deploy --stage pr-${PR_NUMBER}创建预览环境,使用sst remove --stage dev进行环境拆除。 - 部署前端时,使用
sst.aws.Nextjs、sst.aws.Remix或sst.aws.Astro组件,实现Lambda上的SSR渲染,静态资源存储在S3并由CloudFront分发。 - 管理密钥时,使用
sst secret set KEY value进行加密且与环境相关的密钥存储。 - 组织代码时,保持处理函数(位于
packages/functions/)尽量薄,作为编排层,并将业务逻辑放在packages/core/中。
示例
示例1:使用DynamoDB构建无服务器API
用户请求: "在AWS上使用SST创建一个带有DynamoDB的REST API"
操作步骤:
- 在
sst.config.ts中定义DynamoDB表和API Gateway - 将表链接到API处理函数,自动获取权限
- 实现CRUD处理函数,通过
Resource.MyTable.name访问表 - 运行
sst dev进行实时本地开发,连接真实AWS服务
输出结果: 一个具有类型安全资源访问和实时调试能力的无服务器REST API。
示例2:使用预览环境部署Next.js应用
用户请求: "在AWS上部署我的Next.js应用,并为每个PR创建预览环境"
操作步骤:
- 配置
sst.aws.Nextjs组件,指定自定义域名并链接资源 - 配置CI流水线,为每个Pull Request运行
sst deploy --stage pr-${PR_NUMBER} - 将后端资源(API、数据库)链接到Next.js部署
- 当PR关闭时,添加清理步骤:运行
sst remove
输出结果: 一个生产级Next.js部署在AWS上,每个PR都有独立的预览环境。
指南
- 使用
link而非手动编写IAM策略;SST会自动生成最小权限。 - 在处理函数中通过
Resource.Name访问链接资源;切勿硬编码表名或存储桶ARN。 - 日常开发使用
sst dev;它比每次更改都部署到AWS快得多。 - 为每个开发者创建独立的stage(例如
sst dev --stage alice),使每个人获得隔离的AWS资源。 - 保持处理函数薄:业务逻辑放在
packages/core/,处理函数放在packages/functions/。 - 使用
sst secret管理API密钥和凭证;它们会被加密且与环境相关。 - 在CI中为每个Pull Request设置
sst deploy --stage pr-${PR_NUMBER},以创建预览环境。