S3 Object Lambda 的最佳实践和指南 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

S3 Object Lambda 的最佳实践和指南

使用 S3 Object Lambda 时,请遵循以下最佳实践和指南来优化操作和性能。

使用 S3 Object Lambda

S3 Object Lambda 仅支持处理 GetObject 请求。任何非 GET 请求(例如 ListObjects 或 HeadObject)都不会调用 Lambda 并返回标准的未转换 API 响应。每个区域每个 Amazon Web Services 账户 最多可以创建 1000 个 Object Lambda 访问点。您使用的 Amazon Lambda 函数必须与 Object Lambda 访问点位于同一 Amazon Web Services 账户 和区域中。

S3 Object Lambda 允许使用长达 60 秒的时间将完整的响应流式传输到发起人。您的函数还受 Lambda 默认配额的约束。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的 Lambda 配额。使用 S3 Object Lambda 会调用您指定的 Lambda 函数,并且您有责任确保指定的 Lambda 函数或应用程序从 S3 中覆盖或删除的任何数据都符合预期并正确。

您只能使用 S3 Object Lambda 对对象执行操作。您不能使用它们执行其他 Amazon S3 操作,例如修改或删除存储桶。有关支持访问点的 S3 操作的完整列表,请参阅 接入点与Amazon服务的兼容性

除此列表之外,S3 Object Lambda 访问点不支持 POST ObjectCopy(作为源)或 Select Object Content

与 S3 Object Lambda 结合使用的 Amazon 服务

S3 Object Lambda 可以连接 Amazon S3、Amazon Lambda,也可以连接您选择的其他 Amazon 服务,以交付与请求应用程序相关的对象。与 S3 Object Lambda 结合使用的所有 Amazon 服务将继续受其各自服务等级协议 (SLA) 的管控。例如,如有任何 Amazon 服务不遵守其服务承诺,您将有资格获得该服务的 SLA 中记录的服务积分。

使用 Range 和 partNumber GET 标头

使用大型对象时,您可以使用 Range HTTP 标头从仅获取指定部分的对象中下载指定的字节范围。您可以使用到 Amazon S3 的并行连接,从相同对象中提取不同的字节范围。您还可以使用 partNumber(1 到 10000 之间的整数),它有效地执行对象中指定部分“范围内的”GET 请求。有关更多信息,请参阅《Amazon Simple Storage Service API 参考》中的 GetObject 请求语法

收到 GET 请求时,S3 Object Lambda 首先调用您指定的 Lambda 函数,因此,如果您的 GET 请求包含范围或分段编号参数,则必须确保您的 Lambda 函数能够识别和管理这些参数。由于在此类设置中可能连接了多个实体(请求客户端和服务,如 Lambda、S3 等),因此建议所有相关实体以统一的方式来解释请求的范围(或 partNumber)。这可以确保应用程序预期的范围与 Lambda 函数处理的范围相匹配。构建函数来处理具有范围标头的请求时,请测试应用程序计划使用的响应大小、原始对象大小和请求范围大小的所有组合。

默认情况下,S3 Object Lambda 访问点将以 501 响应任何 GetObject 请求,该请求包含范围或分段编号参数(包括在标头或查询参数中)。通过 Amazon Web Services Management Console 或 Amazon CLI 更新 Object Lambda 访问点配置,您可以确认 Lambda 函数是否已准备好处理范围或分段请求。

使用 Amazon CLI 和开发工具包

不支持将 Amazon CLI S3 子命令(cp、mv 和 sync)和传输管理器与 S3 对象 Lambda 一起使用。