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

配合使用 AWS Lambda 和 Amazon S3

Amazon S3 可将事件(例如,在存储桶中创建对象时)发布到 AWS Lambda 并通过将事件数据作为参数传递来调用您的 Lambda 函数。利用这种集成,您可以编写处理 Amazon S3 事件的 Lambda 函数。在 Amazon S3 中,您可添加存储桶通知配置,该配置可标识您希望 Amazon S3 发布的事件类型和您希望调用的 Lambda 函数。

重要

如果您的 Lambda 函数使用触发它的同一存储桶,则会导致在一个循环中执行该函数。例如,如果每当上传一个对象,存储桶就触发某个函数,而该函数又上传一个对象给存储桶,则该函数间接触发了自身。为避免这种情况,请使用两个存储桶,或将触发器配置为仅适用于传入对象所用的前缀。

例 Amazon S3 消息事件

{ "Records":[ { "eventVersion":"2.0", "eventSource":"aws:s3", "awsRegion":"us-west-2", "eventTime":"1970-01-01T00:00:00.000Z", "eventName":"ObjectCreated:Put", "userIdentity":{ "principalId":"AIDAJDPLRKLG7UEXAMPLE" }, "requestParameters":{ "sourceIPAddress":"127.0.0.1" }, "responseElements":{ "x-amz-request-id":"C3D13FE58DE4C810", "x-amz-id-2":"FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD" }, "s3":{ "s3SchemaVersion":"1.0", "configurationId":"testConfigRule", "bucket":{ "name":"sourcebucket", "ownerIdentity":{ "principalId":"A3NL1KOZZKExample" }, "arn":"arn:aws:s3:::sourcebucket" }, "object":{ "key":"HappyFace.jpg", "size":1024, "eTag":"d41d8cd98f00b204e9800998ecf8427e", "versionId":"096fKKXTRTtl3on89fVO.nfljtsv6qko" } } } ] }

请注意有关 Amazon S3 和 AWS Lambda 集成的工作原理的以下信息:

  • 非基于流(异步)的模型 – 这是一个模型(请参阅 AWS Lambda 事件源映射),其中 Amazon S3 监控存储桶并通过将事件数据作为参数传递来调用 Lambda 函数。在推模型中,您将使用存储桶通知配置保留 Amazon S3 中的事件源映射。在配置中,指定您希望 Amazon S3 监控的事件类型以及您希望 Amazon S3 调用哪些 AWS Lambda 函数。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的配置 Amazon S3 事件通知

  • 异步调用 – AWS Lambda 使用 Event 调用类型(异步调用)来调用 Lambda 函数。有关调用类型的更多信息,请参阅 调用类型

  • 事件结构 – Lambda 函数接收的事件针对单个对象并提供了存储桶名称和对象键名称等信息。

请注意,设置端到端体验时有两种类型的权限策略可供选择:

  • 针对 Lambda 函数的权限 – 无论哪个对象调用 Lambda 函数,AWS Lambda 都将通过担任您在创建 Lambda 函数时指定的 IAM 角色(执行角色)来执行该函数。利用与此角色关联的权限策略,您可以向 Lambda 函数授予其所需的权限。例如,如果 Lambda 函数需要读取某个对象,您可以在权限策略中为相关 Amazon S3 操作授予权限。有关更多信息,请参阅AWS Lambda 执行角色

  • 供 Amazon S3 调用 Lambda 函数的权限 – Amazon S3 无法在未经您的许可的情况下调用 Lambda 函数。您通过与 Lambda 函数关联的权限策略授予此权限。

下图概述了该流程:

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

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

  3. Amazon S3 调用在存储桶通知配置中指定的 Lambda 函数。

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

  5. Lambda 函数执行。