Serverless 上的 Swift:AWS Lambda 及后端替代方案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

当移动开发者遇上云:Swift 的无服务器之旅

\n\n

你用 Swift 为 iOS、macOS 或 watchOS 编写代码。你的代码优美、安全且快速。但迟早会面临一个问题:如果把后端逻辑也用同一种语言来实现呢?不是为了用 Python、Node.js 或 Go 来增加技术栈,而是直接使用原生的 Swift 编写云函数?

\n\n

好消息是:这已经成为现实。基于 Swift 的无服务器函数 能够在 AWS Lambda、Google Cloud Run 甚至 Vercel 上运行。没错,其生态系统的成熟度不及 JavaScript,但对于希望同时掌控客户端和服务端的移动开发者来说,这无异于一座金矿。

\n\n

本文将详解如何在 无服务器环境中运行 Swift,会遇到哪些陷阱,以及在哪里能找到现成的模板。让我们开始吧。

\n\n

为何选择 Swift 而非 Python 或 Node.js?

\n\n

坦白说:如果你需要快速构建一个解析器或简单的 API,Python 或 Node.js 会更方便。但 Swift 拥有应对生产负载的王牌优势:

\n\n
    \n
  • 性能 — Swift 编译为原生代码。在 AWS Lambda 上,同等内存预算下,其速度可提升至 Node.js 的 2-3 倍。
  • \n
  • 类型安全与可靠性 — 可选类型、强类型、无空对象。那些在 Python 中运行时才会暴露的错误,在 Swift 中编译阶段就能被捕获。
  • \n
  • 统一技术栈 — 如果你是 iOS 开发者,无需再为后端学习第二门语言。一套代码库、统一的数据结构、一致的逻辑。
  • \n
  • Vapor 生态 — 最流行的 Swift 服务端框架,完美适配无服务器架构。
  • \n
\n\n

当然,也存在缺点:二进制体积较大(约 15-30 MB,而 Node.js 仅 500 KB),以及现成库较少。但对于微服务和 API 网关而言,这些并非关键问题。

\n\n

技术基础:Swift 如何在 AWS Lambda 上运行

\n\n

亚马逊通过 自定义运行时 正式支持 Swift。你不使用内置的 Node.js 或 Python 运行时,而是将可执行文件打包成 ZIP 并上传到 Lambda。

\n\n

以下是架构层面的工作原理:

\n\n
    \n
  • Lambda 将你的二进制文件作为 shell 命令调用。
  • \n
  • 你的代码从 stdin 读取事件(JSON),进行处理,并将响应写入 stdout。
  • \n
  • 通过 Runtime API(基于 HTTP)发送报告和错误信息。
  • \n
\n\n

听起来很复杂?实践中,我们使用 Apple 提供的现成 Swift AWS Lambda Runtime 模板,它能处理所有例行工作。

\n\n

示例:一个简单的 Swift Lambda 处理器

\n\n

我们来创建一个函数,接收用户名并返回问候语。这是无服务器架构的经典 hello-world 示例。

\n\n
// 导入 Apple 提供的库\nimport AWSLambdaRuntime\nimport AWSLambdaEvents\n\n// 定义输入输出结构\nstruct GreetingRequest: Codable {\n    let name: String\n}\n\nstruct GreetingResponse: Codable {\n    let message: String\n}\n\n// 主处理器\nLambda.run { (context, request: GreetingRequest, callback: @escaping (Result<GreetingResponse, Error>) -> ()) in\n    let response = GreetingResponse(message: "你好,\\(request.name)!欢迎来到 Swift 无服务器世界。")\n    callback(.success(response))\n}\n
\n\n

此代码编译为二进制文件。你将其与库文件(静态链接)一起打包成 ZIP,上传到 AWS Lambda。运行时会自动找到入口点。

\n\n

重要提示: 生产环境应使用基于 Amazon Linux 2 的 Docker 镜像,否则可能遇到 glibc 相关问题。

\n\n

构建与部署:分步指南

\n\n

为避免浪费时间走弯路,请使用现成的 aws-lambda-swift-sam 工具。这是 AWS SAM(无服务器应用模型)的一个扩展插件。

\n\n
    \n
  1. 安装 Swift 5.7+

博客

书籍推荐