مقدمة
نمط المراسلة من نقطة إلى نقطة هو نموذج تواصل شائع الاستخدام في بنى الويب والسحابة الحديثة. صُمم هذا النمط لتمكين التفاعلات غير المتزامنة بين مختلف المكونات، مثل الوظائف الخالية من الخوادم أو الخدمات المصغرة، مما يسمح لها بتبادل الرسائل دون الحاجة إلى استجابة فورية.
في هذا النمط، يُطلق على المُرسِل للرسالة اسم المُنتِج، بينما يُطلق على المُستقبِل والمُعالِج للرسالة اسم المُستهلِك. يُمكن وجود المُنتِج والمُستهلِك في النظام نفسه أو في أنظمة مُختلفة، مما يجعله نهجًا مرنًا وقابلًا للتوسّع في التواصل.
على غرار طريقة تسليم رسائل البريد الإلكتروني إلى المستلمين، تُرسل الرسائل من مُنتِج إلى مستهلك مُحدد. يتيح هذا تواصلًا فعالًا وموثوقًا حتى في الأنظمة الموزعة المعقدة. ويُستخدم عادةً في الحالات التي يعرف فيها المُنتِج بدقة أي مستهلك يجب أن يتلقى الرسالة، دون الحاجة إلى تلقي رد فوري.
يسهل نمط المراسلة من نقطة إلى نقطة التواصل والتنسيق بين المكونات بشكل فعال، مما يحسن الأداء العام والموثوقية وقابلية التوسع للهندسة المعمارية الحديثة للويب والسحابة.
ماذا سنبني
في هذا البرنامج التعليمي خطوة بخطوة، سنقوم بتنفيذ هذا النمط باستخدام دالتين AWS Lambda وطابور Amazon SQS.
في هذا البرنامج التعليمي خطوة بخطوة، سنقوم بتنفيذ مثال بسيط باستخدام دالتين AWS Lambda وطابور Amazon SQS.
ستقوم ببناء العينة باستخدام TypeScript وAWS Cloud Development Kit (AWS CDK).
سيتكون المثال من ثلاثة مكونات:
- منتج يمكنه إرسال رسائل إلى المستهلك
- مستهلك يمكنه تلقي الرسائل من المنتج.
- قائمة رسائل تعمل على إنشاء قناة اتصال بين المنتج والمستهلك.
بالإضافة إلى تطبيق هذا النمط، سنسلط الضوء أيضًا على قدرة AWS Cloud Development Kit (CDK) على تعريف البنية التحتية بأكملها ككود برمجي. لمعرفة المزيد عن AWS CDK، يُرجى الاطلاع على دليل مطوري AWS CDK.
بنهاية هذا البرنامج التعليمي، ستكتسب فهمًا شاملًا للمكونات الفردية للمراسلة من نقطة إلى نقطة القائمة على قائمة الانتظار، وستنجح في تنفيذ اتصالات غير متزامنة بين دالتين لامدا باستخدام SQS، وستكتسب خبرة عملية في بناء البنية التحتية. برمج باستخدام CDK
لكن قبل أن نبدأ في الترميز، دعونا نلقي نظرة سريعة على مزايا وعيوب نمط المراسلة غير المتزامنة من نقطة إلى نقطة.
مزايا وعيوب نموذج المراسلة غير المتزامنة من نقطة إلى نقطة
فوائد
- الاقتران غير المتزامن: يُعزز نمط المراسلة غير المتزامنة من نقطة إلى نقطة الاقتران غير المتزامن بين التطبيقات، مما يسمح لها بالتواصل بشكل مستقل دون الحاجة إلى تكامل وثيق. تُسهّل هذه المرونة توسيع وتعديل المكونات الفردية دون التأثير على النظام بأكمله.
- قابلية التوسع: يتيح هذا النمط توسعًا أفقيًا فعالًا، إذ يُمكن إضافة تطبيقات استهلاكية متعددة للتعامل مع أحمال العمل بشكل غير متزامن. يُمكّن هذا النظام من التعامل مع كميات كبيرة من الرسائل والطلبات المتزامنة بفعالية أكبر.
- الموثوقية: في المراسلة غير المتزامنة، إذا لم يتم تسليم الرسالة أو معالجتها، فيمكن إعادة محاولتها أو إرسالها إلى قائمة أخطاء للمعالجة لاحقًا، مما يزيد من موثوقية النظام.
- تحمّل الأخطاء: تُوفّر المراسلة غير المتزامنة تحمّلاً للأخطاء من خلال فصل مُنتجي الرسائل عن مُستقبِليها. في حال تعطل أحد التطبيقات أو المُكوّنات، يُمكن تخزين الرسائل لمعالجتها لاحقًا عند عودة النظام إلى العمل، مما يضمن عدم فقدان أي بيانات.
العيوب
- التعقيد: قد يكون تنفيذ نمط المراسلة غير المتزامنة من نقطة إلى نقطة أكثر تعقيدًا مقارنة بأنماط التكامل الأخرى ويتطلب منطقًا إضافيًا لمعالجة الرسائل.
- تبعيات الرسائل واحتمالية تكرارها: قد تُشكّل إدارة التبعيات بين الرسائل وضمان حذفها بشكل صحيح تحديًا في نظام المراسلة غير المتزامن. ويتطلب ذلك تصميمًا وتنفيذًا دقيقين للتعامل مع المشكلات المحتملة، مثل ترتيب الرسائل وتكرارها وتبعيات معالجتها.
- زيادة زمن الوصول: تُسبب المراسلة غير المتزامنة تأخيرًا بين إرسال الرسالة واستلام الرد، إذ قد تستغرق معالجة الرسائل وقتًا أطول. قد يؤثر هذا التأخير على التفاعلات الفورية، وقد لا يكون مناسبًا للتطبيقات التي تتطلب ردود فعل فورية.
عند اتخاذ القرارات المعمارية، من المهم دائمًا مراعاة هذه التنازلات واختيار نمط الاتصال الأنسب لمتطلباتك وقيودك الخاصة. تعتمد العديد من التطبيقات الحديثة على أنماط تكامل متعددة، بما في ذلك المراسلة غير المتزامنة من نقطة إلى نقطة، بالإضافة إلى التواصل المتزامن بين الطلب والاستجابة، والتواصل القائم على الأحداث.
ولكن الآن، دعونا نبدأ البرنامج التعليمي ونتعلم كيفية تنفيذ هذا النمط باستخدام AWS Lambda وAmazon SQS.
ملاحظة حول تكاليف الموارد عند الترميز: يستخدم هذا البرنامج التعليمي الحد الأدنى فقط من الموارد، والتي يتم تضمينها جميعًا في المستوى المجاني الذي تقدمه AWS خلال الأشهر الـ 12 الأولى بعد إنشاء كل حساب:
- سيتم تخزين بضعة كيلوبايت من التعليمات البرمجية في Amazon S3، الذي يوفر 5 جيجابايت من مساحة التخزين المجانية.
- لقد اتصلنا بـ SQS عدة مرات، والتي تقدم مليون طلب مجاني شهريًا.
- سنقوم باستدعاء دالتين في AWS Lambda، الذي يوفر أيضًا مليون استدعاء مجاني شهريًا.
باتباعك هذا الدليل خطوة بخطوة، ستبقى بالتأكيد في المستوى المجاني. أضفتُ أيضًا قسمًا في النهاية يساعدك على حذف جميع الموارد التي أنشأتها خلال هذا البرنامج التعليمي.
المتطلبات الأساسية
إذا كان لديك واجهة سطر الأوامر (CLI) ومجموعة أدوات التطوير (CDK)، فسترى إصدارات تثبيتاتك. وإلا، فستظهر لك رسالة خطأ تُعلمك بعدم إمكانية العثور على الأمر.
قبل أن تبدأ هذا البرنامج التعليمي، ستحتاج إلى ما يلي:
- حساب AWS
- مجموعة أدوات تطوير AWS السحابية (AWS CDK)
يتطلب هذا البرنامج التعليمي الإصدار 2 على الأقل من AWS CLI وAWS CDK.
بإمكانك تحديد إصدار AWS CLI عن طريق تشغيل الأمر التالي في المحطة الطرفية:
aws --version
ويمكنك الحصول على إصدار AWS CDK من خلال تشغيل الأمر التالي:
cdk --version
الخطوة 1 - إنشاء تطبيق CDK
1.1 – قم بتشغيل برنامج CDK
أولاً، عليك الاهتمام بالإعداد الأولي والسماح لـ CDK بإنشاء الكود الذي سيقوم ببناء المشروع تلقائيًا.
من سطر الأوامر، قم بإنشاء دليل للمشروع، وانتقل إلى الدليل، وقم بتشغيل المشروع:
mkdir point-to-point-example
cd point-to-point-example
cdk init app --language typescript
يؤدي هذا إلى إنشاء بنية الملف الرئيسية للمشروع وتثبيت الحزم المطلوبة.
الآن هو الوقت المناسب لفتح المشروع في IDE المفضل لديك وإلقاء نظرة على المشروع الناتج وخاصة الملفين التاليين:
point-to-point-example/
├── bin/
│ └── point-to-point-example.ts
├── lib/
│ └── point-to-point-example-stack.ts
└── ...
ملف bin\point-to-point-example.ts نقطة الدخول لبرنامج CDK. لن نحتاج إلى مراجعة هذا الملف مرة أخرى في هذا الدرس.
ملف lib\point-to-point-example-stack.ts هذا هو المكان الذي تُعرَّف فيه المجموعة الرئيسية للبرنامج. هذا الملف هو المكان الذي نقضي فيه معظم وقتنا.
مع تقدمنا خلال هذا البرنامج التعليمي، سنقوم بتقديم البنية الأساسية لتطبيقنا إلى الفصل. مثال على كومة نقطة إلى نقطة سنضيف في هذا الملف. افتحه في محرر النصوص لديك وألقِ نظرة عليه:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// import * as sqs from 'aws-cdk-lib/aws-sqs';
export class PointToPointExampleStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
// ...
}
}
1.2 – تمهيد البيئة
عند نشر تطبيق AWS CDK لأول مرة في بيئة، أي حساب AWS ومنطقة محددة، ستحتاج إلى تشغيل البيئة باستخدام حزمة CDKToolkit. تنشر هذه الحزمة دلو S3 يُستخدم لتخزين القوالب والأصول أثناء عملية نشر التطبيق الفعلية.
لتمهيد البيئة، تأكد من أنك لا تزال في دليل نقطة إلى نقطة المثال وقم بتشغيل الأمر التالي:
cdk bootstrap
سيستغرق هذا بعض الوقت وسيتم الانتهاء منه عندما ترى الناتج التالي على سطر الأوامر الخاص بك:
✅ Environment aws://[account_id]/[region] bootstrapped.
1.3 – نشر المكدس الأولي
لنشر المكدس، تأكد من أنك لا تزال في دليل نقطة إلى نقطة المثال وقم بتشغيل الأمر التالي:
cdk deploy
يقوم هذا الأمر بتجميع التطبيق في قالب AWS CloudFormation ونشره على حساب AWS الخاص بك.
الآن، افتح تفاصيل المكدس واستكشفه. في علامة تبويب "الموارد"، ستجد أنه لم يتم نشر أي شيء، باستثناء مورد يُسمى CDKMetadata، وهو مجرد بعض تفاصيل التكوين الأولية لمكدسنا.
الخطوة 2 - إنشاء قائمة انتظار SQS
بمجرد إعداد كل شيء، يمكنك إنشاء أول مورد حقيقي لك، والذي سيكون عبارة عن قائمة انتظار SQS.
2.1 – إضافة قائمة الانتظار إلى المكدس
للبدء، قم بتقديم الملف lib\point-to-point-example-stack.ts يفتح.
بناءً على إصدار قالب CDK، قد يكون قد أضاف بالفعل بعض عبارات الاستيراد، بما في ذلك aws-cdk-lib/aws-sqs، في تعليق. في هذه الحالة، احذف رمز التعليق // من أمام import * as sqs from 'aws-cdk-lib/aws-sqs'، وإلا فأضفه بنفسك، بحيث تبدو الأسطر الثلاثة الأولى من الملف كما يلي:
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as sqs from 'aws-cdk-lib/aws-sqs';
الآن التعليقات في الفصل. مثال على كومة نقطة إلى نقطة احذف واستبدل الكود التالي ثم احفظ التغييرات:
const queue = new sqs.Queue(this, 'Queue', {
queueName: 'MyQueue',
});
2.2 – نشر قائمة الانتظار
لنشر قائمة الانتظار، قم بتشغيل الأمر التالي في دليل المشروع الخاص بك:
cdk deploy
يمكنك الآن مراقبة عملية النشر في مخرجات المحطة الطرفية ويجب أن تكتمل بعد دقيقة أو دقيقتين.
بمجرد اكتمال النشر، انتقل إلى قائمة طوابير SQS في وحدة التحكم الإدارية AWS وابحث عن قائمة انتظار تسمى SqsTutorialStack-Queue:
2.3 – التحقق من قائمة الانتظار المنشورة
انتقل إلى لوحة معلومات SQS في وحدة تحكم إدارة AWS وانظر إلى قائمة قوائم الانتظار. إذا لم تجد قائمة الانتظار الخاصة بك، فتأكد من أنك في المنطقة الصحيحة.

الخطوة 3 - إنشاء وظيفة المنتج وتوصيلها بالطابور
3.1 – اكتب الكود المصدر لوظيفة المولد
سنستخدم جافا سكريبت لوظيفة لامدا، وسنخزن الكود المصدري في مجلد خاص به داخل تطبيق CDK. سنشير لاحقًا إلى هذا المجلد من حزمة CDK الخاصة بنا، ليتمكن من تجميع المحتويات وتحميلها ونشرها تلقائيًا على AWS.
تأكد من وجودك في دليل المشروع وقم بإنشاء الدلائل التالية والملف نفسه:
mkdir lambda-src
mkdir lambda-src/producer
touch lambda-src/producer/send_message_to_sqs.js
يجب أن يبدو هيكل دليل المشروع الخاص بك الآن على النحو التالي:
point-to-point-example/
├── bin/
│ └── point-to-point-example.ts
├── lambda-src/
│ └── producer/
│ └── send_message_to_sqs.js
├── lib/
│ └── point-to-point-example-stack.ts
└── ...
تم إنشاء ملف جديد. lambda-src/producer/send_message_to_sqs.js افتحه في محرر النصوص الخاص بك وأضف الكود التالي:
const sqs = require("@aws-sdk/client-sqs");
// Create an Amazon SQS service client
const client = new sqs.SQSClient();
exports.handler = async (event, context) => {
// Create a message, including the function's name from
// its execution context
const myMessage = 'Hello World from ' + context.functionName
// Get the queue URL from the execution environment
const queueUrl = process.env.SQSQueueUrl
// Create a SendMessageCommand containing the message
// and the queue URL
const command = new sqs.SendMessageCommand({
MessageBody: JSON.stringify({ message: myMessage }),
QueueUrl: queueUrl
});
// Send the message and return the result
const result = await client.send(command);
return result;
}
هذا هو معالج وظيفة Lambda بسيط يرسل رسالة إلى قائمة انتظار SQS الخاصة بنا ويعيد النتيجة.
لاحظ أنه نظرًا لأننا لا نعرف بالضرورة أي قائمة انتظار نستخدمها عند بناء هذه الدالة، أو قد نرغب في تغييرها لاحقًا دون الحاجة إلى تغيير شيفرة الدالة، فإننا نسترجع رابط قائمة الانتظار من وقت التشغيل. بهذه الطريقة، يمكننا تعريفها ديناميكيًا أثناء نشر دالة لامدا في حزمة CDK.
3.2 – إضافة وظيفة المنتج إلى المكدس
لإنشاء دالة لامدا حقيقية في AWS، عليك إضافتها إلى المكدس. للقيام بذلك، افتح lib/point-to-point-example-stack.ts.
أولاً، أضف عبارة استيراد أخرى إلى أعلى الملف:
import * as lambda from 'aws-cdk-lib/aws-lambda';
ثم أضف المقطع التالي داخل المنشئ، أسفل قائمة الانتظار:
const producerFunction = new lambda.Function(this, 'Producer', {
functionName: 'Producer',
runtime: lambda.Runtime.NODEJS_18_X,
code: lambda.Code.fromAsset('lambda-src/producer'),
handler: 'send_message_to_sqs.handler',
environment: {
SQSQueueUrl: queue.queueUrl,
}
});
يؤدي هذا إلى إنشاء وظيفة وحزم ومحتويات دليل lambda-src/producer، وتكوين الوظيفة لاستخدام المعالج المحدد في send_message_to_sqs.js عند استدعائها.
كما يقوم أيضًا بتعيين متغير بيئة SQSQueueUrl بشكل ديناميكي إلى عنوان URL الفعلي لقائمة انتظار SQS بحيث يمكن الوصول إليه من داخل الوظيفة باستخدام process.env.SQSQueueUrl.
3.3 – ترخيص أداء المنتج
تتطلب كل وظيفة Lambda بعض أذونات IAM الأساسية، والتي توفرها CDK بشكل افتراضي باستخدام دور تنفيذ أساسي.
مع ذلك، تحتاج دالة المُنتِج إلى أذونات إضافية لإرسال الرسائل إلى قائمة الانتظار. لحسن الحظ، في CDK، لا نحتاج إلى إدارة سياسات IAM يدويًا. يمكننا استخدام دالة grantSendMessages لقائمة انتظار SQS مع دالة Lambda.
للقيام بذلك، أضف السطر التالي أسفل producerFunction:
queue.grantSendMessages(producerFunction);
3.4 – نشر وظيفة المنتج
لنشر الوظيفة مع الكود المصدر الخاص بها، قم بتشغيل الأمر التالي في دليل المشروع:
cdk deploy
يقوم هذا بإعداد نشر أي موارد جديدة أو معدلة.
إذا كانت أي تغييرات في المكدس الخاص بك تتطلب إنشاء أو تعديل أذونات IAM، فسوف يطالبك CDK بإعادة فحص هذه التغييرات لأسباب أمنية.
في الصورة أدناه، يمكنك أن ترى أن CDK يريد إجراء ثلاثة تغييرات تؤثر على أذونات IAM:
- السماح لخدمة Lambda (lambda.amazon.aws) بتولي دور التنفيذ المرتبط بوظيفة المنتج.
- أضف الأذونات اللازمة بشكل مباشر للسماح للدور التنفيذي بالوصول إلى قائمة SQS وإرسال الرسائل إليها.
- أضف سياسة مُدارة بأذونات أولية لدور التنفيذ.
اكتب y للتأكيد، وسوف يقوم CDK بنشر وظيفة Lambda الجديدة مع دور IAM الخاص بها.
3.5 – اختبار أداء المنتج
بعد تشغيل الوظيفة، انتقل إلى قائمة الوظائف في لوحة معلومات AWS Lambda.
اسم الدالة هو نفسه ما عرّفناه في المكدس: مُنتِج. إذا لم تجد الدالة، فتأكد من أنك في المنطقة الصحيحة.
انقر فوق اسم الوظيفة لفتح تفاصيلها والانتقال إلى قسم الكود المصدر.
يحتوي مجلد مستكشف الملفات الموجود على اليسار على ملف يسمى send_message_to_sqs.js.
انقر نقرًا مزدوجًا فوق اسم الملف لفتح مصدره، حيث يمكنك أن ترى أنه نسخة طبق الأصل من الملف الذي أنشأناه في المجلد lambda-src/producer في مشروع CDK الخاص بنا.
الآن دعونا نقوم بتكوين حدث اختبار.
للقيام بذلك، انقر على زر "اختبار". إذا لم تقم بتكوين حدث اختبار بعد، فسيتم فتح صفحة "تكوين الاختبار". أدخل اسمًا للحدث، مثل "test-event"، ثم انقر على "حفظ".
بمجرد تكوين حدث الاختبار، انقر فوق "اختبار" مرة أخرى، مما سيؤدي بعد ذلك إلى استدعاء وظيفة Lambda مباشرة.
سيؤدي هذا إلى إنشاء علامة تبويب نتائج التنفيذ التي تحتوي على الاستجابة:
{
"$metadata": {
"httpStatusCode": 200,
"requestId": "cb033b2a-1234-5678-9012-66188359d280",
"attempts": 1,
"totalRetryDelay": 0
},
"MD5OfMessageBody": "b5357af0c1c816b2d41275537cc0d1af",
"MessageId": "4a76e538-1234-5678-9012-749f0f4b9294"
}
هل تتذكر مقتطف التعليمات البرمجية في دالة Lambda؟
const result = await client.send(command);
return result;
إن كائن JSON في نتائج التنفيذ أعلاه هو بالضبط ما أعاده SQS كاستجابة لـ client.send(command)، بما في ذلك المعلومات المثيرة للاهتمام مثل "httpStatusCode": 200، مما يعني أن قائمة الانتظار تلقت الرسالة بنجاح.
3.6 – استرداد الرسائل يدويًا من SQS
حاليًا، قائمة الانتظار غير متصلة بالمستهلك، لذا لن يتم استلام الرسالة. مع ذلك، يُمكننا استرداد الرسالة يدويًا.
انتقل إلى لوحة معلومات SQS، وانقر فوق قائمة الانتظار لفتح صفحة تفاصيلها، وانقر فوق زر إرسال واستقبال الرسائل.
في الصفحة التالية، انتقل إلى قسم تلقي الرسائل وانقر على زر استطلاع الرسائل، والذي يجب أن يعرض جميع الرسائل التي يتم إرسالها حاليًا، بما في ذلك الرسائل التي أرسلتها وظيفة البناء الخاصة بك عند اختبارها:
انقر على مُعرِّف الرسالة لفتحها. يجب أن تحتوي على النص التالي:
{"message":"Hello World from Producer"}
تهانينا! لقد نجحت في نشر واختبار دالة Lambda التي تُرسل رسائل إلى قائمة انتظار SQS.
بعد ذلك، نقوم بإنشاء دالة المستهلك وتكوينها ليتم استدعاؤها تلقائيًا كلما وصلت رسالة جديدة إلى قائمة الانتظار.
الخطوة 4 - إنشاء وظيفة المستهلك وتوصيلها بالطابور
4.1 – اكتب الكود المصدر لوظيفة المستهلك
يتم تخزين كود وظيفة المستهلك في مجلد خاص به داخل lambda-src، بحيث يمكن لـ CDK حزمه تلقائيًا وتحميله إلى وظيفة Lambda الجديدة.
تأكد من وجودك في دليل المشروع (وليس في bin/ أو lib/) وقم بإنشاء الدليل التالي بملف المصدر:
mkdir lambda-src/consumer
touch lambda-src/consumer/receive_message_from_sqs.js
افتح lambda-src/consumer/receive_message_from_sqs.js في محرر النصوص الخاص بك وأدخل الكود التالي:
exports.handler = async (event) => {
// Retrieve the message from the event and log it to the console
const message = event.Records[0].body;
console.log(message);
}
هذا هو معالج وظيفة Lambda بسيط للغاية يفتح رسالة SQS ويطبعها في التقرير.
4.2 – إضافة وظيفة المستهلك إلى المكدس
لإنشاء دالة لامدا حقيقية في AWS، عليك إضافتها إلى المكدس. للقيام بذلك، افتح lib/point-to-point-example-stack.ts.
أضف المقطع التالي داخل المنتج، أسفل queue.grantSendMessages(producerFunction):
const consumerFunction = new lambda.Function(this, 'Consumer', {
functionName: 'Consumer',
runtime: lambda.Runtime.NODEJS_18_X,
code: lambda.Code.fromAsset('lambda-src/consumer'),
handler: 'receive_message_from_sqs.handler'
});
تعمل وظيفة المستهلك هذه على إنشاء الحزم ومحتويات دليل lambda-src/consumer وتكوين الوظيفة لاستخدام المعالج المحدد في receive_message_from_sqs.js عند استدعائها.
4.3 – إضافة قائمة انتظار SQS كمصدر حدث إلى المستهلك
نريد تفعيل هذه الدالة عند ورود رسالة جديدة في قائمة الانتظار. للقيام بذلك، نحتاج إلى إضافة قائمة الانتظار كمصدر حدث للدالة، ومنحها جميع الأذونات اللازمة لقراءة الرسائل.
أولاً، أضف عبارة استيراد أخرى إلى أعلى الملف:
import { SqsEventSource } from 'aws-cdk-lib/aws-lambda-event-sources';
بعد ذلك، أضف السطرين التاليين أسفل تعريف customersFunction:
consumerFunction.addEventSource(new SqsEventSource(queue));
queue.grantConsumeMessages(consumerFunction);
4.4 – نشر وظيفة المستهلك
لنشر الوظيفة مع الكود المصدر الخاص بها، قم بتشغيل الأمر التالي في دليل المشروع:
cdk deploy
يؤدي هذا إلى إعداد نشر أي موارد جديدة أو معدلة ويطالبك مرة أخرى بإعادة التحقق من أذونات IAM الجديدة.
اكتب y للتأكيد، وسوف يقوم CDK بتنفيذ وظيفة Lambda الجديدة مع دور التنفيذ الخاص بها وربطها بطابور SQS.
بمجرد اكتمال النشر، سيكون كل شيء جاهزًا ومتصلًا. لنرَ إن كان يعمل.
الخطوة 5 - الاختبار الشامل للتطبيق
لاختبار التطبيق، نستدعي دالة الإنتاج يدويًا لإرسال رسالة أخرى إلى قائمة الانتظار. ثم نتحقق من سجلات تنفيذ دالة الاستهلاك للتأكد من تشغيلها ومعالجتها تلقائيًا.
5.1 – استدعاء دالة المنتج
اتبع الخطوات المذكورة في 3.5 - اختبار دالة الإنتاج لاستدعاء دالة الإنتاج مرة أخرى. إليك ملخص موجز:
- انتقل إلى قائمة الوظائف في لوحة معلومات AWS Lambda.
- افتح وظيفة "المنتج" بالنقر فوق اسمها.
- انتقل إلى قسم الكود المصدر.
- انقر على زر الاختبار.
- تأكد من تشغيل الوظيفة بنجاح.
5.2 – التحقق من تقرير أداء المستهلك
ارجع إلى قائمة الوظائف في لوحة معلومات AWS Lambda وافتح هذه المرة وظيفة المستهلك.
قم بالتمرير إلى الأسفل، وافتح علامة تبويب تسمى Monitor، داخل علامة التبويب هذه، افتح علامة التبويب Logs وألق نظرة على Recent Invocations (الاستدعاءات الأخيرة)، حيث يجب أن تجد رابطًا إلى LogStream الأخير للوظيفة.
بعد ذلك، انقر على رابط "تدفق السجل". سيظهر لك هذا مُدخل السجل نفسه، والذي قد يبدو مُربكًا بعض الشيء إذا لم تكن مُعتادًا على هذا التنسيق.
ابحث ببساطة عن الإدخال الموجود في المنتصف بين هذين، بدءًا من START RequestId: … و END Request Id: ….
انقر على السهم لتوسيع الإدخال حيث يجب أن تجد الرسالة الأصلية:
نتيجة
تهانينا! لقد أنشأتَ كل ما تحتاجه لإعداد مراسلة غير متزامنة من نقطة إلى نقطة بين دالتين Lambda باستخدام SQS.
هناك الكثير مما يمكنك فعله باستخدام SQS، مثل تصنيف الرسائل، وضمان ترتيبها، وإرسال الرسائل غير المرغوب فيها تلقائيًا إلى قائمة انتظار الرسائل ذات الخط النهائي (DLQ). لمعرفة المزيد، يُرجى الاطلاع على دليل مطوري Amazon SQS.

















