AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

AWS Lambda 事件源映射

Lambda 函数和事件源是 AWS Lambda 的核心组件。事件源是发布事件的实体,Lambda 函数是处理事件的自定义代码。支持的事件源是经过预配置可与 AWS Lambda 一起使用的 AWS 服务。配置称为事件源映射,将事件源映射到 Lambda 函数。它允许在事件发生时自动调用 Lambda 函数。

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

您也可以创建自定义应用程序以包含 AWS 资源事件并调用 Lambda 函数。有关更多信息,请参阅 将 AWS Lambda 与 AWS Command Line Interface 结合使用

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

AWS 服务的事件源映射

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

  • 事件源映射在事件源中维护。事件源中的相关 API 支持使您可以创建和管理事件源映射。例如,Amazon S3 提供存储桶通知配置 API。使用此 API,您可以配置事件源映射,标识存储桶事件以发布和调用 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 基于轮询的服务的事件源映射

AWS Lambda 支持以下基于轮询的服务。

Lambda 从其读取事件的服务

配置事件源映射后,AWS Lambda 将轮询事件源并调用您的 Lambda 函数。事件源映射在 AWS Lambda 中维护。AWS Lambda 提供 API 来创建和管理事件源映射。有关更多信息,请参阅 CreateEventSourceMapping

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

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

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

图中说明了以下序列:

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

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

  3. AWS Lambda 执行 Lambda 函数。

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

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

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

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

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