基于TypeScript的无服务器架构:你的无服务器后端(告别头疼)
你好,同行!如果你曾经配置过VPS、与nginx搏斗过、监控过CPU负载并在凌晨三点重启过崩溃的PostgreSQL——这篇文章就是为你准备的。世界正朝着无服务器(无服务器计算)发展,而TypeScript是让你全速登上这趟列车的理想语言。
让我们来弄清楚什么是无服务器函数,如何用TypeScript编写它们,以及为你的项目选择哪个平台(AWS Lambda、Google Cloud Functions、Yandex Cloud Functions)。剧透:会有代码,会有示例,但不会有服务器。
什么是无服务器?(剧透:服务器仍然存在)
“无服务器”这个名称是一种营销手段。服务器当然存在,但你对此一无所知,也不想知道。你只需编写一个函数(通常用TypeScript),将其上传到云端,它就会按需执行。你只需为执行时间付费——无需为闲置的服务器或扩展付费。
这被称为FaaS(函数即服务)。主要优点:
- 自动扩展——几秒钟内从0扩展到每秒10,000个请求。
- 节省成本——按执行毫秒付费,而非租用机器。
- 更少的DevOps——云端自动更新运行环境,修补漏洞。
- 开箱即用的TypeScript——所有主要供应商都支持Node.js,因此也支持TypeScript。
但也有缺点:冷启动(最初的几毫秒加载时间)、执行时间限制(通常为15分钟)、调试困难。
为AWS Lambda编写第一个TypeScript无服务器函数
AWS Lambda是无服务器领域的王者。我们从它开始。为TypeScript安装aws-sdk和@types/aws-lambda。
npm init -ynpm install typescript @types/node aws-lambda --save-devnpx tsc --init创建文件handler.ts:
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
export const handler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => { const name = event.queryStringParameters?.name || '客人'; return { statusCode: 200, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ message: `你好,${name}!这是一个基于TypeScript的无服务器函数。`, timestamp: new Date().toISOString(), }), };};构建项目:
npx tsczip -r function.zip .通过控制台将压缩包上传到AWS Lambda,指定运行时为Node.js 20.x,入口点为handler.handler。
完成!现在你有了一个不需要服务器的HTTP API。可以将其挂载到API Gateway上使用。
Google Cloud Functions:来自Google的TypeScript替代方案
如果你更喜欢Google的生态系统(Firebase、BigQuery、GCP),那么Google Cloud Functions是你的选择。语法与AWS类似,但有一些细微差别。
安装工具:
npm install -g @google-cloud/functions-framework创建index.ts:
import { Request, Response } from 'express';
export const helloWorld = (req: Request, res: Response) => { const name = req.query.name || '世界'; res.json({ message: `你好,${name}!这是基于TypeScript的Google Cloud Functions。`, timestamp: new Date().toISOString(), });};用于本地测试:
npx @google-cloud/functions-framework --target=helloWorld一键部署:
gcloud functions deploy hello-world \ --runtime nodejs20 \ --trigger-http \ --allow-unauthenticated \ --entry-point hell