在 AWS Lambda 上使用 Swift 的无服务器函数:完整指南

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

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

开始课程

使用 AWS Lambda 的 Swift 无服务器函数简介

\n\n

无服务器架构在开发者中持续流行,现在 Swift 也不例外。得益于 AWS Lambda 平台对 Swift 的支持,iOS 和 macOS 开发者可以使用原生语言编写云函数,充分利用 Swift 生态系统的全部功能。在本文中,我们将从头开始讲解如何创建、配置和部署一个 Swift 无服务器函数。

\n\n

无服务器函数允许您无需管理服务器即可运行代码。您只需为执行时间付费,并且扩展是自动进行的。AWS Lambda 通过官方运行时镜像支持 Swift,这使其成为 Apple 生态系统中后端任务的绝佳选择。

\n\n

为在 AWS Lambda 上开发 Swift 准备环境

\n\n

安装必要的工具

\n\n

开始之前,请确保您已安装以下工具:

\n\n
    \n
  • Swift 5.9+ — 可从 swift.org 下载
  • \n
  • Docker — 用于在 Linux 环境中构建
  • \n
  • AWS CLI — 用于部署
  • \n
  • Xcode 15+(可选,适用于 macOS)
  • \n
\n\n

创建 Swift Package 项目

\n\n

创建一个支持 AWS Lambda 的新 Swift Package:

\n\n
mkdir MyLambdaFunction\ncd MyLambdaFunction\nswift package init --type executable
\n\n

打开 Package.swift 并添加对 AWSLambdaRuntime 的依赖:

\n\n
// swift-tools-version: 5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "MyLambdaFunction",\n    platforms: [.macOS(.v13)],\n    dependencies: [\n        .package(url: "https://github.com/swift-server/swift-aws-lambda-runtime.git", from: "1.0.0")\n    ],\n    targets: [\n        .executableTarget(\n            name: "MyLambdaFunction",\n            dependencies: [\n                .product(name: "AWSLambdaRuntime", package: "swift-aws-lambda-runtime")\n            ]\n        )\n    ]\n)
\n\n

编写第一个 Swift 无服务器函数

\n\n

Lambda 函数的基本结构

\n\n

创建文件 Sources/MyLambdaFunction/main.swift,内容如下:

\n\n
import AWSLambdaRuntime\nimport AWSLambdaEvents\n\n// 定义请求结构体\nstruct GreetingRequest: Codable {\n    let name: String\n}\n\n// 定义响应结构体\nstruct GreetingResponse: Codable {\n    let message: String\n    let timestamp: String\n}\n\n// 主处理器\n@main\nstruct MyLambdaHandler: SimpleLambdaHandler {\n    typealias Event = GreetingRequest\n    typealias Output = GreetingResponse\n    \n    func handle(_ event: GreetingRequest, context: LambdaContext) async throws -> GreetingResponse {\n        let dateFormatter = DateFormatter()\n        dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"\n        \n        return GreetingResponse(\n            message: "你好,\\(event.name)! 欢迎来到 Swift 无服务器世界。",\n            timestamp: dateFormatter.string(from: Date())\n        )\n    }\n}
\n\n

处理 HTTP 请求(API Gateway)

\n\n

要使用 API Gateway,请使用 APIGatewayV2Request:

\n\n
import AWSLambdaRuntime\nimport AWSLambdaEvents\n\n@main\nstruct HTTPHandler: SimpleLambdaHandler {\n    typealias Event = APIGatewayV2Request\n    typealias Output = APIGatewayV2Response\n    \n    func handle(_ event: APIGatewayV2Request, context: LambdaContext) async throws -> APIGatewayV2Response {\n        // 从查询参数中获取数据\n        let name = event.queryStringParameters?["name"] ?? "访客"\n        \n        let responseBody = """\n        {\n            "message": "Hello, \\(name)!",\n            "path": "\\(event.rawPath)"\n        }\n        """\n        \n        return APIGatewayV2Response(\n            statusCode: .ok,\n                

博客

书籍推荐