跳至主要内容

Amazon Lambda

Amazon Lambda 常见问题

一般性问题

全部打开

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

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

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

亚马逊云科技 提供一组计算服务以满足各种需求。

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 DynamoDB 中数据的移动后端、当对象上传到 Amazon S3 以后对其进行压缩或转换的处理程序、用于任意 Amazon Web Service 的 API 调用的审核和报告功能,以及使用 Amazon Kinesis 进行的流数据无服务器处理。

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

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

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

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

Amazon Lambda 函数

全部打开

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

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

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

您可以以 1MB 为增量,为每个 Lambda 函数配置 512MB 到 10240MB 之间的临时存储。临时存储可在每个函数的 /tmp 目录中找到。

每个函数均可使用 512MB 的存储空间,无需额外付费。使用超过 512MB 的临时存储空间配置函数时,将根据您配置的存储量和函数运行时长向您收费(以 1 毫秒为增量计量)。请参阅 Amazon Lambda 定价,了解详细信息。

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

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

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

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

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

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

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

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

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

在 Amazon Lambda 资源模型中,您可以选择您想为函数分配的内存量,并按 CPU 功率和其他资源的比例进行分配。例如,选择 256MB 的内存分配至您的 Lambda 函数的 CPU 功率约是请求 128MB 内存的两倍,若选择 512MB 的内存,其分配的 CPU 功率约是一半。您可以向函数分配介于 128MB 和 10,240MB 之间的任意内存量,以 1MB 为增量。

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

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

部署时间根据代码大小有所差异,但 Amazon Lambda 函数一般在上传后几秒钟内就能做好调用准备。

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

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

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

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

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

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

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

使用 Amazon Lambda 处理 Amazon 事件

全部打开

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

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

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

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

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

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

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

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

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

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

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

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

通过使用 Amazon API Gateway 定义自定义的 RESTful API,您可以通过 HTTPS 调用 Lambda 函数。这为您的函数提供了终端节点,这些函数可以响应 REST 调用(如 GET、PUT 和 POST)。请参阅有关通过 Amazon API Gateway 使用 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 命令打包和部署您刚下载的无服务器应用程序。有关更多详细信息,请访问我们的文档

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

预置并发

全部打开

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

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

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

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

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

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

可扩展性和可用性

全部打开

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

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

没有。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 函数将至少重试 3 次。Amazon Kinesis Streams 和 Amazon DynamoDB Streams 中的事件会反复重试,直到 Lambda 函数成功或数据过期。Kinesis Streams 和 DynamoDB Streams 会至少保留数据 24 个小时。

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

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

安全性与访问控制

全部打开

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

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

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

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

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

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

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

用 Java 编写的 Amazon Lambda 函数

全部打开

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

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

用 Node.js 编写的 Amazon Lambda 函数

全部打开

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

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

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

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

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

用 Python 编写的 Amazon Lambda 函数

全部打开

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

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

适用于 Amazon Lambda 的 Amazon EFS

全部打开

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

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

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

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

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

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

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

Lambda Extensions

全部打开

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

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

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

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 的总解压缩大小不能超过解压缩部署程序包 250MB 的大小限制。

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

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

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

Lambda 生命周期由三个不同的阶段组成:“init”,即 Amazon Lambda 初始化函数、依赖项和扩展;“invoke”,即 Lambda 响应触发器而执行函数和扩展代码;以及“shut down”,函数执行完成后,但扩展代码仍然可以执行,并且可能会持续高达 2 秒。您需要为用于在 Lambda 生命周期的所有三个阶段中运行扩展代码的计算事件付费。请参阅关于 Lambda 执行环境的文档,详细了解 Lambda 生命周期。

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

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

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

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

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

详细了解 Amazon Lambda 定价

访问定价页面

预期用途和限制

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