基于TypeScript的无服务器架构:AWS Lambda及后端替代方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

基于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                

博客

书籍推荐