TypeScript 无服务器函数:AWS Lambda 从入门到精通

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

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

开始课程

TypeScript 无服务器函数:AWS Lambda 完整指南



无服务器架构彻底改变了后端开发的方式。开发者无需管理服务器,可以完全专注于业务逻辑。AWS Lambda 是最流行的无服务器函数运行服务之一。在本指南中,我们将从基本概念到生产级解决方案,详细讲解如何使用 TypeScript 创建、配置和部署 Lambda 函数。



为什么选择 TypeScript 用于 AWS Lambda?



TypeScript 为 JavaScript 添加了静态类型检查,这对无服务器函数至关重要:



  • 类型安全 — 在编译阶段防止错误
  • 自动补全 — IDE 提示 AWS SDK 方法
  • 可读性 — 接口和类型文档化数据结构
  • 可扩展性 — 随着项目增长更易于维护代码


项目配置



1. 初始化和安装依赖



创建一个新项目并安装必要的包:



mkdir my-lambda-projectcd my-lambda-projectnpm init -y

npm install @types/aws-lambda aws-sdknpm install -D typescript ts-node @types/node


2. TypeScript 配置



创建 tsconfig.json 文件:



{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "lib": ["ES2020"],    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true,    "skipLibCheck": true,    "forceConsistentCasingInFileNames": true,    "resolveJsonModule": true,    "declaration": true,    "declarationMap": true,    "sourceMap": true  },  "include": ["src/**/*"],  "exclude": ["node_modules", "dist"]}


创建第一个 Lambda 函数



基本处理程序结构



创建 src/handler.ts 文件:



import { Handler, APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';

interface UserData { userId: string; name: string; email: string;}

export const handler: Handler<APIGatewayProxyEvent, APIGatewayProxyResult> = async (event) => { try { // 解析请求体 const body: UserData = JSON.parse(event.body || '{}'); // 验证 if (!body.userId || !body.name) { return { statusCode: 400, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify({ error: 'Missing required fields' }) }; }

// 业务逻辑 const result = { id: body.userId, displayName: body.name.toUpperCase(), createdAt: new Date().toISOString() };

return { statusCode: 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify(result) }; } catch (error) { console.error('Error processing request:', error); return { statusCode: 500, body: JSON.stringify({ error: 'Internal server error' }) }; }};


处理环境变量和密钥



使用环境变量进行配置:



import { Handler } from 'aws-lambda';

interface Config { DB_TABLE: string; MAX_RETRIES: number;}

export const handler: Handler = async (event) => { const config: Config = { DB_TABLE: process.env.DB_TABLE || 'default-table', MAX_RETRIES: parseInt(process.env.MAX_RETRIES || '3', 10) };

// 使用 AWS Secrets Manager 或 Parameter Store // 处理敏感数据 return { statusCode: 200, body: JSON.stringify({ table: config.DB_TABLE }) };};


高级技术



1. 处理

博客

书籍推荐