跳到主要内容

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. 静态站对比

平台国内速度价格函数支持适合
VercelEdge / Serverless海外 + Next.js
NetlifyFunctions海外
Cloudflare Pages便宜Workers国内/海外都行
阿里 OSS + CDN便宜+ FC国内首选
GitHub Pages免费个人静态站

7. SSR 部署对比

方案冷启动国内弹性
Vercel50-300ms极强
AWS Lambda + CF100-500ms极强
阿里 FC100-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. 延伸阅读