0Pricing
AWS Solutions Architect · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Lambda 函数:运行时、触发器与处理程序
  2. 并发、节流与预留并发
  3. Lambda 层与部署包
  4. Lambda@Edge 与事件驱动模式
← 返回 AWS Solutions Architect