AWS Lambda 常见问题
一般性问题
- 问:什么是 AWS Lambda?
- 通过 AWS Lambda,无需配置或管理服务器即可运行代码。您只需按消耗的计算时间付费 – 代码未运行时不产生费用。借助 Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,而且全部无需管理。只需上传您的代码,Lambda 会处理运行和扩展高可用性代码所需的一切工作。您可以将您的代码设置为自动从其他 AWS 服务触发,或者直接从任何 Web 或移动应用程序调用。
- 问:什么是无服务器计算?
- 借助无服务器计算,您无需考虑服务器,即可构建和运行应用程序与服务。借助无服务器计算,您的应用程序仍在服务器上运行,但所有服务器管理工作均由 AWS 来完成。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 构建以下内容:可以检索并转换 Amazon DynamoDB 中数据的移动后端,当对象上传到 Amazon S3 以后对其进行压缩或转换的处理程序,用于任意 Amazon Web Service 的 API 调用的审核和报告功能,使用 Amazon Kinesis 进行的流数据免服务器处理。
- 问:AWS Lambda 支持哪些语言?
- AWS Lambda 支持用 Node.js (JavaScript)、Python、Java (兼容 Java 8) 和 C# (.NET Core) 编写的代码。您的代码中可包含现有的库,甚至是本机库。有关使用 Node.js、Python、Java 和 C# 的信息,请参阅我们的文档。
- 问:我能否访问 AWS Lambda 运行所在的基础设施?
- 否。AWS Lambda 会代您运行计算基础设施,从而执行运行状况检查、应用安全补丁和执行其他例行维护。
- 问:AWS Lambda 如何隔离我的代码?
- 每个 AWS Lambda 函数都运行在其自己的环境中,有其自己的资源和文件系统视图。AWS Lambda 使用与 Amazon EC2 相同的技术在基础设施和执行级别上提供安全性和隔离。
- 问:AWS Lambda 如何保护我的代码安全?
- AWS Lambda 在 Amazon S3 中存储代码并在静态下加密代码。AWS Lambda 在使用您的代码时执行额外的完整性检查。
AWS Lambda 函数
- 问:AWS Lambda 函数是什么?
- 您在 AWS Lambda 上运行的代码以“Lambda 函数”上传。每个函数都有相关的配置信息,如其名称、描述、入口点和资源要求。代码必须以“无状态”样式编写,即应假设与底层计算基础设施无密切关系。本地文件系统访问、子过程和类似的项目可能不会超出请求的使用寿命,且任何持续状态都应存储在 Amazon S3、Amazon DynamoDB 或另一个可用 Internet 的存储服务中。Lambda 函数可包含库,甚至是本机库。
- 问:AWS Lambda 是否会再使用函数实例?
- 为了提高性能,AWS Lambda 可以选择保留您的函数实例,将其再用于服务后续请求,而不是创建一个新副本。您的代码不应假设此操作总是发生。
- 问:如果我需要为我的 AWS Lambda 函数在磁盘上留下暂存空间会发生什么?
- 每个 Lambda 函数都会在其自己的目录/tmp 目录中接收到 500MB 的非持久性磁盘空间。
- 问:AWS Lambda 函数为什么必须是无状态的?
- 保持函数的无状态性可使 AWS Lambda 按需要尽可能多地启动函数副本,从而扩展到传入事件的速率。由于 AWS Lambda 的编程模式是无状态的,因此您的代码可以通过调用其他 Web 服务,如 Amazon S3 或 Amazon DynamoDB,来访问有状态的数据。
- 问:我能否在我的 AWS Lambda 函数代码中使用线程和进程?
- 能。AWS Lambda 可使您使用正常的语言和操作系统功能,如创建额外的线程和进程。分配至 Lambda 函数的资源,包括内存、执行时间、磁盘和网络使用,都必须通过其使用的所有线程/进程进行共享。可以使用任意 Amazon Linux 支持的语言启动进程。
- 问:哪些限制适用于 AWS Lambda 函数代码?
- Lambda 尝试尽量不对正常的语言和操作系统活动施加限制,但有些活动仍被禁用:入站网络连接被 AWS Lambda 阻止;对于出站连接,只支持 TCP/IP 套接字;ptrace (调试) 系统调用受到限制。TCP 端口 25 流量同样受到限制,这是一项反垃圾邮件措施。
- 问:如何使用 Lambda 控制台创建 AWS Lambda 函数?
- 如果使用 Node.js 或 Python,您可以使用 AWS Lambda 控制台中的内联编辑器编写您的函数代码。前往控制台以开始操作。您也可以将代码 (以及任何依赖库) 打包为 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 函数?
- 您可以使用 AWS Lambda 控制台中的仪表板轻松列出、删除、更新和监控您的 Lambda 函数。您还可以使用 AWS CLI 和 AWS 软件开发工具包来管理您的 Lambda 函数。请访问 Lambda 开发人员指南了解更多信息。
- 问:如何监控 AWS Lambda 函数?
- AWS Lambda 会代您自动监控 Lambda 函数,从而通过 Amazon CloudWatch 实时报告指标,包括请求总数、延迟、出错率和节流请求。通过 Amazon CloudWatch 控制台或 AWS Lambda 控制台,可以查看每一个 Lambda 函数的统计信息。您还可以在您的 Lambda 函数中调用第三方监控 API。
- 问:如何对 AWS Lambda 函数的故障进行故障排除?
- AWS Lambda 与 Amazon CloudWatch 日志自动集成,对每个 Lambda 函数创建一个日志组并提供基本的应用程序生命周期事件日志条目,包括记录该函数每次使用时所消耗的资源。您可以轻松将额外的日志语句插入到代码中。您还可以在您的 Lambda 函数中调用第三方记录 API。
- 问:如何扩展 AWS Lambda 函数?
- 您不必扩展您的 Lambda 函数,AWS Lambda 会代您自动扩展它们。每当接收到您的函数的事件通知时,AWS Lambda 会在其计算舰队中快速定位空闲容量并运行您的代码。由于您的代码是无状态的,AWS Lambda 可以在需要时尽可能多地启动实例副本,而不会发生冗长的部署和配置延迟。函数的扩展方面没有基本限制。AWS Lambda 将动态分配容量以匹配传入事件的速率。
- 问:如何将计算资源分配至 AWS Lambda 函数?
- 在 AWS Lambda 资源模型中,您可以选择您想为函数分配的内存量,并按 CPU 功率和其他资源的比例进行分配。例如,选择 256MB 的内存分配至您的 Lambda 函数的 CPU 功率约是请求 128MB 内存的两倍,若选择 512MB 的内存,其分配的 CPU 功率约是一半。您可以在 128MB 到 1.5GB 的范围间以 64MB 的增量设置您的内存。
- 问:AWS Lambda 函数的执行需要多长时间?
- 对 AWS Lambda 进行的同步调用必须在 300 秒钟内执行完毕。默认的超时为 3 秒,但您可以将超时设置在 1 到 300 秒之间的任何值。
- 问:使用 AWS Lambda 函数时我将如何付费?
- AWS Lambda 按使用量收费。
- 问:AWS Lambda 是否支持版本控制?
- 是。默认情况下,每个 AWS Lambda 函数拥有单一的当前版本的代码。 Lambda 函数客户端可调用特定的版本或获取*新的实现。请阅读有关 Lambda 函数版本控制的文档。
- 问:上传我的代码后,AWS Lambda 函数需要准备多久进行调用?
- 部署时间根据代码大小的不同而不同,但 AWS Lambda 函数一般在上传后几秒钟内就能做好调用准备。
- 问:我能否使用自己的支持的库版本?
- 可以。您可以在其中包含自己的代码库的副本 (包括 AWS 软件开发工具包),以使用除 AWS Lambda 所提供的默认版本之外的版本。
使用 AWS Lambda 处理 AWS 事件
- 问:什么是事件源?
- 事件源是 AWS 服务或开发人员创建的应用程序,用于生成可触发 AWS Lambda 函数使其运行的事件。有些服务通过直接调用云函数 (例如 Amazon S3) 向 Lambda 发布这些事件。Lambda 也可以在未向 Lambda 发布事件的其他服务中轮询资源。例如,Lambda 可以从 Kinesis 数据流中拉取记录并为数据流中的每条消息执行 Lambda 函数。
- 通过登录到 Amazon S3 并使用 S3 存储桶通知,就可将 AWS CloudTrail 等其他很多服务简单地用作触发 AWS Lambda 函数的事件源。
- 问:如何在 AWS Lambda 中表示事件?
- 事件作为事件输入参数的形式传输到 Lambda 函数中。对于事件以批量方式到达的事件来源,例如 Amazon Kinesis 和 Amazon DynamoDB 流,事件参数可以在一个调用中包含多个事件,具体取决于请求的批量处理的大小。关于 Amazon S3 事件通知的更多信息,请访问配置 Amazon S3 事件通知。关于 Amazon DynamoDB 流的更多信息,请访问 DynamoDB 流开发人员指南。关于使用 Amazon SNS 调用 Lambda 函数的更多信息,请访问 Amazon SNS 开发人员指南。关于 Amazon Cognito 事件的更多信息,请访问 Amazon Cognito。关于 AWS CloudTrail 日志和跨 AWS 服务审核 API 调用的更多信息,请参见 AWS CloudTrail。
- 问:我如何对 Amazon S3 存储桶中的更改作出 AWS Lambda 函数响应?
- 您可以从 AWS Lambda 控制台中选择一个函数并将其与 Amazon S3 存储桶中的通知关联起来。或者,您可以使用 Amazon S3 控制台并配置存储桶的通知以发送到您的 AWS Lambda 函数。还可通过 AWS 软件开发工具包和 CLI 实现这一功能。
- 问:我如何对 Amazon DynamoDB 表中的更新作出 AWS Lambda 函数响应?
- 通过将 Lambda 函数订阅到与 DynamoDB 表格相关联的 DynamoDB 流,您可以对 DynamoDB 表格更新触发 Lambda 函数。您可以使用 Amazon DynamoDB 控制台、AWS Lambda 控制台或 Lambda 的 registerEventSource API 将 DynamoDB 流与 Lambda 函数关联起来。
- 问:如何使用 AWS Lambda 函数处理 Amazon Kinesis 流中的记录?
- 您可以从 AWS Lambda 控制台中选择一个 Lambda 函数并将其与属于相同账户的 Amazon Kinesis 流进行关联。还可通过 AWS 软件开发工具包和 CLI 实现这一功能。
- 问题:AWS Lambda 如何处理来自 Amazon Kinesis 流和 Amazon DynamoDB 流的数据?
- 发送到您的 AWS Lambda 功能的 Amazon Kinesis 和 DynamoDB 流记录将根据分片进行严格序列化。这意味着,如果您将两个记录放在同一个分片中,则 Lambda 保证将首先通过*条记录来调用您的 Lambda 功能,然后再通过第二条记录来调用。如果*条记录的调用超时,或者遇到任何其他错误,则 Lambda 将重试直至其成功 (或者记录达到其 24 小时过期时间),然后才会对下一条记录采取操作。无法保证不同分片之间记录的排序,并且每个分片的处理是平行进行的。
- 问:如何使用 AWS Lambda 函数响应 Amazon Simple Notification Service (SNS) 发出的通知?
- 您可以从 AWS Lambda 控制台中选择一个 Lambda 函数并将其与 Amazon SNS 主题进行关联。还可通过 AWS 软件开发工具包和 CLI 实现这一功能。
- 问:如何使用 AWS Lambda 函数响应 Amazon Simple Notification Service (SNS) 发出的通知?
- 在 Amazon SES 控制台中,您可以设置接收规则,以使 Amazon SES 将消息交付到 AWS Lambda 函数。还可通过 AWS 软件开发工具包和 CLI 实现这一功能。
- 问:如何使用 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 账户才能调用该函数。
- 问:调用 AWS Lambda 函数响应事件的延迟如何?
AWS Lambda 的设计可在若干毫秒内处理事件。当 Lambda 函数创建、更新后,或如果它*近未被使用,延迟都将立即升高。
- 问:我如何使用 AWS Lambda 创建移动后端?
- 您上传需要 AWS Lambda 执行的代码,然后使用 AWS 移动软件开发工具包中的 AWS Lambda 软件开发工具包从移动应用程序中对其进行调用。您可以进行直接 (同步) 调用来检索或实时查看数据,也可以进行异步调用。您也可以使用 Amazon API Gateway 定义自定义 API,并通过兼容 REST 的任何客户端调用您的 Lambda 函数。要详细了解 AWS 移动软件开发工具包,请访问 AWS Mobile SDK 页面。要详细了解 Amazon API Gateway,请访问 Amazon API Gateway 页面。
- 问:如何通过 HTTPS 调用 AWS Lambda 函数?
- 通过使用 Amazon API Gateway 定义自定义的 RESTful API,您可以通过 HTTPS 调用 Lambda 函数。这为您的函数提供了端点,这些函数可以响应 GET、PUT 和 POST 等 REST 调用。了解有关通过 Amazon API Gateway 使用 AWS Lambda 的更多信息
- 问:AWS Lambda 函数如何根据发起请求的设备和应用程序对其行为进行自定义?
- 当通过 AWS 移动软件开发工具包进行调用时,AWS Lambda 函数能自动通过“context”对象获得发起调用的设备和应用程序的深入洞见。
- 问:AWS Lambda 函数如何根据应用程序终端用户的身份对其行为进行个性化?
- 当应用程序使用 Amazon Cognito 身份时,终端用户可以使用各种公共登录供应商 (包括 Amazon、Facebook、Google) 及其他 OpenID Connect 兼容服务来对其进行验证。之后用户身份会自动加密并以 Amazon Cognito id 的形式呈送给 Lambda 函数,同时允许其访问 Amazon Cognito 中的用户数据,或作为密钥储存和检索 Amazon DynamoDB 或其他 web 服务中的数据。
- 问:如何使用 AWS Lambda 创建 Alexa 技能?
- AWS Lambda 与 Alexa 技能套件集成,后者是一个自助 API、工具、文档和代码示例集合,让您能够为 Alexa 轻松创建以语音为主的能力 (或“技能”)。您只需为新的 Alexa 技能上传 Lambda 函数代码,AWS Lambda 将完成剩余工作,包括执行代码以响应 Alexa 语音交互,并代表您自动管理计算资源。有关更多详细信息,请阅读 Alexa 技能套件文档。
- 问:如果我的函数在处理事件时发生故障会发生什么?
- 对于 Amazon S3 存储桶通知和自定义事件,AWS Lambda 将在您的代码发生错误条件或您超出服务或资源限制时尝试执行您的函数三次。对于 AWS Lambda 代您轮询的有序事件源,如 Amazon DynamoDB Streams 和 Amazon Kinesis 数据流,Lambda 将在发生开发人员代码错误时继续尝试执行,直到该数据过期为止。您可以通过 Amazon Kinesis 和 Amazon DynamoDB 控制台以及 AWS Lambda 为您的函数生成的 Amazon CloudWatch 指标监控进展情况。您还可以根据出错率或执行节流的频率来设置 Amazon CloudWatch 警报。
使用 AWS Lambda 构建应用程序
- 问:什么是无服务器应用程序?
- 基于 Lambda 的应用程序 (也被称作无服务器应用程序) 由通过事件触发的函数组成。典型的无服务器应用程序包含一个或多个通过事件 (如向 Amazon S3 上传对象、Amazon SNS 通知或 API 操作) 触发的函数。这些函数既可独立运行,也能利用其他资源 (如 DynamoDB 表或 Amazon S3 存储桶)。*基本的无服务器应用程序仅包含一个函数。
- 问:如何部署和管理无服务器应用程序?
- 您可以使用 AWS 无服务器应用程序模型 (AWS SAM) 部署和管理无服务器应用程序。AWS SAM 是一项规范,其中规定了在 AWS 上表达无服务器应用程序的规则。该规范当前与 AWS CloudFormation 使用的语法相同,因此本身在 AWS CloudFormation 中作为一组资源类型 (被称作“无服务器资源”) 就受支持。得力于这些资源,AWS 客户能够更轻松地使用 CloudFormation 通过现有 CloudFormation API 配置和部署无服务器应用程序。
- 问:如何自动部署无服务器应用程序?
- 您可以使用 CodePipeline 自动执行无服务器应用程序的发布过程。CodePipeline 是一项持续交付服务,借助该服务,您能够为发布应用程序所需的步骤构建模型、使之可视化并自动执行这些步骤。
- 问:如何开始构建无服务器应用程序?
- 首先,请访问 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 SDK 纳入 Lambda 部署程序包中,以便创建自己的跟踪段、为跟踪添加注释或者查看从 Lambda 函数进行的下游调用的跟踪段。X-Ray SDK 目前支持 Node.js 和 Java。请查看排除基于 Lambda 的应用程序的故障以便了解更多。我们会按 AWS X-Ray 的费率收取费用。
- 问:AWS SAM 如何获得许可证?
- 该规范在 Apache 2.0 下是开源性质的,允许您及他人采用构建、部署、监控和管理工具以及通过商业版许可证将 AWS SAM 融合到这些工具中。您可以在此处访问 GitHub 上的 AWS SAM 存储库。
扩展性和可用性
- 问:AWS Lambda 函数的可用性如何?
- AWS Lambda 旨在通过复制和冗余来向服务本身和其操作的 Lambda 函数提供高可用性。二者皆无维护窗口期或计划停机时间。
- 问:当我改动代码或配置时,AWS Lambda 函数还可以使用吗?
- 可以。当您更新 Lambda 函数时,会有短暂的窗口期,通常不到 1 分钟,在这期间请求将由旧版本函数或新版本函数实现。
- 问:对于一次可以执行的 AWS Lambda 函数的数量有没有限制?
- 没有。AWS Lambda 采用的设计可以支持大量函数实例并列运行。但是,AWS Lambda 对每个区域的每个账户的并发执行次数具有默认安全限制(请访问此处了解默认安全限制数量的信息)。如果您想申请提高可访问我们支持中心的限制数量,请单击“Open a new case”,然后发出服务限制提升请求。
- 问:如果账户超出并发执行绪默认限制数量会怎样?
- 如果超出限制,同步调用的 AWS Lambda 函数会返回一条节流错误信息 (429 错误代码)。异步调用的 Lambda 函数可以承受一定范围内的流量突增大约 15 到 30 分钟,之后再进来的事件将会以节流为理由遭到拒*。如果调用的 Lambda 函数是用于响应 Amazon S3 事件,则被 AWS Lambda 拒*的事件可能被 S3 保留 24 小时并在此期间反复重试。Amazon Kinesis 流和 Amazon DynamoDB 流中的事件会反复重试,直到 Lambda 函数成功或数据过期。Amazon Kinesis 和 Amazon DynamoDB 流会将数据保留 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 主题配置为您的死信队列。
安全性与访问控制
- 问:如何允许我的 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 可以代表其进行轮询的资源。
- 问:我是否可以使用 AWS Lambda 函数访问 Amazon VPC 后端的资源?
- 可以。您可以访问 Amazon VPC 后端的资源。
- 问:如何启用和禁用针对 Lambda 函数的 VPC 支持?
- 要启用 VPC 支持,您需要在单个 VPC 中指定一个或多个子网,并在配置函数时指定安全组。要禁用 VPC 支持,您需要更新函数配置并为子网和安全组指定空列表。您可以使用 AWS API、CLI 或 AWS Lambda 管理控制台更改这些设置。
- 问:一个 Lambda 函数是否可以访问多个 VPC?
- 不可以。Lambda 函数只能访问一个 VPC。如果指定多个子网,则所有子网都必须位于同一个 VPC 中。您可以通过在 VPC 之间建立对等连接来连接到其他 VPC。
- 问:一个 VPC 中的 Lambda 函数是否还能够访问 Internet 和 AWS 服务端点?
- 在默认配置下,配置为可访问特定 VPC 中资源的 Lambda 函数将无法访问 Internet。如果您需要访问外部端点,则需要在 VPC 中创建 NAT,以转发相应流量并将安全组配置为允许这些出站流量。
使用 Java 的 AWS Lambda 函数
- 问:我如何使用 Java 代码编译我的 AWS Lambda 函数?
- 您可以使用 Maven 或 Gradle 等标准工具编译 Lambda 函数。您的构建过程应模拟编译任何 Java 代码的同一构建过程,这取决于 AWS SDK。在源文件上运行您的 Java 编译器工具并在类路径上包含 AWS SDK 1.9 或更高版本,以延续依赖性。有关详细信息,请参阅我们的文档。
- 问:用于执行函数的 JVM 环境 Lambda 是什么?
- Lambda 提供 openjdk 1.8 的 Amazon Linux 版本。
- 问:我能否更改 Amazon Linux 或任何语言运行时的版本?
- 不能。AWS Lambda 向该服务的所有用户提供单一版本的操作系统和语言运行时。
- 问:如何记录和审核对 AWS Lambda API 进行的调用?
- AWS Lambda 与 AWS CloudTrail 集成。AWS CloudTrail 可以记录日志文件并将其提供给 Amazon S3 存储桶,用于说明账户的 API 使用情况。
- 问:我如何协调多个 Lambda 函数之间的调用?
- 您可以使用 Amazon Step Functions 来协调多个 Lambda 函数之间的调用。您可以按顺序调用多个 Lambda 函数,然后将一个函数的输出传递到另一个函数,