一般性问题

问:什么是 Amazon Lambda?

Amazon Lambda 让您无需预置或管理服务器即可运行代码。您只需按消耗的计算时间付费 – 代码未运行时不产生费用。借助 Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,而且全部都无需管理。只需上传您的代码,Lambda 就会处理运行和扩展高可用性代码所需的一切工作。您可以将您的代码设置为自动从其他 亚马逊云科技服务触发,或者直接从任何 Web 或移动应用程序调用。

问:什么是无服务器计算?

无服务器计算让您可以在不考虑服务器的情况下构建并运行应用程序和服务。使用无服务器计算,您的应用程序仍在服务器上运行,但所有服务器管理工作均由 亚马逊云科技负责。无服务器计算的核心是 Amazon Lambda,这项服务可使您无需预置或管理服务器即可运行代码。

问:哪些事件可以触发 Amazon Lambda 函数?

有关事件源的完整列表,请参阅我们的文档

问:什么时候应该使用 Amazon Lambda 与 Amazon EC2?

Amazon Web Services 提供一组计算服务以满足各种需求。

Amazon EC2 提供了灵活性,具有范围广泛的实例类型以及用于自定义操作系统、网络和安全设置以及整个软件堆栈的选项,从而使您能够轻松地将现有的应用程序迁移到云中。使用 Amazon EC2,您将负责预置容量、监控服务器队的运行状况和性能,并设计容错性和可扩展性。Amazon Elastic Beanstalk 提供易用的服务,供您部署和扩展 Web 应用程序,您可以在其中保留对底层 EC2 实例的所有权和完整控制权。

Amazon Lambda 可轻松执行代码以响应事件,如 Amazon S3 存储桶的更改、Amazon DynamoDB 表的更新或者应用程序或设备生成的自定义事件。使用 Lambda,您不必预置自己的实例;Lambda 会代您执行所有的运行和管理活动,包括容量预置、监控服务器队运行状况、向底层计算资源应用安全补丁、部署代码、在前端运行 Web 服务以及监控和记录代码。Amazon Lambda 为您的代码提供轻松的扩展和高可用性,无需您进行额外的工作。

Amazon Lambda 可轻松执行代码以响应事件,如 Amazon S3 存储桶的更改、Amazon DynamoDB 表的更新或者应用程序或设备生成的自定义事件。使用 Lambda,您不必预置自己的实例;Lambda 会代您执行所有的运行和管理活动,包括容量预置、监控服务器队运行状况、向底层计算资源应用安全补丁、部署代码、在前端运行 Web 服务以及监控和记录代码。Amazon Lambda 为您的代码提供轻松的扩展和高可用性,无需您进行额外的工作。

问:什么类型的代码可在 Amazon Lambda 上运行?

Amazon Lambda 提供了一种简单的方式来完成云中的许多活动。例如,您可以使用 Amazon Lambda 构建以下内容:可以检索并转换 Amazon DynamoDB 中数据的移动后端、当对象上传到 Amazon S3 以后对其进行压缩或转换的处理程序、用于任意 Amazon Web Service 的 API 调用的审核和报告功能,以及使用 Amazon Kinesis 进行的流数据无服务器处理。

问:Amazon Lambda 支持哪些语言?

Amazon Lambda 支持用 Node.js (JavaScript)、Python、Java(兼容 Java 8)和 C# (.NET Core) 编写的代码。您的代码中可包含现有的库,甚至是本机库。有关使用 Node.jsPythonJavaC# 的信息,请参阅我们的文档。

问:我能否访问 Amazon Lambda 运行所在的基础设施?

不可以。Amazon Lambda 会代您运行计算基础设施,从而执行运行状况检查、应用安全补丁和执行其他例行维护。

问:Amazon Lambda 如何隔离代码?

每个 Amazon Lambda 函数都在自己的独立环境中运行,具有自己的资源和文件系统视图。Amazon Lambda 使用与 Amazon EC2 相同的技术在基础设施和执行级别上提供安全性和隔离。

问:Amazon Lambda 如何保护代码?

Amazon Lambda 将代码存储在 Amazon S3 中,并在静态下对其进行加密。Amazon Lambda 在使用代码时执行额外的完整性检查。

Amazon Lambda 函数

问:什么是 Amazon Lambda 函数?

您在 Amazon Lambda 上运行的代码以“Lambda 函数”上传。每个函数都有相关的配置信息,如其名称、描述、入口点和资源要求。代码必须以“无状态”样式编写,即应假设与底层计算基础设施无密切关系。本地文件系统访问、子进程和类似构件可能不会超出请求的生命周期,且任何持久状态都应存储在 Amazon S3、Amazon DynamoDB 或其他有 Internet 连接的存储服务中。Lambda 函数可包含库,甚至是本机库。

问:Amazon Lambda 是否会再使用函数实例?

为了提高性能,Amazon Lambda 会选择保留您的函数实例,将其再用于服务后续请求,而不是创建一个新副本。您的代码不应假设此操作始终执行。

问:如果我需要为 Amazon Lambda 函数在磁盘上留下暂存空间会发生什么?

每个 Lambda 函数都会在其自己的 /tmp 目录中接收到 500MB 的非持久性磁盘空间。

问:Amazon Lambda 函数为什么必须是无状态的?

保持函数的无状态性使 Amazon Lambda 可以根据需要快速启动任意数量的函数副本,根据传入事件的速率进行扩展。虽然 Amazon Lambda 的编程模式是无状态的,但是您的代码可以通过调用其他 Web 服务(如 Amazon S3 或 Amazon DynamoDB)来访问有状态的数据。

问:我能否在我的 Amazon Lambda 函数代码中使用线程和进程?

可以。Amazon Lambda 支持您使用常规语言和操作系统功能,如创建额外的线程和进程。分配至 Lambda 函数的资源(包括内存、执行时间、磁盘和网络使用)都必须在其使用的所有线程/进程之间共享。您可以使用 Amazon Linux 支持的任意语言启动进程。

问:哪些限制适用于 Amazon Lambda 函数代码?

Lambda 尝试尽可能不对常规语言和操作系统活动施加限制,但有些活动仍被禁用:Amazon Lambda 阻止入站网络连接;对于出站连接,只支持 TCP/IP 套接字;ptrace(调试)系统调用受到阻止。TCP 端口 25 流量同样受到阻止,这是一项反垃圾邮件措施。

问:如何使用 Lambda 控制台创建 Amazon Lambda 函数?

如果您使用 Node.js 或 Python,则可以使用 Amazon Lambda 控制台中的内联编辑器编写您的函数代码。前往控制台开始使用。您也可以将代码(以及任何依赖库)打包为 ZIP,并使用 Amazon Lambda 控制台从本地环境上传或指定 ZIP 文件所在的 Amazon S3 位置。上传的内容不得超过 50MB(压缩后)。您可以通过 Amazon Eclipse 插件用 Java 编写和部署 Lambda 函数。您可以通过 Visual Studio 插件用 C# 和 Node.js 编写和部署 Lambda 函数。

问:如何使用 Lambda CLI 创建 Amazon Lambda 函数?

您可以将代码(以及任何依赖库)打包为 ZIP,并使用 Amazon CLI 从本地环境上传或指定 ZIP 文件所在的 Amazon S3 位置。上传的内容不得超过 50MB(压缩后)。请访问 Lambda 入门指南开始使用。

问:如何管理我的 Amazon Lambda 函数?

您可以使用 Amazon Lambda 控制台中的控制面板轻松列出、删除、更新和监控您的 Lambda 函数。您还可以使用 Amazon CLI 和 亚马逊云科技软件开发工具包来管理您的 Lambda 函数。请访问 Lambda 开发人员指南了解更多信息。

问:如何监控 Amazon Lambda 函数?

Amazon Lambda 会代您自动监控 Lambda 函数,从而通过 Amazon CloudWatch 实时报告指标(包括请求总数、延迟、出错率和节流请求)。通过 Amazon CloudWatch 控制台或 Amazon Lambda 控制台,您可以查看每一个 Lambda 函数的统计信息。您还可以在 Lambda 函数中调用第三方监控 API。请访问 CloudWatch 指标疑难解答,了解更多信息。使用 Lambda 的内置指标会依照 Amazon Lambda 的标准费率计费。

问:如何对 Amazon Lambda 函数中的故障进行故障排除?

Amazon Lambda 与 Amazon CloudWatch logs 自动集成,为每个 Lambda 函数创建一个日志组,并提供基本的应用程序生命周期事件日志条目,包括记录每次使用函数时所消耗的资源。您可以轻松将额外的日志语句插入到代码中。您还可以在 Lambda 函数中调用第三方记录 API。请访问 Lambda 函数疑难解答,了解更多信息。将按照 Amazon CloudWatch Logs 费率计费。

问:如何扩展 Amazon Lambda 函数?

您无需扩展 Lambda 函数,Amazon Lambda 会代您自动扩展它们。每次收到有关您的函数的事件通知时,Amazon Lambda 都会在其计算队列中快速找到空闲容量并运行代码。由于您的代码是无状态的,Amazon Lambda 可以根据需要启动任意数量的函数副本,而不会造成长时间的部署和配置延迟。函数的扩展方面没有基本限制。Amazon Lambda 将动态分配容量以匹配传入事件的速率。

问:如何将计算资源分配给 Amazon Lambda 函数?

在 Amazon Lambda 资源模型中,您可以选择您想为函数分配的内存量,并按 CPU 功率和其他资源的比例进行分配。例如,选择 256MB 内存分配给 Lambda 函数的 CPU 功率约是请求 128MB 内存的两倍,选择 512MB 内存的 CPU 功率的一半。您可以在 128MB 到 1.5GB 的范围间以 64MB 的增量设置您的内存。

问:执行 Amazon  Lambda 函数需要多长时间?

对 Amazon Lambda 进行的所有调用必须在 900 秒内执行完毕。默认的超时为 3 秒,但您可以将超时设置为 1 到 900 秒之间的任何值。

问:Amazon Lambda 是否支持版本控制?

是。默认情况下,每个 Amazon Lambda 函数都有一个当前版本的代码。Lambda 函数客户端可调用特定的版本或获取最新的实施。有关 Lambda 函数版本控制的信息,请参阅我们的文档。

问:上传代码后,Amazon Lambda 函数需要多长时间才能调用?

部署时间因代码大小有所差异,但 Amazon Lambda 函数一般在上传后几秒钟内就可以调用了。

问:我能否使用自己的受支持的库版本?

可以。您可以在其中包含自己的代码库副本(包括 亚马逊云科技软件开发工具包),以便使用除 Amazon Lambda 提供的默认版本之外的版本。

问:何时该使用内存超过 3008MB 的 Amazon Lambda 函数?

运行内存或计算密集型工作负载的客户现在可以启动其函数。更大的内存函数有助于多线程应用程序更快速地运行,从而使其成为数据和计算密集型应用程序(如机器学习、批处理和 ETL 作业、金融建模、基因组学、HPC、和媒体处理)的理想之选。

问:如何配置我的应用程序以使用 Amazon Lambda 临时存储?

在函数创建或更新期间,您可以使用 Amazon Lambda 控制台、Amazon Lambda API 或 Amazon CloudFormation 模板,为每个 Lambda 函数配置各自的临时存储空间(介于 512MB 和 10,240MB 之间,以 1MB 增量)。

问:Amazon Lambda 临时存储是否已加密?

是。存储在临时存储器中的所有数据均使用密钥进行了静态加密。

问:我可以使用哪些指标来监控我的 Amazon Lambda 临时存储使用情况?

您可以使用 Amazon CloudWatch Lambda Insight 指标来监控您的临时存储使用情况。要了解更多信息,请参阅 Amazon CloudWatch Lambda Insights 文档

问:何时应该为我的无服务器应用程序使用 Amazon S3、Amazon EFS 或 Amazon Lambda 临时存储?

如果您的应用程序需要持久、持续的存储,请考虑使用 Amazon S3 或 Amazon EFS。如果您的应用程序需要在单个函数调用中存储代码所需的数据,请考虑使用 Amazon Lambda 临时存储作为临时缓存。

问:在为我的函数启用预配置并发时,能否使用临时存储?

是。但是,如果您的应用程序需要持久存储,请考虑使用 Amazon EFS 或 Amazon S3。当您为函数启用预置并发时,您的函数的初始化代码将在分配期间每隔几个小时运行一次,因为函数的运行实例会被回收。实例处理请求后,您可以在日志和跟踪中查看初始化时间。但是,即使实例从未处理过任何请求,也需要支付初始化的费用。这种预置并发初始化行为可能会影响您的函数与存储在临时存储中的数据的交互方式,即使您的函数没有处理请求也是如此。

使用 Amazon Lambda 处理 Amazon 事件

问:什么是事件源?

事件源是 Amazon 服务或开发人员创建的应用程序,用于生成可触发 Amazon Lambda 函数使其运行的事件。有些服务通过直接调用云函数(例如 Amazon S3)向 Lambda 发布这些事件。Lambda 也可以在未向 Lambda 发布事件的其他服务中轮询资源。例如,Lambda 可以从 Kinesis 流中拉取记录并为流中的每条消息执行 Lambda 函数。

登录到 Amazon S3 并使用 S3 存储桶通知,就可将其他很多服务(例如 Amazon CloudTrail)简单地用作触发 Amazon Lambda 函数的事件源。

问:哪些事件源可用于 Amazon Lambda?

有关事件源的完整列表,请参阅我们的文档

问:如何在 Amazon Lambda 中表示事件?

将事件以事件输入参数的形式传输到 Lambda 函数中。对于事件成批到达的事件源(例如 Amazon Kinesis 和 Amazon DynamoDB Streams),事件参数可以在一个调用中包含多个事件,具体取决于请求的批量大小。要了解有关 Amazon S3 事件通知的更多信息,请访问配置 Amazon S3 事件通知。要了解有关 Amazon DynamoDB Streams 的更多信息,请访问 DynamoDB Stream 开发人员指南。要了解有关使用 Amazon SNS 调用 Lambda 函数的更多信息,请访问 Amazon SNS 开发人员指南。有关 Amazon CloudTrail 日志和审核跨 Amazon 服务的 API 调用的更多信息,请参见 Amazon CloudTrail。

问:如何让 Amazon Lambda 函数响应 Amazon S3 存储桶中的更改?

您可以从 Amazon Lambda 控制台中选择一个函数并将其与 Amazon S3 存储桶中的通知相关联。或者,您可以使用 Amazon S3 控制台并进行如下配置:将存储桶的通知发送到 Amazon Lambda 函数。还可通过 亚马逊云科技软件开发工具包和 CLI 实现这一功能。

问:如何让 Amazon Lambda 函数响应 Amazon DynamoDB 表中的更新?

将 Lambda 函数订阅到与 DynamoDB 表相关联的 DynamoDB Stream,即可在 DynamoDB 表更新时触发 Lambda 函数。您可以使用 Amazon DynamoDB 控制台、Amazon Lambda 控制台或 Lambda 的 registerEventSource API 将 DynamoDB Stream 与 Lambda 函数相关联。

问:如何使用 Amazon Lambda 函数处理 Amazon Kinesis 流中的记录?

您可以从 Amazon Lambda 控制台中选择一个 Lambda 函数并将其与属于相同账户的 Amazon Kinesis 流相关联。还可通过 亚马逊云科技软件开发工具包和 CLI 实现这一功能。

问题:Amazon Lambda 如何处理来自 Amazon Kinesis Streams 和 Amazon DynamoDB Streams 的数据?

发送到您的 Amazon Lambda 函数的 Amazon Kinesis 和 DynamoDB Streams 记录将根据分片进行严格序列化。这意味着,如果您将两个记录放在同一个分片中,则 Lambda 保证将首先通过第一条记录来调用 Lambda 函数,然后再通过第二条记录来调用 Lambda 函数。如果对第一条记录的调用超时、受到限制,或者遇到任何其他错误,则 Lambda 将重试直至其成功(或者记录达到其 24 小时过期时间),然后才会对下一条记录采取操作。无法保证不同分片之间记录的排序,并且每个分片的处理是并行进行的。

问:如何使用 Amazon Lambda 函数响应 Amazon Simple Notification Service (SNS) 发出的通知?

您可以从 Amazon Lambda 控制台中选择一个 Lambda 函数并将其与 Amazon SNS 主题相关联。还可通过 亚马逊云科技软件开发工具包和 CLI 实现这一功能。

问:如何使用 亚马逊云科技Lambda 函数响应 Amazon CloudWatch 警报?

首先应配置警报,使其发送 Amazon SNS 通知。然后从 Amazon Lambda 控制台中选择一个 Lambda 函数并将其与 Amazon SNS 主题相关联。请参阅 Amazon CloudWatch 开发人员指南,了解有关设置 Amazon CloudWatch 警报的更多信息。

问:应用程序如何直接触发 Amazon Lambda 函数?

您可以通过 Amazon Lambda 的调用 API 使用自定义事件调用 Lambda 函数。只有该函数的所有者或获得该所有者授权的其他 亚马逊云科技账户才能调用该函数。请访问 Lambda 开发人员指南,了解更多信息。

问:调用 Amazon Lambda 函数响应事件的延迟是多少?

Amazon Lambda 可以在几毫秒内处理事件。创建、更新 Lambda 函数后,延迟时间将立即增加,如果最近未使用,也是如此。

问:如何通过 HTTPS 调用 Amazon Lambda 函数?

通过使用 Amazon API Gateway 定义自定义的 RESTful API,您可以通过 HTTPS 调用 Lambda 函数。这为您的函数提供了终端节点,这些函数可以响应 REST 调用(如 GET、PUT 和 POST)。请参阅有关通过 Amazon API Gateway 使用 Amazon Lambda 的更多信息。

问:Amazon Lambda 函数如何根据发起请求的设备和应用程序对其行为进行自定义?

当通过 亚马逊云科技移动软件开发工具包进行调用时,Amazon Lambda 函数能自动通过“context”对象获得发起调用的设备和应用程序的洞察信息。

问:如果我的函数在处理事件时发生故障会发生什么?

对于 Amazon S3 存储桶通知和自定义事件,Amazon Lambda 会在您的代码出现错误情况或您超出服务或资源限制时尝试执行函数三次。对于 Amazon Lambda 代您轮询的有序事件源(如 Amazon DynamoDB Streams 和 Amazon Kinesis Streams),Lambda 会在发生开发人员代码错误时继续尝试执行,直到该数据过期为止。您可以通过 Amazon Kinesis 和 Amazon DynamoDB 控制台以及 Amazon Lambda 为您的函数生成的 Amazon CloudWatch 指标监控进程。您还可以根据出错率或执行节流的频率来设置 Amazon CloudWatch 警报。

使用 Amazon Lambda 构建应用程序

问:什么是无服务器应用程序?

基于 Lambda 的应用程序(也称为无服务器应用程序)由通过事件触发的函数组成。典型的无服务器应用程序包含一个或多个通过事件(如向 Amazon S3 上传对象、Amazon SNS 通知或 API 操作)触发的函数。这些函数既可独立运行,也能利用其他资源(如 DynamoDB 表或 Amazon S3 存储桶)。最基本的无服务器应用程序仅包含一个函数。

问:如何部署和管理无服务器应用程序?

您可以使用 亚马逊云科技无服务器应用程序模型 (Amazon SAM) 部署和管理无服务器应用程序。Amazon SAM 是一项规范,其中规定了在 亚马逊云科技上表示无服务器应用程序的规则。该规范与 Amazon CloudFormation 目前使用的语法相同,因此本身在 Amazon CloudFormation 中作为一组资源类型(称为“无服务器资源”)得到本机支持。得力于这些资源,亚马逊云科技客户能够更轻松地使用 CloudFormation,通过现有的 CloudFormation API 配置和部署无服务器应用程序。

问:如何开始构建无服务器应用程序?

首先,请访问 Amazon Lambda 控制台,并下载我们的蓝图之一。您下载的文件将包含一份 Amazon SAM 文件(定义了您应用程序中的 亚马逊云科技资源)和一份 .ZIP 文件(包含您函数的代码)。然后,您可以使用 Amazon CloudFormation 命令打包和部署您刚下载的无服务器应用程序。有关更多详细信息,请访问我们的文档

问:Amazon SAM 如何获得许可证?

该规范在 Apache 2.0 下是开源性质的,允许您及他人通过商业版许可证采用 Amazon SAM 并将其整合到构建、部署、监控和管理工具中。您可以在此处访问 GitHub 上的 Amazon SAM 存储库。

预置并发

问:什么是 Amazon Lambda 预置并发?

借助预置并发,您可以更好地控制无服务器应用程序的性能。启用预置并发后,此功能可以保持函数初始化,并在不到 100 毫秒内超速响应。

问:如何设置和管理预置并发?

您可以通过 亚马逊云科技管理控制台、Lambda API、Amazon CLI 和 Amazon CloudFormation 设置函数的并发。利用预置并发功能的最简单方法是使用 Amazon Auto Scaling。您可以使用 Application Auto Scaling 来配置计划,也可以让 Auto Scaling 根据需求变化自动实时调整预置并发级别。要详细了解预置并发,请参阅文档

问:如果我想要使用预置并发,是否需要更改我的代码?

您不需要对您的代码作任何更改即可使用预置并发。它可以与所有的现有函数和运行时无缝协作。使用预置并发时,Lambda 的调用和执行模型不会发生任何变化。

问:预置并发如何收费?

预置并发增加了一个“预置并发”的定价维度,用于保持函数的初始化状态。启用预置并发时,您只需为您配置的并发量和配置的时间段付费。为函数启用预置并发并执行预置并发时,您还需要为请求数和执行持续时间付费。要详细了解预置并发的定价,请参阅 Amazon Lambda 定价

问:什么时候应使用预置并发?

预置并发非常适合构建延迟敏感型应用程序,例如 Web 或移动后端、同步调用的 API 和交互式微服务。您可以根据应用程序的独特需求轻松配置适当的并发量。您可以在需求高时增加并发量,在需求减少时降低并发量,或者完全关闭它。

问:如果函数收到的调用超出配置的预置并发级别,会怎么样?

如果函数的并发达到配置的级别,则该函数的后续调用将具有常规 Lambda 函数的延迟和扩展特性。您可以将函数限制为仅扩展到配置的级别。这样做可以防止函数超出配置的预置并发级别。当需求超出预期数量时,此机制可以防止应用程序发生意外变化。

可扩展性和可用性

问:Amazon Lambda 函数的可用性如何?

Amazon Lambda 旨在通过复制和冗余来向服务本身和其操作的 Lambda 函数提供高可用性。二者皆无维护窗口期或计划停机时间。

问:当我更改代码或其配置时,Amazon Lambda 函数还可以使用吗?

可以。当您更新 Lambda 函数时,会有短暂的窗口期,通常不到 1 分钟,在这期间请求将由旧版本函数或新版本函数实现。

问:对于一次可以执行的 Amazon Lambda 函数的数量有没有限制?

没有。Amazon Lambda 旨在支持大量函数实例并行运行。但是,Amazon Lambda 对每个区域的每个账户的并发执行次数具有默认安全限制(请访问此处了解默认安全限制数量的信息)。如果您想申请提高限制数量,请访问我们的支持中心,点击“Open a new case”(创建问题),然后提交服务限制提升请求。

问:如果账户超出并发执行的默认限制数量会怎样?

如果超出限制,同步调用的 Amazon Lambda 函数会返回一条节流错误信息(429 错误代码)。异步调用的 Lambda 函数可以承受一定范围内的流量突增大约 15 到 30 分钟,之后再进来的事件将会以节流为理由遭到拒绝。如果调用的 Lambda 函数是用于响应 Amazon S3 事件,则被 Amazon Lambda 拒绝的事件可能被 S3 保留 24 小时并在此期间反复重试。Amazon Kinesis Streams 和 Amazon DynamoDB Streams 中的事件会反复重试,直到 Lambda 函数成功或数据过期。Amazon Kinesis 和 Amazon DynamoDB Streams 会保留数据 24 小时。

问:默认数量限制是否适用于每个函数级别?

不是,默认的数量限制只在账户级别应用。

问:如果 Lambda 函数在处理事件时发生故障会怎样?

如遇故障,进行同步调用的 Lambda 函数会返回异常信息。异步调用的 Lambda 函数将至少重试 3 次。Amazon Kinesis Streams 和 Amazon DynamoDB Streams 中的事件会反复重试,直到 Lambda 函数成功或数据过期。Kinesis Streams 和 DynamoDB Streams 会至少保留数据 24 个小时。

问:如果 Lambda 函数调用用尽了策略规定的次数会怎么样?

当超过策略针对异步调用规定的重试次数时,您可以配置一个放置此事件的“死信队列”(DLQ);如果尚未配置 DLQ,此事件可能会被拒绝。当超过策略针对基于流的调用规定的重试次数时,数据可能已失效,因而遭到拒绝。

问:我可以将哪些资源配置为 Lambda 函数的死信队列?

您可以将 Amazon SQS 队列或 Amazon SNS 主题配置为您的死信队列。

安全性与访问控制

问:如何允许 Amazon Lambda 函数访问其他 亚马逊云科技资源?

您可以使用 IAM 角色授予 Lambda 函数相应的权限,以访问其他资源。Amazon Lambda 在执行您的 Lambda 函数的同时承担该角色,因此您可以对该服务可使用的 亚马逊云科技资源保持完整、安全的控制。请访问设置 Amazon Lambda,了解有关角色的更多信息。

问:如何控制哪些 Amazon S3 存储桶可以调用哪些 Amazon Lambda 函数?

当您配置 Amazon S3 存储桶向 Amazon Lambda 函数发送消息时,将创建一条资源策略规则用于访问权限授予。请访问 Lambda 开发人员指南,详细了解针对 Lambda 函数的资源策略和访问控制。

问:如何控制 Amazon Lambda 函数可以轮询哪个 Amazon DynamoDB 表或 Amazon Kinesis 流?

访问控制管理是通过 Lambda 函数的角色实现的。分配给 Lambda 函数的角色还决定了 Amazon Lambda 可以代表其进行轮询的资源。请访问 Lambda 开发人员指南,了解更多信息。

问:我是否可以使用 Amazon Lambda 函数访问 Amazon VPC 后端的资源?

可以。您可以访问 Amazon VPC 后端的资源。

问:如何启用和禁用针对 Lambda 函数的 VPC 支持?

要启用 VPC 支持,您需要在单个 VPC 中指定一个或多个子网,并在函数配置中指定一个安全组。要禁用 VPC 支持,您需要更新函数配置并为子网和安全组指定空列表。您可以使用 Amazon API、CLI 或 Amazon Lambda 管理控制台更改这些设置。

问:一个 Lambda 函数是否可以访问多个 VPC?

不可以。Lambda 函数只能访问一个 VPC。如果指定多个子网,则所有子网都必须位于同一个 VPC 中。您可以通过在 VPC 之间建立对等连接来连接到其他 VPC。

问:一个 VPC 中的 Lambda 函数是否还能够访问 Internet 和 亚马逊云科技服务终端节点?

在默认配置下,配置为可访问特定 VPC 中资源的 Lambda 函数将无法访问 Internet。如果您需要访问外部终端节点,则需要在 VPC 中创建 NAT,以转发相应流量并将安全组配置为允许这些出站流量。

Java 中的 Amazon Lambda 函数

问:如何使用 Java 代码编译我的 Amazon Lambda 函数?

您可以使用 Maven 或 Gradle 等标准工具编译 Lambda 函数。您的构建过程应模拟编译任何 Java 代码的同一构建过程,这取决于 Amazon SDK。在源文件上运行 Java 编译器工具,并在类路径上包含 Amazon SDK 1.9 或更高版本,以及可传递的依赖关系。有关更多详细信息,请参阅我们的文档

问:Lambda 用于执行函数的 JVM 环境是什么?

Lambda 提供了 openjdk 1.8 的 Amazon Linux 版本。

Node.js 中的 Amazon Lambda 函数

问:能否将资源包与 Amazon Lambda 配合使用?

能。您可以使用 NPM 资源包和自定义的资源包。

问:我能否使用以 Node.js 编写的 Amazon Lambda 函数执行其他程序?

能。Lambda 的内置沙盒可以让您运行批处理 (“shell”) 脚本、其他语言运行时、实用程序例程和可执行文件。

问:是否可以使用带有以 Node.js 编写的 Amazon Lambda 函数的本地模块?

能。您上传的 ZIP 文件可以包含任何静态连接的本机模块,动态连接的模块同样如此,动态模块用指向您的 Lambda 函数根目录的根路径编译。

问:我能否使用以 Node.js 编写的 Amazon Lambda 执行二进制?

能。您可以使用 Node.js 的 child_process 命令来执行您在函数中包含的二进制文件或任何向函数开放的 Amazon Linux 中的可执行文件。另外,还有多个打包命令行二进制代码的 NPM 资源包,如 node-ffmpeg。

问:如何部署以 Node.js 编写的 Amazon Lambda 函数代码?

要部署以 Node.js 编写的 Lambda 函数,仅需将 Javascript 代码和依赖库打包为 ZIP 文件。您可以从您的本地环境上传 ZIP 包,或指定 ZIP 文件所在的 Amazon S3 位置。有关更多详细信息,请参阅我们的文档

Python 中的 Amazon Lambda 函数

问:能否将 Python 程序包与 Amazon Lambda 配合使用?

能。您可以使用 pip 安装所需的任意 Python 程序包。

以 C# 编写的 Amazon Lambda 函数

问:如何打包和部署以 C# 编写的 Amazon Lambda 函数?

通过在“Solution Explorer”中选择“Publish to Amazon Lambda”(发布到 Amazon Lambda),您可以使用 Visual Studio IDE 来创建 C# Lambda 函数。或者,您还可以在安装 [# Lambda CLI 工具补丁] 的 dotnet CLI 上直接运行“dotnet lambda publish”命令,这将会创建 C# 源代码的 ZIP、所有的 NuGet 依赖项以及您自己发布的 DLL 程序集,并使用运行时参数“dotnetcore1.0”自动将其上传到 Amazon Lambda。

其他主题

问:Amazon Lambda 支持哪些版本的 Amazon Linux、Node.js、Python、JDK、.NET Core、SDK 及其他库?

您可以点击此处查看受支持的版本列表。

问:我能否更改 Amazon Linux 或任何语言运行时的版本?

不能。Amazon Lambda 向该服务的所有用户提供单一版本的操作系统和语言运行时。

问:如何记录和审核对 Amazon Lambda API 进行的调用?

Amazon Lambda 与 Amazon CloudTrail 集成。Amazon CloudTrail 可以记录日志文件并将其提供给 Amazon S3 存储桶,用于说明账户的 API 使用情况。

适用于 Amazon Lambda 的 Amazon EFS

问:什么是适用于 Amazon Lambda 的 Amazon EFS?

借助适用于 Amazon Lambda 的 Amazon Elastic File System,客户可以安全地读取、写入和保留几乎任何规模的大量数据。之前,开发人员在他们的函数中添加了代码,将数据从 S3 或数据库下载到本地临时存储,限于 512MB。借助适用于 Lambda 的 EFS,开发人员无需编写代码即可将数据下载到临时存储中进行处理。

问:如何设置适用于 Lambda 的 Amazon EFS?

开发人员可以使用控制台、CLI 或 SDK 轻松地将现有 EFS 文件系统连接到 Lambda 函数中的载入点。首次配置函数时,将自动装入文件系统,并可供函数代码使用。要了解更多信息,请参阅文档。

问:在使用 Amazon EFS 文件系统之前,是否需要使用 VPS 设置配置函数?

是。Amazon EFS 的挂载目标与 VPC 中的子网相关联。需要配置 Amazon Lambda 函数才能访问该 VPC。 

问:哪些人应该使用适用于 Lambda 的 Amazon EFS?

使用适用于 Lambda 的 EFS 是构建机器学习应用程序、加载大型参考文件或模型、处理或备份大量数据、托管 web 内容或开发内部构建系统的理想选择。客户还可以利用 Lambda 对 EFS 的访问,在有状态微服务体系结构中保持调用之间的状态,或者在无服务器应用程序和基于实例或容器的应用程序之间共享文件。

问:数据在传输过程中会加密吗?

是。传输中的数据加密使用行业标准的传输层安全性 (TLS) 1.2 对 Amazon Lambda 函数和 Amazon EFS 文件系统之间发送的数据进行加密。

问:静态数据是否会加密?

客户可以预置 Amazon EFS 来加密静态数据。静态数据加密在写入时以透明方式进行加密,在读取时以透明方式进行解密,因此您无需修改应用程序。加密密钥由 Amazon Key Management Service (KMS) 管理,无需构建和维护安全密钥管理基础设施。

问:适用于 Lambda 的 Amazon EFS 如何收取费用?

使用适用于 Lambda 的 Amazon EFS 无任何额外费用。客户为 Amazon Lambda 和 Amazon EFS 支付标准价。当在同一可用区中使用 Lambda 和 EFS 时,客户不需要为数据传输付费。但是,如果使用 VPC 对等连接跨账户访问,则会产生数据传输费用。要了解更多信息,请参阅定价

Lambda Extensions

问:什么是 Amazon Lambda Extensions?

Amazon Lambda Extensions(预览版)使您可以将 Lambda 与您喜欢的工具进行集成,用于监视、可观察性、安全性和治理。Extensions 使您和您首选的工具供应商可以插入 Lambda 的生命周期,并更深入地集成到 Lambda 执行环境中。

问:Lambda Extensions 如何工作?

Extensions 是在 Lambda 的执行环境中运行的伴随进程,Lambda 的执行环境是函数代码执行的地方。此外,它们可以在函数调用之外运行,即它们在函数初始化之前启动,与函数并行运行,可以在函数执行完成之后运行,也可以在 Lambda 服务关闭执行环境之前运行。

问:如何安装和管理 Lambda Extensions?

您有多种方式来部署 Extensions,使用 Layers、基于使用控制台的一个或多个 Lambda 函数、CLI,或者,CloudFormation、Amazon Serverless Application Model 和 Terraform 等基础设施即代码工具。要开始使用,请访问文档。在预览期间,每个函数最多可以运行 10 个 Extensions。

问:哪些运行时可以与 Amazon Lambda Extensions 配合使用?

Extensions 可以与以下运行时搭配使用:.NET Core 3.1 (C#/PowerShell) (dotnetcore3.1)、Custom runtime (provided)、Custom runtime on Amazon Linux 2 (provided.al2)、Java 11 (Corretto) (java11)、Java 8 (Corretto) (java8.al2)、Node.js 12.x (nodejs12.x)、Node.js 10.x (nodejs10.x)、Python 3.8 (python3.8)、Python 3.7 (python3.7)、Ruby 2.7 (ruby2.7)、Ruby 2.5 (ruby2.5)。Lambda Extensions 及其扩展的函数可以使用不同的运行时。

问:Extensions 是否计入部署程序包限制?

是的,该函数和所有 Extensions 的总解压缩大小不能超过解压缩部署程序包 250MB 的大小限制。

问:使用扩展会对性能产生影响吗?

扩展可能会影响功能的性能,因为它们与函数共享 CPU、内存和存储等资源,并且因为扩展是在函数代码之前初始化的。例如,如果扩展执行计算密集型操作,由于扩展和函数代码共享相同的 CPU 资源,您可能会看到函数的执行时间增加。

您可以使用 ExtensionDurationOverhead 指标来衡量函数执行后扩展所花费的额外时间,还可以使用 MaxMemoryUsed 指标来衡量所用内存的增加。要了解特定扩展的影响,您还可以使用 Duration 指标。请访问 Lambda 开发人员文档,了解更多信息。

问:使用 Lambda Extensions 如何收费?

Extensions 与 Lambda 函数使用相同的计费模式。将 Lambda 函数与扩展一起使用时,您需要为服务的请求,以及用于运行代码和所有扩展的合并计算时间付费(以 100 毫秒为增量)。将根据现有的 Lambda 持续时间定价,向您收取计算时间费用。请参阅 Amazon Lambda 定价,了解详细信息。

Lambda 生命周期由三个不同的阶段组成:“init”,即 Amazon Lambda 初始化函数、依赖项和扩展;“invoke”,即 Lambda 响应触发器而执行函数和扩展代码;以及“shut down”,函数执行完成后,但扩展代码仍然可以执行。请参阅关于 Lambda 执行环境的文档,详细了解 Lambda 生命周期。

注意:此预览版发布时的一个已知问题是,您只需要为 Lambda 生命周期的“invoke”阶段所用的计算时间付费。

尽管第三方产品需要付费,但安装 Extensions 没有额外的费用。请访问第三方供应商网站,了解详情。

问:我是否可以创建自己的自定义 Lambda Extensions?

可以,需要使用 Amazon Lambda Runtime Extensions API。查看文档,了解更多信息。

问:启用预置并发时,扩展如何工作?

预置并发保持函数初始化,并做好准备在不到 100 毫秒的时间内响应。预置并发启用后,还将初始化扩展,并将其做好准备,与函数代码一起执行。

问:Amazon Lambda 是否支持高级矢量扩展 2(AVX2)?

支持,Amazon Lambda 支持高级矢量扩展 2(AVX2)指令集。要详细了解如何编译应用程序代码以将此指令集作为目标,从而提高性能,请访问 Amazon Lambda 开发人员文档

问:扩展具有哪些权限?

由于 Extensions 的执行环境与 Lambda 函数相同,它们可以访问与该函数相同的资源,并且函数和扩展共享权限,因此它们共享凭据、角色和环境变量。Extensions 具有对函数代码的只读访问权限,并且可以在 /tmp 中进行读写。

了解有关 Amazon Lambda 定价的更多信息

访问定价页面

预期用途和限制

使用本服务需遵守 亚马逊云科技 客户协议

关闭
1010 0766
由光环新网运营的
北京区域
1010 0966
由西云数据运营的
宁夏区域
关闭
由光环新网运营的
北京区域
由西云数据运营的
宁夏区域