Serverless部署-FC-Lambda-Vercel
1. 概念
Serverless ≠ 没服务器,是"不用管服务器"。三种形态:
- FaaS(函数即服务):阿里云函数计算 FC、AWS Lambda、Cloudflare Workers
- 托管平台:Vercel、Netlify、Cloudflare Pages(专为前端)
- 容器 Serverless:AWS Fargate、阿里云 SAE、Cloud Run
特点:
- 按请求 / 计算时长付费
- 自动伸缩到 0
- 冷启动延迟(首次请求慢)
2. Vercel(前端最常用)
npm i -g vercel
vercel # 首次部署 + 链接项目
vercel --prod # 部署到生产
2.1 项目结构
my-app/
├── pages/ # Next.js
├── api/ # Vercel API Routes (any framework)
├── public/
└── vercel.json
vercel.json:
{
"buildCommand": "npm run build",
"outputDirectory": "dist",
"rewrites": [
{ "source": "/api/:path*", "destination": "/api/:path*" },
{ "source": "/(.*)", "destination": "/index.html" }
],
"headers": [
{
"source": "/(.*)",
"headers": [
{ "key": "X-Frame-Options", "value": "SAMEORIGIN" }
]
}
]
}
2.2 优势
- git push 自动部署
- PR preview 域名
- 全球 CDN + 边缘函数(@vercel/edge)
- Next.js 一等公民
2.3 限制
- Hobby 免费但商用受限
- 国内访问慢(境外节点)
- 函数执行 10s(Hobby)/ 60s(Pro)
- 价格在国内厂商面前贵
国内项目主流方案:阿里 OSS + CDN(静态)+ FC / SAE(动态)。
3. AWS Lambda + CloudFront(SSR)
Next.js 部署 Lambda 三种方案:
3.1 SST(推荐)
import { NextjsSite } from 'sst/constructs'
new NextjsSite(stack, 'site', {
customDomain: 'app.example.com'
})
自动配 Lambda + CloudFront + S3。
3.2 OpenNext
把 Next.js standalone 打包成 Lambda:
npx open-next@latest build
# 产出 .open-next/ 包含 lambda 代码
部署到 Lambda + S3 + CloudFront。
3.3 SST 模板示例
npx create-sst@latest my-app
cd my-app
npm install
npx sst dev # 本地
npx sst deploy --stage prod
4. 阿里云函数计算 FC
# 安装
npm i -g @serverless-devs/s
# 配置
s config add
# init
s init devsapp/start-fc-http-nodejs20
# 部署
s deploy
s.yaml:
edition: 3.0.0
name: my-app
access: default
resources:
fc:
component: fc3
props:
region: cn-hangzhou
functionName: my-app
runtime: nodejs20
code: ./src
handler: index.handler
memorySize: 512
timeout: 30
triggers:
- triggerName: http
triggerType: http
triggerConfig:
authType: anonymous
methods: [GET, POST]
customDomain:
domainName: api.example.com
protocol: HTTPS
certConfig:
certName: my-cert
FC 适合:
- 后端 API(替代 ECS)
- 定时任务
- 文件处理
- IoT 数据接收
冷启动 100-500ms(Node),不适合极致低延迟。预留实例可避免冷启动。
5. Cloudflare Pages
详见模块 07 Cloudflare Workers 一章。
6. 静态站对比
| 平台 | 国内速度 | 价格 | 函数支持 | 适合 |
|---|---|---|---|---|
| Vercel | 慢 | 贵 | Edge / Serverless | 海外 + Next.js |
| Netlify | 慢 | 贵 | Functions | 海外 |
| Cloudflare Pages | 快 | 便宜 | Workers | 国内/海外都行 |
| 阿里 OSS + CDN | 快 | 便宜 | + FC | 国内首选 |
| GitHub Pages | 中 | 免费 | 无 | 个人静态站 |
7. SSR 部署对比
| 方案 | 冷启动 | 国内 | 弹性 |
|---|---|---|---|
| Vercel | 50-300ms | 慢 | 极强 |
| AWS Lambda + CF | 100-500ms | 慢 | 极强 |
| 阿里 FC | 100-500ms | 快 | 强 |
| 阿里 SAE | 秒级 | 快 | 强(容器) |
| K8s | 无 | - | 自管 |
8. 冷启动优化
- 减小代码体积(tree-shaking、分包)
- 用 standalone build(Next.js)
- 预留实例(FC、Lambda Provisioned Concurrency)
- 拆分函数(一个 fn 一个职责)
- 避免大依赖(aws-sdk 几十 MB)
9. 计费模型对比
Lambda 示例(us-east-1):
$0.0000166667 / GB·秒 + $0.20 / 100万次请求
512MB × 100ms × 100 万次 = 8333 GB·秒 + 1 次请求量 ≈ $0.34
ECS(2C4G) ≈ $30-50 / 月
阈值:低请求量(< 100 万 / 月)serverless 便宜,高量 ECS 便宜。
10. 常见反模式
- 冷启动敏感的接口放 FaaS:用户首次访问慢
- Lambda 包大几十 MB:冷启动 5 秒
- 没监控冷启动率
- 数据库连接每请求新建:冷启动 + 连接池打满。用 RDS Proxy / Aurora Serverless / Hyperdrive
- 国内业务全靠 Vercel:访问慢
- 不限流:单个被打 → 函数无限扩 → 账单爆炸
- secrets 写代码:用 SSM / KMS / 环境变量
11. 延伸阅读
- Vercel 文档
- SST — Lambda + Next.js 最佳实践
- OpenNext
- 阿里云 FC 文档
- Serverless Framework