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

教程:将 AWS Lambda 与 Amazon S3 结合使用

假设您要为将上传到存储桶的每个图像(.jpg 和 .png 对象)创建一个缩略图。您可以创建一个 Lambda 函数 (CreateThumbnail),在创建对象后,Amazon S3 可调用该函数。然后,Lambda 函数可以从 source 存储桶中读取图像对象并创建缩略图目标存储桶(在本教程中,该存储桶称为 sourceresized 存储桶)。

重要

您必须使用两个存储桶。如果使用同一个存储桶作为源和目标,上传到源存储桶的每个缩略图都会触发另一个对象创建事件,该事件将再次调用 Lambda 函数,从而产生不必要的递归。

实现摘要

下图说明应用程序的流程:

  1. 用户将对象上传到 Amazon S3 中的源存储桶(对象创建事件)。

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

  3. Amazon S3 调用 Lambda 函数并将事件数据作为函数传递,由此将 s3:ObjectCreated:* 事件发布到 AWS Lambda。

  4. AWS Lambda 通过代入您在创建 Lambda 函数时指定的执行角色来执行 Lambda 函数。

  5. Lambda 函数通过收到的事件数据获得了源存储桶名称和对象键名称。Lambda 函数读取该对象,使用图形库创建缩略图,然后将其保存到目标存储桶。

请注意,完成本教程后,您的账户中将具有以下 Amazon S3、Lambda 和 IAM 资源:

在 Lambda 中:

  • Lambda 函数。

  • 与 Lambda 函数关联的访问权限策略 - 使用此权限策略向 Amazon S3 授予调用 Lambda 函数的权限。此外,您还将限制该权限,以使 Amazon S3 只能针对来自特定存储桶(归特定 AWS 账户所有)的对象创建事件调用 Lambda 函数。

    注意

    某个 AWS 账户删除存储桶后,其他 AWS 账户可以创建使用该相同名称的存储桶。额外的条件可确保:仅当 Amazon S3 检测到来自特定存储桶(归特定 AWS 账户所有)的对象创建事件时,Amazon S3 才能调用 Lambda 函数。

    有关更多信息,请参阅 如何使用

在 IAM 中:

  • 管理员用户 - 称作 adminuser。不建议使用 AWS 账户的根凭证。相反,请使用 adminuser 凭证执行本教程中的步骤。

  • IAM 角色(执行角色)- 通过与此角色关联的权限策略授予 Lambda 函数所需的权限。

在 Amazon S3 中:

  • 两个存储桶名为 sourcesourceresized。请注意,source 是一个占位符名称,您需要将它替换为您的实际存储桶名称。例如,如果您将名为 example 存储桶作为源,您将创建 exampleresized 作为目标存储桶。

  • 源存储桶上的通知配置 - 您将在源存储桶上添加通知配置,用来标识您希望 Amazon S3 发布到 AWS Lambda 的事件的类型(对象创建事件)和要调用的 Lambda 函数。有关 Amazon S3 通知功能的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的设置存储桶事件的通知

您现在可以开始教程。请注意,最初的准备工作完成后,本教程分为了两个主要部分:

  • 首先,完成创建 Lambda 函数的必要设置步骤,并使用 Amazon S3 示例事件数据手动调用该函数。该中间测试旨在验证函数能够正常工作。

  • 其次,向源存储桶添加通知配置,以便 Amazon S3 在检测到对象创建事件时能够调用 Lambda 函数。

下一步

步骤 1:准备

本页内容: