وظائف Serverless بلغة C++: AWS Lambda من الألف إلى الياء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

وظائف Serverless بلغة C++: AWS Lambda من الألف إلى الياء

\n\n

أصبحت بنية Serverless جزءًا لا يتجزأ من عالم التطوير الحديث، حيث توفر قابلية التوسع والدفع فقط مقابل الاستخدام الفعلي للموارد. يربط معظم المطورين مفهوم serverless بلغات Python أو Node.js أو Java، ولكن لغة C++ هي لغة قوية وعالية الأداء يمكن استخدامها أيضًا لإنشاء وظائف Lambda في AWS. في هذه المقالة، سنستعرض الدورة الكاملة: من إعداد البيئة إلى نشر وتصحيح أخطاء وظيفة C++ في AWS Lambda.

\n\n

لماذا تختار C++ لـ AWS Lambda؟

\n\n

توفر لغة C++ مزايا فريدة لسيناريوهات serverless:

\n
    \n
  • أقصى أداء: يتم ترجمة C++ إلى كود آلي (machine code)، مما يعطي أقل وقت تنفيذ وأقل زمن استجابة (latency). هذا أمر بالغ الأهمية للتداول عالي التردد (high-frequency trading)، معالجة الفيديو في الوقت الفعلي، أو الحسابات الرياضية المعقدة.
  • \n
  • توفير الموارد: تستهلك وظائف C++ ذاكرة ووحدة معالجة مركزية (CPU) أقل مقارنة باللغات المفسرة، مما يسمح بتقليل التكلفة من خلال عدد أقل من الاستدعاءات أو استخدام خطط أسعار أرخص.
  • \n
  • العمل مع الكود القديم (legacy): يمكنك بسهولة دمج مكتبات وخوارزميات C++ الحالية دون الحاجة إلى إعادة كتابتها بلغة أخرى.
  • \n
\n\n

إعداد البيئة و AWS SDK للغة C++

\n\n

قبل كتابة الكود، يجب إعداد بيئة العمل. توفر AWS حزمة AWS SDK للغة C++ رسمية، والتي تسهل التفاعل مع الخدمات (مثل S3 و DynamoDB وغيرها).

\n\n

تثبيت التبعيات

\n

لنظام Linux (Amazon Linux 2 أو Ubuntu) استخدم مدير الحزم:

\n
sudo yum install cmake gcc-c++ libcurl-devel openssl-devel\n# أو لنظام Ubuntu:\nsudo apt-get install cmake g++ libcurl4-openssl-dev libssl-dev
\n\n

بناء AWS SDK

\n

قم بتنزيل وبناء SDK:

\n
git clone https://github.com/aws/aws-sdk-cpp.git\ncd aws-sdk-cpp\nmkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_ONLY="lambda"\nmake -j$(nproc)\nsudo make install
\n\n

العلامة -DBUILD_ONLY="lambda" تسرّع عملية البناء من خلال تضمين الوحدات الضرورية فقط.

\n\n

كتابة دالة Lambda بلغة C++

\n\n

دالة Lambda بلغة C++ هي برنامج عادي يتم ترجمته إلى ملف تنفيذي ويستخدم واجهة خاصة تسمى Runtime API. تتوقع AWS أن يتم تشغيل ملفك الثنائي (binary) وأن يستمع للطلبات على خادم HTTP محلي.

\n\n

هيكل المشروع

\n

لننشئ مشروعًا بسيطًا:

\n
my-lambda-cpp/\n├── CMakeLists.txt\n└── src/\n    └── main.cpp
\n\n

ملف CMakeLists.txt

\n
cmake_minimum_required(VERSION 3.10)\nproject(my-lambda)\n\nset(CMAKE_CXX_STANDARD 17)\n\nfind_package(AWSSDK REQUIRED COMPONENTS lambda)\n\nadd_executable(handler src/main.cpp)\ntarget_link_libraries(handler ${AWSSDK_LINK_LIBRARIES})
\n\n

الكود الرئيسي (main.cpp)

\n

في C++، تستخدم Lambda Custom Runtime. يجب علينا تنفيذ حلقة معالجة الأحداث:

\n
#include <iostream>\n#include <aws/lambda-runtime/runtime.h>\n\nusing namespace aws::lambda_runtime;\n\n// دالة المعالج\ninvocation_response my_handler(invocation_request const& req) {\n    // تسجيل الحدث الوارد\n    std::cout << "Received event: " << req.payload << std::endl;\n\n    // معالجة بسيطة: إرجاع JSON\n    std::string response = R"({"statusCode": 200, "body": "Hello from C++ Lambda!"})";\n    return invocation_response::success(response, "application/json");\n}\n\nint main() {\n    run_handler(my_handler);\n    return 0;\n}
\n\n

هام: تقوم run_handler بتشغيل حلقة لا نهائية تستمع إلى المنفذ 9001 (المنفذ القياسي لـ Runtime API).

\n\n

بناء ونشر الدالة

\n\n

يجب أن يتم البناء في بيئة متوافقة مع Amazon Linux، وإلا فلن يعمل الملف الثنائي

المدونات

توصيات الكتب