AWS Lambda 与 Fargate 如何改变我们构建应用的方式

发布: (2026年1月8日 GMT+8 21:02)
15 min read
原文: Dev.to

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. 订披萨

Pizza analogy

选项 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 对比

特性LambdaFargate
它是什么标准菜单自定义配方
基础选项预设运行时任意容器镜像
自定义程度仅限菜单完全可自定义的环境
执行时间最长 15 分钟(滑动)基本上无限制
代码大小受限的包大小没有严格限制;容器镜像可容纳更多依赖
使用场景快速、短小的函数长时间运行的进程,重负载工作
冷启动可能发生任务运行后更为一致

结论 – Lambda 就像快速点选标准菜单,而 Fargate 则让你自带配方和食材,但仍然无需自己管理厨房。

Fargate – “Bring Your Own Recipe”

“Bring Your Own Recipe” – 你将应用打包成容器(Docker 镜像),AWS 为你运行它,无需你管理服务器。

Fargate – Bring Your Own Recipe

“Fargate – The Freedom”的三个角度

1. 更多控制权

  • 任意编程语言
  • 任意运行时版本
  • 自定义操作系统级依赖
  • 在 Lambda 中难以运行的特定工具/库

2. 更多容量

  • 可运行数小时或数天
  • 没有 15 分钟的限制
  • 更高的内存和 CPU 选项

3. 更多使用场景

  • 长时间运行的进程
  • 需要传统环境的遗留应用
  • 具有特定运行时需求的微服务
  • 批处理作业和后台处理

Fargate 仍然是 无服务器(无需管理服务器),但提供了容器级别的灵活性。

可尝试的架构模式

幻灯片中的实用模式

模式流程典型用例
Event‑driven APIS3 upload → Lambda → DynamoDB上传文档并存储元数据
Scheduled jobsEventBridge (cron) → Lambda → process data夜间报告、清理任务、定时通知
MicroservicesAPI Gateway → Lambda or Fargate → backend services模块化、可独立部署的服务
Data pipelineS3 → Lambda (trigger) → Fargate (heavy processing) → S3将快速触发与长时间运行任务相结合
Webhook handlerGitHub/Stripe → API Gateway → Lambda → action响应外部事件,如付款或代码推送

这些模式将课堂概念与真实项目(学校应用、兼职业务、实习等)相连接。

使用无服务器

诚实面对权衡

无服务器并不总是最佳选择。当出现以下情况时,它可能不适合:

  • 你的流量 稳定且高,使用始终在线的基础设施可能更便宜。
  • 你需要 深入控制 环境的底层细节。
  • 任务的 运行时间超过无服务器函数的限制
  • 对需求不确定,而过早使用太多托管服务可能导致复杂化。

无服务器只是另一种工具;真正的技巧在于知道何时使用它,而不是容器或基础的 EC2 实例。

Lambda vs Fargate:一个简单的决策树

选择的思维模型

  1. 您是否需要运行代码?

    • → 不需要计算资源。
    • → 继续。
  2. 它能在 15 分钟内完成吗?

      • 它是 标准运行时(Python、Node.js 等)且依赖可管理吗?
        • Lambda(最快且最便宜)。
        • → 考虑 Fargate(或其他基于容器的方法)。
    • → 使用 Fargate 来处理需要自定义环境的长时间运行进程。

本次会议的关键要点

  • Serverless = “点披萨” – 方便,但必须挑对切片(Lambda 与 Fargate)。
  • Lambda 适用于短小、无状态的函数,使用标准运行时。
  • Fargate 提供容器灵活性和无限运行时,仍然无需服务器管理。
  • 理解 权衡(成本、延迟、控制、持续时间)至关重要。
  • 在设计新项目时,使用 决策树架构模式 作为检查清单。

祝构建愉快! 🚀

关键要点

  • 不要自己运营餐厅 – 让 AWS 处理基础设施。
  • 了解 Lambda 与 Fargate 的区别,而不是盲目选择其中之一。
  • 专注于代码,而非服务器 – 编写业务逻辑,而不是运维管道。
  • 为价值付费,而非空闲时间 – 只有在代码运行时才产生费用。

对我个人而言,最大的收获是 “无服务器”并不仅限于 Lambda。即使使用容器,只要 AWS 负责资源的设置和扩展,而你主要关注应用本身,也可以视为无服务器。

结论

这场在 AWS Student Community Day in Tirupati 举办的会议非常有帮助,因为它提醒我,优秀的技术演讲不仅仅是列出功能——它们会改变你对事物的理解方式。披萨示例、关于 Lambda 限制的开放讨论,以及将 Fargate 介绍为一种强大的 “无服务器容器” 选项,使这些主题更容易被掌握,尤其是对刚开始学习这些服务的学生而言。

作为一名 AWS Community Builder,此类活动让我保持动力。它们展示了只要有恰当的示例和思考方式,好奇心可以多快转化为实际项目。

如果你对这个主题感兴趣,尝试从自己的生活中挑选一个小的使用案例——比如处理应用中的图片或运行定时清理任务——并使用 LambdaFargate 来构建它。动手实践的经验会比任何演示都更有价值。

关于作者

作为 AWS Community Builder,我喜欢分享自己在经验和活动中学到的东西,并乐于帮助他人在道路上前行。如果您觉得这有帮助或有任何问题,请随时联系我! 🚀

🔗 在 LinkedIn 与我联系

References

  • 事件: AWS Student Community Day Tirupati
  • 主题: AWS Lambda 与 Fargate 如何改变我们构建应用的方式
  • 日期: 2025年11月01日

也发布于

Back to Blog

相关文章

阅读更多 »

我终于在 AWS 上部署了

首次尝试与计费问题 我的第一次使用 AWS 的经历是在 2023 年,当时免费层提供 12 个月的使用期限。我搭建了一台免费服务器来托管一个业余…

如何部署 AWS ELASTIC BEANSTALK

概述:AWS Elastic Beanstalk 是一种托管的云服务,允许您部署和运行 Web 应用程序,而无需担心底层基础设施。我...