نشر روبوت تويتر الخاص بي لتحدي #100DaysOfCloud على AWS Fargate: دليل شامل

دقائق القراءة: 5

مقدمة: رحلة تحدي #100DaysOfCloud وروبوت تويتر

بعد اجتيازي لآخر شهادة في مجال الحوسبة السحابية، راودني تساؤل حول كمية الوقت والجهد الذي استثمرته في دراسة هذا المجال الواسع. تجاوزت المدة 100 يوم بكثير! هذه التجربة قادتني إلى إدراك أمرين مهمين:

  • لم يكن هناك تحدٍ مشابه لتحدي #100DaysOfCloud.
  • لقد أصبح لدينا الآن ما يكفي من المحتوى والمعرفة لإنشاء هذا التحدي.

على الفور، تواصلت مع أليكس كالواي، مبتكر تحدي #100DaysOfCode، لأستفسر منه عن إمكانية إنشاء تحدي #100DaysOfCloud مستوحى من فكرته الرائدة. وبعد أيام قليلة، أصبح تحدي #100DaysOfCloud رسميًا.

لكن شيئًا ما كان ينقص. إذا كنت قد استخدمت وسم #100DaysOfCode من قبل، فأنت تعلم أن تغريداتك غالبًا ما تُعاد تغريدها ثلاث مرات على الأقل بواسطة روبوتات تويتر المخصصة. وبما أنه لم تكن هناك روبوتات مخصصة لتحدي #100DaysOfCloud الجديد، قررت معالجة هذه المشكلة بنفسي.

في هذا المقال، سنتناول بالتفصيل كيفية نشر روبوت تويتر الخاص بي، وسأوضح لك لماذا اخترت نشره على خدمة AWS Fargate. لنبدأ!

المتطلبات الأساسية قبل البدء

إذا كنت ترغب في متابعة الخطوات وتنفيذ الأوامر المذكورة أدناه، فتأكد من توفر ما يلي:

  • حساب AWS مع مفتاح وصول (access key) ومفتاح سري (secret key).
  • بيانات اعتماد مصادقة Twitter API.
  • تثبيت Docker على جهازك.
  • استنساخ المستودع (repository) من https://github.com/johanrin/100-days-of-cloud-bot.

لماذا اخترت AWS Fargate لنشر الروبوت؟

إذا قمت بمراجعة الشيفرة البرمجية الخاصة بي، ستلاحظ الآتي:

  • الشيفرة مكتوبة بلغة Python وتستخدم حزمة tweepy.
  • الروبوت يعمل بشكل مستمر (باستخدام حلقة while loop).
  • يوجد ملف Dockerfile لبناء الصورة (image) الخاصة بي.

لن أشرح تفاصيل الشيفرة البرمجية هنا لأنها خارج نطاق هذا المقال، ولكنني ذكرت جميع المصادر التي استخدمتها في مستودع GitHub. كانت فكرتي هي نشر صورة Docker في حاوية (container) على السحابة مع مراعاة القيود التالية:

  • لا أرغب في إنفاق الكثير من المال.
  • لا أرغب في إدارة وتشغيل الخوادم.

بما أن لدي رصيدًا في AWS، كان تحقيق القيد الأول سهلاً – اخترت AWS. أما بالنسبة للقيد الثاني، فقد علمت من دورة AWS Certified Developer - Associate أنه يمكننا نشر حاويات بدون خوادم (serverless containers) باستخدام خدمة AWS Fargate.

صورة شهادة AWS Certified Developer - Associate التي تؤكد معرفة الكاتب بخدمة AWS Fargate

تعتمد أسعار خدمات AWS على المنطقة الجغرافية، وقد تختلف التكلفة ببضعة سنتات فقط، لكنني خططت لتشغيل الروبوت الخاص بي لمدة عام واحد على الأقل، لذا كان كل سنت مهمًا. لمعرفة أسعار AWS Fargate وتقليل التكلفة، يمكنك مراجعة وثائق AWS. وجدت أن أرخص منطقة قريبة مني كانت أيرلندا، لذلك قررت نشر الروبوت الخاص بي على AWS Fargate هناك.

كيف تم نشر الروبوت الخاص بي؟

الآن بعد أن شرحت سبب استخدامي لـ AWS Fargate، دعنا ننتقل إلى كيفية نشر الروبوت الخاص بي. هناك خطوتان رئيسيتان لنشر صورة Docker على AWS Fargate:

  1. دفع صورة Docker إلى Amazon Elastic Container Registry (ECR).
  2. نشر صورة Docker على Fargate.

دعنا نشرح كل خطوة بالتفصيل.

1. دفع صورة Docker إلى Amazon Elastic Container Registry (ECR)

في الدليل الجذر لمشروعك، قم ببناء الصورة الخاصة بك من ملف Dockerfile:

docker build . -t 100-days-of-cloud-bot

قم بمصادقة Docker الخاص بك مع Amazon ECR. تأكد من استبدال region بمنطقتك و aws_account_id بمعرف حساب AWS الخاص بك.

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

قم بوضع علامة (tag) على صورتك باستخدام مستودع Amazon ECR. استبدل aws_account_id و region بالقيم الصحيحة.

docker tag 100-days-of-cloud-bot aws_account_id.dkr.ecr.region.amazonaws.com/100-days-of-cloud-bot

ادفع صورتك إلى Amazon ECR:

docker push aws_account_id.dkr.ecr.region.amazonaws.com/100-days-of-cloud-bot

2. نشر صورة Docker على Amazon Fargate

افتح معالج التشغيل الأول لـ Amazon ECS console.

لقطة شاشة لصفحة Amazon ECS console wizard

انقر على Configure في قسم custom container، واملأ الإعدادات التالية، ثم حدد Update.

لقطة شاشة لإعدادات الحاوية المخصصة في Amazon ECS

الخاصية (Property) القيمة (Value)
اسم الحاوية (Container name) container-100-days-of-cloud-bot
الصورة (Image) aws_account_id.dkr.ecr.region.amazonaws.com/100-days-of-cloud-bot
حدود الذاكرة (Memory Limits (MiB)) Soft limit: 512
تعيينات المنافذ (Port mappings) Container port: 80
Protocol: tcp
وحدات المعالجة المركزية (CPU units) 256
متغيرات البيئة (Environment variables) (بيانات اعتماد Twitter API Authentication) CONSUMER_KEY: consumer_key
CONSUMER_SECRET: consumer_secret
ACCESS_TOKEN: access_token
ACCESS_TOKEN_SECRET: access_token_secret

انقر على Edit في قسم Task definition، واملأ الإعدادات التالية، ثم حدد Save.

لقطة شاشة لإعدادات تعريف المهمة (Task definition) في Amazon ECS

الخاصية (Property) القيمة (Value)
اسم تعريف المهمة (Task definition name) task-definition-100-days-of-cloud-bot
ذاكرة المهمة (Task memory) 0.5GB (512)
وحدة المعالجة المركزية للمهمة (Task CPU) 0.25 vCPU (256)

انقر على Next.

انقر على Edit في قسم Define your service، واملأ الإعدادات التالية، ثم حدد Save.

لقطة شاشة لإعدادات تعريف الخدمة (Define your service) في Amazon ECS

الخاصية (Property) القيمة (Value)
اسم الخدمة (Service name) service-100-days-of-cloud-bot
عدد المهام المطلوبة (Number of desired tasks) 1
نوع موازن التحميل (Load balancer type) None

لا نحتاج إلى موازن تحميل هنا بسبب قيود معدل Twitter API. حتى لو قمنا بتوسيع نطاق حاوياتنا، فإن Twitter API سيرسل لنا رسالة خطأ 420 لأن الروبوت يخضع لقيود معدل الطلبات الزائدة.

انقر على Next.

عدّل اسم مجموعتك (Cluster name) إلى cluster-100-days-of-cloud-bot.

لقطة شاشة لتعديل اسم المجموعة (Cluster name) في Amazon ECS

انقر على Next.

راجع التكوين الخاص بك وانقر على Create.

لقطة شاشة لمراجعة التكوين النهائي وإنشاء الخدمة في Amazon ECS

وهذا كل شيء! لقد تم نشر الحاوية بنجاح على AWS Fargate.

الخلاصة

لقد قمت بنشر روبوت تويتر الخاص بك على AWS Fargate في أربع خطوات بسيطة فقط. تتميز خدمة AWS Fargate بسهولة الاستخدام، مما يتيح لنا نشر الحاويات دون الحاجة إلى إدارة وتشغيل الخوادم. كانت حالة الاستخدام هذه بسيطة، ولكن يمكننا القيام بالكثير، مثل إضافة موازن تحميل (load balancer) أو تحديد المزيد من المهام (tasks) لزيادة المرونة والتوسع. أوصيك بالاطلاع على الوثائق الرسمية لمزيد من التفاصيل.

وبما أن هذا المقال كان يدور حول تحدي #100DaysOfCloud، يجب أن أذكر أن لدينا خادم Discord خاصًا بنا، لذا لا تتردد في الانضمام إلى المجتمع والتحدي! لدينا أشخاص رائعون من جميع أنحاء العالم مستعدون لمساعدتك على البدء في عالم الحوسبة السحابية. أتمنى أن تكون قد تعلمت شيئًا مفيدًا من هذا المقال. إذا كان لديك أي أسئلة، يمكنك العثور عليّ على تويتر وسأكون سعيدًا بالإجابة عليها.

الخلاصة التقنية

يمثل نشر التطبيقات على AWS Fargate تحولًا نوعيًا في إدارة البنية التحتية، خاصة للمشاريع التي تتطلب مرونة عالية وتشغيلًا فعالًا من حيث التكلفة دون تعقيدات إدارة الخوادم. في حالة روبوت تويتر، كان اختيار Fargate مثاليًا لأنه يوفر بيئة حاويات مُدارة بالكامل، مما يحرر المطور من أعباء تحديث نظام التشغيل، تصحيح الثغرات الأمنية، أو توسيع نطاق الخوادم. هذه القدرة على التركيز على الشيفرة البرمجية للتطبيق بدلاً من البنية التحتية هي جوهر الحوسبة بدون خوادم. علاوة على ذلك، فإن نموذج الدفع حسب الاستخدام في Fargate يجعله خيارًا اقتصاديًا للغاية لروبوت يعمل بشكل متقطع أو بعبء عمل ثابت ومنخفض، مما يضمن أن التكاليف تتناسب تمامًا مع الاستهلاك الفعلي للموارد. يبرز هذا الدليل العملي كيف يمكن للمطورين الاستفادة من قوة AWS Fargate لتحويل أفكارهم إلى حلول سحابية قابلة للنشر بسرعة وكفاءة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *