Amazon Lambda + API Gateway 实战,无服务器架构入门

无服务器(Serverless)已从"未来趋势"变成"日常可选"。

过去,后端开发往往意味着租服务器、配置操作系统、部署容器、维护负载均衡、监控、备份。这些都耗时耗力,还容易出错。

现在,Serverless 架构把这些繁琐的基础设施工作交给云厂商来做:只要写函数"写完就丢上去"(Deploy),自动伸缩、按需计费、维护压力几乎是零。

典型场景包括:

  • 快速搭一个公开 API(例如让前端调用,或让外部服务 Webhook 回调)
  • 写一个定时任务(cron),如每天清理一下临时文件/数据库中的旧数据/生成报告
  • 为内网提供内部工具接口/自动化脚本

这些场景过去要自己开服务器、配置 cron、设置反向代理、监控负载、处理故障,而现在只要写个 Lambda 函数 + API Gateway + IAM 权限,就能搞定。传送门

技术切入:Amazon Lambda 的玩法

下面是一个实战范例:用 Python 写一个 Lambda + API Gateway 的公开 API,处理 POST 请求并返回 JSON。

rust 复制代码
User(请求者) -----> API Gateway -----> Amaozn Lambda 函数 -----> 返回 JSON

假设要做一个简单工具:输入两个数字,返回它们的和 + 差 + 积 +商。

Lambda 函数(Python)

python 复制代码
# 文件:lambda_function.py

def handler(event, context):
    """
    接收 API Gateway Proxy 事件 (HTTP POST),body 是 JSON,
    例: { "a": 10, "b": 3 }
    返回: { "sum": 13, "diff": 7, "prod": 30, "quot": 3.3333 }
    """
    import json

    try:
        body = json.loads(event.get("body", "{}"))
        a = float(body.get("a", 0))
        b = float(body.get("b", 0))
    except Exception as e:
        return {
            "statusCode": 400,
            "body": json.dumps({"error": "invalid JSON or missing fields", "details": str(e)})
        }

    result = {
        "sum": a + b,
        "diff": a - b,
        "prod": a * b,
        "quot": (a / b) if b != 0 else None
    }

    return {
        "statusCode": 200,
        "body": json.dumps(result)
    }

部署步骤(手动 + IaC)

你可以通过亚马逊云科技控制台,也可以用 Amazon SAM / Serverless Framework / CDK 来部署。这里以 A mazon CLI + SAM 模板 为例。SAM 模板示例(template.yaml

less 复制代码
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: 简单计算器 API

Resources:
  CalcFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: lambda_function.handler
      Runtime: python3.10
      MemorySize: 128
      Timeout: 10
      Events:
        ApiProxy:
          Type: Api
          Properties:
            Path: /calc
            Method: post

部署流程:

  1. 安装 Amazon CLI / SAM CLI,并配置好凭证
  2. 在项目目录放 lambda_function.py + template.yaml
  3. 运行:
css 复制代码
sam build
sam deploy --guided
  1. SAM 会帮你创建 Lambda + API Gateway + IAM 角色等,最终会给一个 URL,比如 https://xyz.execute-api.us-east-1.amazonaws.com/Prod/calc

  1. 旧版 Free Tier 的痛点

虽然亚马逊云科技一直有 Free Tier,但使用中有不少困扰:

  • 免费额度很分散(Lambda 的调用次数、API Gateway 的流量、数据传出入、日志记录等),新手常常没看清哪个收费项超限,就被"意外扣费"吓得不敢用。
  • 测试频繁 + 多次部署 → 很快超过免费调用次数或带宽限制
  • 对于一个小型 API + Webhook +定时任务组合,多项收费项叠加,新人觉得"写函数"这件事有时候成本并不低。

所以很多人虽想用 Serverless,但总是在"怕掉坑"的状态 ------ 写了几个函数就停了,或者一直只是读文档没动手。


  1. Free Tier 2.0 的改善

好消息是:亚马逊云科技的 Free Tier 2.0 带来不少新东西,特别适合刚入门或者想快速验证想法的人。

  • 注册就能拿一个"起步奖励"(比如 100 美元抵扣金),完成特定任务最多能拿到 200 美元的抵扣金。
  • 在任务清单里包含部署一个带 URL 的 Lambda 函数 + API Gateway,这意味着你只要完成这个任务,就能获得额外抵扣,使你可以安心写函数、不怕因为少量调用被扣费。
  • Free Tier 2.0 在"新人期"一般设有一个保护期(例如 6 个月),在这个期间如果你只在任务+免费额度内使用,不会被误扣费。这样你可以大胆试错、写函数、部署 Webhook、做 MVP,而不会因费用问题退缩。

实战扩展

除了最常见的"写一个 API 接口",Serverless 的另一个经典玩法就是做 Webhook 接收器。场景很多:

  • GitHub 仓库有 Push / PR / Issue 更新时,触发一个 Lambda 来同步到你自己的数据库、或者发到钉钉/Slack 群里。
  • 微信公众平台事件(用户关注、发送消息),直接调用 Lambda,自动回复欢迎语,或者把用户信息存入 DynamoDB。
  • 第三方支付平台的支付回调,也可以直接打到 API Gateway → Lambda,完成订单状态更新。
java 复制代码
GitHub / 微信 / 第三方服务 
        ↓ 触发 Webhook
   API Gateway (HTTP POST)
        ↓
     Lambda 函数
        ↓
 DynamoDB / S3 / 通知服务

以下示例:接收 GitHub Webhook,解析 JSON payload,并把信息打印(或者写入 DynamoDB)。

python 复制代码
import json
import base64

def handler(event, context):
    """
    接收 GitHub Webhook (API Gateway Proxy Event)
    """
    try:
        body = event.get("body", "")
        # GitHub 默认 Content-Type: application/json
        payload = json.loads(body)

        repo = payload.get("repository", {}).get("full_name", "unknown")
        pusher = payload.get("pusher", {}).get("name", "unknown")
        commit_msg = payload.get("head_commit", {}).get("message", "")

        result = {
            "repo": repo,
            "pusher": pusher,
            "commit_message": commit_msg
        }

        # TODO: 这里可以扩展成写 DynamoDB / 发通知 / 存 S3
        print("Webhook received:", result)

        return {
            "statusCode": 200,
            "body": json.dumps({"ok": True, "result": result})
        }

    except Exception as e:
        return {
            "statusCode": 400,
            "body": json.dumps({"error": str(e)})
        }
  1. API Gateway

    1. 创建一个 POST /webhook 路由。
    2. 确保"接收原始 body"模式(不要自动转义或重写)。
  2. 安全性

    1. GitHub 提供 X-Hub-Signature-256 签名,你可以在 Lambda 校验 secret
    2. 微信公众平台回调有 signaturetimestampnonce 参数,也要在 Lambda 校验。
  3. 存储 & 自动化

    1. 把回调数据存到 DynamoDB 或 S3,便于后续统计和查询。
    2. 配合 EventBridge + SNS,可以直接"转发"这些事件到邮件 / 短信 / IM 群。

Webhook 接收器的调用模式非常不稳定:有时一天几十次,有时几分钟就上百次。传统服务器要么长期空跑(浪费资源),要么高峰被打爆。

Lambda + API Gateway 就完美解决:按调用计费 ,没有请求时 0 成本。秒级伸缩,GitHub 或微信突然发来一堆事件也不会崩。

所以,如果说"Lambda + API Gateway"最适合的 Hello World 是 Calculator API。

结论

现在是尝试 Serverless 架构的黄金开端:不用担心自己要买服务器、配置环境、规模扩容,只要写函数 + 配置触发 + 接入 API Gateway,就能弄一个稳定、可用的后端接口。

👉 如果你之前因为"怕被扣钱""怕部署麻烦"而没动手,现在就去注册 亚马逊云科技账号→ 激活 Free Tier 2.0 → 写一个简单函数 + API Gateway 测试接口。

你的第一个 Serverless 后端,不仅可能就在今天起跑,还可能成为你未来工具 /后台服务 /SaaS 功能模块的基础。

以上就是本文的全部内容啦。最后提醒一下各位工友,如果后续不再使用相关服务,别忘了在控制台关闭,避免超出免费额度产生费用~

相关推荐
码流之上2 小时前
【一看就会一写就废 指间算法】设计电子表格 —— 哈希表、字符串处理
javascript·算法
快手技术4 小时前
快手提出端到端生成式搜索框架 OneSearch,让搜索“一步到位”!
算法
泉城老铁5 小时前
Spring Boot对接抖音获取H5直播链接详细指南
spring boot·后端·架构
IT小番茄6 小时前
Docker Registry安全运维实战指南:从漏洞修复到高可用部署
架构
绝无仅有7 小时前
某辅导教育大厂真实面试过程与经验总结
后端·面试·架构
CoovallyAIHub1 天前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
NAGNIP1 天前
Serverless 架构下的大模型框架落地实践
算法·架构
moonlifesudo1 天前
半开区间和开区间的两个二分模版
算法
moonlifesudo1 天前
300:最长递增子序列
算法