1. مقدمة
Cloud Run هو نظام أساسي مُدار للحوسبة يتيح لك تشغيل حاويات بدون حالة قابلة للإلغاء من خلال طلبات HTTP. وتستند هذه الطريقة إلى مشروع Knative مفتوح المصدر، ما يتيح إمكانية نقل أعباء العمل على جميع الأنظمة الأساسية. ولا يعتمد تشغيل السحابة الإلكترونية على خوادم، بل يختصر كل عمليات إدارة البنية الأساسية، لذا يمكنك التركيز على الأمور الأكثر أهمية، ألا وهي إنشاء تطبيقات رائعة.
الهدف من هذا البرنامج التعليمي هو إنشاء تطبيق ويب بسيط ونشره في Cloud Run.
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع، الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
بينما يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا البرنامج التعليمي Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell .
إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة تصف ماهيتها. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.
من المفترَض أن تستغرق عملية توفير المتطلبات اللازمة والاتصال بخدمة Cloud Shell بضع دقائق فقط.
يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير اللازمة. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح.
بعد الربط بخدمة Cloud Shell، من المفترض أن تتأكّد من أنّه تمّت مصادقتك وأنّ المشروع مضبوط على رقم تعريف مشروعك.
- شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:
gcloud auth list
مخرجات الأمر
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- شغّل الأمر التالي في Cloud Shell للتأكد من معرفة الأمر gcloud بمشروعك:
gcloud config list project
مخرجات الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
مخرجات الأمر
Updated property [core/project].
3- تفعيل واجهات برمجة التطبيقات
من Cloud Shell، فعِّل واجهات برمجة التطبيقات Artifact Registry وCloud Build وCloud Run API:
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
وينتج عن ذلك رسالة نجاح مماثلة للرسالة التالية:
Operation "operations/..." finished successfully.
والآن، أنت على استعداد لبدء العمل وكتابة طلبك...
4. كتابة بيانات الطلب
في هذه الخطوة، ستُنشئ تطبيق Python بسيطًا يستند إلى Flask يستجيب لطلبات HTTP.
دليل العمل
يمكنك استخدام Cloud Shell لإنشاء دليل عمل باسم helloworld-python
والتبديل إليه:
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
إنشاء ملف باسم main.py
:
touch main.py
عدِّل الملف باستخدام مُحرِّر سطر الأوامر المفضَّل لديك (nano أو vim أو emacs) أو من خلال النقر على زر Cloud Shell Editor:
لتعديل الملف مباشرةً باستخدام محرِّر Cloud Shell، استخدِم الأمر التالي:
cloudshell edit main.py
main.py
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
ينشئ هذا الرمز خدمة ويب أساسية تستجيب لطلبات HTTP GET برسالة ودية.
requirements.txt
أضِف ملفًا باسم requirements.txt
لتحديد التبعيات:
touch requirements.txt
لتعديل الملف مباشرةً باستخدام محرِّر Cloud Shell، استخدِم الأمر التالي:
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/flask
Flask==3.0.2
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
ملف Procfile
وأخيرًا، أضِف ملفًا باسم Procfile
لتحديد طريقة عرض التطبيق:
touch Procfile
لتعديل الملف مباشرةً باستخدام محرِّر Cloud Shell، استخدِم الأمر التالي:
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
تأكَّد من توفّر جميع الملفات ضمن دليل العمل:
ls
يجب أن يسرد هذا الملفات التالية:
main.py Procfile requirements.txt
تطبيقك جاهز للنشر، ولكن لنختبره أولاً...
5- اختبار التطبيق
لاختبار التطبيق، أنشئ بيئة افتراضية:
virtualenv venv
تفعيل البيئة الافتراضية:
source venv/bin/activate
ثبِّت التبعيات:
pip install -r requirements.txt
يُفترض أن تصلك رسالة تأكيد كما يلي:
... Successfully installed Flask ... gunicorn ...
ابدأ تشغيل التطبيق:
python main.py
تشير السجلات إلى أنك في وضع التطوير:
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
في نافذة Cloud Shell، انقر على الرمز Web Preview
واختَر Preview on port 8080
:
من المفترض أن يؤدي ذلك إلى فتح نافذة متصفّح تعرض الرسالة Hello World!
.
يمكنك أيضًا فتح جلسة أخرى في Cloud Shell (علامة تبويب طرفية جديدة) من خلال النقر على رمز +
وإرسال طلب ويب إلى التطبيق الذي يتم تشغيله على الجهاز:
curl localhost:8080
من المفترض أن تتلقى الإجابة التالية:
Hello World!
عند الانتهاء، ارجع إلى جلسة Cloud Shell الرئيسية وأوقِف الأمر python main.py
باستخدام CTRL+C
.
الخروج من البيئة الافتراضية:
deactivate
أخيرًا، أزِل دليل البيئة الافتراضية:
rm -r venv/
يعمل التطبيق على النحو المتوقع: لننشره...
6- النشر إلى التشغيل في السحابة الإلكترونية
يتميّز Cloud Run بأنّه إقليمي، ما يعني أنّ البنية الأساسية التي تدير خدمات Cloud Run تقع في منطقة محدّدة وتديرها Google لتكون متاحة بشكلٍ متكرّر في جميع المناطق ضمن تلك المنطقة. حدِّد المنطقة التي ستستخدمها في عملية النشر، مثل:
REGION="europe-west9"
تأكَّد من أنّك لا تزال في دليل العمل:
ls
يجب أن يسرد هذا الملفات التالية:
main.py Procfile requirements.txt
نشر التطبيق إلى تشغيل السحابة:
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- يمكنك تحديد منطقة تلقائية باستخدام الأمر التالي:
gcloud config set run/region $REGION
. - يمكنك أيضًا إدارة Cloud Run تلقائيًا باستخدام الأمر التالي:
gcloud config set run/platform managed
- ويؤدي الخيار
--allow-unauthenticated
إلى جعل الخدمة متاحة للجميع. لتجنُّب الطلبات التي لم تتم مصادقتها، استخدِم--no-allow-unauthenticated
بدلاً من ذلك.
في المرة الأولى، ستظهر لك رسالة تطلب منك إنشاء مستودع Artifact Registry. انقر على Enter للتحقّق من صحة ما يلي:
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
سيؤدي ذلك إلى بدء تحميل رمز المصدر إلى مستودع Artifact Registry وإنشاء صورة الحاوية:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
وبعد ذلك، يُرجى الانتظار قليلاً حتى تكتمل عملية النشر. عند نجاح العملية، يعرض سطر الأوامر عنوان URL للخدمة:
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
يمكنك الحصول على عنوان URL للخدمة باستخدام الأمر التالي:
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
يُفترض أن يظهر هذا شيئًا مثل ما يلي:
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
يمكنك الآن استخدام تطبيقك من خلال فتح عنوان URL للخدمة في متصفح ويب:
يمكنك أيضًا استدعاء التطبيق من Cloud Shell:
curl $SERVICE_URL?who=me
يُفترَض أن تظهر لك رسالة الترحيب المتوقعة:
Hello me!
تهانينا! لقد نشرت للتو تطبيقًا في Cloud Run. يعمل Cloud Run تلقائيًا وأفقيًا على ضبط صورة الحاوية لمعالجة الطلبات التي تم استلامها، ثم يتقلّص عند انخفاض الطلب. لن تدفع إلا مقابل استخدام وحدة المعالجة المركزية (CPU) والذاكرة والشبكات أثناء معالجة الطلبات.
7. تَنظيم
على الرغم من أنّه لا يتم تحصيل رسوم من خلال Cloud Run عندما لا تكون الخدمة قيد الاستخدام، قد تُحصَّل رسوم منك مقابل تخزين صورة الحاوية في Artifact Registry. يمكنك حذف المستودع أو حذف مشروعك على Google Cloud لتجنُّب تحمُّل الرسوم. يؤدي حذف مشروعك على Google Cloud إلى إيقاف الفوترة لجميع الموارد المستخدمة في هذا المشروع.
لحذف مستودع صور الحاوية:
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
لحذف خدمة Cloud Run:
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
لحذف مشروعك على Google Cloud، يُرجى اتّباع الخطوات التالية:
- استرداد رقم تعريف مشروعك الحالي:
PROJECT_ID=$(gcloud config get-value core/project)
- تأكد من أن هذا هو المشروع الذي تريد حذفه:
echo $PROJECT_ID
- لحذف المشروع:
gcloud projects delete $PROJECT_ID
8. تهانينا!
لقد أنشأت تطبيق ويب بسيطًا ونشرته في Cloud Run!
مزيد من المعلومات
- يمكنك الاطّلاع على مستندات تشغيل Cloud.
- استكمال من تطوير البرامج إلى الإنتاج بثلاث خطوات سهلة باستخدام تشغيل السحابة الإلكترونية، لاستكشاف المزيد من الخيارات
- أكمِل Django on Cloud Run لإنشاء قاعدة بيانات في Cloud SQL وإدارة بيانات الاعتماد من خلال Secret Manager ونشر Django.
- يمكنك الاطّلاع على المزيد من الدروس التطبيقية حول الترميز في Cloud Run...
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.