基于 Swift 的 Serverless 函数:AWS Lambda 从 A 到 Z

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

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

开始课程

使用 AWS Lambda 的 Swift Serverless 简介



Serverless 架构正成为现代云开发的标准。借助 AWS Lambda,开发者可以在无需管理服务器的情况下运行代码,仅按实际执行时间付费。直到最近,Swift 一直游离在 serverless 世界之外,但随着 AWS Lambda 对 Swift 的官方支持出现,情况发生了根本性变化。



在本文中,我们将介绍使用 Swift 开发 serverless 函数的完整工作流程:从环境设置到生产环境部署。您将学习如何利用您的 iOS/macOS 开发经验来构建高效的云解决方案。



为什么选择 Swift 用于 Serverless?



Swift 不仅仅是用于移动应用的语言。其优势使其成为 serverless 的绝佳选择:



  • 类型安全 — 编译器在构建阶段捕获错误
  • 高性能 — 原生代码比解释型语言运行更快
  • 现代语法 — 代码易于阅读和维护
  • 共享代码库 — 可以重用 iOS/macOS 项目中的模型和逻辑


为了在 AWS Lambda 上运行 Swift,使用了预装 Swift 5.10 的官方 Amazon Linux 2 镜像。这保证了完全兼容性和最小的冷启动时间。



环境设置和创建第一个函数



安装必要的工具



在开始之前,请确保您已安装:



  • Swift 5.10 或更新版本
  • Docker(用于在 Linux 环境中构建)
  • 已配置凭据的 AWS CLI
  • Homebrew(适用于 macOS)


# 通过 Homebrew 安装 Swiftbrew install swift

# 检查版本swift --version

# 安装 AWS CLIbrew install awscli

# 配置 AWSaws configure


创建 Swift Package 项目



让我们创建一个新的可执行 Swift 包:



mkdir MyLambdaFunctioncd MyLambdaFunctionswift package init --type executable


现在更新 Package.swift 以使用 AWS Lambda Runtime:



// swift-tools-version:5.10import PackageDescription

let package = Package( name: "MyLambdaFunction", platforms: [.macOS(.v13)], dependencies: [ .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0") ], targets: [ .executableTarget( name: "MyLambdaFunction", dependencies: [ .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime") ]), .testTarget( name: "MyLambdaFunctionTests", dependencies: ["MyLambdaFunction"]), ])


处理函数代码



替换 Sources/MyLambdaFunction/main.swift 的内容:



import AWSLambdaRuntime

// 定义请求结构体struct Request: Codable { let name: String let age: Int}

// 定义响应结构体struct Response: Codable { let message: String let isAdult: Bool}

// 主处理器@mainstruct MyHandler: SimpleLambdaHandler { typealias Event = Request typealias Output = Response

func handle(_ event: Request, context: LambdaContext) async throws -> Response { let isAdult = event.age >= 18 return Response( message: "你好,\\(event.name)!", isAdult: isAdult ) }}


构建并部署到 AWS Lambda



为 Linux 构建



由于 macOS 上的 Swift 会为 macOS 构建二进制文件,我们需要使用 Docker:



# 创建 Dockerfilecat << EOF > DockerfileFROM swift:5.10-amazonlinux2 AS buildWORKDIR /appCOPY . .RUN swift build -c release --

博客

书籍推荐