管理 Lambda 工作流程和事件 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

管理 Lambda 工作流程和事件

使用 Lambda 构建无服务器应用程序时,通常需要一些编排函数执行和处理事件的方法。Amazon 提供了几条协调 Lambda 函数的方法:

  • Lambda 持久性函数,用于在 Lambda 中进行代码优先的工作流编排

  • 用于跨多个服务进行可视化工作流编排的 Amazon Step Functions

  • 用于事件驱动型架构和计划的 Amazon EventBridge 调度器和 Amazon EventBridge

您也可以将这些方法整合在一起。例如,您可以使用 EventBridge 调度器在特定事件发生时触发持久性函数 Step Functions 工作流程,或者配置工作流程,在定义的执行点处将事件发布到 EventBridge 调度器。本节的以下主题将详细说明如何使用这些编排选项。

具有持久性函数的代码优先编排

Lambda 持久性函数提供了一种代码优先的工作流程编排方法,使您能够直接在 Lambda 函数中构建有状态、长时间运行的工作流程。与外部编排服务不同,持久性函数将您的工作流程逻辑保留在代码中,以便可以更轻松地与业务逻辑一起进行版本控制、测试和维护。

持久性函数在以下情况下尤为适用:

  • 代码优先的工作流程定义:使用熟悉的编程语言来定义工作流程,而非使用 JSON 或视觉设计工具。

  • 长时间运行的进程:执行可运行最长一年的工作流程,远远超过标准 Lambda 函数的 15 分钟限制

  • 简化开发:将工作流程逻辑和业务逻辑保存在同一个代码库中,以便于维护和测试

  • 经济高效的等待:在等待状态期间暂停执行,同时不消耗计算资源

  • 内置状态管理:无需外部存储配置即可实现自动检查点存储和状态持久化功能

在持久性函数和 Step Functions 之间进行选择

持久性函数和 Step Functions 都提供工作流程编排功能,但它们适用于不同的使用案例:

考虑因素 持久性函数 Step Functions
工作流程定义 代码优先(JavaScript、Python、Java) 基于 JSON 的 Amazon States Language 或视觉设计工具
开发方法 具有业务逻辑的单一代码库 单独的工作流程定义和函数代码
服务集成 通过 Lambda 函数代码和 Amazon SDK 与许多 Amazon 服务的原生集成
执行持续时间 最长 1 年 最长 1 年(标准),5 分钟(快速)
并行处理 Promise.all() 和基于代码的模式 并行状态和分布式 Map
错误处理 Try-catch 块和自定义重试逻辑 内置重试和捕获状态
可视化监控 CloudWatch 日志和自定义控制面板 可视化执行图表和详细的历史记录
适用于 以开发人员为中心的工作流程、复杂的业务逻辑、快速的原型设计 多服务编排、可视化工作流程、企业治理

在以下情况下使用持久性函数:

  • 您的团队更喜欢代码优先的开发方法

  • 工作流程逻辑与业务逻辑紧密相连

  • 您需要快速的原型设计和迭代

  • 您的工作流程主要涉及 Lambda 函数和简单的服务调用

在以下情况下使用 Step Functions:

  • 您需要可视化的工作流程设计和监控

  • 您的工作流程广泛地编排了多种 Amazon 服务

  • 您需要企业治理和合规性功能

  • 非技术利益相关者需要了解工作流程逻辑

有关持久性函数的更多信息,请参阅 Lambda 的持久性函数

使用 Step Functions 编排工作流程

Amazon Step Functions 是一项工作流程编排服务,可帮助将多个 Lambda 函数和其他 Amazon 服务整合成结构化的工作流程。这些工作流程可以保持状态,使用复杂的重试机制处理错误,以及大规模处理数据。

Step Functions 提供两种类型的工作流程来满足不同的编排需求:

标准工作流

适用于需要精确执行一次语义的长期运行且可审计的工作流程。标准工作流最长可以运行一年,并提供详细的执行历史记录和支持可视化调试。标准工作流适用于订单履行、数据处理管道或多步骤分析作业等流程。

快速工作流

专为至少执行一次语义的高事件率、短历时的工作负载而设计。快速工作流最长可以运行五分钟,非常适合高容量事件处理、流数据转换或 IoT 数据摄取场景。与标准工作流相比具有更高的吞吐量和更低的成本。

注意

有关 Step Functions 工作流程类型的更多信息,请参阅选择 Step Functions 中的工作流程类型

在这些工作流程中,Step Functions 为并行处理提供了两种类型的 Map 状态:

内联 Map

在父工作流程的执行历史记录中处理来自 JSON 数组的项目。内联 Map 最多支持 40 次并发迭代,适用于较小的数据集或需要在一次执行中进行所有处理的情况。有关更多信息,请参阅在内联模式下使用 Map 状态

分布式 Map

通过迭代超过 256 KiB 的数据集或需要 40 多次并发迭代的数据集,支持处理大规模并行工作负载。分布式 Map 支持执行多达 10,000 个并行子工作流程,擅长处理存储在 Amazon S3 中的半结构化数据,例如 JSON 或 CSV 文件,这使其非常适合批处理和 ETL 操作。有关更多信息,请参阅在分布式模式下使用 Map 状态

通过将这些工作流类型和 Map 状态相结合,Step Functions 提供了一个灵活而强大的工具集来编排复杂的无服务器应用程序,从小规模操作到大规模数据处理管道等。

要开始使用 Lambda 和 Step Functions,请参阅使用 Step Functions 编排 Lambda 函数

使用 EventBridge 和 EventBridge 调度器管理事件

Amazon EventBridge 是一项事件总线服务,可帮助您构建事件驱动的架构。它在 Amazon 服务、集成应用程序和软件即服务 (SaaS) 应用程序之间路由事件。EventBridge 调度器是一个无服务器调度器,支持从一个中央服务创建、运行和管理任务,使您能够使用 cron 和 rate 表达式计划调用 Lambda 函数,或者配置一次性调用。

Amazon EventBridge 和 EventBridge 调度器可帮助您使用 Lambda 构建事件驱动的架构。EventBridge 在 Amazon 服务、集成应用程序和 SaaS 应用程序之间路由事件,而 EventBridge 调度器则提供了特定的计划功能,可定期或一次性调用 Lambda 函数。

这些服务为使用 Lambda 函数提供了多种重要功能:

  • 使用 EventBridge 创建规则,将事件匹配并路由至 Lambda 函数

  • 使用 EventBridge 调度器通过 cron 和 rate 表达式设置定期函数调用

  • 配置在特定日期和时间进行一次性函数调用

  • 为计划的调用定义灵活的时间段和重试策略

有关更多信息,请参阅 按计划调用 Lambda 函数