مرحبا يا هبر! نواصل اليوم المناقشة حول الفرص التي توفرها لنا Amazon Web Services وكيفية استخدام هذه الفرص في حل مشكلات التطبيق.
في مثال بسيط ، سنعمل على إنشاء واجهة REST API قابلة للتطوير التلقائي قابلة للتطوير التلقائي للخوادم في غضون بضع دقائق مع تحليل الحالة - الحصول على قائمة لمورد ما.
مثيرة للاهتمام؟ ثم انتقل تحت خفض!
(المصدر)بدلا من الانضمام
لن نستخدم أي قواعد بيانات لتحليل المثال ؛ بدلاً من ذلك ، سيكون مصدر المعلومات الخاص بنا ملفًا نصيًا بسيطًا على AWS S3.
- لذلك ، لنفترض أنه في AWS S3 لدينا ملف نصي برؤوس وبعض العمليات تكتب معلومات إليه.
- سننشئ واجهة برمجة تطبيقات سحابية تُرجع استجابة JSON كطلب GET باستخدام المعلمة التي تم تمريرها.
- في الوقت نفسه ، بناءً على تعقيد المهام ، ونتيجة لذلك ، المتطلبات المتزايدة لقدرة معالجة الموارد ، لا داعي للقلق بشأن ذلك ، لأن الخدمة قابلة للتطوير التلقائي بالكامل. وهذا يعني أنك لا تحتاج إلى أي إدارة وتخصيص خادم وإدارته ، ما عليك سوى تحميل الكود وتشغيله.
بنية النظام قيد التطوير

مكونات خدمات ويب أمازون المستخدمة:
- Amazon S3 - تخزين الأشياء ، والذي يسمح لك بتخزين كميات غير محدودة تقريبًا من المعلومات ؛
- AWS Identity and Access Management (IAM) - خدمة توفر القدرة على التحكم بشكل آمن في الوصول إلى خدمات وموارد AWS. باستخدام IAM ، يمكنك إنشاء وإدارة ومراقبة مستخدمي AWS ومجموعاتهم ، واستخدام أذونات لمنح أو منع الوصول إلى موارد AWS ؛
- AWS Lambda - خدمة تتيح لك تشغيل التعليمات البرمجية دون التكرار وتكوين الخادم. يتم قياس كل قوة الحوسبة تلقائيًا لكل مكالمة. يتم فرض الرسوم بناءً على عدد طلبات الميزات ومدة خدمتها ، أي الوقت الذي يتم فيه تنفيذ التعليمات البرمجية.
يتضمن مستوى الوصول المجاني (المستوى المجاني) مليون طلب شهريًا مجانًا و 400 كيلو بايت في الثانية. اللغات المدعومة: Node.js ، Java ، C # ، Go ، Python ، Ruby ، PowerShell
. سوف نستخدم بيثون:
- مكتبة boto3 هي AWS SDK لـ Python والتي تسمح لك بالتفاعل مع خدمات Amazon المختلفة ؛
- أما أمازون API Gateway ، فهي عبارة عن خدمة مطور تتم إدارتها بالكامل ، وهي مصممة لإنشاء ونشر وصيانة وصيانة ومراقبة وتأمين واجهات برمجة التطبيقات من جميع الأحجام. بالإضافة إلى القدرة على استخدام إصدارات متعددة من نفس واجهة برمجة التطبيقات (المراحل) للتصحيح ، والتنقيح والاختبار ، تتيح لك الخدمة إنشاء واجهات برمجة تطبيقات REST بدون خادم باستخدام AWS Lambda. تنفذ Lambda التعليمات البرمجية في بنية تحتية للحوسبة يمكن الوصول إليها بشكل كبير ، مما يلغي الحاجة إلى توزيع الخادم وتوسيع نطاقه وإدارته.
يتضمن المستوى المجاني لـ HTTP / REST API مليون مكالمة من واجهة برمجة التطبيقات شهريًا لمدة 12 شهرًا
إعداد البيانات
سيتم استخدام ملف نصي يحتوي على علامة تبويب كمحدد حقل كمصدر للمعلومات لإنشاء استجابات لطلب GET REST. المعلومات الآن لا تهم حقًا في هذا المثال ، لكن من أجل الاستخدام الإضافي لواجهة برمجة التطبيقات ، قمت بتنزيل جدول تداول حالي في السندات المقومة بالروبل الروسي وحفظته في bonds.txt وقمت بوضع هذا الملف في مجموعة AWS S3 التي تم إنشاؤها خصيصًا من منصة التداول Quik.
مثال على المعلومات الواردة كما هو موضح في الشكل أدناه:

بعد ذلك ، تحتاج إلى كتابة وظيفة ستقوم بقراءة المعلومات من ملف bonds.txt وتحليلها وإصدارها عند الطلب. سوف AWS Lambda بخير مع هذا. لكن أولاً ، ستحتاج إلى إنشاء دور جديد سيتيح لدالة Lambda التي تم إنشاؤها قراءة المعلومات من المجموعة الموجودة في AWS S3.
إنشاء أدوار AWS لامدا
- في وحدة تحكم إدارة AWS ، انتقل إلى خدمة AWS IAM ثم إلى علامة التبويب "الأدوار" ، انقر فوق الزر "إنشاء دور" ؛
- سيتم استخدام الدور الذي نقوم بإنشائه الآن بواسطة AWS Lambda لقراءة المعلومات من AWS S3. لذلك ، في الخطوة التالية ، حدد "تحديد نوع الموثوق" -> "خدمة Aws" و "اختر الخدمة التي ستستخدم هذا الدور" -> "Lambda" وانقر فوق الزر "التالي: أذونات"
- أنت الآن بحاجة إلى تعيين سياسات الوصول لموارد AWS التي سيتم استخدامها في الدور الذي تم إنشاؤه حديثًا. بسبب قائمة السياسات مثيرة للإعجاب ، باستخدام عامل التصفية للسياسات ، نشير إلى "S3" إليها. نتيجة لذلك ، حصلنا على قائمة تمت تصفيتها لخدمة S3. لاحظ مربع الاختيار المقابل لسياسة "AmazonS3ReadOnlyAccess" وانقر على زر "التالي: علامات".
- الخطوة (إضافة علامات (اختياري)) اختيارية ، ولكن يمكنك تحديد علامات للأدوار إذا رغبت في ذلك. لن نقوم بذلك وننتقل إلى الخطوة التالية - معاينة. هنا تحتاج إلى تعيين اسم الدور - "ForLambdaS3-ReadOnly" ، أضف وصفًا وانقر على زر "إنشاء دور".
كل شيء ، تم إنشاء الدور ويمكننا استخدامه في عمل إضافي.
إنشاء ميزة جديدة في AWS Lambda
- انتقل إلى خدمة AWS Lambda وانقر على زر "إنشاء وظيفة":
املأ جميع الحقول كما هو موضح في الصورة أدناه:
- الاسم - "getAllBondsList" ؛
- وقت التشغيل - "بيثون 3.6"
- الدور - "اختيار دور حالي"
- الدور الحالي - هنا نختار الدور الذي أنشأناه أعلاه - ForLambdaS3-ReadOnly
- يبقى فقط كتابة رمز الوظيفة والتحقق من أدائها في مختلف عمليات الاختبار. تجدر الإشارة إلى أن المكون الرئيسي لأي وظيفة Lambda (إذا كنت تستخدم Python) هو مكتبة boto3:
import boto3 s3 = boto3.resource('s3') bucket = s3.Bucket('your-s3-bucket') obj = bucket.Object(key = 'bonds.txt') response = obj.get()
الفكرة الأساسية لوظيفة بايثون لدينا هي كما يلي:
- افتح ملف bonds.txt ؛
- قراءة رؤوس الأعمدة ؛
- حطم السجلات حسب الصفحة (10 مجموعات في حالتنا) ؛
- حدد الصفحة المطلوبة ؛
- خريطة اسم الأعمدة والسجلات.
- إعطاء النتيجة في شكل مجموعات.
لن نخصص الكثير من الوقت لرمز الوظيفة نفسه والتنفيذ الفني ، كل شيء بسيط هنا ويتوفر الكود الكامل في GitHub .
for i in range(0, len(lines_proc)): d = dict((u''.join(key), u''.join(value)) for (key, value) in zip(headers, lines_proc[i].split("\t"))) response_body.append(d) return { 'statusCode': 200, 'page' : num_page, 'body': response_body }
أدخل الكود (أو اكتب الكود :)) في كتلة "رمز الوظيفة" وانقر على زر "حفظ" في الركن الأيمن العلوي من الشاشة.
- إنشاء أحداث الاختبار. بعد إدخال الرمز ، تكون الوظيفة متاحة للإطلاق والاختبار. انقر على زر "اختبار" وإنشاء بعض أحداث الاختبار: إطلاق وظيفة lambda_handler بمعلمات مختلفة. وهي:
- بدء دالة باستخدام المعلمة 'page': '100'؛
- تشغيل وظيفة باستخدام المعلمة 'page': '1000000'؛
- بدء دالة باستخدام المعلمة 'page': 'bla-bla-bla'؛
- تشغيل وظيفة بدون المعلمة "صفحة".
بدء تشغيل الوظيفة التي تم إنشاؤها من خلال إرسال صفحة حدث الاختبار == 100. كما يتبين من لقطة الشاشة أدناه ، نجحت الوظيفة في إرجاع الحالة 200 (OK) ، بالإضافة إلى مجموعة من المجموعات التي تتوافق مع الصفحة المائة من البيانات المقسمة باستخدام ترقيم الصفحات.
لنقاء التجربة ، سنطلق حدث اختبار آخر - "PageBlaBlaBla". في هذه الحالة ، تقوم الدالة بإرجاع النتيجة مع الكود 415 وتعليق أنه من الضروري التحقق من صحة المعلمات التي تم تمريرها:
اختبار الحدث PageBlaBlaBla
إنشاء API
بعد اختبار جميع الحالات الأخرى وهناك فهم بأن وظيفة Lambda تعمل كما نتوقع ، ننتقل إلى إنشاء API. لنقم بإنشاء نقطة وصول إلى وظيفة Lambda التي تم إنشاؤها أعلاه وإعداد حماية إضافية ضد عمليات البدء غير المرغوب فيها باستخدام مفتاح API.
استنتاجات وملخص
في هذه المقالة ، نظرنا في إنشاء واجهة برمجة تطبيقات REST قابلة للتطوير التلقائي بدون خادم باستخدام خدمات السحابة من Amazon. لم تكن المقالة هي الأصغر في الحجم ، لكنني حاولت أن أوضح قدر الإمكان العملية برمتها لإنشاء واجهة برمجة التطبيقات وإنشاء سلسلة كاملة من الإجراءات.
أنا متأكد من أنه بعد تكرار واحد أو اثنين من الخطوات الموضحة في المقالة ، يمكنك رفع واجهات برمجة التطبيقات السحابية في 5 دقائق أو حتى أسرع.
نظرًا لبساطتها ورخصتها وقوتها النسبية ، تفتح خدمة بوابة AWS API فرصًا واسعة للمطورين لاستخدامها في العمل وفي المشروعات التجارية. لدمج المادة النظرية في هذه المقالة ، حاول التسجيل للحصول على اشتراك سنوي مجاني في Amazon Web Services وقم بتنفيذ الخطوات المذكورة أعلاه بنفسك لإنشاء واجهة برمجة تطبيقات REST.
لأية أسئلة واقتراحات ، أنا مستعد للتحدث بسرور. إنني أتطلع إلى تعليقاتكم على المقال وأتمنى لكم التوفيق!