跳至主要内容

2026 年最常见的 20 道 AWS Lambda 面试题与答案

AWS Lambda 是一项无服务器计算服务,也是技术面试中日益常见的话题。无论您是云计算新手还是资深人士,掌握 AWS Lambda 都至关重要。
Zoumana Keita
Zoumana Keita

创建您的免费账户

实践并学习路径你的进步。

使用 Google 继续继续即表示您接受我们的 使用条款,我们的 隐私政策 ,并且您的数据存储在美国。

在众多需要掌握的 AWS 服务中,AWS Lambda 尤为关键——这是一项无服务器计算服务,可在事件触发时运行代码,并自动管理底层资源。

随着 Lambda 的普及,在技术面试中遇到 AWS Lambda 相关问题已非常常见。

本指南通过精选问答,帮您高效准备 AWS Lambda 面试。我们既涵盖基础知识,也深入高级与实战场景。

如果您想进一步学习 AWS,可查看这门课程:AWS Cloud Technology and Services。

为什么选择 AWS?

在进入面试问答前,了解为何 AWS Cloud 成为主流首选平台非常重要——这本身也可能成为面试问题。

先看下图:

来源(Statista)

该图展示了 2023 年第二季度全球云基础设施服务市场中 AWS 的领先地位。AWS 以 32% 的市场份额稳居第一,显著领先于其最接近的竞争对手 Microsoft Azure(22%)。虽然 Google Cloud(11%)和阿里云(4%)等其他主要厂商也有贡献,但与 AWS 和 Azure 相比份额相形见绌。

2023 年第二季度云基础设施服务创造的 650 亿美元总收入,进一步凸显了这一市场的重要性和财务体量。AWS 在该蓬勃发展的领域领跑,强化了其对寻求可靠、可扩展云解决方案的企业的战略价值。

如果您想了解不同云服务商的对比,请查看这份速查表:AWS、Azure 与 GCP 服务对比。

除财务层面的优势外,AWS 的吸引力还在于其广泛的服务选择、可靠性、可扩展性、全球覆盖、强大的安全性、持续创新与活跃的社区。多重因素叠加,使得 AWS 专业能力在科技行业备受青睐,为精通这一领先云平台的人才带来诸多职业机会。

下面我们来看一些面试问题!

基础类 AWS Lambda 面试题

从基础开始。无论您是初识 AWS Lambda,还是在复习,这些基础知识都将帮助您更深入理解 Lambda 的能力。

AWS Lambda 是一项无服务器计算服务,让您无需预置或管理服务器即可运行代码。Lambda 仅在需要时运行代码,并可自动扩展,从每天少量请求到每秒数千次请求。

Lambda 函数主要由以下部分构成:

  • Handler(处理程序): 函数的入口点,即代码中处理调用事件的方法。可将其视为 Lambda 代码的 "main" 函数。
  • Event(事件): 以 JSON 格式表示的输入数据,用于触发函数执行。它包含触发函数调用的相关信息。
  • Context(上下文): 包含函数运行环境信息的对象。包括函数名、版本、内存限制、请求 ID、剩余执行时间等。
  • Environment variables(环境变量): 可配置的键值对,无需修改代码即可调整 Lambda 函数行为。常用于存储 API 密钥、数据库凭据或其他设置。

Lambda 原生支持 Node.js、Python、Ruby、Java、Go、C# 和 PowerShell。也就是说,我们可以直接使用这些语言编写 Lambda 函数,无需额外设置。

此外,Lambda 允许使用自定义运行时,可将函数代码和依赖打包为容器镜像,从而几乎支持任意编程语言,便于我们选择最合适的工具。

创建 Lambda 函数有多种方式:

方法

说明

最适合的场景

Lambda 控制台

在浏览器编辑器中直接编写代码。

简单函数、快速测试

部署包

将代码和依赖打包为 ZIP 归档并上传。

较大项目、复杂函数

容器镜像

将函数打包为 Docker 容器镜像。

自定义运行时、特定配置

基础设施即代码

使用 AWS SAM、CloudFormation 或 CDK 以声明式代码定义函数与资源。

管理复杂的无服务器应用、自动化

调用 Lambda 函数的方式包括:

  1. 同步调用: 客户端等待函数完成并返回响应。
  2. 异步调用: 客户端无需等待响应——Lambda 在后台执行函数。
  3. 事件源映射: Lambda 自动轮询 DynamoDB、Kinesis 等服务,并基于事件调用函数。
  4. 其他方式: 包括通过 API Gateway、AWS SDK,或使用 Amazon EventBridge 定时触发。

中级 AWS Lambda 面试题

为 Lambda 代码打包依赖有几种方式:

  • 直接包含: 对于解释型语言,可将依赖文件与函数代码一起放入 .zip 部署包。
  • Lambda 层(Layers): 对于编译型语言或较大的依赖,可使用 Lambda 层将通用依赖单独打包并在函数间共享。
  • 容器镜像: 可将依赖与函数代码及自定义运行时一起打包进容器镜像。

优化 Lambda 函数有多种选择:

  1. 内存分配: 合理的内存大小是平衡成本与性能的关键。可使用 AWS Lambda Power Tuning 等工具寻找最优配置。
  2. 包体大小: 更小的函数包可缩短冷启动时间(函数首次调用的初始化时间)。通过移除不必要依赖与压缩代码来减小包体。
  3. Lambda SnapStart: 该特性为特定运行时预初始化函数环境,显著降低冷启动时间。
  4. 预置并发: 配置预置并发以保持函数实例“预热”,为关键工作负载提供稳定响应时间。
  5. 超时与并发限制: 设置合适的超时与保留并发,防止函数失控并维持稳定环境。

Lambda 会自动将指标发送到 Amazon CloudWatch,包括请求次数、延迟、错误率等。

我们可以使用 CloudWatch Logs 查看由函数代码与 Lambda 运行时生成的日志。

对于分布式 Lambda 应用的性能追踪与故障排查,我们可以使用 AWS X-Ray。

Lambda 扩展可帮助我们将函数与监控、可观测性、安全与治理工具集成,从而增强功能。

扩展可作为独立进程在执行环境中运行,用于采集诊断信息或将数据发送到自定义目的地。

示例包括用于指标与追踪的 Datadog 扩展,以及用于动态配置更新的 AWS AppConfig 扩展。

事件源映射是一个 Lambda 资源,用于从事件源读取项目并调用函数。

我们可以使用事件源映射来处理来自 Amazon DynamoDB 流、Amazon Kinesis 流、Amazon MQ 队列、自管 Apache Kafka、Amazon SQS 队列等的项目。

Lambda 提供轮询机制,从事件源批量读取记录并调用函数。

高级 AWS Lambda 面试题

AWS Lambda 使用 IAM(身份与访问管理)在两个层面控制访问:

  • 基于资源的策略 指定允许哪些 AWS 账户、服务和资源调用该函数。
  • 函数的执行角色 决定函数代码可访问哪些 AWS 服务与资源。遵循最小权限原则,策略应尽可能严格,同时仍允许函数完成既定任务。

当 Lambda 需要初始化新的执行环境来处理调用请求时,会产生冷启动。为尽量减少冷启动并提升响应性,我们可以采用以下策略:

  1. 使用 SnapStart: 该特性(适用于特定运行时)可持久化已初始化的环境,大幅缩短后续调用的启动时间。
  2. 启用预置并发: 通过保留一组已初始化的环境,可为可预测的工作负载消除冷启动。
  3. 优化包体大小: 移除不必要依赖并优化代码,减小函数包体,从而加快初始化过程。
  4. 语言选择: 选择如 Go 或 Rust 等启动更快的语言,相较 JVM 语言可进一步降低冷启动延迟。
  5. 复用执行上下文: 将函数的业务代码与初始化逻辑分离,便于在调用间复用执行上下文,减少开销。

通过 API Gateway 暴露 Lambda 函数时,常见安全最佳实践包括:

  • 使用 IAM 或 Lambda 授权器进行请求的认证与授权。
  • 启用 Amazon Cognito 用户池进行用户管理。
  • 定义资源策略,基于来源 IP 等请求属性允许或拒绝访问。
  • 配置 mTLS,确保客户端与服务器的安全通信。
  • 使用 AWS WAF 防护针对 API 的常见 Web 攻击。

Lambda 容器镜像允许使用兼容 OCI 的容器格式打包函数代码与依赖。下面将容器镜像与 .zip 部署包进行对比:

特性

容器镜像

.zip 部署包

运行时灵活性

自带运行时(任意语言或版本)

受限于 Lambda 预定义运行时

部署大小

最大 10GB

最大 250MB(解压后)

部署与冷启动

部署较慢,冷启动延迟可能更高

部署较快,通常冷启动延迟更低

工具与流程

可与现有容器工具与工作流无缝集成

可能需要额外工具进行依赖管理与部署

最适合的场景

依赖庞大或需自定义运行时的应用

体量较小、且适配 Lambda 预定义运行时的应用

可以。Lambda 函数可使用 AWS SDK 直接调用其他函数。常见用例如函数编排、聚合多个函数的结果、事件处理扇出等。

当一个 Lambda 函数调用另一个函数时,被调用函数的基于资源的策略应显式授予来自调用方函数的调用权限。

实战类 AWS Lambda 面试题

我们可以通过以下步骤实现一个简单的 REST API:

  1. 创建 Lambda 函数:开发一个 Lambda 函数,从 API Gateway 接收事件对象作为输入,并返回包含数据与状态码的响应对象。
  2. 创建 API Gateway: 在 API Gateway 中创建一个新的 REST API,并根据 API 路径和 HTTP 方法设置资源与方法。
  3. 配置集成: 将方法的集成类型配置为 Lambda 代理,并指定要调用的函数。
  4. 部署 API: 部署 API,生成可访问的公共 URL 端点。
  5. 充分测试: 使用 cURL 或 Postman 等工具验证 API 是否正常工作,确保 Lambda 函数能处理请求并返回合适的响应。

可按以下步骤配置:

  1. 创建具有访问目标 S3 存储桶所需权限的 Lambda 函数。
  2. 在 S3 控制台中,为源存储桶配置事件通知。
  3. 选择触发通知的事件类型,如对象创建或删除。
  4. 将目标通知设置为对应的 Lambda 函数。
  5. 通过对 S3 存储桶执行与事件类型匹配的操作进行测试。
  6. 验证 Lambda 函数被触发,并接收到包含 S3 操作详情的事件。

可按以下六个步骤进行:

  1. 创建 DynamoDB 表,设置合适的主键和必要的二级索引。
  2. 为 Lambda 函数创建具备访问 DynamoDB 权限的 IAM 角色。
  3. 创建 Lambda 函数并关联该 IAM 角色。
  4. 使用 DynamoDB SDK 创建客户端实例并配置表名。
  5. 使用 put_item 方法写入数据项,指定键属性及其他字段。
  6. 使用示例事件测试,并通过 DynamoDB 查询验证数据写入是否正确。

可以通过以下步骤实现——我们:

  1. 创建用于按计划执行任务的 Lambda 函数。
  2. 打开 Amazon EventBridge 控制台并创建新规则。
  3. 使用 rate 或 cron 语法为该规则定义计划表达式。
  4. 将该 Lambda 函数设置为规则的目标。
  5. 保存规则,并等待下一次计划事件进行测试。
  6. 在 CloudWatch 指标与日志中验证函数执行情况。

为将流量切换至新版本,我们:

  1. 发布包含更新代码的函数新版本。
  2. 创建一个指向较旧稳定版本的别名。
  3. 更新该别名,通过权重(如 90/10)在旧版与新版间分配流量。
  4. 在监控指标的同时,逐步调整权重,将更多流量引向新版本。
  5. 当稳定后,将别名更新为将 100% 流量指向新版本。
  6. 下次更新时重复该流程,将先前版本视为新的稳定版本。

结语

这些常见的 AWS Lambda 面试题考察候选人对核心概念、最佳实践与实际使用模式的理解。

要牢固掌握这些概念,亲手构建并运营 Lambda 应用的实践经验至关重要。

想继续学习,可查看以下两门课程:

Zoumana Keita

作者

Zoumana Keita

一位多才多艺、乐于分享知识并回馈他人的数据科学家。Zoumana 是 YouTube 内容创作者,也是 Medium 上的顶尖科技写作者。他热爱演讲、编程与教学。Zoumana 拥有两个硕士学位:其一是在法国巴黎获得的计算机科学硕士,专注于机器学习;其二是在美国德州理工大学获得的数据科学硕士。他的职业生涯始于法国 Groupe OPEN 的软件开发工程师,随后加入 IBM 担任机器学习顾问,为保险公司构建端到端的 AI 解决方案。之后,Zoumana 加入了 Axionable——一家总部位于巴黎与蒙特利尔的首家“可持续 AI”初创公司。在那里,他担任数据科学家,为来自法国、蒙特利尔、新加坡和瑞士的客户交付 AI 产品,主要聚焦 NLP 场景。此外,他将 5% 的时间投入到研发工作。目前,他在 IFC(世界银行集团)担任高级数据科学家。

主题