用SST构建全栈应用:比Serverless Framework更简单的基础设施即代码方案
用SST构建全栈应用比Serverless Framework更简单的基础设施即代码方案为什么需要基础设施即代码IaC独立开发者的早期阶段通常手动在AWS/GCP控制台点击创建资源如创建一个DynamoDB表、配置一个S3桶。但当你的产品有10个AWS资源时手动管理会出问题不可复现你忘了当时是怎么配置这个S3桶的权限环境不一致开发环境和生产环境的配置不同导致在我机器上能跑协作困难团队成员无法看到你的基础设施配置IaC工具对比工具学习曲线配置语言适合场景Terraform陡HCL多云平台、大型项目Serverless Framework中YAML/TSServerless应用SST低TypeScript全栈应用、独立开发者Pulumi中TS/Python/Go多语言团队SST的优势用TypeScript定义基础设施且和应用代码在同一个仓库——你不需要切换上下文。SST核心概念Stack、Resource、BindingStack栈一组相关资源的集合如生产环境栈、开发环境栈。Resource资源一个AWS资源如DynamoDB表、S3桶、Lambda函数。Binding绑定让应用代码能安全访问基础设施资源如这个函数需要访问这个DynamoDB表。项目结构my-sst-app/ ├── sst.config.ts # SST配置文件 ├── packages/ │ ├── functions/ # Lambda函数 │ └── frontend/ # 前端Next.js/Remix └── sst.env.ts # 自动生成的类型绑定实战用SST Next.js DynamoDB构建全栈应用第一步初始化SST项目# 创建SST项目会选择前端框架 npx create-sstlatest # 选择 # - Template: Next.js (App Router) # - TypeScript: Yes # - ESLint/Prettier: Yes cd my-sst-app npm install第二步配置基础设施sst.config.ts// sst.config.ts import { Config, StackContext, Nextjs, DynamoDB } from sst/constructs; export default async function (app: StackContext) { // 1. 创建DynamoDB表 const table new DynamoDB(app, PostsTable, { fields: { pk: string, sk: string, }, primaryIndex: { partitionKey: pk, sortKey: sk }, }); // 2. 创建Next.js应用 const site new Nextjs(app, Site, { bind: [table], // 关键绑定table让Next.js能访问 environment: { POSTS_TABLE_NAME: table.tableName, }, }); // 3. 输出有用信息 app.addOutputs({ SiteURL: site.url, TableName: table.tableName, }); }关键bind: [table]会自动给Next.js函数API Routes授予访问这个DynamoDB表的IAM权限——你不需要手动写IAM策略。第三步在Next.js里访问DynamoDB// packages/functions/src/posts.ts import { DynamoDBClient, PutItemCommand } from aws-sdk/client-dynamodb; import { marshall } from aws-sdk/util-dynamodb; // SST会自动注入AWS凭证通过binding const dynamoDB new DynamoDBClient({}); export async function createPost(post: { id: string; title: string; content: string }) { await dynamoDB.send( new PutItemCommand({ TableName: process.env.POSTS_TABLE_NAME!, Item: marshall({ pk: POST#${post.id}, sk: POST#${post.id}, title: post.title, content: post.content, createdAt: new Date().toISOString(), }), }) ); }第四步本地开发# 启动本地开发环境会启动Next.js dev server 本地DynamoDB模拟器 npx sst devSST的dev命令会启动Next.js开发服务器通常是localhost:3000启动本地AWS资源模拟器如DynamoDB Local自动注入AWS凭证指向本地模拟器这让你能完全本地开发不需要每次都部署到AWS。部署从开发到生产部署到开发环境npx sst deploy --stage dev部署到生产环境npx sst deploy --stage prodSST会打包并上传你的函数和资源更新CloudFormation堆栈输出部署结果如SiteURL: https://xyz.cloudfront.net查看部署日志npx sst logs --stage prod高级功能自定义域名、CI/CD、Secret管理自定义域名// sst.config.ts import { Nextjs } from sst/constructs; new Nextjs(app, Site, { bind: [table], customDomain: { domainName: app.yourproduct.com, hostedZone: yourproduct.com, // 需要在Route 53有这个Hosted Zone }, });Secret管理import { Secret } from sst/constructs; // 定义SecretSST会存储在AWS Secrets Manager const stripeKey new Secret(app, STRIPE_KEY); // 绑定到函数 new Nextjs(app, Site, { bind: [table, stripeKey], }); // 在函数里访问 console.log(process.env.STRIPE_KEY); // SST自动注入设置Secret值npx sst secret set STRIPE_KEY sk_live_xxx --stage prodSST v32024从CDK迁移到Prob星系SST v32024年发布从基于AWS CDK迁移到基于Prob星系Pulumi的竞品。这带来了更快的部署不需要合成CloudFormation模板直接应用变更更好的本地开发本地模拟器更完整多云支持实验性不只AWS还支持Azure、GCP迁移到v3# 更新SST npm install sstlatest # 运行迁移向导 npx sst upgrade成本优化SST AWS无服务器 vs 传统VPS成本对比月访问10万次方案计算成本数据库成本总额SST Lambda DynamoDB$0.20前100万次免费$025GB免费$0.20VPS如DigitalOcean $20/月$20包含在VPS$20HerokuStandard 0$25$15Postgres Add-on$40关键AWS无服务器的按使用量计费对独立开发者极友好——早期几乎免费增长后才需要付费。成本优化技巧用DynamoDB On-demand模式按请求数计费适合流量波动大的产品用Lambda Provisioned Concurrency如果流量稳定可以预置并发降低成本用CloudFront缓存减少Lambda调用次数结论SST是独立开发者的AWS最佳伴侣如果你在做全栈应用且需要AWS服务如DynamoDB、S3、CognitoSST是比Terraform/Serverless Framework更好的选择——它更简单易用且和应用代码集成更紧密。最小可行架构MVP用SST定义Next.js DynamoDB S3用sst dev本地开发用sst deploy部署到AWS这套架构能支撑月访问100万次的产品——且成本$50/月。下一步把你的Next.js应用从自托管VPS迁移到SST AWS无服务器——你会立即感受到不用运维的自由。

相关新闻

MeshLib核心功能详解:10大网格处理特性助力高效开发

MeshLib核心功能详解:10大网格处理特性助力高效开发

MeshLib核心功能详解:10大网格处理特性助力高效开发 【免费下载链接】MeshLib Mesh processing library 项目地址: https://gitcode.com/gh_mirrors/me/MeshLib MeshLib是一款功能强大的网格处理库,提供了全面的网格操作解决方案,涵盖…

2026/10/19 14:55:55 阅读更多 →
Ferrite编辑器完全指南:从安装到高效编辑Markdown、JSON与YAML文件

Ferrite编辑器完全指南:从安装到高效编辑Markdown、JSON与YAML文件

Ferrite编辑器完全指南:从安装到高效编辑Markdown、JSON与YAML文件 【免费下载链接】Ferrite A fast, lightweight text editor for Markdown, JSON, YAML, and TOML files. Built with Rust and egui for a native, responsive experience. 项目地址: https://gi…

2026/10/20 7:54:23 阅读更多 →
Jellium Desktop命令行脚本调试视频:学习调试技巧

Jellium Desktop命令行脚本调试视频:学习调试技巧

Jellium Desktop命令行脚本调试视频:学习调试技巧 【免费下载链接】jellium-desktop An unofficial desktop client for Jellyfin 项目地址: https://gitcode.com/GitHub_Trending/je/jellium-desktop Jellium Desktop是一款非官方的Jellyfin桌面客户端&…

2026/10/18 17:10:46 阅读更多 →

最新新闻

AI生成架构图与流程图:10分钟完成传统1天工作

AI生成架构图与流程图:10分钟完成传统1天工作

1. 为什么架构图和流程图成了“时间黑洞”?——从真实协作场景说起我带过不下二十个跨职能项目,每次开需求评审会,总有人提前半小时到会议室,默默打开Visio或draw.io,手指在键盘上敲得飞快,嘴里还念叨着“这…

2026/10/20 9:16:21 阅读更多 →
APQP第三版落地指南:从风险、变更与采购三条主线构建量产质量策划框架

APQP第三版落地指南:从风险、变更与采购三条主线构建量产质量策划框架

简介:《APQP手册 第三版(中文版)》是一份面向汽车及零部件行业项目管理、质量策划与体系推进人员的指南性资料,系统讲解先期产品质量策划的工作实践、工具与分析技术。手册按逻辑顺序覆盖从项目策划、产品设计开发到过程确认、反馈…

2026/10/20 9:16:21 阅读更多 →
冷热电多微网双层优化配置与储能电站服务模式解析

冷热电多微网双层优化配置与储能电站服务模式解析

做综合能源规划这些年,最常被问的一句话是:冷热电多微网这东西到底比传统各自供能强在哪?强在“抠”出来的那部分效率。燃气轮机发电后的高温烟气不再直接排掉,而是进余热锅炉产蒸汽供热,再带着溴化锂机组制冷&#xf…

2026/10/20 9:16:21 阅读更多 →
飞书AI内训实战:妙记、AI搜索与多维表格自动化如何重塑协同效率

飞书AI内训实战:妙记、AI搜索与多维表格自动化如何重塑协同效率

开头从一次实测引入:飞书 AI 不只是“语音转文字”,它真正改变的是协作链条中那些低效环节。我在给一家中型企业做办公提效内训时,最常被问到的问题就是:飞书 AI 到底能干什么?很多同事已经知道有 AI 功能,…

2026/10/20 9:16:21 阅读更多 →
SAP MM常用表详解:从物料主数据到采购库存的核心表清单

SAP MM常用表详解:从物料主数据到采购库存的核心表清单

1. 为什么我建议先记住这套表而不是全量背表:先认清业务主线接触 SAP MM 的人,不管是刚入行的顾问、做接口开发的 ABAP 程序员,还是经常写报表的 Fiori 开发,几乎都会遇到同一个困境:SAP 的表太多了,光物料…

2026/10/20 9:16:21 阅读更多 →
插件化Agent框架源码拆解:内核、协议与生命周期机制

插件化Agent框架源码拆解:内核、协议与生命周期机制

1. 从“能跑就行”到“拆开看看”:我为什么要啃这套 Agent 框架第一次看到“插件化 Agent 框架”这个说法时,我的反应和大多数人一样——又是一个包装概念。毕竟这两年“Agent”这个词已经被用烂了,随便一个能调 API 的脚本都敢叫自己 Agent …

2026/10/20 9:15:12 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →