Einführung in Serverless mit Swift und AWS Lambda
Die Serverless-Architektur wird zum Standard der modernen Cloud-Entwicklung. Dank AWS Lambda können Entwickler Code ausführen, ohne Server verwalten zu müssen, und zahlen nur für die tatsächliche Ausführungszeit. Bis vor kurzem blieb Swift in der Serverless-Welt außen vor, aber mit der offiziellen Unterstützung von Swift auf AWS Lambda hat sich die Situation grundlegend geändert.
In diesem Artikel behandeln wir den gesamten Arbeitszyklus mit Serverless-Funktionen in Swift: von der Umgebungseinrichtung bis zum Deployment in der Produktion. Sie erfahren, wie Sie Ihre Erfahrung in der iOS/macOS-Entwicklung nutzen können, um effiziente Cloud-Lösungen zu erstellen.
Warum Swift für Serverless?
Swift ist nicht nur eine Sprache für mobile Anwendungen. Seine Stärken machen es zu einer hervorragenden Wahl für Serverless:
- Typsicherheit – der Compiler fängt Fehler bereits während der Build-Phase ab
- Hohe Leistung – nativer Code läuft schneller als interpretierte Sprachen
- Moderne Syntax – Code ist leicht lesbar und wartbar
- Gemeinsame Codebasis – Modelle und Logik aus iOS/macOS-Projekten können wiederverwendet werden
Für die Ausführung von Swift auf AWS Lambda wird das offizielle Amazon Linux 2 Image mit vorinstalliertem Swift 5.10 verwendet. Dies garantiert vollständige Kompatibilität und minimale Kaltstartzeiten.
Einrichtung der Umgebung und Erstellung der ersten Funktion
Installation der erforderlichen Tools
Stellen Sie vor dem Start sicher, dass Folgendes installiert ist:
- Swift 5.10 oder neuer
- Docker (für den Build in einer Linux-Umgebung)
- AWS CLI mit konfigurierten Credentials
- Homebrew (für macOS)
# Swift über Homebrew installierenbrew install swift
# Version prüfenswift --version
# AWS CLI installierenbrew install awscli
# AWS konfigurierenaws configureErstellen eines Swift Package-Projekts
Erstellen wir ein neues ausführbares Swift-Paket:
mkdir MyLambdaFunctioncd MyLambdaFunctionswift package init --type executableAktualisieren wir nun die Package.swift für die Arbeit mit der 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"]), ])Code der Handler-Funktion
Ersetzen wir den Inhalt von Sources/MyLambdaFunction/main.swift:
import AWSLambdaRuntime
// Struktur der Anfrage definierenstruct Request: Codable { let name: String let age: Int}
// Struktur der Antwort definierenstruct Response: Codable { let message: String let isAdult: Bool}
// Haupt-Handler@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: "Hallo, \\(event.name)!", isAdult: isAdult ) }}Build und Deployment auf AWS Lambda
Build für Linux
Da Swift auf macOS Binärdateien für macOS erstellt, müssen wir Docker verwenden:
# Dockerfile erstellencat << EOF > DockerfileFROM swift:5.10-amazonlinux2 AS buildWORKDIR /appCOPY . .RUN swift build -c release --