Lambda 函数:运行时、触发器与处理程序
编写 Lambda 函数,选择运行时,配置内存和超时,并将其连接到 S3 事件或 API Gateway 触发器。
Lambda 函数:运行时、触发器与处理程序 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
什么是 AWS Lambda?
AWS Lambda 是一种无服务器计算服务,可以响应事件运行您的代码,而无需您预置或管理服务器。您只需为实际消耗的计算时间付费,计量单位为毫秒,因此 Lambda 对间歇性、事件驱动型工作负载而言极具成本效益。Lambda 会根据传入事件自动从零扩展到数千个并发执行。
支持的运行时
Lambda 支持包括 Python、Node.js、Java、Go、Ruby、.NET 等在内的托管运行时。AWS 负责维护这些运行时并应用安全补丁。对于原生不支持的语言或运行时版本,您可以通过 bootstrap 可执行文件提供自定义运行时,也可以将函数打包为容器镜像(最大 10 GB),而不是使用 ZIP 部署包。
Lambda 处理程序函数
每个 Lambda 函数都有一个处理程序,它是您的代码必须导出的入口点。AWS 会使用两个参数调用处理程序:事件对象(来自触发器的输入数据)和上下文对象(有关此次调用的元数据,例如函数名称、剩余时间和请求 ID)。处理程序会返回响应;根据调用类型的不同,该响应可能会返回给调用方。
# Python handler example
def lambda_handler(event, context):
# event contains the trigger payload
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
print(f'Processing {key} from {bucket}')
return {
'statusCode': 200,
'body': 'Processed successfully'
}内存、超时和临时存储
Lambda 允许您将内存配置为 128 MB 到 10,240 MB。CPU 会根据内存按比例分配,即内存越大,CPU 越多。超时可设置为 1 秒到 15 分钟;如果函数运行时间超过此限制,Lambda 会终止该函数。您还可以使用/tmp 临时存储(默认为 512 MB,最多可配置为 10 GB),用于单次调用期间存储临时文件。此存储不会在多次调用之间持久保存。
同步调用与异步调用
Lambda 函数可以同步调用(调用方等待结果,API Gateway 和 ALB 使用此方式),也可以异步调用(调用方无需等待,S3 事件和 SNS 使用此方式)。在异步模式下,Lambda 会对失败的执行最多重试两次,并可以将失败的事件路由到死信队列(SQS 或 SNS)或EventBridge 事件总线。选择正确的调用模式会影响错误处理设计。
常见的 Lambda 触发器
Lambda 可原生集成数十种 AWS 服务,将它们作为事件源(触发器):
- API Gateway / ALB:HTTP 请求(同步)
- S3:对象创建/删除事件(异步)
- DynamoDB Streams / Kinesis:记录流(基于轮询,同步)
- SQS:队列消息(基于轮询)
- SNS:主题通知(异步)
- EventBridge:计划事件或自定义事件
- CloudWatch Logs:日志订阅筛选器
IAM 执行角色
每个 Lambda 函数都必须拥有一个IAM 执行角色,用于授予该函数调用其他 AWS 服务的权限。例如,如果您的函数从 S3 读取数据并写入 DynamoDB,则执行角色需要 s3:GetObject 和 dynamodb:PutItem 权限。请遵循最小权限原则:只授予函数实际需要的权限。基本执行角色还必须包含 logs:CreateLogGroup、logs:CreateLogStream 和 logs:PutLogEvents,以便使用 CloudWatch Logs。
部署包与大小限制
Lambda 接受两种部署格式:直接上传或通过 S3 上传的 ZIP 文件(压缩后 50 MB,解压后 250 MB),以及存储在 Amazon ECR 中的容器映像(最多 10 GB)。ZIP 包部署速度更快,适合小型函数和 Lambda 层。容器映像适合依赖项较多的情况,或已经使用基于 Docker 的工作流的团队。两种格式都可以使用相同的运行时和处理程序模式。
# Deploy a ZIP package from S3
aws lambda update-function-code \
--function-name 'MyFunction' \
--s3-bucket 'my-lambda-packages' \
--s3-key 'my-function-v2.zip'环境变量与密钥
通过环境变量向 Lambda 传递配置。对于敏感值(API 密钥、数据库密码),请将其存储在AWS Secrets Manager 或 Parameter Store 中,并在函数初始化时(处理程序之外)获取,以便复用执行上下文。切勿将密钥硬编码在函数代码中,也不要将环境变量以明文形式保存;请使用 KMS 加密保护 Lambda 环境变量静态存储时的安全。
import boto3
import os
# Fetch secret once during cold start (outside handler)
ssm = boto3.client('ssm')
DB_PASSWORD = ssm.get_parameter(
Name=os.environ['DB_PASSWORD_PARAM'],
WithDecryption=True
)['Parameter']['Value']
def lambda_handler(event, context):
# DB_PASSWORD is already loaded; no SSM call on each invocation
pass冷启动与执行上下文复用
Lambda 函数在部署后或闲置一段时间后的第一次调用会产生冷启动:AWS 必须初始化运行时环境、下载部署包并运行初始化代码。同一执行环境中的后续调用属于热启动,速度会快得多。请将全局初始化代码(SDK 客户端、数据库连接)放在处理程序之外,以便在热调用之间复用执行上下文。
VPC 中的 Lambda
默认情况下,Lambda 在 AWS 管理的 VPC 中运行,可以访问互联网,但无法访问您私有 VPC 中的资源。要访问私有子网中的 RDS 数据库或 ElastiCache 集群,请通过指定子网和安全组,将 Lambda 配置为在您的 VPC 内部运行。启用 VPC 的 Lambda 函数使用 Hyperplane ENI 进行网络连接(不再为每个函数单独预置 ENI),从而消除了过去 VPC Lambda 的冷启动开销。
aws lambda update-function-configuration \
--function-name 'MyFunction' \
--vpc-config 'SubnetIds=subnet-aaa111,subnet-bbb222,SecurityGroupIds=sg-xyz'快速检查
请测试您对本课 AWS 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课中您学习了:Lambda 运行时支持 Python、Node.js、Java、Go 等语言;对于高级场景,还支持自定义运行时和容器映像;包括 API Gateway(同步)和 S3/SNS(异步)在内的触发器决定事件如何流入 Lambda 函数;而执行角色、环境变量和 VPC 配置则是安全地将 Lambda 连接到其他 AWS 服务的关键方面。接下来,我们将学习 Lambda 并发、限流和预留并发。
常见问题解答
「Lambda 函数:运行时、触发器与处理程序」课时是免费的吗?
是的 — 「Lambda 函数:运行时、触发器与处理程序」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「Lambda 函数:运行时、触发器与处理程序」这节课中我会学到什么?
编写 Lambda 函数,选择运行时,配置内存和超时,并将其连接到 S3 事件或 API Gateway 触发器。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「Lambda 函数:运行时、触发器与处理程序」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Lambda 函数:运行时、触发器与处理程序
- 并发、节流与预留并发
- Lambda 层与部署包
- Lambda@Edge 与事件驱动模式