AWS Lambda 与 Fargate 如何改变我们构建应用的方式
Source: Dev.to
参加在蒂鲁帕蒂举办的 AWS 学生社区日
地点:莫汉·巴布大学
我参加此次活动不仅是作为参与者,也是作为一名 AWS Community Builder,热衷于向初学者和所有感兴趣的人分享云计算知识。Avinash Dalvi 主讲的 “从代码到容器:理解 Lambda 之外的无服务器” 立刻吸引了我的注意,因为它提供了关于 何时使用 Lambda 以及 何时考虑其他选项(尤其是容器) 的明确指导。
背景设定:为何要“超越 Lambda 的无服务器”?
演讲一开始就解释了从编写代码转向使用容器,同时保持 无服务器思维 的转变。关键点在于 无服务器 不仅仅是 Lambda 函数——它是一种思维方式,让你专注于代码本身,而底层基础设施由 AWS 处理。
Avinash 介绍自己是 AWS User Group Bengaluru 的负责人以及 AWS Community Builder,这让观众确信内容来源于真实的实践经验,而非纯理论。他重点指出:
- Lambda 的优势所在
- Lambda 的局限性
- AWS Fargate 等服务如何填补这些空白
无服务器思维的转变
从 “我需要一台服务器” → “我需要在 X 发生时运行代码”
| 传统 “服务器” 思维 | 无服务器思维 |
|---|---|
| 为闲置容量付费 – 即使流量低也要为服务器付费 | 仅为执行时间付费 – 只在代码运行时计费 |
| 管理基础设施 – 操作系统补丁、安全更新、扩容等 | AWS 全部管理 – 硬件、操作系统、扩容和可用性 |
| 手动扩容 – 必须根据流量波动自行调整服务器规模 | 自动扩容 – 平台会自动横向/纵向扩容 |
| 关注运维 – 花时间监控服务器而不是构建功能 | 关注代码 – 专注业务逻辑和价值创造 |
在无服务器模型中,你只需声明 所需的资源(运行时、内存、超时时间),其余交由 AWS 处理。触发方式可以是:
- S3 文件上传
- API 请求
- 定时(cron)任务
- 来自其他 AWS 服务的事件
披萨,谁要?用食物解释无服务器
自己动手 vs. 订披萨

| 选项 1 – 自己动手 | 选项 2 – 订披萨 |
|---|---|
| 购买食材 | 指定配料 |
| 自己准备一切 | 其他人负责厨房和烤箱 |
| 烹饪、上菜、清理 | 只为披萨付费,而不是拥有餐厅 |
传统服务器(如 EC2)就像在家做饭:你要管理厨房,保持烤箱运行,即使不在烹饪时也要付费。
无服务器则像订披萨:你下单(代码),描述需求(配料、尺寸、底层),AWS 完成其余工作。只为实际消费的部分付费。
订购你的无服务器披萨
演讲者使用披萨类比来演示构建无服务器应用的步骤:
| 组件 | 选择 |
|---|---|
| 底层(运行时 / 语言) | Python、Node.js、Java、Go、.NET、Ruby,或 使用容器自带底层 |
| 配料(资源) | RAM(从几 MB 到数 GB)、临时存储、随内存自动扩展的 CPU |
| 尺寸(代码复杂度) | 小:简单函数 中:中等逻辑 大:复杂应用 |
| 何时运行? | 即时 – 事件触发(如 S3 上传) 定时 – cron 风格任务 按需 – API 调用 |
这帮助学生将日常决策(点哪种披萨)与云计算选型联系起来。
Lambda 实战(以及它的局限)
简单的 Lambda 示例:图像压缩
import boto3
from PIL import
Source:
Image
import os
s3 = boto3.client('s3')
def lambda_handler(event, context):
# 1️⃣ Extract bucket & key from the S3 event
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
# 2️⃣ Download the image to /tmp
download_path = f'/tmp/{os.path.basename(key)}'
s3.download_file(bucket, key, download_path)
# 3️⃣ Open, resize, and save a thumbnail
with Image.open(download_path) as img:
img.thumbnail((128, 128))
thumb_path = f'/tmp/thumb-{os.path.basename(key)}'
img.save(thumb_path)
# 4️⃣ Upload the thumbnail back to S3
thumb_key = f'thumbnails/{os.path.basename(key)}'
s3.upload_file(thumb_path, bucket, thumb_key)
return {
'statusCode': 200,
'body': f'Thumbnail saved to {thumb_key}'
}
为什么 Lambda 在这里表现良好:
- 小型、基于触发的工作负载
- 短时运行(秒级)
- 最小状态(使用
/tmp存储)
典型用例:图像缩放、缩略图生成、简单 API、轻量级数据处理。
当 Lambda 碰到瓶颈时
Lambda 的限制成为问题的场景:
- 长时间运行的任务 – 最大超时时间为 15 分钟。
- 高内存/CPU 需求 – 工作负载可能超出 Lambda 可用资源。
- 冷启动延迟 – 在大型包或 VPC 附加函数时尤为明显。
- 复杂网络 – 持久连接、自定义 VPC 设置、低延迟的服务间通信。
- 有状态工作负载 – Lambda 是无状态的;保持状态需要外部服务(DynamoDB、S3)。
在这些情况下,AWS Fargate 上的容器或其他托管服务提供所需的灵活性,同时保留许多无服务器的优势(按需付费、自动扩展、无需服务器管理)。
总体而言,本次会议提醒我们,“无服务器”是一种思维方式,而非单一产品。无论选择 Lambda、容器还是混合方式,目标都是让 AWS 处理繁重的工作,让你专注于创造价值。
Lambda vs Fargate – 何时使用哪种无服务器选项
常见视频处理三步的快速对比
| 步骤 | 结果 |
|---|---|
| 上传视频 | ✅ Lambda 表现出色 |
| 生成缩略图 | ✅ Lambda 完美适用 |
| 对完整视频进行转码 | ❌ Lambda 失败 |
为什么会失败?
- 视频处理可能需要 ≈ 45 分钟。
- Lambda 有硬性超时限制(幻灯片中为 15 分钟)。
- 您可能需要 对环境进行更多控制。
- 可能需要更大的依赖项或特殊工具。
尽管无服务器技术功能强大,但仍需为具体任务挑选合适的工具。这时 AWS Fargate 就派上用场了。
Lambda vs Fargate:同一家披萨店,不同选项
Lambda 与 Fargate 对比
| 特性 | Lambda | Fargate |
|---|---|---|
| 它是什么 | 标准菜单 | 自定义配方 |
| 基础选项 | 预设运行时 | 任意容器镜像 |
| 自定义程度 | 仅限菜单 | 完全可自定义的环境 |
| 执行时间 | 最长 15 分钟(滑动) | 基本上无限制 |
| 代码大小 | 受限的包大小 | 没有严格限制;容器镜像可容纳更多依赖 |
| 使用场景 | 快速、短小的函数 | 长时间运行的进程,重负载工作 |
| 冷启动 | 可能发生 | 任务运行后更为一致 |
结论 – Lambda 就像快速点选标准菜单,而 Fargate 则让你自带配方和食材,但仍然无需自己管理厨房。
Fargate – “Bring Your Own Recipe”
“Bring Your Own Recipe” – 你将应用打包成容器(Docker 镜像),AWS 为你运行它,无需你管理服务器。

“Fargate – The Freedom”的三个角度
1. 更多控制权
- 任意编程语言
- 任意运行时版本
- 自定义操作系统级依赖
- 在 Lambda 中难以运行的特定工具/库
2. 更多容量
- 可运行数小时或数天
- 没有 15 分钟的限制
- 更高的内存和 CPU 选项
3. 更多使用场景
- 长时间运行的进程
- 需要传统环境的遗留应用
- 具有特定运行时需求的微服务
- 批处理作业和后台处理
Fargate 仍然是 无服务器(无需管理服务器),但提供了容器级别的灵活性。
可尝试的架构模式
幻灯片中的实用模式
| 模式 | 流程 | 典型用例 |
|---|---|---|
| Event‑driven API | S3 upload → Lambda → DynamoDB | 上传文档并存储元数据 |
| Scheduled jobs | EventBridge (cron) → Lambda → process data | 夜间报告、清理任务、定时通知 |
| Microservices | API Gateway → Lambda or Fargate → backend services | 模块化、可独立部署的服务 |
| Data pipeline | S3 → Lambda (trigger) → Fargate (heavy processing) → S3 | 将快速触发与长时间运行任务相结合 |
| Webhook handler | GitHub/Stripe → API Gateway → Lambda → action | 响应外部事件,如付款或代码推送 |
这些模式将课堂概念与真实项目(学校应用、兼职业务、实习等)相连接。
当 不 使用无服务器
诚实面对权衡
无服务器并不总是最佳选择。当出现以下情况时,它可能不适合:
- 你的流量 稳定且高,使用始终在线的基础设施可能更便宜。
- 你需要 深入控制 环境的底层细节。
- 任务的 运行时间超过无服务器函数的限制。
- 你 对需求不确定,而过早使用太多托管服务可能导致复杂化。
无服务器只是另一种工具;真正的技巧在于知道何时使用它,而不是容器或基础的 EC2 实例。
Lambda vs Fargate:一个简单的决策树
选择的思维模型
-
您是否需要运行代码?
- 否 → 不需要计算资源。
- 是 → 继续。
-
它能在 15 分钟内完成吗?
- 是 →
- 它是 标准运行时(Python、Node.js 等)且依赖可管理吗?
- 是 → Lambda(最快且最便宜)。
- 否 → 考虑 Fargate(或其他基于容器的方法)。
- 它是 标准运行时(Python、Node.js 等)且依赖可管理吗?
- 否 → 使用 Fargate 来处理需要自定义环境的长时间运行进程。
- 是 →
本次会议的关键要点
- Serverless = “点披萨” – 方便,但必须挑对切片(Lambda 与 Fargate)。
- Lambda 适用于短小、无状态的函数,使用标准运行时。
- Fargate 提供容器灵活性和无限运行时,仍然无需服务器管理。
- 理解 权衡(成本、延迟、控制、持续时间)至关重要。
- 在设计新项目时,使用 决策树 和 架构模式 作为检查清单。
祝构建愉快! 🚀
关键要点
- 不要自己运营餐厅 – 让 AWS 处理基础设施。
- 了解 Lambda 与 Fargate 的区别,而不是盲目选择其中之一。
- 专注于代码,而非服务器 – 编写业务逻辑,而不是运维管道。
- 为价值付费,而非空闲时间 – 只有在代码运行时才产生费用。
对我个人而言,最大的收获是 “无服务器”并不仅限于 Lambda。即使使用容器,只要 AWS 负责资源的设置和扩展,而你主要关注应用本身,也可以视为无服务器。
结论
这场在 AWS Student Community Day in Tirupati 举办的会议非常有帮助,因为它提醒我,优秀的技术演讲不仅仅是列出功能——它们会改变你对事物的理解方式。披萨示例、关于 Lambda 限制的开放讨论,以及将 Fargate 介绍为一种强大的 “无服务器容器” 选项,使这些主题更容易被掌握,尤其是对刚开始学习这些服务的学生而言。
作为一名 AWS Community Builder,此类活动让我保持动力。它们展示了只要有恰当的示例和思考方式,好奇心可以多快转化为实际项目。
如果你对这个主题感兴趣,尝试从自己的生活中挑选一个小的使用案例——比如处理应用中的图片或运行定时清理任务——并使用 Lambda 或 Fargate 来构建它。动手实践的经验会比任何演示都更有价值。
关于作者
作为 AWS Community Builder,我喜欢分享自己在经验和活动中学到的东西,并乐于帮助他人在道路上前行。如果您觉得这有帮助或有任何问题,请随时联系我! 🚀
🔗 在 LinkedIn 与我联系
References
- 事件: AWS Student Community Day Tirupati
- 主题: AWS Lambda 与 Fargate 如何改变我们构建应用的方式
- 日期: 2025年11月01日