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

使用 AWS Lambda 构建应用程序

在 AWS Lambda 上构建应用程序 (包括无服务器应用程序) 时,核心组件是 Lambda 函数和事件源。事件源 是发布事件的 AWS 服务或自定义应用程序,Lambda 函数 是处理事件的自定义代码。为了清晰起见,请考虑以下情景:

  • 文件处理 - 假设您有一个照片共享应用程序。人们使用您的应用程序上传照片,应用程序将这些用户照片存储到 Amazon S3 存储桶中。然后,您的应用程序创建每个用户照片的缩略图版本,并在用户的资料页面上显示这些缩略图。在这种情景下,您可以选择创建 Lambda 函数来自动创建缩略图。Amazon S3 是支持的 AWS 事件源之一,可以发布对象创建的事件 并调用您的 Lambda 函数。您的 Lambda 函数代码可以从 S3 存储桶读取照片对象、创建缩略图版本,然后将其保存到其他 S3 存储桶中。

  • 数据和分析 - 假设您在构建分析应用程序并将原始数据存储到 DynamoDB 表中。在您编写、更新或删除表中的项目时,DynamoDB 流可以将项目更新事件发布到与表关联的流。在这种情况下,事件数据提供项目键、事件名称(例如插入、更新和删除)以及其他相关详细信息。您可以编写 Lambda 函数,通过聚合原始数据来生成自定义指标。

  • 网站 - 假设您在创建网站并且希望在 Lambda 上托管后端逻辑。您可以在 HTTP 上调用 Lambda 函数,使用 Amazon API Gateway 作为 HTTP 终端节点。现在,您的 Web 客户端可以调用 API,然后 API 网关 可将请求路由到 Lambda。

  • 移动应用程序 - 假设您有生成事件的自定义移动应用程序。您可创建 Lambda 函数来处理由自定义应用程序发布的事件。例如,在此情景中,您可以配置 Lambda 函数来处理自定义移动应用程序中的点击。

每个这些事件源为事件数据使用特定格式。有关更多信息,请参阅 事件源发布的示例事件。调用 Lambda 函数时,它接收事件作为 Lambda 函数的参数。

AWS Lambda 支持将多种 AWS 服务作为事件源。有关更多信息,请参阅 支持的事件源。当您配置了这些事件源触发 Lambda 函数时,Lambda 函数在出现事件时自动调用。您可以定义事件源映射,这是您如何确定要跟踪的事件以及要调用的 Lambda 函数。

除了支持的 AWS 服务之外,用户应用程序还可以生成事件,您可以构建自己的自定义事件源。自定义事件源使用 AWS Lambda Invoke 操作调用 Lambda 函数。用户应用程序(如客户端、手机或 Web 应用程序)可以发布事件,并使用 AWS 开发工具包或 AWS 移动开发工具包(如 适用于 Android 的 AWS 移动软件开发工具包)按需调用 Lambda 函数。

以下为事件源和端到端体验工作方式的介绍性示例。

示例 1:Amazon S3 推送事件并调用 Lambda 函数

Amazon S3 可以在存储桶上发布不同类型的事件,例如 PUT、POST、COPY 和 DELETE 对象事件。使用存储桶通知功能,您可以配置事件源映射,引导 Amazon S3 在出现特定事件类型时调用 Lambda 函数,如下图中所示。

图中说明了以下序列:

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

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

  3. Amazon S3 使用由执行角色提供的权限来调用 Lambda 函数。有关执行角色的更多信息,请参阅 AWS Lambda 的身份验证和访问控制。Amazon S3 根据存储在存储桶通知配置中的事件源映射明确应该调用哪个 Lambda 函数。

  4. AWS Lambda 执行 Lambda 函数,指定事件作为参数。

请注意以下几点:

  • 事件源映射在事件源服务中维护,在此情景下为 Amazon S3。对于所有支持的 AWS 事件源,除了基于流的源(Kinesis 和 DynamoDB 流)之外,均是如此。下一个示例说明了基于流的事件源。

  • 事件源 (Amazon S3) 调用 Lambda 函数(称为推模型)。再次强调,对于所有支持的 AWS 服务,除了基于流的事件源之外,均是如此。

  • 要让事件源 (Amazon S3) 调用您的 Lambda 函数,您必须使用附加到 Lambda 函数的权限策略来授予权限。

示例 2:AWS Lambda 从 Kinesis 流中拉取事件并调用 Lambda 函数

对于基于流的事件源,AWS Lambda 轮询流,在流上检测到记录时调用 Lambda 函数。这些流源的特殊之处在于,事件源映射信息存储在 Lambda 中。AWS Lambda 为您提供用于创建和管理这些事件源映射的 API。

下图显示了自定义应用程序如何将记录写入 Kinesis 流中。

图中说明了以下序列:

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

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

  3. 使用传入事件调用 Lambda 函数。

请注意以下几点:

  • 在处理基于流的事件源时,会发生以下情况:

    • 您在 AWS Lambda 中创建事件源映射。

    • AWS Lambda 调用 Lambda 函数(称为拉模型)。

  • AWS Lambda 无需权限即可调用您的 Lambda 函数,因此您不需要添加任何权限到附加到您 Lambda 函数的权限策略。

  • 您的 Lambda 角色需要从流读取的权限。

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

下图说明了您账户中的自定义应用程序如何调用 Lambda 函数的过程。

图中说明了以下序列:

  1. 自定义应用程序使用 AWS 开发工具包调用 Lambda 函数。

  2. 使用传入事件调用 Lambda 函数。

下图显示自定义移动应用程序如何调用 Lambda 函数。

  1. 移动应用程序向 Amazon Cognito 发送了一条请求并在其中附带一个身份池 ID(您在设置的过程中创建身份池)。

  2. Amazon Cognito 将临时安全凭证返回到应用程序。

    Amazon Cognito 代入与身份池关联的角色来生成临时凭证。

  3. 移动应用程序使用临时凭证(Cognito 身份)调用 Lambda 函数。

  4. AWS Lambda 代入执行角色以代表您执行您的 Lambda 函数。

  5. Lambda 函数执行。

  6. AWS Lambda 向移动应用程序返回结果,假定该应用程序使用 RequestResponse 调用类型(称为同步调用)调用了 Lambda 函数。

请注意以下几点:

  • 这是按需调用 Lambda 函数的示例。对于按需调用,您无需像对 AWS 服务那样预配置事件源映射。

  • 在此示例中,由于自定义应用程序使用与拥有 Lambda 函数的账户相同的账户凭证,因此,不需要其他权限即可调用函数。

建议阅读材料

如果您不熟悉 AWS Lambda,我们建议您阅读本部分的所有主题,了解详细信息。您还可以考虑先完成 入门 练习来获取创建和测试 Lambda 函数的动手经验,然后再阅读本章节中的主题。

此外,在您深入了解该技术之前,构建 Lambda 函数还提供了可能会对您有帮助的介绍性信息。