Serverless 架构与 AWS Lambda 入门
现代 Web 开发正迅速向无服务器(serverless)计算方向发展。这种范式让开发者能够专注于编写业务逻辑,而无需操心基础设施管理。AWS Lambda 是实现 serverless 函数最流行的服务之一,并且它与 JavaScript (Node.js) 配合得天衣无缝。
在本文中,我们将详细解析什么是 AWS Lambda,如何创建并运行你的第一个基于 JavaScript 的 serverless 函数,探讨最佳实践以及真实代码示例。无论你是初学者还是希望掌握 serverless 开发的经验丰富的开发者,本文都将对你有所帮助。
什么是 AWS Lambda 以及它如何与 Node.js 协同工作
AWS Lambda 是一种计算服务,它能响应事件运行你的代码,并自动管理计算资源。你只需为消耗的执行时间(精确到 1 毫秒)和请求次数付费。
面向 JavaScript 开发者的 AWS Lambda 关键特性
- 支持 Node.js: AWS Lambda 官方支持 Node.js 14、16、18 和 20。
- 自动扩展: Lambda 会自动创建函数实例来处理每个传入的请求。
- 触发器: 函数可以通过 HTTP(通过 API Gateway)、按计划(CloudWatch Events)、文件上传到 S3 等多种方式被调用。
- 限制: 执行时间最长 15 分钟,内存范围从 128 MB 到 10,240 MB,部署包大小限制为 50 MB(压缩后)或 250 MB(解压后)。
使用 JavaScript 开发 Lambda 函数无需任何额外配置——只需编写一个处理器(handler)并将代码上传到 AWS 即可。
创建你的第一个基于 JavaScript 的 Serverless 函数
让我们编写一个简单的 serverless 函数,它接收包含用户名的 JSON,并返回一条问候语。这是一个经典的入门示例,非常适合开始了解 AWS Lambda。
步骤 1:处理器基本结构
每个基于 Node.js 的 Lambda 函数都由一个导出的处理器函数组成,该函数接收三个参数:event(事件)、context(执行上下文)和 callback(用于异步响应)。
// index.jsexports.handler = async (event, context) => { // 函数逻辑 const name = event.name || 'Guest'; return { statusCode: 200, body: JSON.stringify({ message: `Hello, ${name}! This is your first serverless function.` }) };};步骤 2:处理不同类型的事件
在实际项目中,事件可能来自不同的源。下面是一个处理来自 API Gateway 请求的示例:
// handler.jsexports.handler = async (event) => { try { // 解析请求体(如果存在) const body = event.body ? JSON.parse(event.body) : {}; const { userId, action } = body;
// 业务逻辑示例 const result = { userId: userId || 'unknown', action: action || 'default', timestamp: new Date().toISOString(), message: 'Action completed successfully' };
return { statusCode: 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify(result) }; } catch (error) { return { statusCode: 500, body: JSON.stringify({ error: error.message }) }; }};与外部服务和环境的交互
Serverless 函数很少在隔离状态下运行。它们通常需要与数据库、S3、Dyna