1、AWS Lambda 简介:无服务器计算概念、Lambda 特点、应用场景

做运维这些年,我碰到最多的一个问题就是:「我买了几台服务器,但流量一上来就扛不住,平时又闲着,能不能只按实际用量付费?」

说白了,这就是无服务器计算要解决的痛点。你不需要提前规划机器数量,甚至不用关心操作系统、补丁升级、负载均衡这些杂活。你就写好代码,扔给云平台,它自动帮你跑起来。

无服务器(Serverless)的核心思想:开发者只关注业务代码,底层基础设施由云服务商完全托管。

什么是无服务器计算

无服务器,并不是真的没有服务器。服务器还是那些服务器,只是你看不到它,也不归你管。我刚开始接触这个概念时,也很困惑——我的代码到底在哪里跑?

后来我自己搭了一个小项目,用 Lambda 处理图片缩略图。部署上去之后,我只写了一个 Python 函数,测试了几张图片。它真的自动就跑了,而且计费是按毫秒算的。那一刻我才真正理解:无服务器,是一种「你只管写代码,别管机器」的体验。

传统模式下,你要先买 EC2 实例,配置 Nginx,还得写健康检查脚本。Lambda 把这一切全砍了。你上传代码,设定触发事件(比如 S3 上传、API 请求、定时器),然后就等着阿里…… 嗯,等它执行。

小建议:如果你是新手,第一次玩 Lambda 时,可以直接用控制台里那个「Hello World」模板。几秒钟就能看到结果。先感受一下什么叫「零服务器」。

Lambda 的核心特点

我在项目中用 Lambda 做日志定时巡检已经两年多了。它的特点,我总结了这么几个:

特点 说明 我的一点体会
自动弹性伸缩 Lambda 会根据并发请求数自动创建或销毁实例 你想想看,凌晨三点流量暴涨,它自己就扩容了,不用你打电话喊人
按用量付费 只对你代码实际执行的时间和调用次数付费,空闲时不收费 我有个定时任务每天只跑 5 分钟,一个月花了几毛钱
事件驱动 Lambda 可以被 S3、SQS、API Gateway、CloudWatch Events 等 20+ 服务触发 我把日志采集放在 S3 上,一有新日志就触发 Lambda 做格式转换,超级方便
无状态 每个执行环境是独立的,不保存状态 这其实是好事——不用担心并发冲突,但也意味着你要把状态存在外部(比如 DynamoDB)
支持多语言 Node.js、Python、Java、Go、.NET、Ruby,以及自定义 Runtime 我们团队用 Python 写数据处理,Java 写重计算,都能在 Lambda 里跑
安全隔离 每个 Lambda 函数运行在独立的微虚拟机中 曾经有个同事不小心写了个死循环,Lambda 自己超时终止了,没有影响其他函数

注意:Lambda 有默认并发软限制(每个区域 1000 并发),超出会限流。如果你的业务突然炸了,记得提前提工单提高并发数。我曾经一个凌晨没注意,日志处理积压了 20 分钟。

应用场景——什么时候该用 Lambda

我把在实际项目里用过的场景列了个清单,你可以对照着判断:

  1. 定时任务/巡检脚本——这个课程的核心。比如每天凌晨自动扫描 CloudWatch Logs,发现 ERROR 关键字就发告警。
  2. 数据转换/ETL 管道——S3 上传 CSV 后自动调用 Lambda 清洗数据,再写到 Redshift。
  3. Web 后端 API——配合 API Gateway,写一个轻量 RESTful 接口,不用管理服务器。
  4. 图片/视频处理——上传到 S3 后自动生成缩略图、转码视频。
  5. 日志实时分析——对接 CloudWatch Logs 订阅,Lambda 过滤出关键日志并存入 Elasticsearch。
  6. IoT 设备数据处理——设备上传数据到 IoT Core,Lambda 实时清洗并存储。
  7. Chatbot / 消息处理——集成 Slack、Twilio 或 SQS,做消息转发或自动回复。

我个人不建议把 Lambda 用在需要长时间运行的业务上。比如视频转码动辄半小时,Lambda 最长超时只有 15 分钟,用 Step Functions 分解成多个步骤倒可以,但成本会高一些。说白了,Lambda 最适合短平快、密集型的任务。

概念结构图

下面这张图帮你把 Lambda 在整个无服务器架构里的位置理清楚。我会在后面的章节中反复回到这张图。

无服务器计算与 Lambda 概念关系图 无服务器计算概念与 Lambda 定位 开发者 只写业务代码 AWS Lambda 函数 自动弹性伸缩 按用量付费 事件驱动 常见事件源:API Gateway / S3 / SQS / CloudWatch Events 开发者无需管理服务器,专注业务逻辑

从这张图你可以看到:开发者只需要写出业务代码,丢进 Lambda 函数,函数自动响应事件源,按需伸缩并付费。整个链条里没有出现一台服务器的影子。

我为什么把 Lambda 用于日志定时巡检

我之前维护过一个传统日志系统,每天半夜要用 cron 在几台 EC2 上跑脚本。那几台机器还得分主备,写心跳检测。有一次主节点挂了,备节点没及时切,日志漏了 8 个小时才被发现。

后来换成 Lambda 配合 CloudWatch Events 定时触发,代码部署到 Lambda 后,再也不用管服务器了。如果某次执行失败,还会自动重试两次。成本从原先每月 60 块的 EC2 费用降到每月 2 块钱。嗯,这笔账很好算。

核心收益:减少运维心智负担 + 降低闲置成本 + 天然容错。

当然,Lambda 不是银弹。它不适合需要长连接、高内存(最大 10 GB)或极低延迟的实时应用。我遇到过因为冷启动导致 API 响应慢了几秒的情况,后来用预留并发解决了。这些技巧我们会在后面的章节一一展开。

这一章我们先把概念铺好。你只需要记住一句话:Lambda 就是一个帮你自动跑代码的托管计算服务,按实际使用付费,不用你管服务器。后面的内容会一步一步带着你用它来做定时巡检日志。