بناء تطبيقات لا خادمية متطورة باستخدام AWS Chalice: دليل شامل
مقدمة إلى AWS Chalice: تبسيط بناء التطبيقات اللاخادمية
في عالم الحوسبة السحابية المتسارع، أصبحت التطبيقات اللاخادمية (Serverless Applications) حجر الزاوية في بناء حلول مرنة وقابلة للتوسع وفعالة من حيث التكلفة. مؤخرًا، لفت انتباهي إطار عمل AWS Chalice، وقد أُعجبت حقًا بالبساطة وسهولة الاستخدام التي يقدمها. يمثل AWS Chalice إطار عمل لا خادميًا يتيح لك بناء تطبيقات لا خادمية باستخدام لغة Python، ونشرها بسهولة على سحابة AWS بالاستفادة من خدمات مثل Amazon API Gateway و AWS Lambda.
قررت استكشاف إمكانياته، وتمكنت بالفعل من إنشاء ونشر واجهة برمجة تطبيقات (REST API) نموذجية على AWS في غضون دقائق معدودة. في هذا المقال، سأرشدك خطوة بخطوة خلال عملية بناء ونشر تطبيق لا خادمي يقوم بجلب أحدث الأخبار من خدمة Google News باستخدام Chalice.
متطلبات أساسية لبدء العمل
لضمان سير العمل بسلاسة في هذا الدليل، هناك بعض المتطلبات الأساسية التي يجب توفرها:
- حساب
AWS: يتطلب هذا الشرح وجود حسابAWS. إذا لم يكن لديك حساب بالفعل، يمكنك إنشاء حساب جديد. لا تقلق بشأن التكاليف؛ فالتطبيق الذي سنقوم ببنائه سيستخدم موارد ضمن الطبقة المجانية (Free Tier) منAWS، لذا لن تكون التكاليف عائقًا. - تهيئة بيانات الاعتماد: ستحتاج إلى تهيئة إعدادات الأمان وإنشاء المستخدمين والأدوار اللازمة للوصول إلى موارد
AWS.
إعداد حساب AWS وتهيئة بيانات الاعتماد
يعتمد Chalice على واجهة سطر الأوامر الخاصة بـ AWS (AWS CLI) في الخلفية لنشر المشاريع. إذا لم تكن قد استخدمت AWS CLI للتعامل مع موارد AWS من قبل، يمكنك تثبيتها باتباع الإرشادات المتوفرة هنا. بمجرد التثبيت، ستحتاج إلى تهيئة AWS CLI لاستخدام بيانات الاعتماد من حساب AWS الخاص بك.

تثبيت AWS Chalice: بوابتك نحو التطبيقات اللاخادمية
الخطوة التالية هي تثبيت Chalice نفسه. سنستخدم Python 3 في هذا الدليل، ولكن يمكنك استخدام أي إصدار من Python تدعمه خدمة AWS Lambda.
التحقق من تثبيت Python
قبل تثبيت Chalice، تأكد من أن Python مثبت على نظامك.

تثبيت إطار عمل Chalice
بعد التحقق من Python، يمكنك تثبيت Chalice بسهولة باستخدام مدير الحزم pip:
pip install beautifulsoup4 lxml

التأكد من نجاح تثبيت Chalice
للتأكد من أن Chalice قد تم تثبيته بنجاح، يمكنك التحقق من إصداره:

إنشاء مشروعك الأول باستخدام Chalice
الآن بعد أن أصبح Chalice جاهزًا، حان الوقت لإنشاء مشروع جديد.
إطلاق مشروع جديد
قم بتشغيل الأمر chalice new-project لإنشاء مشروع جديد. في هذا المثال، سنسمي المشروع daily-news:
chalice new-project daily-news

سيؤدي هذا إلى إنشاء مجلد باسم daily-news في دليلك الحالي. ستلاحظ أن Chalice قد أنشأ العديد من الملفات داخل هذا المجلد. في هذا المقال، سنركز على ملفي app.py و requirements.txt فقط.

فهم ملف app.py الافتراضي
دعنا نلقي نظرة على محتويات ملف app.py الذي تم إنشاؤه تلقائيًا:
from chalice import Chalice
app = Chalice(app_name='daily-news')
@app.route('/')
def index():
return {'hello': 'world'}
لقد أنشأ الأمر new-project تطبيقًا نموذجيًا باسم daily-news. يحدد هذا الملف مسارًا واحدًا وهو /، والذي يعيد كائن JSON بالصيغة {"hello": "world"} عند استدعائه. يمكنك الآن تعديل هذا القالب وإضافة المزيد من التعليمات البرمجية لجلب الأخبار من مصادر مثل Google News.
تطوير وظائف التطبيق: جلب الأخبار من Google
سنستخدم موجز RSS الخاص بـ Google News لجلب الأخبار. نظرًا لأن موجزات RSS غالبًا ما تتكون من بيانات بتنسيق XML، سنحتاج إلى مكتبة Python تسمى Beautiful Soup لتحليل هذه البيانات.
تحضير البيئة: تثبيت مكتبة Beautiful Soup
يمكنك تثبيت Beautiful Soup ومكتبة تحليل XML الخاصة بها (lxml) باستخدام pip على النحو التالي:
pip install beautifulsoup4 lxml

إضافة المكتبات اللازمة إلى app.py
بعد ذلك، أضف الاستيرادات التالية إلى ملف app.py. هذه الاستيرادات ضرورية لإجراء مكالمات HTTP باستخدام urllib وتحليل XML باستخدام bs4 (Beautiful Soup).
from chalice import Chalice
from urllib.request import urlopen
from bs4 import BeautifulSoup
app = Chalice(app_name='daily-news')
بناء دالة لجلب الأخبار من موجز Google RSS
الآن، تحتاج إلى إضافة دالة لجلب موجز RSS من Google News. سنستخدم urllib لإجراء مكالمة HTTP إلى نقطة نهاية RSS الخاصة بـ Google والحصول على الاستجابة. بعد ذلك، يمكنك تحليل الاستجابة لاستخراج عنوان الخبر وتاريخ النشر، وإنشاء قائمة بعناصر الأخبار. لتحقيق ذلك، أضف الكود التالي إلى ملف app.py الخاص بك:
# ... (existing imports and app definition)
def fetch_google_news():
rss_url = "https://news.google.com/rss?hl=en-US&gl=US&ceid=US:en"
client = urlopen(rss_url)
xml_page = client.read()
client.close()
soup = BeautifulSoup(xml_page, "xml")
news_list = []
for item in soup.findAll('item'):
title = item.title.text if item.title else 'No Title'
pub_date = item.pubDate.text if item.pubDate else 'No Date'
news_list.append({
'title': title,
'published_date': pub_date
})
return news_list
تحديث دالة الفهرس لعرض الأخبار
قم بتحديث دالة index في ملف app.py لاستدعاء الدالة الجديدة fetch_google_news() وإرجاع قائمة عناصر الأخبار كنتيجة.
# ... (existing code for fetch_google_news and imports)
@app.route('/')
def index():
return {'news': fetch_google_news()}
تضمين التبعيات في requirements.txt
لاحظ أنك قمت بتثبيت بعض التبعيات (مثل beautifulsoup4 و lxml) لجعل الكود يعمل. تم تثبيت هذه التبعيات محليًا، ولن تكون متاحة لحاوية AWS Lambda في وقت التشغيل. لجعلها متاحة لـ AWS Lambda، ستحتاج إلى تجميعها مع الكود الخاص بك. للقيام بذلك، أضف السطور التالية إلى ملف requirements.txt:
beautifulsoup4
lxml
يقوم Chalice بتضمين هذه التبعيات كجزء من الكود الخاص بك أثناء عملية البناء ويقوم بتحميلها كجزء من دالة Lambda.
نشر تطبيقك اللاخادمي على AWS
الآن بعد أن أصبح الكود جاهزًا، دعنا ننشر هذا التطبيق.
تنفيذ أمر النشر
من داخل مجلد daily-news، قم بتشغيل الأمر chalice deploy:
chalice deploy

يقوم هذا الأمر بنشر واجهة برمجة التطبيقات (API) الخاصة بك على Amazon API Gateway وينشئ دالة جديدة على AWS Lambda.

واجهة برمجة تطبيقات daily-news

دالة Lambda daily-news-dev
اختبار واجهة برمجة التطبيقات (API) المنشورة
دعنا نحاول الآن الوصول إلى واجهة برمجة التطبيقات. يمكنك استخدام أداة curl لاستدعاء عنوان URL الخاص بـ API Gateway الذي تلقيته أثناء عملية chalice deploy. ستقوم استجابة استدعاء API بإرجاع قائمة بعناصر الأخبار كما هو موضح أدناه:
curl <YOUR_API_GATEWAY_URL>

تنظيف الموارد: إزالة التطبيق من AWS
بعد الانتهاء من التجربة أو إذا لم تعد بحاجة إلى التطبيق، يمكنك بسهولة حذف جميع الموارد التي تم إنشاؤها.
حذف الموارد المنشأة
يمكنك استخدام الأمر chalice delete لحذف جميع الموارد التي تم إنشاؤها عند تشغيل الأمر chalice deploy:
chalice delete

الخلاصة التقنية
تهانينا! لقد قمت للتو بنشر تطبيق لا خادمي بالكامل على AWS باستخدام Chalice. لم يكن الأمر صعبًا على الإطلاق، أليس كذلك؟ تبرز هذه التجربة قوة AWS Chalice كأداة فعالة لتبسيط دورة حياة تطوير ونشر التطبيقات اللاخادمية بلغة Python. إن قدرته على تجريد تعقيدات API Gateway و Lambda تسمح للمطورين بالتركيز بشكل أكبر على منطق الأعمال الأساسي بدلاً من إدارة البنية التحتية.
يمكنك الآن المضي قدمًا وإجراء أي تعديلات على ملف app.py الخاص بك وإعادة تشغيل chalice deploy لإعادة نشر التغييرات. علاوة على ذلك، يتيح لك Chalice دمج تطبيقك اللاخادمي مع خدمات AWS الأخرى مثل Amazon S3 لتخزين البيانات، و Amazon SNS لإدارة الإشعارات، و Amazon SQS لقوائم الانتظار، وغيرها الكثير. هذا يفتح آفاقًا واسعة لبناء حلول سحابية متكاملة وقوية بكفاءة عالية. استكشف المزيد من الدروس التعليمية واستمر في التعلم!