إدارة الإشعارات اللحظية عبر تطبيقاتك يمكن أن تكون تحديًا كبيرًا – على الأقل دون خدمة الرسائل المناسبة.
خدمة إشعارات أمازون البسيطة (SNS) هنا لتوفير حل رسائل مُدار بالكامل لفصل وتوسيع الخدمات المصغرة، والأنظمة الموزعة، والتطبيقات الخالية من الخوادم. تتيح لك SNS إرسال رسائل إلى عدد كبير من المشتركين عبر بروتوكولات نقل متعددة، مثل HTTP/S، البريد الإلكتروني، الرسائل القصيرة، وإشعارات الدفع على الهواتف المحمولة. تتولى AWS SNS جميع الأعمال الشاقة لتوصيل الرسائل، بما في ذلك التوصيل الموثوق، والمحاولات المتكررة، ووظيفة التراجع، مما يمنحك الحرية للتركيز على بناء ميزات تطبيقك الأساسية.
تتبع خدمة AWS SNS نموذج النشر والاشتراك الذي يسهل توسيعه وفهمه. يمكن توزيع رسالة واحدة منشورة على عدة نقاط نهاية في وقت واحد، مما يجعل SNS مثاليًا للهياكل المعتمدة على الأحداث.
في هذا الدليل، سأرشدك خلال إعداد واستخدام AWS SNS لإرسال الإشعارات عبر قنوات متعددة.
ما هي خدمة AWS SNS؟
خدمة إشعارات أمازون البسيطة (SNS) هي خدمة الرسائل المدارة من AWS التي تسمح لك بفصل الخدمات الصغيرة، والأنظمة الموزعة، والتطبيقات بدون خادم.
يعمل SNS على نموذج بسيط للنشر والاشتراك حيث يُرسل الناشرون رسائل إلى المواضيع، ويستلم المشتركون تلك الرسائل. فكر في موضوع SNS كقناة اتصال – حيث تقوم بنشر الرسائل إلى هذه القناة، ويتم إخطار أي شخص مشترك بشكل فوري. جمال هذا النظام هو أن الناشرون لا يحتاجون إلى معرفة من يستلمون رسائلهم، والمشتركون لا يحتاجون إلى معرفة من يرسل لهم.
قد تتساءل كيف يختلف هذا عن خدمات الرسائل الأخرى في AWS مثلخدمة الانتظار البسيطة (SQS). ببساطة، تستخدم SQS نموذجًا قائمًا على الانتظار مصمم بشكل أساسي لمعالجة المهام بشكل غير متزامن، بينما يركز SNS على بث الرسائل لعدة مستلمين في نفس الوقت. هذا يجعل SNS مثالية للسيناريوهات التي تحتاج فيها إلى إخطار العديد من الأنظمة بحدوث حدث للتو. يمكنك معرفة المزيد حول الاختلافات في مقالة المدونة SQS vs SNS.
يدعم SNS عدة بروتوكولات تسليم، مما يمنحك مرونة في كيفية استقبال المشتركين لإشعارات.
الميزات الرئيسية لخدمة AWS SNS
تأتي SNS محملة بميزات تجعلها الخدمة الوحيدة للإشعارات التي ستحتاج إليها. سأقوم بسرد بعضها:
- بنية معمارية Fan-out: يمكن لـ SNS توصيل الرسائل إلى آلاف النقاط في وقت واحد، مما يتيح لك بث التحديثات عبر بيئة تطبيقك بمكالمة واحدة لواجهة برمجة التطبيقات.
- بروتوكولات النقل المتعددة: لست محدودًا بطريقة واحدة فقط لإرسال الرسائل. تدعم SNS نقاط نهاية HTTP/HTTPS والبريد الإلكتروني والرسائل النصية القصيرة وإشعارات الدفع المحمولة، وحتى قوائم انتظار SQS كنقاط نهاية للاشتراك.
- تصفية الرسائل: ليس كل مشترك يحتاج إلى كل رسالة. مع تصفية الرسائل، يمكن لمشتركيك إنشاء سياسات تصفية لتلقي الرسائل التي تهمهم فقط، مما يقلل من الضوضاء وأعباء المعالجة.
- أرشفة الرسائل: إذا كنت بحاجة إلى الاحتفاظ بسجل لجميع الإشعارات المرسلة، فسوف يسعدك معرفة أن SNS يتكامل مع Amazon S3 لأرشفة الرسائل ومع Amazon Redshift للتحليلات.
- تتبع حالة التسليم: يمكنك مراقبة حالة تسليم إشعاراتك للتأكد من وصولها إلى وجهتها. هذا مفيد بشكل خاص لإشعارات الرسائل النصية والإشعارات الدافعية عبر الهاتف المحمول حيث لا يتم ضمان التسليم.
- التشفير: تبقى بياناتك الحساسة محمية باستخدام دعم SNS للتشفير على الجانب الخادم، مما يضمن سرية رسائلك أثناء الإرسال.
لكن أفضل جزء في SNS يجب أن يكون القابلية للتوسع. يتم توسيع SNS تلقائيًا وفقًا لاحتياجات تطبيقك. لا يهم سواء كنت ترسل عشرة أو عشرة ملايين إشعار في اليوم، فإن الخدمة تتكيف وفقًا لذلك دون الحاجة إلى أي تدخل يدوي.
فيما يلي، سأظهر لك كيفية إعداد SNS.
إعداد AWS SNS
قبل أن تتمكن من إرسال إشعارك الأول باستخدام SNS، ستحتاج إلى اتباع بعض خطوات الإعداد لضمان كل شيء في مكانه.
الخطوة 1: إنشاء حساب AWS
إذا لم يكن لديك حساب AWS بالفعل، ستحتاج إلى إنشاء واحد قبل أن تتمكن من البدء في استخدام SNS.
انتقل إلى الصفحة الرئيسية لـ AWS وانقر على زر “إنشاء حساب AWS” في الزاوية العلوية اليمنى. ستحتاج إلى تقديم عنوان بريدك الإلكتروني، وإنشاء كلمة مرور، وإدخال بعض المعلومات الأساسية حول الحساب. ستطلب AWS أيضًا تفاصيل بطاقتك الائتمانية – لا تقلق، SNS لديها طبقة مجانية سخية جدًا، ولن يتم محاسبتك ما لم تتجاوز تلك الحدود.
بمجرد إعداد حسابك، أنت جاهز للمتابعة. ومع ذلك، أوصي بشدة بإنشاء مستخدم IAM مخصصًا بدلاً من استخدام حساب الجذر الخاص بك. هذا خارج نطاق مقال اليوم، ولكن يُرجى الرجوع إلى التعليمات الرسمية للإرشادات المفصلة.
الخطوة 2: إعداد SNS في واجهة تحكم إدارة AWS
الآن بمجرد حصولك على حساب AWS، حان الوقت للوصول إلى خدمة SNS.
سجل الدخول إلى واجهة تحكم إدارة AWS باستخدام بيانات الاعتماد الخاصة بك وابحث عن SNS. يمكنك القيام بذلك بثلاث طرق:
- اكتب “SNS” في شريط البحث في أعلى الواجهة
- انقر على “الخدمات” في شريط التنقل العلوي وابحث عن SNS تحت فئة “تكامل التطبيقات”
- انتقل مباشرة إلى واجهة تحكم SNS
بغض النظر عن الطريقة، هذه هي الشاشة التي يجب عليك رؤيتها:
الصورة 1 – صفحة خدمة AWS SNS
بمجرد دخولك إلى لوحة تحكم SNS، سترى قائمة على الجانب الأيسر تحتوي على خيارات مثل “المواضيع”، “الاشتراكات”، و”الهاتف المحمول”. توفر لك لوحة التحكم نظرة عامة على موارد SNS الخاصة بك والنشاطات الأخيرة.
ستكون هذه فارغة تماماً بالنسبة لحساب جديد – وهذا متوقع. الآن، دعنا ننشئ أول موضوع SNS لدينا.
الخطوة 3: إنشاء موضوع SNS
موضوع SNS هو في الأساس قناة اتصال يرسل الناشرون الرسائل إليها ويستمع المشتركون.
فكر في الأمر كما لو كان محطة إذاعية – حيث تبث المحطة على تردد محدد (الموضوع)، وكل من يتلقى هذا التردد يتلقى البث. في مصطلحات SNS، تقوم تطبيقك بنشر الرسائل إلى موضوع، وجميع النقاط النهائية المشترك فيها تتلقى تلك الرسائل.
ها هي الطريقة لإنشاء أول موضوع SNS الخاص بك:
- على الشاشة التي رأيتها في الصورة 1, أدخل اسم الموضوع.
- انقر فوق زر “الخطوة التالية”.
- حدد “القياسي” كنوع (تحتوي المواضيع FIFO على حالات استخدام مختلفة سنغطيها لاحقًا).
- (اختياري) أدخل اسم العرض. سيتم تضمينه في الرسائل المرسلة إلى المشتركين عبر الرسائل القصيرة أو البريد الإلكتروني.
- اترك جميع الإعدادات الأخرى على إعداداتها الافتراضية في الوقت الحالي.
- اضغط على “إنشاء موضوع”.
إذا كنت تفضل الصور على النص، فهذه هي الصورة التي يجب أن تبدو عليها شاشتك:
الصورة 2 – إنشاء موضوع SNS
بمجرد أن تكون راضيًا عن القيم، انتقل لأسفل حتى ترى زر “إنشاء موضوع”:
الصورة 3 – إنشاء موضوع SNS (2)
وهذا كل شيء! موضوع SNS الخاص بك جاهز الآن للاستخدام. سترى تفاصيل مثل ARN الموضوع (اسم المورد في أمازون)، الذي يحدد موضوعك بشكل فريد:
الصورة 4 – تفاصيل الموضوع الذي تم إنشاؤه
موضوعك الجديد جاهز للاشتراكات، ولكنه لا يحتوي على أي منها حتى الآن، مما يعني أن أي رسائل تنشرها لن تصل إلى أي مكان. لا تقلق، ستقوم بإصلاح ذلك في القسم التالي عندما تضيف المشتركين.
مشتركو SNS والاشتراكات
كما قلت سابقًا، موضوع SNS الخاص بك يشبه محطة إذاعية. حالياً لا يوجد لديه مستمعون، لكن ذلك سيتغير عندما تضيف مشتركين لاستقبال رسائلك.
ما هو مشترك SNS؟
المشترك هو أي نقطة نهاية تتلقى إشعارات من موضوع SNS الخاص بك عندما يتم نشر رسالة.
اعتبر تشبيه النشرة الإخبارية. في كل مرة تقوم بنشر إصدار جديد (رسالة)، يتم توصيله إلى الجميع في قائمة بريدك. تجعل SNS هذه العملية تلقائية وقابلة للتوسع، وتتولى جميع لوجستيات التوصيل نيابةً عنك.
يدعم AWS مجموعة واسعة من أنواع المشتركين، مما يمنحك مرونة في كيفية معالجة رسائلك. سأقوم بإدراج الأنواع الرئيسية أدناه:
- عناوين البريد الإلكتروني: إرسال إشعارات نصية بسيطة مباشرة إلى صناديق البريد الإلكتروني.
- أرقام SMS: تسليم إشعارات الرسائل النصية إلى الهواتف المحمولة.
- قوائم SQS: توجيه الرسائل إلى خدمات AWS الأخرى لمزيد من المعالجة.
- وظائف Lambda: تشغيل تنفيذ الكود بدون خادم استجابة للإشعارات.
- نقاط نهاية HTTP/HTTPS: إرسال الرسائل إلى تطبيقات الويب أو واجهات برمجة التطبيقات.
- الدفع عبر الهاتف المحمول: تسليم الإشعارات مباشرة إلى تطبيقات الهاتف المحمول.
كل نوع من المشتركين له مزاياه وحالات استخدامه الخاصة. على سبيل المثال، البريد الإلكتروني والرسائل القصيرة رائعة للمستلمين البشريين، بينما تعتبر قوائم SQS ووظائف Lambda أفضل للتواصل بين الأنظمة.
الخطوة 1: إضافة مشترك
الآن بعد أن فهمت ما هو المشتركين، دعنا نضيف واحدًا إلى موضوعك. في هذا الدليل، سأستخدم البريد الإلكتروني لأنه الأسهل في الإعداد.
إليك كيفية إضافة مشترك بريد إلكتروني إلى موضوع SNS الخاص بك:
- من صفحة تفاصيل موضوعك (التي تظهر في الصورة 4), انقر فوق زر “إنشاء اشتراك”.
- في القائمة المنسدلة “البروتوكول”، حدد “البريد الإلكتروني”.
- في حقل “النقطة النهائية”، أدخل عنوان البريد الإلكتروني الذي يجب أن يتلقى الإشعارات.
- اترك جميع الإعدادات الأخرى على قيمها الافتراضية.
- انقر على “إنشاء اشتراك”.
يجب أن تبدو شاشتك شيئًا مثل هذا:
الصورة 5 – إنشاء اشتراك عبر البريد الإلكتروني
بمجرد النقر على “إنشاء اشتراك”، ستضيف AWS الاشتراك إلى موضوعك، ولكنه سيكون في حالة “انتظار التأكيد”:
الصورة 6 – حالة انتظار التأكيد
تُعتبر هذه ميزة أمان مهمة، حيث تريد AWS التأكد من أن مالك عنوان البريد الإلكتروني يريد فعلاً تلقي هذه الإشعارات.
الخطوة 2: تأكيد الاشتراكات
بعد إضافة مشترك، يجب عليهم تأكيد أنهم يريدون تلقي الإشعارات من موضوع SNS الخاص بك.
للاشتراكات عبر البريد الإلكتروني، يرسل AWS تلقائيًا رسالة تأكيد إلى العنوان الذي حددته. تحتوي الرسالة على رابط يجب على المستلم النقر عليه لتنشيط الاشتراك. حتى يحدث ذلك، لن يتم توصيل أي رسائل نشرت على الموضوع إلى هذه النقطة النهائية.
إليك كيف تبدو رسالة التأكيد النموذجية:
الصورة 7 – رسالة تأكيد SNS عبر البريد الإلكتروني
المستلم يحتاج فقط للنقر على رابط “تأكيد الاشتراك” في البريد الإلكتروني. سيتم نقلهم إلى صفحة تؤكد أن اشتراكهم نشط الآن:
الصورة 8 – رسالة تأكيد الاشتراك
العملية مماثلة للمشتركين في خدمة الرسائل النصية القصيرة – ترسل خدمة AWS رسالة نصية تحتوي على رابط تأكيد يجب على المستلم اتباعه. يجب أن تستجيب النقاط النهائية HTTP/HTTPS لطلب التأكيد من AWS، بينما يمكن تكوين موارد AWS مثل وظائف Lambda وطوابير SQS للتأكيد التلقائي.
يمكنك التحقق من حالة اشتراكاتك عن طريق النقر فوق قسم “الاشتراكات” في الشريط الجانبي الأيسر لوحدة تحكم SNS. ستظهر الاشتراكات المؤكدة حالة “تم التأكيد”، بينما ستظهر تلك التي تنتظر التأكيد بحالة “تأكيد معلق”.
الصورة 9 – حالة الاشتراك
بمجرد تأكيد اشتراكك، أنت الآن جاهز لبدء إرسال الرسائل! ستتم توصيل أي رسالة تم نشرها على الموضوع إلى جميع المشتركين المؤكدين باستخدام بروتوكولهم المحدد.
هذا كل ما يلزم لإعداد اشتراكات SNS. في القسم التالي، ستتعلم كيفية نشر الرسائل إلى موضوعك واختبار ما إذا كان المشتركون يتلقونها بشكل صحيح.
نشر الرسائل إلى مواضيع SNS
الآن بعد إعداد موضوع SNS الخاص بك وإضافة المشتركين، حان الوقت لإرسال إشعارك الأول.
الخطوة 1: نشر رسالة
طريقة جيدة للبدء هي عن طريق نشر رسالة من خلال واجهة AWS Console.
لإرسال رسالتك الأولى، انتقل إلى صفحة تفاصيل موضوعك وانقر على زر “نشر الرسالة” في الزاوية اليمنى العليا (انظر الصورة 4). سيؤدي ذلك إلى فتح نموذج نشر الرسالة حيث يمكنك صياغة إشعارك. سترى حقولًا لموضوع الرسالة ومحتواها. الموضوع اختياري ولكنه مفيد للإشعارات عبر البريد الإلكتروني لأنه يصبح سطر موضوع البريد الإلكتروني.
لرسالة اختبار بسيطة، يمكنك إدخال شيء مثل هذا:
الصورة 10 – محتويات الرسالة الأولى
عندما تكون راضيًا عن رسالتك، قم بالتمرير لأسفل وانقر على زر “نشر الرسالة” في أسفل النموذج:
الصورة 11 – نشر رسالة عبر وحدة التحكم
بعد النقر، يوزع SNS على الفور رسالتك إلى جميع المشتركين المؤكدين. إذا كنت قد قمت بإعداد اشتراك بالبريد الإلكتروني، يجب أن تتلقى رسالة الاختبار في صندوق الوارد الخاص بك في غضون ثوانٍ:
الصورة 12 – استقبال الرسالة في البريد الإلكتروني
بسيطة، أليس كذلك؟ دعنا نرى الآن كيفية تخصيصها بشكل أكبر.
الخطوة 2: إرسال إشعارات عبر الرسائل النصية والبريد الإلكتروني
يتيح لك SNS تخصيص كيفية ظهور رسائلك لأنواع مختلفة من المشتركين.
عند نشر رسالة، ستلاحظ خيار “هيكل الرسالة”. بشكل افتراضي، يتم تعيينه على “حمولة متطابقة لجميع بروتوكولات التسليم”، مما يعني أن جميع المشتركين يتلقون نفس الرسالة بالضبط. ومع ذلك، يمكنك أيضًا اختيار “حمولة مخصصة لكل بروتوكول تسليم”، مما يتيح لك تخصيص تنسيق الرسالة لكل نوع من المشتركين.
بالنسبة لإشعارات البريد الإلكتروني، لديك خياران للتنسيق:
- البريد الإلكتروني-JSON: يرسل الحمولة JSON الخام إلى نقطة النهاية الخاصة بالبريد الإلكتروني.
- البريد الإلكتروني: يرسل بريدًا مُنسّقًا بعنوان وجسم الرسالة.
الصورة 13 – تخصيص الحمولة
لاحظ أن هناك حدًا للأحرف يبلغ 160 حرفًا للإشعارات القصيرة. تقوم SNS بتسليم رسائل أطول، لكن ستُعامل كرسائل متعددة. يمكنك أيضًا تعيين نوع رسالة الـ SMS إما “ترويجي” أو “تعاملي”، مما يؤثر على تحسين التسليم:
الصورة 14 – خيارات الرسائل النصية القصيرة
أنت الآن تعرف كيفية إرسال وتخصيص إشعارات البريد الإلكتروني من خلال واجهة AWS Console. في الخطوة التالية، ستتعلم كيفية القيام بنفس الأمر من خلال واجهة سطر الأوامر (CLI) والبايثون.
الخطوة 3: استخدام AWS CLI أو SDK لنشر الرسائل
الوحدة النقالة رائعة للاختبار اليدوي، ولكن في العالم الحقيقي، سترغب في نشر الرسائل برمجيًا.
واجهة سطر الأوامر لأمازون ويب سيرفيس (CLI) تجعل من السهل إرسال رسائل SNS من سطر الأوامر الخاص بك أو من نصوص التشغيل التلقائي.
بافتراض أن لديك واجهة سطر الأوامر لأمازون ويب سيرفيس (CLI) مثبتة ومكونة، قم بتشغيل هذا الأمر لنشر رسالة عبر واجهة سطر الأوامر:
aws sns publish --topic-arn "sns-arn" --subject "CLI Notification" --message "Hello from the AWS CLI!"
الصورة 15 – نشر الرسالة من خلال واجهة سطر الأوامر لأمازون ويب سيرفيس
في لحظة، سترى رسالة مماثلة في صندوق الوارد الخاص بك:
الصورة 16 – نشر الرسالة من خلال AWS CLI (2)
لتطبيقات أكثر تقدمًا، توفر SDKs الخاصة بـ AWS وصولًا برمجيًا إلى SNS في العديد من لغات البرمجة.
إليك مثال بسيط لنشر رسالة باستخدام Python مع مكتبة boto3
:
import boto3 # تهيئة عميل SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN للموضوع (Amazon Resource Name) topic_arn = "sns-arn" # نشر رسالة بسيطة response = sns_client.publish( TopicArn=topic_arn, Message="Hello from Python!", Subject="Python Notification" ) # التحقق مما إذا تم إرسال الرسالة بنجاح if "MessageId" in response: print(f"Message published successfully! Message ID: {response['MessageId']}")
الصورة 17 – نشر الرسالة من خلال Python SDK
مرة أخرى، يتم تسليم الرسالة على الفور إلى صندوق الوارد الخاص بي:
الصورة 18 – نشر الرسائل من خلال Python SDK (2)
هذا كل ما يتعلق بنشر الرسائل باستخدام SNS! لديك الآن طرق متعددة لإرسال الإشعارات، من واجهة التحكم البسيطة إلى النشر البرمجي باستخدام AWS CLI أو SDK.
> جديد في AWS Boto في Python؟ سجل في دورتنا لتصبح ماهرًا في وقت قصير.
في القسم القادم، سنستكشف بعض الميزات المتقدمة في SNS التي سترفع إشعاراتك إلى المستوى التالي.
ميزات SNS المتقدمة
حتى الآن، تعلمت أساسيات SNS. في هذا القسم، سترى بعض الميزات المتقدمة التي تجعل SNS قويًا حقًا.
تصفية رسائل SNS
إرسال نفس الإشعار لجميع المشتركين غالبًا ما يؤدي إلى تلقي نقاط النهاية رسائل لا تهمهم.
تقوم تصفية الرسائل بحل هذه المشكلة من خلال السماح للمشتركين بتصفية الرسائل التي يتلقونها بناءً على خصائص الرسالة. فكر في الأمر كما لو كنت تقوم بإعداد فلاتر البريد الإلكتروني – تقوم بإنشاء قواعد تحدد أي الرسائل تمر. بالنسبة لـ SNS، تُسمى هذه القواعد سياسات التصفية.
لبدء العمل، يمكنك إعداد سياسات التصفية على اشتراكاتك بحيث تتلقى فقط الرسائل ذات الصلة:
الصورة 19 – سياسات تصفية الإشعارات
في هذا المثال، سيرسل المشترك إشعارات فقط للرسائل التي تحتوي على سمة order_value
بقيمة رقمية تبلغ 1500 فأكثر.
الآن، لإرسال إشعار من هذا النوع، يمكنك استخدام الكود الآتي بلغة Python:
import boto3 # تهيئة عميل SNS sns_client = boto3.client("sns", region_name="eu-central-1") # ARN للموضوع (Amazon Resource Name) topic_arn = "arn:aws:sns:eu-central-1:105036517833:TestTopic" response = sns_client.publish( TopicArn=topic_arn, Message="A new high-value order has been placed", Subject="New Order Notification", MessageAttributes={ "order_value": {"DataType": "Number", "StringValue": "2000"}, "region": {"DataType": "String", "StringValue": "EU"}, "category": {"DataType": "String", "StringValue": "Electronics"}, }, ) print(response)
هذا ما ستراه بعد تشغيل السكربت بلغة Python:
الصورة 20 – إرسال إشعار عبر Python
فقط إذا كانت قيمة order_value
1500 أو أكثر، ستتلقى الإشعار:
صورة 21 – محتوى الإشعار
باختصار، تسمح سياسات الفلترة لك بإرسال إشعارات مستهدفة دون تغيير في كود النشر الخاص بك. الجزء الأفضل هو أن عملية الفلترة تحدث على جانب خوادم AWS، وليس في تطبيقك، مما يحسن الكفاءة ويقلل من حركة المرور غير الضرورية.
قوائم انتظار الرسائل الفائتة في SNS
قد تفشل توصيل الرسائل أحيانًا حتى مع أنظمة الاعتمادية العالية.
قائمة الرسائل الميتة (DLQ) هي قائمة خاصة في Amazon SQS حيث يمكن لـ SNS إرسال الرسائل التي لم يتم تسليمها للمشتركين. يحدث ذلك عادةً عندما يكون المشترك غير متاح أو يعود بخطأ. بدلاً من فقدان هذه الرسائل الفاشلة إلى الأبد، تقوم SNS بإعادة توجيهها إلى DLQ، حيث يمكنك تحليلها لاحقًا أو إعادة محاولة التسليم.
يتضمن إعداد DLQ خطوتين. أولاً، قم بإنشاء قائمة SQS لتكون DLQ الخاصة بك:
الصورة 22 – إنشاء قائمة SQS
ثم، قم بتكوين اشتراك SNS الخاص بك لاستخدام هذه القائمة للرسائل غير القابلة للتسليم:
الصورة 23 – إضافة سياسة إعادة التوجيه إلى قائمة SQS
تتطلب هذه التكوينات الأذونات الصحيحة، حيث يحتاج SNS إلى أن يكون قادرًا على إرسال الرسائل إلى قائمة انتظار SQS. في وحدة تحكم AWS، يمكنك إعداد ذلك من خلال مربع اختيار بسيط، ولكن إذا كنت تستخدم CloudFormation أو أدوات بنية تحتية ككود أخرى، ستحتاج إلى إضافة الأذونات المناسبة لـ IAM.
مع وجود DLQ، يمكنك مراقبة فشل التسليم واتخاذ الإجراءات اللازمة عند الحاجة. على سبيل المثال، يمكنك إعداد إنذار يُفعّل عندما تبدأ الرسائل في الظهور في DLQ الخاص بك، مما ينبهك إلى مشاكل محتملة مع المشتركين لديك، ولكن ذلك خارج نطاق هذه القسم.
استخدام AWS Lambda مع SNS
تفتح وظائف Lambda عالمًا من الاحتمالات لمعالجة رسائل SNS.
عندما تشترك في وظيفة لامبدا في موضوع SNS ، يتم تشغيل الوظيفة تلقائيًا كلما تم نشر رسالة. يعني النهج الخادمي للامبدا أنه لا داعي لك لإدارة أي بنية تحتية لمعالجة الرسائل ، حيث يتم توسيعه تلقائيًا استنادًا إلى حجم الرسائل.
للبدء ، أنشئ أولاً وظيفة لامبدا:
الصورة 24 – إنشاء وظيفة لامبدا
ثم ، قم بملء الوظيفة بالشيفرة المماثلة لهذه:
def lambda_handler(event, context): # تأتي رسائل SNS في مصفوفة 'Records' for record in event["Records"]: # استخراج الرسالة message = record["Sns"]["Message"] subject = record["Sns"]["Subject"] timestamp = record["Sns"]["Timestamp"] # معالجة الرسالة print(f"Received message: {message}") print(f"Subject: {subject}") print(f"Timestamp: {timestamp}") # منطق أعمالك هنا # على سبيل المثال، تخزين الرسالة في قاعدة بيانات # أو تفعيل خدمة AWS أخرى print("ALL DONE!") # إرجاع النجاح return {"statusCode": 200, "body": "Message processed successfully"}
الصورة 25 – كود دالة Lambda
بمجرد أن يصبح الكود جاهزًا، انقر على زر “إضافة مشغل” لربط دالة Lambda بـ SNS:
الصورة 26 – ربط SNS بـ Lambda
الدالة مرتبطة الآن بالطابور، مما يعني أنه يمكنك إرسال إشعار اختبار:
صورة 27 – إشعار الاختبار
تسمح الوظائف Lambda لك بمراقبة السجلات، مما يعني أنه يمكنك رؤية عمليات الدالة الأخيرة – نتيجة إرسال إشعار:
صورة 28 – سجلات وظيفة Lambda
يمكن للوظائف Lambda أن تفعل تقريبًا أي شيء مع هذه الرسائل – تخزينها في قاعدة بيانات، تشغيل خدمات AWS الأخرى، إرسال رسائل بريد إلكتروني، أو حتى استدعاء واجهات برمجة تطبيقات خارجية. هذا يجعل SNS و Lambda تركيبة قوية لبناء الهندسة المعمارية المعتمدة على الأحداث. يمكنك معرفة المزيد حول وظائف Lambda في البدء مع AWS Lambdaالبرنامج التعليمي.
في الخطوة التالية، ستتعلم أساسيات مراقبة وتسجيل SNS.
مراقبة وتسجيل نشاط SNS
متابعة نشاطك على شبكات التواصل الاجتماعي ضروري للحفاظ على نظام إشعار موثوق به.
استخدام Amazon CloudWatch مع SNS
يوفر Amazon CloudWatch مراقبة شاملة لجميع خدمات AWS الخاصة بك، بما في ذلك SNS. عند إعداد CloudWatch مع SNS، تحصل على رؤية للمقاييس التشغيلية الهامة مثل معدلات تسليم الرسائل والأخطاء وأنماط استخدام واجهة برمجة التطبيقات.
للبدء في مراقبة CloudWatch لـ SNS، انتقل إلى واجهة التحكم في CloudWatch في حساب AWS الخاص بك. من هناك، يمكنك الوصول إلى مقاييس SNS المُعدة مسبقًا التي تجمعها AWS تلقائيًا لك.
أهم المقاييس القيمة لمراقبتها على SNS تشمل:
- عدد الرسائل المنشورة: يتتبع عدد الرسائل المنشورة في مواضيعك.
- عدد الإشعارات المرسلة: يعرض عمليات تسليم الرسائل الناجحة للمشتركين.
- عدد الإشعارات الفاشلة: يبرز محاولات التسليم الفاشلة، والتي قد تشير إلى مشكلات في التكوين.
- حجم النشر: يقيس حجم الرسائل المنشورة، مما يساعدك على البقاء ضمن حدود الخدمة.
الصورة 29 – لوحة معلومات Cloudwatch الافتراضية لـ SNS
إعداد إنذارات CloudWatch يتيح لك الاستجابة بسرعة للمشكلات المحتملة قبل أن تؤثر على مستخدميك. على سبيل المثال، قد ترغب في إنشاء إنذار يتم تفعيله عندما تتجاوز فشل تسليم الرسائل حدًا معينًا:
- في وحدة تحكم CloudWatch، انتقل إلى قسم “الإنذارات”.
- انقر على “إنشاء إنذار” واختر مقياس SNS الذي ترغب في مراقبته.
- حدد عتبتك (على سبيل المثال، أكثر من 5 عمليات تسليم فاشلة في 5 دقائق).
- قم بتكوين إجراءات الإشعار، مثل إرسال تنبيه إلى فريق العمليات.
إذا كنت تفضل الصور على التعليمات، ابدأ بإنشاء إنذار لمقياس يهمك، مثل NumberOfNotificationsFailed
. قم بإعداد العتبات التي ستفعل الإنذار:
الصورة 30 – إنشاء الإنذار
وهذا كل شيء – لقد تم إنشاء الإنذار وهو الآن نشط:
الصورة 31 – إنشاء تنبيه (2)
يمكن أن تكون هذه التنبيهات الفرق بين معالجة مشكلة بشكل استباقي والتعرف عليها من مستخدمين غير راضين.
مراجعة سجلات SNS
تلتقط AWS CloudTrail جميع أنشطة API في حساب AWS الخاص بك، بما في ذلك الإجراءات المتخذة ضمن خدمة SNS.
كل عملية يتم تنفيذها على مواضيع SNS الخاصة بك – سواء من خلال وحدة التحكم أو CLI أو SDK – تولد إدخالًا في سجلات CloudTrail. توفر هذه السجلات معلومات قيمة لتحليل الأمان، وتتبع تغييرات الموارد، وتدقيق الامتثال.
للوصول إلى سجلات SNS في CloudTrail:
- افتح وحدة التحكم لـ CloudTrail في حسابك في AWS (من المحتمل أن تحتاج إلى إنشاء مسار جديد).
- انتقل إلى “سجل الأحداث” لرؤية نشاط SNS الأخير.
- قم بتصفية الأحداث عن طريق تحديد “مصدر الحدث” وكتابة “sns.amazonaws.com”.
مرة أخرى، إذا لم تكن التعليمات النصية كافية، فراجع الصور أدناه. ابدأ بإنشاء مسار جديد:
الصورة 32 – إنشاء مسار جديد
ثم في “سجل الأحداث”، قم بتصفية الأحداث لتشمل فقط تلك المتعلقة بـ SNS:
الصورة 33 – تصفية السجلات
تُخزن السجلات تلقائيًا في حاوية S3، مما يعني أن هذا النهج يوفر تخزينًا دائمًا لسجلاتك ويمكنه تمكين قدرات الاستعلام المتقدمة أكثر.
> كيف يتم تخزين البيانات على AWS؟اقرأ دليلنا حول S3 وEFS.
لختام الأمر، من خلال دمج مقاييس CloudWatch مع سجلات CloudTrail، تنشئ نظام مراقبة شامل يساعد في ضمان تشغيل بنية التحرير والإرسال البسيطة الخاصة بك بشكل موثوق به.
أفضل الممارسات لاستخدام AWS SNS
تعرف الآن على الميزات الأساسية والمتقدمة لخدمة AWS SNS. ما تبقى لمناقشته هي أفضل الممارسات لإنشاء المواضيع وإرسال الرسائل.
تأمين مواضيع SNS
يجب أن تكون الأمان أولوية قصوى عند إعداد بنية تحتية لـ SNS الخاصة بك. بدون ضوابط مناسبة، قد تكون مواضيعك عرضة للوصول غير المصرح به، مما يمثل خطرًا كبيرًا على الأمان.
يوفر AWS إدارة الهوية والوصول (IAM) الأدوات التي تحتاجها لتأمين مواضيع SNS الخاصة بك. ابدأ بإنشاء سياسات تتبع مبدأ الحد الأدنى من الامتيازات – امنح فقط الأذونات المحددة اللازمة لكل مستخدم أو خدمة. على سبيل المثال، قد ترغب في أن تقوم بعض التطبيقات بنشر الرسائل فقط بينما تحتاج أخرى فقط للاشتراك في المواضيع.
إليك نموذج سياسة IAM تقيد النشر لموضوع معين:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sns:Publish", "Resource": "sns-arn" } ] }
يمكنك أيضًا استخدام سياسات المواضيع للتحكم في حسابات AWS التي يمكنها الاشتراك في مواضيعك. وهذا مهم بشكل خاص إذا كنت تشارك البيانات عبر الحدود التنظيمية.
لا تنسَ مراجعة الأذونات بانتظام باستخدام AWS CloudTrail وإزالة الوصول الذي لم يعد ضروريًا.
إدارة حجم الرسائل
يمكن أن overwhelm أحجام الرسائل العالية المشتركين إذا لم يتم التعامل معها بشكل صحيح. هنا يكون دمج SNS مع خدمات AWS الأخرى أمرًا أساسيًا.
نموذج شائع هو بنية “التوزيع”، حيث تنشر الرسائل إلى موضوع SNS يحتوي على عدة قوائم انتظار SQS مشترك بها. يمكن أن تغذي كل قائمة انتظار أنظمة معالجة مختلفة حسب سرعتها الخاصة. هذا يفصل الناشرين عن المستهلكين، ويوفر وسادة أثناء ذروة الحركة.
لأغراض المعالجة في الوقت الحقيقي، ضع في اعتبارك الاشتراك في دالات Lambda لمواضيعك. تتوسع Lambda تلقائيًا مع حجم الرسائل، مما يلغي الحاجة إلى توفير وإدارة الخوادم.
تقليل التكاليف
على الرغم من كون شبكات التواصل الاجتماعي تكلفة فعالة، يمكن أن تتراكم النفقات بسرعة مع زيادة حجم الرسائل الخاصة بك. يمكن أن تساعد بعض الاختيارات الاستراتيجية في الحفاظ على تكاليفك تحت السيطرة.
أولاً، كن انتقائيًا فيما يتعلق ببروتوكولات الاشتراك الخاصة بك. يعتبر نقاط نهاية HTTP/HTTPS خيارًا فعالًا من حيث التكلفة بشكل عام. ينبغي استخدام إشعارات البريد الإلكتروني بحذر، حيث تتسبب في تكاليف أعلى لكل رسالة.
تصفية الرسائل هي أداة أخرى قوية لتوفير التكاليف. من خلال تنفيذ سياسات تصفية على اشتراكاتك، تتأكد من أن الرسائل تُسلم فقط للمشتركين المهتمين. على سبيل المثال، إذا كان لديك موضوع لجميع تنبيهات النظام، قد ترغب في أن يتلقى مهندسوك الذين يعملون بالتناوب فقط التنبيهات الحرجة أثناء دوامهم، وليس كل إشعار:
# الاشتراك مع سياسة تصفية response = sns.subscribe( TopicArn="sns-arn", Protocol="email", Endpoint="[email protected]", Attributes={"FilterPolicy": '{"severity": ["critical"]}'}, )
أخيرًا، قم بمراجعة استخدامك لشبكات التواصل الاجتماعي في AWS Cost Explorer بانتظام وابحث عن فرص لتوحيد المواضيع أو إزالة الاشتراكات غير المستخدمة. الموارد غير المستخدمة أو المكررة لا تضيف فقط تكاليف غير ضرورية ولكنها تعقد أيضًا عمارتك.
من خلال اتباع هذه الممارسات الجيدة، ستنشئ تنفيذًا لـ SNS يكون آمنًا وقابلاً للتوسيع وفعّالًا من حيث التكلفة – كل ما تحتاجه للحصول على خدمة إشعارات موثوقة دون مصاريف غير متوقعة أو مخاوف أمنية.
تلخيص AWS SNS
إذا كنت بحاجة إلى إشعارات فورية عبر تطبيقات موزعة، فلا تنظر إلى أبعد من AWS SNS. إنه سهل الاستخدام، ويتكامل بشكل جيد مع خدمات AWS الأخرى، ويتطور بشكل لا متناهٍ ليلائم احتياجاتك.
نموذج النشر والاشتراك في SNS يجعل من السهل تنفيذ أنظمة الإشعارات التي يمكن أن تصل إلى عدة قنوات في نفس الوقت. من إنشاء المواضيع وإدارة المشتركين إلى تنفيذ ميزات متقدمة مثل تصفية الرسائل وطوابير الرسائل الميتة، لديك الآن المعرفة لبناء بنية تحتية قوية للإشعارات.
لقد تعلمت أيضًا عن الجوانب الحرجة للرصد والأمان وإدارة التكاليف التي تضمن استمرارية وكفاءة تنفيذ SNS الخاص بك في بيئات الإنتاج.
مع استمرار التطبيقات في اعتماد الهندسات المعمارية المدفوعة بالأحداث، تصبح الخدمات مثل SNS أكثر قيمة. سواء كنت تقوم ببناء نظام تنبيه بسيط أو خدمات صغيرة معقدة، توفر الأنماط في هذا البرنامج التعليمي أساسًا للتواصل الفعال بين مكونات النظام الخاص بك.
لمعرفة المزيد عن خدمات AWS، تابع هذه الدورات عبر DataCamp:
يمكنك حتى استخدام DataCamp للتحضير لامتحانات الشهادات الخاصة بـ AWS – ممارس سحابة AWS (CLF-C02).