跳至主要内容

AWS Lambda 入门:分步教程

学习 AWS Lambda 的基础知识,了解如何设置您的第一个函数,以及如何将其与核心 AWS 服务集成以实现应用的无服务器部署。
· 12分钟 阅读

使用 AI 探索

AWS Lambda 是一项功能强大的无服务器计算服务,允许您在无需管理基础设施的情况下运行代码,因此您可以专注于编写代码,而不必担心配置或维护服务器。

在本教程中,我们将从设置您的第一个函数开始,逐步探索 AWS Lambda,并将其与其他AWS 服务集成。无论您是在处理数据流还是构建 API,本指南都将帮助您开始使用 AWS Lambda 进行无服务器部署。

什么是 AWS Lambda?

AWS Lambda 是 Amazon Web Services(AWS)提供的无服务器计算平台,使开发者无需预置或管理服务器即可运行代码。AWS Lambda 通过在需要时动态分配资源来执行您的函数,并根据使用量而非预分配的服务器容量计费,从而实现这一点。

这种应用开发方式免去了传统的基础设施搭建,让您能够专注于代码的编写与部署。

AWS Lambda 采用事件驱动模型,即由其他 AWS 服务的特定事件触发,因此非常适合构建响应迅速、可扩展且具成本效益的解决方案。

传统的部署方式需要搭建和管理服务器,涉及扩展、更新和打补丁。这些任务对于零星的工作负载来说既耗时、成本高且效率低。相比之下,无服务器部署消除了这些开销,开箱即用地提供自动扩展和高可用性。

AWS Lambda 的特性

  • 事件驱动架构:AWS Lambda 函数会响应事件而被调用,例如数据变化、HTTP 请求或 AWS 资源的更新。
  • 多运行时支持:Lambda 支持多种运行时,包括 Python、Node.js、Java、Go、Ruby 和 .NET。开发者也可通过 AWS Lambda Runtime API 自带运行时,使其成为适用于多样化场景的通用平台。
  • 自动伸缩:AWS Lambda 会根据需求自动扩展您的应用。无论是处理单个事件还是同时处理成千上万的事件,Lambda 都会动态调整计算资源。
  • 按需付费:费用取决于请求数量和函数的执行时间。这消除了前期投入的需求,确保您只为实际使用付费。
  • 集成安全性:Lambda 可与AWS 身份与访问管理(IAM)配合,确保细粒度的访问控制以及函数与其他 AWS 服务之间的安全交互。

Lambda 的常见用例

  • 处理数据流:AWS Lambda 可集成 Amazon Kinesis,以实时处理和分析流数据。例如,您可以监控物联网(IoT)设备,或动态处理日志文件。
  • 构建 RESTful API:可将 Lambda 函数与 AWS API Gateway 搭配,创建适用于 Web 和移动应用的可扩展 API。该方案常用于处理用户认证、查询数据库或生成动态内容。
  • 自动化工作流:通过基于诸如 S3、DynamoDB 或 CloudWatch 等服务的事件触发 Lambda 函数,来自动化复杂的工作流。例如,自动调整上传至 S3 的图像大小,或归档旧的数据库记录。
  • 数据管道中的事件处理:可以使用 Lambda 处理实时数据事件,例如处理上传到 S3 存储桶的新文件、在存储前转换数据,或通过外部 API 调用为数据流补充信息。
  • 无服务器后端处理:Lambda 常用于分担后端任务,如数据验证、ETL(抽取、转换、加载)流程,或通过 Amazon SNS 或 SES 发送通知。

AWS Lambda 如何工作?

AWS Lambda 采用事件驱动模型,即根据特定触发器或事件执行代码。Lambda 的关键在于与其他 AWS 服务的集成,以及按需执行函数的能力。下面我们分步了解 AWS Lambda 的工作机制:

Screenshot showing how AWS Lambda services work. Official example from AWS website.

一个使用 Lambda 和其他核心 AWS 服务的示例架构图。图片来源:AWS。

1. 触发 AWS Lambda 函数

AWS Lambda 函数由来自各种 AWS 服务或外部系统的事件触发。常见的事件源包括:

  • API Gateway:当用户向您的 API Gateway 终端节点发送 HTTP 请求(例如 GET 或 POST 请求)时,Lambda 可以执行函数来处理请求,例如:用于在数据库中创建用户的 RESTful API 端点。
  • S3 事件:当在 S3 存储桶中上传、删除或修改对象时,Lambda 函数可以做出响应。例如,在图像上传到 S3 存储桶后调整图像大小或转换文件格式。
  • DynamoDB 流:对 DynamoDB 表的任何更改,如插入、更新或删除,都可以触发 Lambda 函数。例如,当向 DynamoDB 表添加新行时触发分析管道。
  • 自定义应用:您可以通过 SDK、CLI 或 HTTP 请求直接调用 Lambda 函数,从而与外部系统集成。

2. 执行环境

当事件触发 Lambda 函数时,AWS 会自动创建一个执行环境来运行代码。该环境包括:

  • 您的函数代码:为特定任务编写的代码。
  • 分配的资源:根据函数需求动态分配的 CPU 和内存(可配置)。
  • 依赖项:部署时指定的任何外部库或包。

3. 并发与伸缩

AWS Lambda 通过并行运行您的函数实例来支持自动扩展。它无需任何配置即可透明地进行扩展。并发的工作方式如下:

  • 如果您的函数需要同时处理 100 个事件,Lambda 将根据需要创建足够多的执行环境(直至并发限制)。

4. 与其他 AWS 服务的集成

AWS Lambda 与 AWS 服务深度集成,可构建健壮的端到端解决方案:

  • 数据库交互:Lambda 在执行过程中可以读写 DynamoDB 或 RDS 的数据。
  • 消息服务:Lambda 可通过 SNS 触发通知,或向 SQS 队列发送消息以进行后续处理。
  • 监控与日志:CloudWatch 捕获 Lambda 函数的所有日志、指标和错误详情,便于您监控并排查性能问题。

现在,让我们开始设置您的第一个 Lambda 函数!

设置 AWS Lambda

先决条件

  • AWS 账户:请确保您拥有一个有效的 AWS 账户。在此注册。
  • IAM 用户设置:创建一个具有 AWS Lambda 权限的 IAM 用户。请参阅IAM 指南。

设置开发环境

  • 安装 AWS CLI: 下载并安装 AWS CLI。使用您的 IAM 凭证进行配置。
  • 设置 Python 或 Node.js:安装 Python 或 Node.js(根据您偏好的运行时)。AWS Lambda 支持多种运行时。本教程将使用 Python 运行时。

步骤 1:进入 AWS Lambda 控制台

  1. 登录到 AWS 管理控制台。
  2. 导航到 Lambda 服务。

Screenshot of Navigation dashboard in AWS console

AWS 控制台中的导航面板。

在导航菜单中点击Lambda,即可查看仪表板:

Screenshot of AWS Lambda Dashboard in AWS Console

AWS 控制台中的 AWS Lambda 仪表板。

步骤 2:创建新函数

  1. 点击Create Function。
  2. 选择“Author from Scratch”。
  3. 为您的函数命名。
  4. 选择运行时(例如,Python 3.11)。
  5. 点击Create Function按钮。

Screenshot of Create New AWS Lambda Function screen

创建新的 AWS Lambda 函数。

这将花费几秒钟。函数创建完成后,您会在顶部看到成功消息。

步骤 3:编写函数代码

Screenshot of AWS Lambda Browser IDE for simple code editing

AWS Lambda 浏览器 IDE,可进行简单的代码编辑。

步骤 4:测试您的 Lambda 函数

此时,该函数仅返回字符串“Hello from Lambda!”。

没有任何逻辑、依赖或其他内容。

我们有一个名为 lambda_function.py 的 Python 脚本,其中包含名为 lambda_handler() 的函数,会返回一个字符串。

现在我们可以直接点击 Test 按钮进行测试。

Screenshot of Test your AWS lambda function in browser screen

在浏览器中测试您的 AWS Lambda 函数。

由于我们的函数不接受输入,您可以删除“Event JSON”。为事件命名,然后点击 Invoke 按钮。

Screenshot of Successful test of AWS Lambda function screen

成功测试 AWS Lambda 函数。

函数已成功执行并返回消息。

太棒了!我们刚刚使用 AWS Lambda 部署了一个无服务器函数。它目前功能不多,但已正常运行。每次调用该函数时,它都会返回一个简单的字符串。

通过事件触发 Lambda

如前所述,AWS Lambda 架构允许您针对来自各种 AWS 服务的特定事件触发函数,使其成为自动化工作流与集成系统的通用工具。

诸如向 S3 存储桶上传文件、DynamoDB 表的更新或通过 API Gateway 的 API 调用等事件,都可以触发 Lambda 函数,从而实现实时处理与可扩展执行。

1. 设置 S3 触发器

  1. 进入 S3 控制台。
  2. 选择 S3 存储桶。
  3. 在“属性”下添加事件通知,以在创建对象时触发您的 Lambda 函数。Screenshot of Create event notification in AWS S3 bucket screen在 AWS S3 存储桶中创建事件通知。Screenshot of Select Lambda function to trigger in S3在 S3 中选择要触发的 Lambda 函数。

示例用例:

    • 自动调整上传到 S3 的图像大小。
    • 将视频转换为多种分辨率或流媒体格式。
    • 在上传时检查文件格式、大小或元数据。
    • 使用 AI 从上传的文档中提取文本(例如,通过 Amazon Textract)。

2. 集成 API Gateway

  1. 导航到 API Gateway 服务。

Screenshot of API Gateway Service Dashboard in AWS Console

AWS 控制台中的 API Gateway 服务仪表板。

  1. 创建一个新的 REST API。

Screenshot of Create new REST API via API Gateway

通过 API Gateway 创建新的 REST API。

  1. 配置方法(例如 POST)以触发您的 Lambda 函数。

示例用例:

    • 构建用于实时响应的无服务器 API。
    • 触发 Lambda 函数以在数据库中创建并存储用户数据。
    • 处理 POST 请求以实时处理和校验客户订单。
    • 触发 Lambda 函数以查询并返回数据库或 API 的数据。

部署与监控 AWS Lambda

部署 AWS Lambda 函数非常直接,可根据需要选择不同方法,例如使用 AWS 管理控制台进行手动部署,或使用 AWS CLI 进行自动化部署。

1. 使用 AWS 控制台手动部署

AWS 管理控制台提供直观的 Web 界面来部署 Lambda 函数。此方法适用于小型项目或快速变更。以下是在控制台中部署 Lambda 函数的步骤:

  1. 创建或编辑函数:
    • 登录AWS 管理控制台。
    • 导航到 AWS Lambda。
    • 点击 Create Function 创建新函数,或选择现有函数进行更新。
  2. 上传代码:
    • 选择 Upload from,并选择 .zip 文件或容器镜像。
    • 对于小规模开发,您可以在集成的代码编辑器中直接编辑函数代码。
  3. 配置函数:
    • 根据您的用例定义环境变量、内存分配和超时限制。
    • 使用 AWS IAM 角色添加必要的权限,以允许函数与其他 AWS 服务交互。
  4. 部署变更:
    • 点击 Deploy 以保存并生效您的变更。
    • 使用 Test 功能手动调用函数,验证其按预期工作。

2. 使用 AWS CLI 进行自动化部署

对于自动化或频繁更新,AWS CLI 是部署和更新 Lambda 函数的高效方式。它能确保一致性并减少人工错误,尤其适用于大型项目或 CI/CD 流水线。

步骤 1 —— 准备部署包

将代码和依赖项打包为 .zip 文件。例如:

zip -r my-deployment-package.zip .

步骤 2 —— 使用 CLI 部署函数

使用 update-function-code 命令将新代码上传至 AWS Lambda:

aws lambda update-function-code \
    --function-name MyFunction \
    --zip-file fileb://my-deployment-package.zip

步骤 3 —— 检查部署

部署后,使用以下命令验证函数状态:

aws lambda get-function --function-name MyFunction

该命令会检索函数配置并确认部署情况。

使用 CloudWatch 监控 Lambda

监控对于确保您的 Lambda 函数高效运行、优雅处理错误并满足性能预期至关重要。AWS Lambda 可集成 Amazon CloudWatch,提供监控与日志功能。

Amazon CloudWatch 会自动收集并显示您的 Lambda 函数的关键指标。这些指标有助于分析函数性能并排查问题。

需要监控的指标:

  1. Invocations(调用次数):跟踪函数被调用的次数。帮助您了解流量模式与使用趋势。
  2. Errors(错误):显示函数执行期间的错误数量。用于识别失败率并调试问题。
  3. Duration(执行时长):衡量函数的执行时间。这对于优化性能和管理成本至关重要。
  4. Throttles(限流):显示由于达到并发限制而被限流的调用次数。

访问指标:

  • 导航至 CloudWatch 指标控制台。
  • 从命名空间列表中选择Lambda。
  • 选择您要监控的函数以查看详细指标。

AWS Lambda 最佳实践

既然您已部署了第一个 Lambda 函数,那么了解一些适用于未来更复杂项目的最佳实践将很有帮助。本节将提供一些需要牢记的最佳实践。

1. 优化函数冷启动

当 Lambda 函数在空闲一段时间后被调用时会发生冷启动,AWS 在预置执行环境时会引入轻微的延迟。尽管 AWS 会尽量降低这部分开销,但您仍可通过以下措施减少冷启动时间:

使用更小的部署包

  • 仅包含必要的依赖项,保持部署包精简。
  • 使用 AWS Lambda Layers 共享通用库(例如 AWS SDK),避免在每个包中单独包含。
  • 在可能的情况下压缩与最小化代码,特别是基于 JavaScript 或 Python 的函数。

避免在函数中进行繁重的初始化

将资源密集型的初始化(例如数据库连接、API 客户端或第三方库)移动到函数处理器之外。这样可以确保这些代码在每个环境中仅执行一次,并在多次调用间复用。

利用预置并发

对于关键的、对延迟敏感的函数,使用预置并发(Provisioned Concurrency)以保持执行环境随时就绪。尽管会产生额外成本,但它能为高优先级工作负载提供低延迟保障。

2. 保持函数无状态

无状态性是无服务器架构的基本原则,可确保您的应用实现无缝扩展:

避免依赖内存中的数据

Lambda 函数是短暂的,其执行环境可能不会在多次调用之间持久存在。不要依赖内存变量,而应将状态信息存储在外部系统(如 DynamoDB、S3 或 Redis)中。

实现幂等性

将函数设计为能够优雅地处理重复事件。为请求使用唯一标识符,并检查日志或数据库以确保不会多次处理相同事件。

3. 使用环境变量

环境变量是一种安全且便捷的方式来配置您的 Lambda 函数:

存储敏感信息

  • 将 API 密钥、数据库连接字符串和其他机密作为环境变量存储。AWS Lambda 会对这些变量进行静态加密,并在执行时解密。
  • 为进一步增强安全性,可使用 AWS Secrets Manager 或 Systems Manager Parameter Store 动态管理密钥。

简化配置管理

使用环境变量管理日志级别、区域设置或第三方服务 URL 等配置。这样可避免硬编码值,使函数更易在不同环境(如开发、预生产、生产)之间迁移。

结论

本教程介绍了 AWS Lambda 的入门指南,从理解其特性与用例,到高效地部署与监控函数。通过遵循最佳实践(如优化冷启动、保持函数无状态以及使用环境变量),您可以构建稳健且易维护的无服务器应用。

AWS Lambda 是一种构建与 AWS 生态系统深度集成的现代事件驱动架构的方式。如果您想进一步学习,我推荐查看 DataCamp 的 AWS 课程。

Moez Ali

作者

Moez Ali

数据科学家,PyCaret 的创始人兼作者

主题