AWS Lambda
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

事件源映射

在 AWS Lambda 中,Lambda 函数和事件源是 AWS Lambda 中的核心组件。有关更多信息,请参阅 AWS Lambda:工作原理。事件源是发布事件的实体,Lambda 函数是处理事件的自定义代码。支持的事件源是指那些经过预配置可与 AWS Lambda 一起使用的 AWS 服务。配置称为事件源映射,将事件源映射到 Lambda 函数。它允许在事件发生时自动调用 Lambda 函数。

每个事件源映射标识要发布的事件类型,以及发生事件时要调用的 Lambda 函数。特定 Lambda 函数随后接收事件信息作为参数,接下来您的 Lambda 函数代码可处理事件。

请注意以下有关事件源的信息。这些事件源可以是以下任意之一:

  • AWS 服务 - 这些是经过预配置可与 AWS Lambda 一起使用的支持的 AWS 服务。您可以将这些服务分组为常规 AWS 服务或基于流的服务。Amazon Kinesis Streams 和 Amazon DynamoDB Streams 是基于流的事件源,所有其他 AWS 服务不使用基于流的事件源。您维护事件源映射的位置以及 Lambda 函数的调用方法取决于您是否在使用基于流的事件源。

  • 自定义应用程序 - 您可以让自定义应用程序发布事件和调用 Lambda 函数。

您可能会问,我在什么位置保存事件映射信息?我将它保存在事件源中还是保存在 AWS Lambda 中?以下部分说明了每个这些事件源类别的事件源映射。这些部分还说明了如何调用 Lambda 函数以及如何管理权限来允许调用您的 Lambda 函数。

AWS 服务的事件源映射

除了基于流的 AWS 服务(Amazon Kinesis Streams 和 DynamoDB 流)之外,其他支持的 AWS 服务可发布事件,并且也可以调用您的 Lambda 函数(称为推模型)。在推模型中,请注意以下事项:

  • 事件源映射在事件源中维护。事件源中的相关 API 支持使您可以创建和管理事件源映射。例如,Amazon S3 提供存储桶通知配置 API。使用此 API,您可以配置事件源映射,标识存储桶事件以发布和调用 Lambda 函数。

  • 由于事件源调用您的 Lambda 函数,您需要使用基于资源的策略授予事件源必需的权限(称为 Lambda 函数策略)。有关更多信息,请参阅 AWS Lambda 权限模型

以下示例说明了此模型的工作原理。

例 - Amazon S3 推送事件和调用 Lambda 函数

假定您希望为每个对象创建的存储桶事件调用您的 AWS Lambda 函数。您在存储桶通知配置中添加必需的事件源映射。

下图说明了这一流程:

  1. 用户在存储桶中创建对象。

  2. Amazon S3 检测到对象创建事件。

  3. Amazon S3 根据在存储桶通知配置中描述的事件源映射调用 Lambda 函数。

  4. AWS Lambda 验证附加到 Lambda 函数的策略来确保 Amazon S3 具有所需的权限。有关权限策略的详细信息,请参阅 AWS Lambda 的身份验证和访问控制

  5. AWS Lambda 验证附加的权限策略之后,会执行 Lambda 函数。请记住,您的 Lambda 函数接收事件作为参数。

AWS 基于流的服务的事件源映射

Amazon Kinesis Streams 和 DynamoDB 流是基于流的服务,您可以预配置这些服务以便与 AWS Lambda 一起使用。在您执行必要的事件源映射之后,AWS Lambda 轮询流并调用 Lambda 函数(称为轮询模型)。在拉模型中,请注意以下事项:

  • 事件源映射在 AWS Lambda 中维护。AWS Lambda 提供相关 API 来创建和管理事件源映射。有关更多信息,请参阅 CreateEventSourceMapping

  • AWS Lambda 需要您的权限来轮询流和读取记录。您可以通过执行角色,使用您在创建 Lambda 函数时指定与角色关联的权限策略,授予这些权限。AWS Lambda 无需任何权限即可调用您的 Lambda 函数。

以下示例说明了此模型的工作原理。

例 - AWS Lambda 从 Kinesis 流中提取事件并调用 Lambda 函数

下图显示将记录写入 Kinesis 流的自定义应用程序以及 AWS Lambda 轮询流的方式。当 AWS Lambda 在流上检测到新记录时,它调用您的 Lambda 函数。

假定您有写入记录到 Kinesis 流的自定义应用程序。您希望在流上检测到新记录时调用 Lambda 函数。您可以在 AWS Lambda 中创建 Lambda 函数以及所需的事件源映射。

图中说明了以下序列:

  1. 自定义应用程序将记录写入 Kinesis 流。

  2. AWS Lambda 持续轮询流,在服务检测到流上的新记录时调用 Lambda 函数。AWS Lambda 根据您在 AWS Lambda 中创建的事件源映射来确定要轮询的流以及调用的 Lambda 函数。

  3. 假定允许 AWS Lambda 轮询流的附加权限策略通过了验证,接下来 AWS Lambda 执行 Lambda 函数。有关权限策略的详细信息,请参阅 AWS Lambda 的身份验证和访问控制

本示例中使用 Kinesis 流,不过这种情况也适用于使用 DynamoDB 流时。

自定义应用程序的事件源映射

如果您有发布和处理事件的自定义应用程序,您可以创建 Lambda 函数来处理这些事件。在这种情况下,没有预配置要求,您无需设置事件源映射。相反,事件源使用 AWS Lambda Invoke API。如果应用程序和 Lambda 函数由不同 AWS 账户拥有,在与 Lambda 函数关联的权限策略中,拥有 Lambda 函数的 AWS 账户必须允许跨账户的权限。

以下示例说明了它的工作原理。

例 - 自定义应用程序发布事件和调用 Lambda 函数

下图说明了您账户中的自定义应用程序如何调用 Lambda 函数的过程。在此示例中,自定义应用程序使用拥有 Lambda 函数的账户的相同账户凭证,因此,不需要其他权限即可调用函数。

在下面的示例中,用户应用程序和 Lambda 函数由不同的 AWS 账户所有。这种情况下,在与 Lambda 函数关联的权限策略中,拥有 Lambda 函数的 AWS 账户必须具有跨账户权限。有关更多信息,请参阅 AWS Lambda 权限模型

建议阅读材料

如果您是首次接触 AWS Lambda,我们建议您通读“工作原理”部分中的主题以熟悉 Lambda。下一个主题为支持的事件源

在您阅读了“工作原理”部分中的所有主题之后,我们建议您查看 构建 Lambda 函数,尝试入门练习,然后探讨使用案例。每个使用情形都提供了设置端到端体验的分步说明。