- 计算›
- AWS Lambda›
- 常见问题
AWS Lambda 常见问题
页面主题
一般性问题一般性问题
问:什么是 AWS Lambda?
问:什么是无服务器计算?
无服务器计算让您可以在不考虑服务器的情况下构建并运行应用程序和服务。使用无服务器计算,您的应用程序仍在服务器上运行,但所有服务器管理工作均由 AWS 负责。无服务器计算的核心是 AWS Lambda,这项服务可使您无需预置或管理服务器即可运行代码。
问:哪些事件可以触发 AWS Lambda 函数?
有关事件源的完整列表,请参阅我们的文档。
问:什么时候应该使用 AWS Lambda 与 Amazon EC2?
Amazon Web Services 提供一组计算服务以满足各种需求。
Amazon EC2 具有范围广泛的实例类型,以及自定义操作系统、网络和安全设置以及整个软件堆栈的选项,可提供灵活性,从而让您能够将现有的应用程序轻松迁移到云中。使用 Amazon EC2,您将负责预置容量、监控服务器队列的运行状况和性能,并设计容错性和可扩展性。AWS Elastic Beanstalk 提供易用的服务,供您部署和扩展 Web 应用程序,您可以在其中保留对底层 EC2 实例的所有权和完整控制权。Amazon EC2 Container Service 是一项可扩展的管理服务,支持 Docker 容器,允许您轻松地在 Amazon EC2 实例的托管集群上运行分布式应用程序。
AWS Lambda 可用于依照对事件的响应轻松执行代码,如 Amazon S3 存储桶的更改、Amazon DynamoDB 表的更新或您的应用程序或设备生成的自定义事件。利用 Lambda,您不必预置您自己的实例;Lambda 会代您执行所有的运行和管理活动,包括容量预置、监控服务器队列运行状况、向底层计算资源应用安全补丁、部署您的代码、在前端运行 Web 服务以及监控和记录您的代码。AWS Lambda 为您的代码提供轻松的扩展和高可用性,从而无需您做额外努力。
问:什么类型的代码可在 AWS Lambda 上运行?
问:AWS Lambda 支持哪些语言?
问:能否访问 AWS Lambda 运行所在的基础设施?
问:AWS Lambda 如何隔离我的代码?
问:AWS Lambda 如何保护我的代码安全?
问:哪些 AWS 地区提供 AWS Lambda 服务?
请参阅 AWS 全球基础设施区域表。
AWS Lambda 函数
问:什么是 AWS Lambda 函数?
问:AWS Lambda 是否会再使用函数实例?
为了提高性能,AWS Lambda 可以选择保留您的函数实例,将其再用于服务后续请求,而不是创建一个新副本。要了解有关 Lambda 如何重复使用函数实例的更多信息,请访问我们的文档。您的代码不应假设此操作总是发生。
问:如果需要在磁盘上为 AWS Lambda 函数留下暂存空间,会发生什么?
您可以为每个 Lambda 函数配置其自己的短暂存储(介于 512MB 与 10240MB 之间,以 1MB 为增量)。短暂存储在每个函数的 /tmp 目录中均可使用。
每个函数都能免费使用 512MB 的存储空间。使用超过 512MB 的短暂存储配置函数时,将会根据配置的存储量和函数运行的时间计费,以 1 毫秒为增量来计量。相比之下,在美国东部(俄亥俄)区域,AWS Fargate 短暂存储价格为每小时每 GB 0.000111 美元,或每月每 GB 0.08 美元。美国东部(俄亥俄)的 Amazon EBS gp3 存储卷定价为每月每 GB 0.08 美元。AWS Lambda 短暂存储定价为每秒每 GB 0.0000000309 美元,或每小时每 GB 0.000111 美元和每月每 GB 0.08 美元。要了解更多信息,请参阅 AWS Lambda 定价。
问:如何配置我的应用程序以使用 AWS Lambda 短暂存储?
问:AWS Lambda 短暂存储是否加密?
问:可以使用哪些指标来监控我的 AWS Lambda 短暂存储使用量?
您可以使用 AWS CloudWatch Lambda Insight 指标来监控短暂存储使用量。要了解详情,请参阅 AWS CloudWatch Lambda Insights 文档。
问:什么时候应该为我的无服务器应用程序使用 Amazon S3、Amazon EFS 或 AWS Lambda 短暂存储?
如果您的应用程序需要耐用的持久性存储,请考虑使用 Amazon S3 或 Amazon EFS。如果您的应用程序需要在单一函数调用中存储代码所需的数据,请考虑使用 AWS Lambda 短暂存储作为暂时性缓存。要详细了解,请参阅在 Web 应用程序中选择 AWS Lambda 数据存储选项。
问:在为我的函数启用预置并发时是否可以使用短暂存储?
问:如何配置我的应用程序以使用 AWS Lambda 短暂存储?
问:AWS Lambda 短暂存储是否加密?
问:可以使用哪些指标来监控我的 AWS Lambda 短暂存储使用量?
您可以使用 AWS CloudWatch Lambda Insight 指标来监控短暂存储使用量。要了解详情,请参阅 AWS CloudWatch Lambda Insights 文档。
问:AWS Lambda 函数为什么必须是无状态的?
问:能否在 AWS Lambda 函数代码中使用线程和进程?
问:哪些限制适用于 AWS Lambda 函数代码?
问:如何使用 Lambda 控制台创建 AWS Lambda 函数?
如果您正在使用 Node.js 或 Python,则可以使用 AWS Lambda 控制台中的代码编辑器来编写函数代码,该编辑器支持编写和测试函数,并在类似 IDE 的稳健环境中查看函数执行的结果。前往控制台以开始。
您也可以将代码(以及任何依赖库)打包为 ZIP 并使用 AWS Lambda 控制台从您的本地环境上传或指定 ZIP 文件所在的 Amazon S3 位置。上传的内容必须不大于 50MB (压缩过的)。您可以使用 AWS Eclipse 插件以 Java 编写和部署 Lambda 函数。您可以使用 Visual Studio 插件以 C# 和 Node.js 制作和部署 Lambda 函数。
问:如何使用 Lambda CLI 创建 AWS Lambda 函数?
您可以将代码(以及任何依赖库)打包为 ZIP 并使用 AWS CLI 从您的本地环境上传或指定 ZIP 文件所在的 Amazon S3 位置。上传的内容必须不大于 50MB (压缩过的)。请访问 Lambda 入门指南以开始使用。
问:AWS Lambda 是否支持环境变量?
符合。使用 AWS Lambda 控制台、命令行界面或软件开发工具包,即可轻松创建和修改环境变量。要了解有关环境变量的更多信息,请参阅该文档。
问:能否在环境变量中存储敏感信息?
对于敏感信息(如数据库密码),我们建议您使用 AWS Key Management Service 进行客户端加密,并将生成的值作为加密文字存储在您的环境变量中。您需要在 AWS Lambda 函数代码中包含逻辑才能解密这些值。
问:如何管理我的 AWS Lambda 函数?
您可以使用 Lambda API 或控制台调整和保护与您的 Lambda 函数相关联的资源。要了解更多信息,请参阅文档。
问:能否跨函数共享代码?
可以,您可以将任何代码(框架、软件开发工具包、库等)打包为 Lambda Layer,并在多个函数之间轻松进行管理和共享。
问:如何监控 AWS Lambda 函数?
AWS Lambda 会通过 Amazon CloudWatch 报告实时指标,代您自动监控 Lambda 函数,指标包括请求总数、账户级别和函数级别并发使用情况、延迟、出错率和请求调用。通过 Amazon CloudWatch 控制台或 AWS Lambda 控制台,可以查看每一个 Lambda 函数的统计信息。您还可以在您的 Lambda 函数中调用第三方监控 API。
请访问排查 CloudWatch 指标问题了解更多信息。使用 Lambda 的内建指标会依照 AWS Lambda 的标准费率计费。
问:如何对 AWS Lambda 函数的故障进行故障排除?
AWS Lambda 与 Amazon CloudWatch logs 自动集成,对每个 Lambda 函数创建一个日志组并提供基本的应用程序生命周期事件日志条目,包括记录该函数每次使用时所消耗的资源。您可以轻松将额外的日志语句插入到代码中。您还可以在 Lambda 函数中调用第三方日志记录 API。请访问排查 Lambda 函数问题了解更多信息。将按照 Amazon CloudWatch 日志费率计费。
问:如何扩展 AWS Lambda 函数?
问:如何将计算资源分配至 AWS Lambda 函数?
在 AWS Lambda 资源模型中,您可以选择用于函数的内存量,这会分配等比例的 CPU 计算能力和其他资源。例如,选择 256MB 的内存时,分配至您的 Lambda 函数的 CPU 功率约是请求 128MB 内存时的两倍,并且是选择 512MB 内存时的一半。要了解更多信息,请参阅我们的功能配置文档。
您可以将内存从 128MB 设置为 10,240MB。
问:应何时使用内存超过 3008MB 的 AWS Lambda 函数?
问:AWS Lambda 函数的执行需要多长时间?
问:使用 AWS Lambda 函数将如何付费?
AWS Lambda 按使用量收费。请参阅 AWS Lambda 定价页面,了解详细信息。
问:我能否通过计算类节省计划节省 AWS Lambda 成本?
问:AWS Lambda 是否支持版本控制?
符合。默认情况下,每个 AWS Lambda 函数拥有单一的当前版本的代码。Lambda 函数客户端可调用特定的版本或获取最新的实施。请阅读我们有关 Lambda 函数版本控制的文档。
问:上传代码后,AWS Lambda 函数需要准备多久进行调用?
问:能否使用自己的支持的库版本?
问:分层定价如何运作?
AWS Lambda 为超过特定阈值的每月按需函数持续时间,提供优惠的定价层。分层定价适用于在 x86 和 Arm 架构上运行的函数。Lambda 定价层适用于账户内,同一区域中采用相同架构(分别为 x86 或 Arm)所运行函数的每月累积按需持续时间。如果您在 AWS Organizations 中使用整合计费,则定价层将适用于跨组织的所有账户,在相同区域,采用相同架构运行的函数的每月累计持续时间。例如,如果您在美国东部(俄亥俄州)区域运行 x86 Lambda 函数,您将为在该区域前 60 亿 GB 秒/月的每 GB 秒支付 0.0000166667 美元,为后 90 亿 GB 秒/月的每 GB 秒支付 0.0000150000 美元,并为每月超过 150 亿 GB 秒/月的每 GB 秒支付 0.0000133334 美元。请求、预配置并发和预配置并发持续时间的定价保持不变。有关更多信息,请参阅 AWS Lambda 定价
问:我是否可以同时利用分层定价和计算类节省计划?
符合。属于您每小时节省计划承诺内的 Lambda 使用量是按适用的 CSP 费率和折扣计费。此承诺未涵盖的剩余使用量将按照您的每月累计函数持续时间所属级别对应的费率进行计费。
使用 AWS Lambda 处理 AWS 事件
问:什么是事件源?
问:哪些事件源可用于 AWS Lambda?
有关事件源的完整列表,请参阅我们的文档。
问:事件在 AWS Lambda 中如何表示?
事件以事件输入参数的形式传输到 Lambda 函数中。对于事件在其中批量到达的事件源,如 Amazon SQS、Amazon Kinesis 和 Amazon DynamoDB Streams,根据您请求的批量大小,事件参数可能在单次调用中就包含多个事件。要了解 Amazon S3 事件通知的更多信息,请访问配置 Amazon S3 事件通知。要了解有关 Amazon DynamoDB Streams 的更多信息,请访问 DynamoDB 流开发人员指南。要了解有关使用 Amazon SNS 调用 Lambda 函数的更多信息,请访问 Amazon SNS 开发人员指南。有关 Amazon Cognito 事件的更多信息,请访问 Amazon Cognito。有关 AWS CloudTrail 日志和跨 AWS 服务审计 API 调用的更多信息,请参阅 AWS CloudTrail。
问:如何使用 AWS Lambda 函数对 Amazon S3 存储桶中的更改作出响应?
问:如何使用 AWS Lambda 函数对 Amazon DynamoDB 表中的更新作出响应?
问:如何使用 AWS Lambda 函数处理 Amazon Kinesis 流中的记录?
问:AWS Lambda 如何处理来自 Amazon Kinesis 流和 Amazon DynamoDB 流的数据?
问:为了满足我的分析需求,我应该如何在 AWS Lambda 和 Amazon Kinesis Data Analytics 之间进行选择?
AWS Lambda 允许您在短时间内(最多不超过 15 分钟),在单个逻辑分区(如一个分片)上对 Amazon Kinesis 或 Amazon DynamoDB Streams 中的数据执行基于时间的聚合(如计数、最大值、总和、平均值等)。这使您可以选择为基于事件的应用程序轻松设置简单的分析,而不会增加架构的复杂性,因为您的业务和分析逻辑可以位于同一个函数中。Lambda 允许根据事件时间戳,在最多 15 分钟的滚动窗口内进行聚合。Amazon Kinesis Data Analytics 允许您构建更复杂的分析应用程序,以支持灵活的处理选择和强大的容错能力,只需进行一次精确的处理,而不会重复,并且可以跨多个逻辑分区对整个数据流执行分析。借助 KDA,您可以使用事件时间或处理时间分析多种类型的聚合窗口(滚动窗口、交错窗口、滑动窗口、会话窗口)中的数据。
AWS Lambda | Amazon KDA | |
---|---|---|
滚动窗口 | 是 | 是 |
交错窗口 | 否 | 是 |
滑动窗口 | 否 | 是 |
会话窗口 | 否 | 是 |
丰富 | 否 | 是 |
联合输入表和参考表 | 否 | 是 |
拆分输入流 | 否 | 是 |
一次处理 | 否 | 是 |
最大时间窗口 | 15 分钟 | 没有限制 |
聚合范围 | 分区/分片 | 流 |
时间语义 | 事件时间 | 事件时间、处理时间 |
问:如何使用 AWS Lambda 函数响应 Amazon Simple Notification Service (SNS) 发出的通知?
问:如何使用 AWS Lambda 函数响应 Amazon Simple Email Service (SES) 发送的电子邮件?
问:如何使用 AWS Lambda 函数响应 Amazon CloudWatch 警报?
首先应配置警报,使其发送 Amazon SNS 通知。然后从 AWS Lambda 控制台中选择一个 Lambda 函数并将其与 Amazon SNS 主题进行关联。请参阅 Amazon CloudWatch 开发人员指南,了解有关设置 Amazon CloudWatch 警报的更多信息。
问:如何使用 AWS Lambda 函数响应由 Amazon Cognito 管理的用户或设备数据的变更?
您可以从 AWS Lambda 控制台中选择一个函数,当与 Amazon Cognito 身份池关联的任何数据集进行同步时,触发这个函数。还可通过 AWS 开发工具包和 CLI 实现这一功能。请访问 Amazon Cognito,了解关于使用 Amazon Cognito 在用户设备间共享和同步数据的更多信息。
问:应用程序如何直接触发 AWS Lambda 函数?
您可以通过 AWS Lambda 的调用 API 使用自定义事件调用 Lambda 函数。只有该函数的所有者或获得该所有者授权的另一个 AWS 账户才能调用该函数。请访问《Lambda 开发人员指南》了解更多信息。
问:调用 AWS Lambda 函数响应事件的延迟如何?
问:如何使用 AWS Lambda 创建移动后端?
上传需要 AWS Lambda 执行的代码,然后使用 AWS 移动软件开发工具包中的 AWS Lambda 软件开发工具包从移动应用程序中对其进行调用。您可以进行直接(同步)调用来检索或实时查看数据,也可以进行异步调用。您还可以使用 Amazon API Gateway 定义自定义 API,并通过兼容 REST 的任何客户端调用您的 Lambda 函数。要了解有关 AWS Mobile SDK 的更多信息,请访问 AWS Mobile SDK 页面。要了解有关 Amazon API Gateway 的更多信息,请访问 Amazon API Gateway 页面。
问:如何通过 HTTPS 调用 AWS Lambda 函数?
问:AWS Lambda 函数如何根据发起请求的设备和应用程序对其行为进行自定义?
问:AWS Lambda 函数如何根据应用程序最终用户的身份对其行为进行个性化设置?
问:如何使用 AWS Lambda 创建 Alexa 技能?
问:如果函数在处理事件时发生故障会怎么样?
使用 AWS Lambda 构建应用程序
问:什么是无服务器应用程序?
问:如何部署和管理无服务器应用程序?
问:如何发现 AWS 社区开发的现有无服务器应用程序?
您可以使用 AWS Serverless Application Repository 从 AWS 社区的开发人员、公司和合作伙伴发布的无服务器应用程序集合中进行选择。找到应用程序后,您可以直接从 Lambda 控制台配置和部署该应用程序。
问:如何自动部署无服务器应用程序?
您可以使用 AWS CodePipeline 和 AWS CodeDeploy 自动执行无服务器应用程序的发布过程。CodePipeline 是一项持续交付服务,借助该服务,您能够为发布无服务器应用程序所需的步骤构建模型、使之可视化并自动执行这些步骤。CodeDeploy 为基于 Lambda 的应用程序提供了部署自动化引擎。您可以使用 CodeDeploy 根据既定最佳实践方法 (如 Canary 和线性部署) 编排部署,帮助您建立必要的防护以验证新部署的代码是否安全、稳定并已经准备好完全发布到生产环境。
要了解有关无服务器 CI/CD 的更多信息,请参阅我们的文档。
问:如何开始构建无服务器应用程序?
首先,请访问 AWS Lambda 控制台,并下载我们的蓝图之一。您下载的文件将包含一份 AWS SAM 文件(定义了您应用程序中的 AWS 资源)和一份 .ZIP 文件(包含您函数的代码)。然后,您可以使用 AWS CloudFormation 命令打包和部署刚下载的无服务器应用程序。有关更多详细信息,请访问我们的文档。
问:如何协调多个 AWS Lambda 函数之间的调用?
您可以使用 AWS Step Functions 以特定顺序来协调一系列 AWS Lambda 函数。您可以按顺序调用多个 Lambda 函数,然后将一个函数的输出传递到另一个函数,也可以进行并行调用,Step Functions 将在执行期间为您保持状态。
问:如何排除无服务器应用程序的故障?
您可以启用 Lambda 函数利用 AWS X-Ray 进行跟踪的功能,方式为将 X-Ray 的权限添加到 Lambda 函数的执行角色,然后将函数的“跟踪模式”更改为“激活”。 针对 Lambda 函数启用 X-Ray 之后,AWS Lambda 会将调用函数产生的 Lambda 服务开销方面的跟踪信息发送到 X-Ray。这样,您就能了解 Lambda 服务开销、函数启动时间和函数执行时间等信息。此外,您还可以将 X-Ray 开发工具包纳入 Lambda 部署程序包中,以便创建自己的跟踪段、为跟踪添加注释或者查看从 Lambda 函数进行的下游调用的跟踪段。X-Ray 开发工具包目前支持 Node.js 和 Java。请访问对基于 Lambda 的应用程序进行故障排除了解更多信息。我们会按 AWS X-Ray 的费率收取费用。
问:我可以构建连接到关系数据库的无服务器应用程序吗?
符合。您可以构建高度可扩展、安全、基于 Lambda 的无服务器应用程序,这些应用程序使用 Amazon RDS 代理(一种高度可用的数据库代理)连接到关系数据库,该代理可管理与关系数据库的数千个并发连接。当前,RDS 代理支持 MySQL 和 Aurora 数据库。您可以通过 Amazon RDS 控制台或 AWS Lambda 控制台开始使用 RDS 代理。使用 RDS 代理中完全托管的连接池的无服务器应用程序将根据 RDS 代理定价进行计费。
问:AWS SAM 如何获得许可证?
该规范在 Apache 2.0 下是开源性质的,允许您及他人采用构建、部署、监控和管理工具以及通过商业版许可证将 AWS SAM 融合到这些工具中。您可以在此处访问 GitHub 上的 AWS SAM 存储库。
容器映像支持
问:什么是 AWS Lambda 的容器映像支持?
问:如何使用 AWS Lambda 的容器映像支持?
问:支持哪些容器映像类型?
问:可以使用哪些基础映像?
问:可以使用哪些容器工具将函数打包和部署为容器映像?
问:作为容器映像部署的函数可以使用哪些 AWS Lambda 功能?
问:AWS Lambda 是否会对我部署的容器映像进行修补和更新?
问:使用 ZIP 存档创建的函数与使用容器映像创建的函数之间有什么不同?
使用 ZIP 存档创建的函数与使用容器映像创建的函数之间有三个主要区别:
- 使用 ZIP 存档创建的函数解压缩后的最大代码包大小为 250 MB,而使用容器映像创建的函数的最大映像大小为 10 GB。
- Lambda 使用 Amazon ECR 作为定义为容器映像的函数的底层代码存储,因此当底层映像从 ECR 中删除时,函数可能无法调用。
- ZIP 函数会自动打补丁,以获得最新的运行时安全性和漏洞修复。定义为容器映像的函数是不可更改的,客户要对其函数中打包的组件负责。客户可以利用 AWS 提供的基础映像,AWS 会使用最新可用的补丁定期更新这些映像,以确保安全性和进行漏洞修复。
问:定义为 zip 的函数和定义为容器映像的函数在性能上是否有差异?
问:将 Lambda 函数部署为容器映像将如何收费?
将函数打包为容器映像并部署到 AWS Lambda 中无需额外付费。当您调用您部署为容器映像的函数时,您需要为请求和执行时间支付常规价格。要了解更多信息,请访问 AWS Lambda 定价。 在 Amazon ECR 中存储容器映像存储将按标准 ECR 价格收取费用。要了解更多信息,请访问 Amazon ECR 定价。
问:什么是 Lambda Runtime Interface Emulator (RIE)?
Lambda Runtime Interface Emulator 是 Lambda Runtime API 的代理,它允许客户在本地测试打包为容器映像的 Lambda 函数。它是一个轻量级的 Web 服务器,可以将 HTTP 请求转换为 JSON 事件,并模拟 Lambda Runtime API。它允许您使用熟悉的工具,例如 cURL 和 Docker CLI(当测试打包为容器映像的函数时),在本地测试您的函数。它还简化了在其他计算服务上运行应用程序的过程。您可以在容器映像中包括 Lambda Runtime Interface Emulator,使其以原生方式接受 HTTP 请求,而不是部署到 Lambda 所需的 JSON 事件。该组件不会模拟 Lambda 的协调器或安全和身份验证配置。Runtime Interface Emulator 在 GitHub 上开源。在本地计算机上下载并安装 Runtime Interface Emulator,即可开始使用。
问:为什么在本地测试期间需要 Lambda Runtime Interface Emulator(RIE)?
问:我可以用该模拟器在本地测试哪些函数行为?
问:Runtime Interface Emulator (RIE) 如何帮助我在其他计算服务上运行我的 Lambda 兼容映像?
客户可以将 Runtime Interface Emulator 添加为容器映像的接入点,也可以将其打包为 Sidecar,以确保容器映像现在接受 HTTP 请求而不是 JSON 事件。这简化了在其他计算服务上运行其容器映像所需的更改。客户将负责确保他们遵循所选环境的所有安全性、性能和并发最佳实践。RIE 已预先打包到 AWS Lambda 提供的映像中,并在 AWS SAM CLI 中默认可用。基础映像提供商可以使用文档为其基础映像提供相同的体验。
问:如何将现有的容器化应用程序部署到 AWS Lambda?
如果满足以下要求,则可以将容器化应用程序部署到 AWS Lambda:
- 容器映像必须实施 Lambda 运行时 API。我们对一组软件包(运行时界面客户端 (RIC))进行了开源,这些软件包实施 Lambda 运行时 API,让您可以无缝扩展您的首选基础映像,以与 Lambda 兼容。
- 容器映像必须能够在只读文件系统上运行。您的函数代码可以访问 512 MB 的可写/tmp 目录存储。如果使用的映像需要可写的根目录,请将其配置为写入 /tmp 目录。
- 默认的 Lambda 用户可以读取执行函数代码所需的文件。Lambda 定义了具有最低权限的默认 Linux 用户,该用户遵循安全最佳实践。您需要验证您的应用程序代码不依赖于其他 Linux 用户限制执行的文件。
- 它是基于 Linux 的容器映像。
AWS Lambda SnapStart
问: 什么是 AWS Lambda SnapStart?
适用于 Java 函数的 AWS Lambda SnapStart 可使函数启动性能提高多达 10 倍。对于按需函数,初始化阶段(指 AWS Lambda 加载函数代码并初始化外部依赖项的阶段)是导致启动延迟的最大贡献因素,并且会在第一次调用时发生。使用 Lambda SnapStart 后,Lambda 在发布函数版本时会提前初始化一次性初始化函数代码,而不是在首次调用函数时才初始化。然后,Lambda 会拍摄快照并缓存初始化执行环境的内存和磁盘状态。当您调用函数时,并且随着函数纵向扩展时,Lambda 会从缓存快照恢复函数,而不是从头初始化函数。
问:如何配置 Lambda 函数以使用 Lambda SnapStart?
Lambda SnapStart 是一种简单的函数级配置功能,可以使用 Lambda API、AWS 管理控制台、AWS 命令行界面 (CLI)、AWS SDK、AWS 云开发工具包(CDK)、AWS CloudFormation 和 AWS 无服务器应用程序模型 (SAM) 为新的和现有的 Java 功能进行配置。当您配置 Lambda SnapStart 时,此后发布的每个函数版本都将受益于 Lambda SnapStart 带来的启动性能改进。要了解有关 Lambda SnapStart 的更多信息,请参阅此文档。
问:如何在 Lambda SnapStart 和预配置并发(PC)之间进行选择?
问:Lambda SnapStart 支持哪些运行时系统?
Lambda SnapStart 支持 Java 11 运行时。未来版本的 Java 在发布后也将受到支持。有关 Lambda 支持的所有运行时,请参阅 Lambda 运行时文档。
问:可以在同一函数上同时启用 Lambda SnapStart 和 PC 吗?
问:我可以使用虚拟私有云(VPC)配置 Lambda SnapStart 函数吗?
符合。您可以配置 Lambda SnapStart 函数来访问虚拟私有云(VPC)中的资源。有关如何使用 VPC 配置函数的更多信息,请参阅 Lambda 文档。
问:我可以在 x86 和 Arm 架构上配置 Lambda SnapStart 吗?
问:我可以使用 Amazon Elastic File System(EFS)启用 Lambda SnapStart 吗?
问:我可以使用更大的超过 512 MB 的短暂存储(/tmp)启用 Lambda SnapStart 吗?
问:缓存和从快照恢复的过程是否需要引入软件兼容性考虑因素?
问:我可以在创建快照之前或从快照恢复函数时执行自己的代码吗?
符合。您可以在创建快照(设置检查点)之前和使用运行时挂钩恢复快照之后实施自己的软件逻辑。要了解更多信息,请参阅 Lambda SnapStart 文档。
问:Lambda SnapStart 是否会收费?
不会。启用 Lambda SnapStart 没有额外的成本。我们将根据当前的 Lambda 定价以及您函数的请求数量和执行代码的持续时间向您收费。持续时间收费适用于在函数和运行时挂钩的处理程序中运行的代码以及在处理程序外部声明的初始化代码。请注意,AWS Lambda 可能会定期使用安全补丁回收执行环境,并重新运行初始化代码。有关更多详细信息,请参阅 Lambda 编程模型文档。
问:已发布函数版本的快照在 Lambda SnapStart 中会缓存多长时间?
问:如何加密 Lambda SnapStart 创建的初始化执行环境的快照?
快照默认使用 Lambda 服务拥有和管理的客户唯一的 AWS Key Management Service (KMS) 密钥进行加密。客户还可以使用客户拥有和管理的 KMS 密钥加密快照。
问:我的代码初始化可以使用 Lambda SnapStart 运行多长时间有时间限制吗?
预置并发
问:什么是 AWS Lambda 预配置并发?
问:如何设置和管理预配置并发?
您可以通过 AWS 管理控制台、Lambda API、AWS CLI 和 AWS CloudFormation 在函数上配置并发。利用预配置并发功能的最简单方法是使用 AWS Auto Scaling。您可以使用 Application Auto Scaling 来配置计划,或者让 Auto Scaling 随着需求的变化自动实时调整预配置并发量。有关预配置并发的更多信息,请参阅文档。
问:如果要使用预配置并发,是否需要更改代码?
问:如何为预配置并发收费?
预配置并发添加了“预配置并发”的定价维度,用于使函数保持初始化状态。启用后,您需要为配置的并发量以及配置所用的时间付费。如果在配置了预配置并发的情况下执行函数,您还需要为请求和执行持续时间付费。要了解有关预配置并发定价的更多信息,请参阅 AWS Lambda 定价。
问:我应何时使用预配置并发?
问:如果函数收到的调用超过配置的预配置并发量,会怎么样?
由 Graviton 2 处理器提供支持的 AWS Lambda 函数
问:什么是由 Graviton 2 处理器提供支持的 AWS Lambda 函数?
问:我为什么要使用由 Graviton 2 处理器提供支持的 AWS Lambda 函数?
问:我要如何配置函数以使其在 Graviton2 处理器上运行?
问:我要如何使用由 Graviton2 处理器提供支持的函数部署我的应用程序?
问:应用程序能够同时使用由 Graviton2 处理器和 x86 处理器提供支持的函数吗?
问:我是否需要一个基于 Arm 的开发机器以在本地创建、构建并测试由 Graviton2 处理器支持的函数?
Python、Java 及 Node 等解释语言通常不需要重新编译,除非您的代码参考库使用的架构包含特别组件。在这种情况下,您需要针对 arm64 提供库。有关更多详细信息,请参阅 AWS Graviton 入门页面。非解释语言将需要您编译代码以适用于 arm64。但更多的现代编译者将生成适用于 arm64 的编译后代码,您需要将其部署到基于 arm 的环境进行测试。要了解有关使用 Graviton2 支持的 Lambda 函数的详情,请参阅文档。
问:AWS Lambda 是否支持多架构容器镜像?
问:我能否针对由 AWS Graviton2 处理器支持的函数创建 AWS Lambda 层?
问:在 Graviton2 处理器上运行的 Lambda 函数支持哪种语言和运行时?
在启动时,客户可以使用 Python、Node.js、Java、Ruby、Net Core、Custom Runtime (provided.al2) 和 OCI Base 镜像。要了解更多信息,请参阅 AWS Lambda 运行时系统。
问:由 AWS Graviton2 处理器提供支持的 AWS Lambda 函数的定价策略是什么? AWS Lambda 免费套餐适用于由 Graviton2 支持的函数吗?
问:是在 Graviton2 处理器还是 x86 处理器上运行我的函数,我该如何选择?
需要根据工作负载的情况具体分析,我们建议客户先行测试自己的函数,以确定可能带来的性价比提升。为此,我们建议使用 AWS Lambda Power Tuning 工具。我们建议先从 Web 和移动后端、数据以及流式传输处理开始,以测试您的工作负载,了解是否存在提升性价比的可能。
Amazon EFS for AWS Lambda
问:什么是 Amazon EFS for AWS Lambda?
问:如何设置 Amazon EFS for Lambda?
开发人员可以使用控制台、CLI 或 SDK 通过 EFS 接入点轻松地将现有 EFS 文件系统连接到 Lambda 函数。首次调用该函数时,文件系统将自动安装并可供函数代码使用。有关更多信息,请参阅本文档。
问:在使用 Amazon EFS 文件系统之前,是否需要使用 VPC 设置配置函数?
问:谁应该使用 Amazon EFS for Lambda?
问:我的数据在传输过程中会被加密吗?
问:我的数据在静态时会被加密吗?
问:Amazon EFS for AWS Lambda 如何收费?
使用 Amazon EFS for AWS Lambda 不收取额外费用。客户为 AWS Lambda 和 Amazon EFS 支付标准价格。在同一可用区中使用 Lambda 和 EFS 时,不向客户收取数据传输费用。但是,如果他们使用 VPC 对等连接进行跨账户访问,则将产生数据传输费用。要了解更多信息,请参阅定价。
问:可以将多个 Amazon EFS 文件系统与 AWS Lambda 函数关联吗?
问:可以跨多重函数、容器和实例使用同一个 Amazon EFS 文件系统吗?
Lambda 函数 URL
问:AWS Lambda 函数是否支持 HTTP(S) 终端节点?
问:如何为我的函数配置 Lambda 函数 URL?
您可以通过 AWS 管理控制台、AWS Lambda API、AWS CLI、AWS CloudFormation 和 AWS Serverless Application Model 配置函数 URL。可以在函数的 $LATEST 非限定版本或任何函数别名上启用函数 URL。要了解有关配置函数 URL 的更多信息,请参阅文档。
问:如何保护 Lambda 函数 URL?
问:如何使用 Lambda 函数 URL 调用我的函数?
问:Lambda 函数 URL 是否适用于函数版本和别名?
符合。可以在函数或函数别名上启用 Lambda 函数 URL。如果未指定别名,则默认情况下 URL 将指向 $LATEST。函数 URL 不能针对单独的函数版本。
问:我可以为 Lambda 函数 URL 启用自定义域吗?
问:Lambda 函数 URL 是否可用于调用 VPC 中的函数吗?
问:使用 Lambda 函数 URL 的定价是多少?
使用函数 URL 不产生任何额外费用。您只需支付 AWS Lambda 的标准价格。要了解更多信息,请参阅 AWS Lambda 定价。
Lambda@Edge
问:什么是 Lambda@Edge?
使用 Lambda@Edge,您可以在全球的 AWS 站点运行代码,而无需预置或管理服务器,从而以最低的网络延迟响应最终用户。您只需将 Node.js 或 Python 代码上传到 AWS Lambda,然后配置要触发的函数,用于响应 Amazon CloudFront 请求(即,发出查看器请求、向原点转发请求或从原点接收到请求时以及刚好在响应最终用户之前)。当收到内容请求后,代码即可开始在全球的 AWS 站点执行,并按照全球的 CloudFront 请求量进行扩展。有关更多信息,请参阅我们的文档。
问:如何使用 Lambda@Edge?
要使用 Lambda@Edge,您仅需将代码上传到 AWS Lambda,然后关联要触发的函数版本,用于响应 Amazon CloudFront 请求。您的代码必须符合 Lambda@Edge 服务限制。目前,Lambda@Edge 支持使用 Node.js 和 Python 进行 CloudFront 事件的全局调用。有关更多信息,请参阅我们的文档。
问:应该在何时使用 Lambda@Edge?
Lambda@Edge 针对最终查看器在全球范围内分布的延迟敏感型使用案例进行了优化。您可以在 CloudFront 边缘站点、函数和请求中查看制定决策所需的全部信息。这意味着,对于那些您需要决定如何基于用户特征(例如,位置、客户端设备等)提供内容的使用案例,您现在可以从距离用户较近的位置执行和处理,而无需重新路由到集中式服务器。
问:可以部署现有的 Lambda 函数进行全局调用吗?
如果函数满足 Lambda@Edge 服务要求和限制,则可以将现有的 Lambda 函数与 CloudFront 事件关联,进行全局调用。有关如何更新函数属性的更多信息,请参阅此处。
问:哪些 Amazon CloudFront 事件可用于触发我的函数?
在响应以下 Amazon CloudFront 事件时,会自动触发您的函数:
- 查看器请求 – 当 Internet 上的最终用户或设备向 CloudFront 发出 HTTP(S) 请求,且请求到达离该用户最近的边缘站点时,将触发此事件。
- 查看者响应 – 当边缘站点处的 CloudFront 服务器已准备好响应发出请求的最终用户或设备时,将触发此事件。
- 来源请求 – 当 CloudFront 边缘服务器尚未将所请求的对象置入其缓存,且查看器请求已准备好发送给后端来源 Web 服务器(如 Amazon EC2、Application Load Balancer 或 Amazon S3)时,将触发此事件。
- 来源响应 – 当边缘站点处的 CloudFront 服务器收到后端来源 Web 服务器的响应时,将触发此事件。
问:使用 AWS Lambda@Edge 与在 Amazon API Gateway 之后使用 AWS Lambda 有何区别?
区别在于 API Gateway 和 Lambda 是区域性服务。使用 Lambda@Edge 和 Amazon CloudFront,您可以根据最终查看器所在的位置跨多个 AWS 位置执行逻辑。
可扩展性和可用性
问:AWS Lambda 函数的可用性如何?
问:当改动代码或配置时,AWS Lambda 函数还可以使用吗?
问:对于一次可以执行的 AWS Lambda 函数的数量有没有限制?
问:如果账户超出并发执行默认限制数量会怎么样?
超过最大并发执行限制数量时,同步调用的 AWS Lambda 函数会返回一条节流错误信息(429 错误代码)。异步调用的 Lambda 函数能够承受一定范围内的流量突增,持续时间约为 15 至 30 分钟。一旦超过此限制,后续传入的事件将因达到限制而被拒绝。如果调用的 Lambda 函数是用于响应 Amazon S3 事件,则被 AWS Lambda 拒绝的事件可能被 S3 保留 24 小时并在此期间反复重试。Amazon Kinesis Streams 和 Amazon DynamoDB 流中的事件会反复重试,直到 Lambda 函数成功或数据过期。Amazon Kinesis 和 Amazon DynamoDB 流会将数据保留 24 小时。
问:默认的最大并发执行限制数量是否应用于每个函数级?
默认的最大并发执行限制数量适用于账户级别。但是,您也可以对单个函数设置限制(请访问此处了解有关预留并发的信息)。
问:我的 AWS Lambda 函数扩展速度有多快?
每个同步调用的 Lambda 函数可以以每 10 秒钟最多可同时执行 1000 次的速度进行扩展。虽然 Lambda 的扩展速率适用于大多数用例,但它特别适合那些流量突发可预测或不可预测的用例。例如,对于绑定 SLA 的数据处理,可预测且快速的扩展才能满足处理需求。同样,提供突发新闻文章或闪购活动可能会在短时间内带来不可预测的流量水平。Lambda 的扩展速率无需额外的配置或工具,即可为这类用例提供便利。此外,并发扩展限制是函数级限制,这意味着您账户中的每个函数都独立于其他函数进行扩展。
问:如果 Lambda 函数在处理事件时发生故障会怎么样?
问:可以将哪些资源配置为 Lambda 函数的死信队列?
问:如果 Lambda 函数调用用尽了策略规定的次数会怎么样?
当超过策略针对异步调用规定的重试次数时,您可以配置一个放置此事件的“死信队列”(DLQ);如果尚未配置 DLQ,此事件可能会被拒绝。当超过策略针对基于流的调用规定的重试次数时,数据可能已失效,因此已被拒绝。
安全性与访问控制
问:如何允许 AWS Lambda 函数访问其他 AWS 资源?
您可以使用 IAM 角色授予 Lambda 函数相应的权限,以访问其他资源。AWS Lambda 在执行您的 Lambda 函数的同时承担该角色,因此您可以对该服务可使用的 AWS 资源保持完整、安全的控制。请访问设置 AWS Lambda 了解有关角色的更多信息。
问:如何控制哪些 Amazon S3 存储桶可以调用哪些 AWS Lambda 函数?
当您配置 Amazon S3 存储桶向 AWS Lambda 函数发送消息时,将创建一条资源策略规则用于权限授予。请访问 Lambda 开发人员指南,了解有关 Lambda 函数的资源策略和访问控制的更多信息。
问:如何控制 AWS Lambda 函数可以轮询哪种 Amazon DynamoDB 表或 Amazon Kinesis 流?
对访问控制的管理通过 Lambda 函数的角色实现。分配给 Lambda 函数的角色同时决定了 AWS Lambda 可以代表其进行轮询的资源。请访问《Lambda 开发人员指南》了解更多信息。
问:如何控制 AWS Lambda 函数可以轮询的 Amazon SQS 队列?
问:如何通过 AWS Lambda 函数访问 Amazon VPC 中的资源?
您可以通过在函数配置中指定子网和安全组来启用 Lambda 函数对 VPC 中资源的访问。在默认配置下,配置为可访问特定 VPC 中资源的 Lambda 函数将无法访问互联网。要为这些功能授予互联网权限,请使用互联网网关。默认情况下,Lambda 函数通过 IPv4 与双堆栈 VPC 中的资源进行通信。您可以将函数配置为通过 IPv6 访问双栈 VPC 中的资源。有关使用 VPC 配置的 Lambda 函数的更多详细信息,请参阅使用 VPC 的 Lambda 私有联网。
问:什么是 AWS Lambda 的代码签名?
AWS Lambda 的代码签名提供了信任和完整性控件,使您可以验证只有来自经批准的开发人员的未经修改的代码才会部署在您的 Lambda 函数中。您可以使用完全托管代码签名服务 AWS Signer 对代码构件进行数字签名,并配置 Lambda 函数以在部署时验证签名。AWS Lambda 的代码签名目前仅适用于打包为 ZIP 存档的函数。
问:如何创建经过数字签名的代码构件?
您可以通过 AWS Signer 控制台、Signer API、SAM CLI 或 AWS CLI 使用签名配置文件创建数字签名的代码构件。要了解更多信息,请参阅 AWS Signer 文档。
问:如何配置 Lambda 函数以启用代码签名?
问:AWS Lambda 会在部署时执行哪些签名检查?
AWS Lambda 可在部署时执行以下签名检查:
• 签名损坏 - 如果代码构件在签名后被更改,则会发生这种情况。
• 签名不匹配 - 如果代码构件由未经批准的签名配置文件签名,则会发生这种情况。
• 过期签名 - 如果签名超过了配置的有效期,则会发生这种情况。
• 撤销签名 - 如果签名配置文件拥有者撤销了签名作业,则会发生这种情况。
要了解更多信息,请参阅 AWS Lambda 文档。
问:是否可以为现有函数启用代码签名?
问:使用 AWS Lambda 的代码签名是否需要额外的费用?
使用 AWS Lambda 的代码签名时,不需要额外的费用。您只需支付 AWS Lambda 的标准价格。要了解更多信息,请参阅定价。
高级日志记录控制
问:Lambda 支持哪些高级日志记录控制?
为了在默认情况下为您提供简化和增强的日志记录体验,AWS Lambda 提供了高级日志记录控制,例如能够以 JSON 结构化格式原生捕获 Lambda 函数日志、在不进行任何代码更改的情况下控制 Lambda 函数日志的日志级别筛选,以及自定义 Lambda 将日志发送到的 Amazon CloudWatch 日志组。
问:我可以使用高级日志记录控制做什么?
您可以采用 JSON 结构化格式捕获 Lambda 函数日志,而不必使用自己的日志记录库。JSON 结构化日志使搜索、筛选和分析大量日志条目变得更加容易。您无需更改任何代码即可控制 Lambda 函数日志的日志级别筛选,这使您能够在调试和排查错误时选择 Lambda 函数所需的日志记录粒度级别,而无需筛选大量日志。您还可以设置 Lambda 将日志发送到哪个 Amazon CloudWatch 日志组,从而更轻松地将来自应用程序内多个函数的日志聚合到一处。然后,您可以在应用程序级别将安全、治理和保留策略应用于日志,而不是单独应用于每个功能。
问:如何使用高级日志记录控制?
您可以使用 AWS Lambda API、AWS Lambda 控制台、AWS CLI、AWS 无服务器应用程序模型(SAM)和 AWS CloudFormation 为 Lambda 函数指定高级日志记录控制。要了解更多信息,请访问高级日志记录控制的发布博文或 Lambda 开发人员指南。
问:我是否可以使用自己的日志记录库为我的 Lambda 函数生成 JSON 结构化日志?
是的,您可以使用自己的日志记录库生成 JSON 结构化格式的 Lambda 日志。为了确保您的日志记录库与 Lambda 的原生 JSON 结构化日志记录功能无缝协作,Lambda 不会对您的函数生成的任何已进行 JSON 编码的日志进行双重编码。您还可以使用 Powertools for AWS Lambda 库以 JSON 结构化格式捕获 Lambda 日志。
问:高级日志记录控制如何收费?
在 Lambda 上使用高级日志记录控制不收取额外费用。您仍然需要为 Amazon CloudWatch Logs 摄取和存储的 Lambda 日志付费。有关日志定价详细信息,请参阅 CloudWatch 定价页面。
以 Java 编写的 AWS Lambda 函数
问:如何使用 Java 代码编译 AWS Lambda 函数?
您可以使用 Maven 或 Gradle 等标准工具编译 Lambda 函数。构建过程应模拟编译任何 Java 代码的同一构建过程,这取决于 AWS 开发工具包。在源文件上运行您的 Java 编译器工具并在类路径上包含 AWS 开发工具包 1.9 或更高版本,以延续依赖性。有关更多详细信息,请参阅我们的文档。
问:Lambda 用于执行函数的 JVM 环境是什么?
以 Node.js 编写的 AWS Lambda 函数
问:能否将资源包与 AWS Lambda 配合使用?
符合。您可以使用 NPM 资源包和自定义的资源包。单击此处了解更多信息。
问:能否使用以 Node.js 编写的 AWS Lambda 函数执行其他程序?
符合。Lambda 的内建沙盒可以让您运行批处理(“shell”)脚本、其他语言运行时、实用程序例程和可执行文件。单击此处了解更多信息。
问:是否可以使用带有以 Node.js 编写的 AWS Lambda 函数的本地模块?
符合。您上传的 ZIP 文件可以包含任何静态连接的本机模块,动态连接的模块同样如此,动态模块用指向您的 Lambda 函数根目录的根路径编译。单击此处了解更多信息。
问:能否使用以 Node.js 编写的 AWS Lambda 执行二进制?
符合。您可以使用 Node.js 的 child_process 命令来执行您在函数中包含的二进制文件或任何向函数开放的 Amazon Linux 中的可执行文件。另外,还有多个打包命令行二进制代码的 NPM 程序包,如 node-ffmpeg。单击此处了解更多信息。
问:如何部署以 Node.js 编写的 AWS Lambda 函数代码?
要部署以 Node.js 编写的 Lambda 函数,仅需将您的 Javascript 代码和依赖库打包为 ZIP。您可以从您的本地环境上传 ZIP,或指定 ZIP 文件所在的 Amazon S3 位置。有关更多详细信息,请参阅我们的文档。
以 Python 编写的 AWS Lambda 函数
问:能否将 Python 资源包与 AWS Lambda 配合使用?
以 C# 编写的 AWS Lambda 函数
问:如何打包和部署以 C# 编写的 AWS Lambda 函数?
以 PowerShell 编写的 AWS Lambda 函数
问:如何部署以 PowerShell 编写的 AWS Lambda 函数代码?
PowerShell Lambda 部署包是一个 ZIP 文件,其中包含 PowerShell 脚本、PowerShell 脚本所需的 PowerShell 模块以及托管 PowerShell Core 所需的程序集。然后,您可以使用可从 PowerShell 库安装的 AWSLambdaPSCore PowerShell 模块来创建 PowerShell Lambda 部署包。
以 Go 编写的 AWS Lambda 函数
问:如何打包和部署以 Go 编写的 AWS Lambda 函数?
通过 AWS CLI 或 Lambda 控制台以 ZIP 文件的形式上传 Go 可执行项目并选择 go1.x 运行时。通过 Lambda,您可以使用 Go 的原生工具构建并打包代码。有关更多详细信息,请参阅我们的文档。
以 Ruby 编写的 AWS Lambda 函数
问:如何部署以 Ruby 编写的 AWS Lambda 函数代码?
其他主题
问:AWS Lambda 支持哪些版本的 Amazon Linux、Node.js、Python、JDK、.NET Core、SDK 及其他库?
您可以单击此处查看受支持的版本列表。
问:能否更改 Amazon Linux 版本或任何语言运行时?
不能。AWS Lambda 向该服务的所有用户提供单一版本的操作系统和托管语言运行时。您可以在 Lambda 中使用您自己的语言运行时。
问:如何记录和审核对 AWS Lambda API 进行的调用?
问:如何协调多个 Lambda 函数之间的调用?
您可以使用 Amazon Step Functions 来协调多个 Lambda 函数之间的调用。您可以按顺序调用多个 Lambda 函数,然后将一个函数的输出传递到另一个函数,也可以进行并行调用。请参阅我们的文档了解更多详细信息。