Introduction au Serverless en Swift avec AWS Lambda
L'architecture serverless devient la norme du développement cloud moderne. Grâce à AWS Lambda, les développeurs peuvent exécuter du code sans gérer de serveurs, en ne payant que pour le temps d'exécution réel. Jusqu'à récemment, Swift restait à l'écart du monde serverless, mais avec l'arrivée du support officiel de Swift sur AWS Lambda, la situation a radicalement changé.
Dans cet article, nous allons parcourir le cycle complet de travail avec les fonctions serverless en Swift : de la configuration de l'environnement au déploiement en production. Vous apprendrez à utiliser votre expérience de développement iOS/macOS pour créer des solutions cloud efficaces.
Pourquoi Swift pour le Serverless ?
Swift n'est pas seulement un langage pour applications mobiles. Ses points forts en font un excellent choix pour le serverless :
- Sécurité des types — le compilateur détecte les erreurs dès la phase de compilation
- Haute performance — le code natif est plus rapide que les langages interprétés
- Syntaxe moderne — le code est facile à lire et à maintenir
- Base de code partagée — possibilité de réutiliser les modèles et la logique des projets iOS/macOS
Pour exécuter Swift sur AWS Lambda, on utilise l'image officielle Amazon Linux 2 avec Swift 5.10 préinstallé. Cela garantit une compatibilité totale et un démarrage à froid minimal.
Configuration de l'environnement et création de la première fonction
Installation des outils nécessaires
Avant de commencer, assurez-vous d'avoir installé :
- Swift 5.10 ou plus récent
- Docker (pour la compilation dans un environnement Linux)
- AWS CLI avec des credentials configurés
- Homebrew (pour macOS)
# Installation de Swift via Homebrewbrew install swift
# Vérification de la versionswift --version
# Installation d'AWS CLIbrew install awscli
# Configuration d'AWSaws configureCréation du projet Swift Package
Créons un nouveau package Swift exécutable :
mkdir MyLambdaFunctioncd MyLambdaFunctionswift package init --type executableMettons maintenant à jour Package.swift pour fonctionner avec 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 de la fonction de gestion
Remplaçons le contenu de Sources/MyLambdaFunction/main.swift :
import AWSLambdaRuntime
// Définition de la structure de la requêtestruct Request: Codable { let name: String let age: Int}
// Définition de la structure de la réponsestruct Response: Codable { let message: String let isAdult: Bool}
// Gestionnaire principal@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: "Bonjour, \\(event.name) !", isAdult: isAdult ) }}Compilation et déploiement sur AWS Lambda
Compilation pour Linux
Puisque Swift sur macOS compile des binaires pour macOS, nous devons utiliser Docker :
# Création du Dockerfilecat << EOF > DockerfileFROM swift:5.10-amazonlinux2 AS buildWORKDIR /appCOPY . .RUN swift build -c release --