مقدمة في Serverless باستخدام Swift مع AWS Lambda
أصبحت بنية Serverless معيارًا في التطوير السحابي الحديث. بفضل AWS Lambda، يمكن للمطورين تشغيل التعليمات البرمجية دون إدارة الخوادم، مع الدفع فقط مقابل وقت التنفيذ الفعلي. حتى وقت قريب، كانت لغة Swift بعيدة عن عالم Serverless، ولكن مع ظهور الدعم الرسمي لـ Swift على AWS Lambda، تغير الوضع جذريًا.
في هذه المقالة، سنستعرض دورة العمل الكاملة لدوال Serverless بلغة Swift: بدءًا من إعداد البيئة وصولاً إلى النشر في بيئة الإنتاج. ستتعلم كيفية استخدام خبرتك في تطوير iOS/macOS لإنشاء حلول سحابية فعالة.
لماذا Swift لـ Serverless؟
Swift ليست مجرد لغة للتطبيقات المحمولة. نقاط قوتها تجعلها خيارًا ممتازًا لـ Serverless:
- أمان الأنواع — يكتشف المترجم الأخطاء في مرحلة البناء
- أداء عالٍ — التعليمات البرمجية الأصلية تعمل أسرع من اللغات المفسرة
- بناء جملة حديث — سهولة قراءة التعليمات البرمجية وصيانتها
- قاعدة تعليمات برمجية مشتركة — يمكن إعادة استخدام النماذج والمنطق من مشاريع iOS/macOS
لتشغيل Swift على AWS Lambda، يتم استخدام الصورة الرسمية Amazon Linux 2 مع Swift 5.10 المثبت مسبقًا. وهذا يضمن التوافق الكامل وأقل وقت بدء تشغيل بارد.
إعداد البيئة وإنشاء أول دالة
تثبيت الأدوات اللازمة
قبل البدء، تأكد من تثبيت ما يلي:
- Swift 5.10 أو أحدث
- Docker (للبناء في بيئة Linux)
- AWS CLI مع بيانات الاعتماد (credentials) المهيأة
- Homebrew (لنظام macOS)
# تثبيت Swift عبر Homebrewbrew 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
نظرًا لأن Swift على macOS يقوم ببناء ملفات ثنائية لنظام macOS، نحتاج إلى استخدام Docker:
# إنشاء Dockerfilecat << EOF > DockerfileFROM swift:5.10-amazonlinux2 AS buildWORKDIR /appCOPY . .RUN swift build -c release --