1. نظرة عامة
يوضح هذا التمرين المعملي الميزات والقدرات المصممة لتبسيط سير عمل التطوير لمهندسي البرمجيات المكلفين بتطوير تطبيقات بايثون في بيئة مدمجة. ويتطلّب تطوير الحاوية النموذجي من المستخدم فهم تفاصيل الحاويات وعملية إنشاء الحاوية. بالإضافة إلى ذلك، على المطوّرين إيقاف مسار العمل والخروج من بيئة التطوير المتكاملة (IDE) لاختبار تطبيقاتهم وتصحيح الأخطاء فيها في البيئات البعيدة. باستخدام الأدوات والتقنيات المذكورة في هذا البرنامج التعليمي، يستطيع المطورون العمل بفعالية مع التطبيقات المحوّلة بدون مغادرة بيئة التطوير المتكاملة (IDE).
ما هي Cloud Workstations؟
توفّر Cloud Workstations بيئات تطوير مُدارة على Google Cloud مع بيئات تطوير أمنية مدمجة وبيئات تطوير قابلة للتخصيص مُعدَّة مسبقًا ولكنها قابلة للتخصيص. يمكنك الوصول إلى Cloud Workstations من خلال بيئة تطوير متكاملة تستند إلى المتصفح، أو من العديد من أدوات تحرير الرموز المحلية (مثل VSCode أو JetBrains IDE مثل IntelliJ IDEA Ultimate وPyCharm مهنية)، أو من خلال بروتوكول النقل الآمن.
تستخدم Cloud Workstations الموارد التالية:
- ينشئ المشرفون مجموعات محطات العمل.
- في كل مجموعة محطات عمل، يُنشئ المشرفون عملية ضبط واحدة أو أكثر لمحطات العمل تعمل كنماذج لمحطات العمل.
- يمكن للمطوّرين إنشاء محطات عمل تحدِّد بيئات التطوير التي توفّر بيئة تطوير متكاملة في السحابة الإلكترونية وأدوات لغوية ومكتبات وغير ذلك.
تتيح Cloud Workstations لمشرفي تكنولوجيا المعلومات والأمان إمكانية توفير بيئات التطوير وتوسيع نطاقها وإدارتها وتأمينها بسهولة، كما تسمح للمطوّرين بالوصول إلى بيئات التطوير باستخدام عمليات ضبط متسقة وأدوات قابلة للتخصيص.
تساعد Cloud Workstations في تغيير الأمان المتبقي من خلال تحسين الوضع الأمني لبيئات تطوير التطبيقات. وتتضمّن ميزات الأمان، مثل عناصر التحكّم في خدمة سحابة VPC وسياسة الدخول أو الخروج الخاص، وتعديل الصور الإلزامية، وسياسات الوصول إلى "إدارة الهوية والوصول".
ما هو Cloud Code؟
توفّر أداة Cloud Code دعمًا لحزمة تطوير البرامج (IDE) لدورة التطوير الكاملة لتطبيقات Kubernetes وCloud Run، بدءًا من إنشاء تطبيق جديد وتخصيصه استنادًا إلى نماذج النماذج ووصولاً إلى تشغيل تطبيقك النهائي. ويمكنك الاستفادة من Cloud Code من خلال نماذج جاهزة للتشغيل ومقتطفات إعدادات جاهزة وتجربة مخصّصة لتصحيح الأخطاء، ما يجعل تطوير البرامج باستخدام Kubernetes وCloud Run أسهل بكثير.
فيما يلي بعض ميزة Cloud Code:
- إنشاء التطبيقات وتشغيلها باستمرار
- تصحيح الأخطاء في تطبيق Kubernetes قيد التطوير
- تسجيل البث والعرض
اطّلِع على مزيد من المعلومات عن ميزات Cloud Code الأخرى.
ما سوف تتعلمه
ستتعلم في هذا التمرين المعملي طُرق التطوير باستخدام حاويات في Google Cloud Platform، بما في ذلك:
- مراجعة Cloud Workstations
- تشغيل محطة العمل
- مراجعة رمز السحابة الإلكترونية
- تصحيح الأخطاء على Kubernetes
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متوفّرًا. ولا يمكن تغييره بعد هذه الخطوة وسيبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بالكامل. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
إعداد البيئة
في Cloud Shell، يمكنك ضبط رقم تعريف مشروعك ورقمه. حفظها كمتغيّرات PROJECT_ID
وPROJECT_ID
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
ستنشر في هذا التمرين المعملي رمزًا برمجيًا في GKE. وستستخدم أيضًا محطات العمل السحابية باعتبارها بيئة تطوير متكاملة (IDE).
يعمل النص البرمجي للإعداد أدناه على إعداد هذه البنية الأساسية من أجلك.
- نزِّل النص البرمجي للإعداد واجعله قابلاً للتنفيذ.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
- فتح ملف
setup_with_cw.sh
وتعديل قيم كلمات المرور التي يتم ضبطها حاليًا على changeME - قم بتشغيل النص البرمجي للإعداد للحصول على مجموعة GKE ستستخدمها في هذا التمرين المعملي. سيستغرق هذا الإعداد حوالى 20 دقيقة.
./setup_with_cw.sh &
- افتح Cloud Workstations في Cloud Console. انتظِر إلى أن تصبح المجموعة في حالة
READY
قبل الانتقال إلى الخطوات التالية. - إذا تم إلغاء ربط جلسة Cloud Shell، انقر على "إعادة الاتصال" ثم قم بتشغيل الأمر gcloud cli لتعيين معرّف المشروع. استبدِل رقم تعريف المشروع النموذجي أدناه برقم تعريف مشروع qwiklabs قبل تشغيل الأمر.
gcloud config set project qwiklabs-gcp-project-id
- عليك تنزيل النص البرمجي أدناه وتشغيله في الوحدة الطرفية لإنشاء إعدادات Cloud Workstations.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
مجموعة محطات العمل السحابية وإعدادها
افتح Cloud Workstations في Cloud Console. تأكَّد من أنّ المجموعة في حالة READY
.
تحقَّق من حالة الإعدادات الحالية.
أنشِئ محطة عمل جديدة.
غيِّر الاسم إلى my-workstation
واختَر الإعدادات الحالية: codeoss-python
.
تشغيل محطة العمل
- ابدأ تشغيل محطة العمل وشغِّلها. سيستغرق بدء محطة العمل بضع دقائق.
- يمكنك السماح بملفات تعريف الارتباط التابعة لجهات خارجية من خلال النقر على الرمز في شريط العناوين.
- انقر على "الموقع الإلكتروني لا يعمل؟".
- انقر على "السماح بملفات تعريف الارتباط".
- بعد تشغيل محطة العمل، ستظهر حزمة Code OSS IDE.
انقر على "وضع علامة تم". في صفحة "البدء"، الأول هو برنامج IDE لمحطة العمل
3- نظرة عامة على رمز السحابة الإلكترونية
راجِع الأقسام المختلفة المتاحة في Cloud Code.
- تطوير لعبة Kubernetes يمكنك الحصول على بيئة مدمجة بالكامل لتطوير وتصحيح الأخطاء على Kubernetes في بيئة تطوير متكاملة (IDE). يمكنك إنشاء مجموعات وإدارتها مباشرةً من داخل بيئة التطوير المتكاملة.
- تصحيح أخطاء التطبيقات قيد التشغيل: يمكنك تصحيح الأخطاء في الرمز البرمجي في برامج IDE باستخدام رمز السحابة الإلكترونية لبرنامج VS Code وCloud Code for IntelliJ من خلال الاستفادة من ميزات تصحيح الأخطاء المضمّنة في بيئة IDE.
- استكشاف عمليات النشر: يمكنك الاطّلاع على الموارد الأساسية والبيانات الوصفية لمجموعات Kubernetes وخدمات Cloud Run. يمكنك استرجاع وصف أو الاطّلاع على السجلّات أو إدارة الأسرار أو إدخال وحدة طرفية مباشرةً في مجموعة.
- تبسيط تطوير Kubernetes المحلي في التفاصيل، تستخدم خدمة Cloud Code for IDE أدوات شائعة، مثل Skaffold وJib وkubectl، وذلك لتوفير ملاحظات مستمرة حول التعليمات البرمجية الخاصة بك في الوقت الفعلي.
تسجيل الدخول إلى Google Cloud
- انقر على رمز رمز السحابة الإلكترونية واختَر "تسجيل الدخول إلى Google Cloud":
- انقر على "المتابعة لتسجيل الدخول".
- تحقَّق من النتائج في الوحدة الطرفية وافتح الرابط:
- سجِّل الدخول باستخدام بيانات اعتماد الطلاب في Qwiklabs.
- حدد "السماح":
- انسخ رمز إثبات الهوية وارجع إلى علامة التبويب "محطة العمل".
- الصق رمز التحقق واضغط على Enter.
انقر على زر "السماح" إذا رأيت هذه الرسالة، بحيث يمكنك نسخها ولصقها في محطة العمل.
4. إنشاء تطبيق Python للمبتدئين جديد
في هذا القسم، ستنشئ تطبيقًا جديدًا في Python.
- افتح نافذة Terminal جديدة.
- إنشاء دليل جديد وفتحه كمساحة عمل
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- أنشِئ ملفًا باسم "
requirements.txt
" وانسخ المحتوى التالي إليه.
Flask
gunicorn
ptvsd==4.3.2
- أنشئ ملفًا باسم "
app.py
" والصق الرمز التالي فيه.
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
- أنشئ ملفًا باسم "
Dockerfile
" والصق ما يلي فيه.
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
ملاحظة: يتيح لك FLASK_DEBUG=1 إعادة تحميل التغييرات على الرمز تلقائيًا إلى تطبيق Python flask. يسمح لك ملف Docker هذا بتمرير هذه القيمة كوسيطة إنشاء.
إنشاء ملفات بيانات
في الوحدة الطرفية، نفِّذ الأمر التالي لإنشاء skaffold.yaml
وdeployment.yaml
تلقائيَين.
- قم بتهيئة Skaffold باستخدام الأمر التالي
skaffold init --generate-manifests
استخدِم الأسهم لتحريك المؤشر عندما يُطلب منك ذلك، واستخدِم مفتاح المسافة لتحديد الخيارات.
اختيار:
8080
للمنفذy
لحفظ الإعدادات
تعديل إعدادات Skaffold
- تغيير اسم التطبيق التلقائي
- فتح "
skaffold.yaml
" - اختَر اسم الصورة المحدَّد حاليًا على أنّه
dockerfile-image
. - انقر بزر الماوس الأيمن واختر "تغيير جميع مواضع الورود"
- اكتب الاسم الجديد كـ
python-app
- عدِّل قسم الإصدار أيضًا من أجل
- إضافة
docker.buildArgs
لتخطّيFLASK_DEBUG=1
- مزامنة الإعدادات لتحميل أي تغييرات على ملفات
*.py
من بيئة تطوير البرامج (IDE) إلى الحاوية قيد التشغيل
بعد إجراء التعديلات، سيظهر قسم الإصدار في ملف skaffold.yaml
على النحو التالي:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
تعديل ملف إعداد Kubernetes
- تغيير الاسم التلقائي
- فتح ملف
deployment.yaml
- اختَر اسم الصورة المحدَّد حاليًا على أنّه
dockerfile-image
. - انقر بزر الماوس الأيمن واختر "تغيير جميع مواضع الورود"
- اكتب الاسم الجديد كـ
python-app
5- التعرّف على عملية التطوير
بعد إضافة منطق الأنشطة التجارية، يمكنك الآن نشر تطبيقك واختباره. سيستعرض القسم التالي استخدام المكوّن الإضافي لتطبيق Cloud Code. إلى جانب أمور أخرى، يتكامل هذا المكون الإضافي مع skaffold لتبسيط عملية التطوير. عند النشر على GKE باتّباع الخطوات التالية، ستنشئ خدمة Cloud Code وSkaffold صورة الحاوية تلقائيًا وترسلها إلى Container Registry ثم تنشر تطبيق your
على GKE. يحدث هذا وراء الكواليس في استخلاص التفاصيل بعيدًا عن تدفق المطور.
إضافة مجموعة Kubernetes
- إضافة مجموعة
- اختَر Google Kubernetes Engine:
- اختيار مشروع
- حدد "python-cluster" تم إنشاؤه في الإعداد الأولي.
- تظهر المجموعة الآن في قائمة مجموعات Kubernetes ضمن Cloud Code. يمكنك التنقّل واستكشاف المجموعة من هنا.
النشر على Kubernetes
- في الجزء السفلي من "محرِّر Cloud Shell"، اختَر Cloud Code
- في اللوحة التي تظهر في أعلى الصفحة، اختَر التشغيل على Kubernetes.
إذا طُلب منك ذلك، اختَر "نعم" لاستخدام سياق Kubernetes الحالي.
يبدأ هذا الأمر إصدارًا من رمز المصدر، ثم يُجري الاختبارات. سيستغرق تنفيذ عملية الإنشاء والاختبار بضع دقائق. تتضمن هذه الاختبارات اختبارات الوحدة وخطوة التحقق التي تتحقق من القواعد التي تم ضبطها لبيئة النشر. سبق أن تم ضبط خطوة التحقّق هذه وتضمن تلقّي تحذير بشأن مشاكل النشر حتى إذا كنت لا تزال تعمل في بيئة التطوير.
- عند تشغيل الأمر لأول مرة سيظهر موجه في أعلى الشاشة يسألك عما إذا كنت تريد سياق kubernetes الحالي، حدد "نعم" قبول السياق الحالي واستخدامه.
- بعد ذلك، سيتم عرض طلب يسأل عن قاعدة بيانات المسجّلين في الحاوية المطلوب استخدامها. اضغط على مفتاح Enter لقبول القيمة التلقائية المقدَّمة.
- حدد "الإخراج" في الجزء السفلي لعرض مستوى التقدّم والإشعارات. باستخدام القائمة المنسدلة، اختَر "Kubernetes: تشغيل/تصحيح الأخطاء"
- اختَر "Kubernetes: تشغيل/تصحيح الأخطاء - مفصّل" في القائمة المنسدلة للقناة على اليسار لعرض تفاصيل إضافية وسجلات البث المباشر من الحاويات.
بعد الانتهاء من عملية الإنشاء والاختبارات، ستحتوي سجلات علامة التبويب "الإخراج" على عنوان URL http://localhost:8080 في الحقل "Kubernetes: Run/Debug". مشاهدة.
- في الوحدة الطرفية لرمز السحابة الإلكترونية، مرِّر مؤشر الماوس فوق عنوان URL الأول في الناتج (http://localhost:8080)، ثم في تلميح الأداة التي تظهر، اختَر "فتح معاينة الويب".
- سيتم فتح علامة تبويب متصفّح جديدة وستعرض الرسالة:
Hello, World!
إعادة التحميل السريع
- فتح ملف
app.py
- تغيير رسالة الترحيب إلى
Hello from Python
لاحظ على الفور أنّه في نافذة Output
، عرض Kubernetes: Run/Debug
، يزامن المُشاهد الملفات المعدّلة مع الحاوية في Kubernetes.
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
- في حال التبديل إلى طريقة العرض "
Kubernetes: Run/Debug - Detailed
"، ستلاحظ أنّ التطبيق سيتعرّف على التغييرات في الملفات، ثم ينشئ التطبيق ويعيد نشره.
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- يُرجى إعادة تحميل علامة تبويب المتصفّح حيث ظهرت النتائج السابقة للاطّلاع على النتائج المحدَّثة.
تصحيح الأخطاء
- الانتقال إلى عرض تصحيح الأخطاء وإيقاف سلسلة المحادثات الحالية
وإذا طُلب منك ذلك، يمكنك اختيار حذف البيانات بعد كل تشغيل.
- انقر على
Cloud Code
في القائمة في أسفل الشاشة واختَرDebug on Kubernetes
لتشغيل التطبيق في وضع "debug
".
- في عرض
Kubernetes Run/Debug - Detailed
لنافذةOutput
، لاحظ أن skaffold سينشر هذا التطبيق في وضع تصحيح الأخطاء.
- في المرة الأولى التي يتم فيها تشغيل هذا الطلب، سيتم طرح سؤال عن مكان المصدر داخل الحاوية. ترتبط هذه القيمة بالأدلة في ملف Docker.
اضغط على Enter لقبول الخيار التلقائي
ستستغرق عملية إنشاء التطبيق ونشره بضع دقائق. إذا انقطع اتصال جلسة تصحيح الأخطاء، أعِد تنفيذ الخطوات إلى "تصحيح الأخطاء على Kubernetes". من "جلسات التطوير" .
- عند اكتمال العملية. ستلاحظ إرفاق برنامج تصحيح أخطاء، وتظهر في علامة التبويب "الإخراج" ما يلي:
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.
، وعنوان URL http://localhost:8080 مُدرَج.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- يغيِّر شريط الحالة السفلي لونه من الأزرق إلى البرتقالي للإشارة إلى أنّه في وضع تصحيح الأخطاء.
- في طريقة العرض "
Kubernetes Run/Debug
"، ستلاحظ بدء حاوية قابلة لتصحيح الأخطاء.
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
استخدام نقاط الإيقاف
- فتح ملف
app.py
- حدِّد العبارة التي نصّها
return message
. - أضف نقطة توقف إلى هذا السطر بالنقر على المساحة الفارغة على يمين رقم السطر. سيظهر مؤشر أحمر للإشارة إلى ضبط نقطة الإيقاف.
- أعد تحميل المتصفح ولاحظ أن برنامج تصحيح الأخطاء يوقف العملية عند نقطة التوقف ويسمح لك بالتحقيق في متغيرات التطبيق وحالته التي تعمل عن بُعد في GKE.
- انقر للأسفل في قسم VARIABLES.
- انقر على "السكان المحلية" وستجد المتغيّر
"message"
. - انقر مرّتين على اسم المتغيّر "message" وفي النافذة المنبثقة، غيِّر القيمة إلى قيمة مختلفة، مثل
"Greetings from Python"
. - انقر على الزر "متابعة" في لوحة تحكم تصحيح الأخطاء
.
- يمكنك مراجعة الردّ في متصفّحك الذي يعرض الآن القيمة المعدّلة التي أدخلتها للتو.
- إيقاف "تصحيح الأخطاء" بالضغط على زر الإيقاف
وإزالة نقطة الإيقاف من خلال النقر على نقطة الإيقاف مرة أخرى.
6- تنظيف
تهانينا أنشأت في هذا التمرين المعملي تطبيقًا جديدًا بلغة بايثون من البداية وأعددته للعمل بفعالية مع الحاويات. ثم نشرت تطبيقك وصحّحته على مجموعة GKE بعيدة وفقًا لمسار المطوّرين نفسه المتوفّر في حِزم التطبيقات التقليدية.
لتنظيف البيانات بعد الانتهاء من التمرين المعملي:
- حذف الملفات المستخدمة في التمرين المعملي
cd ~ && rm -rf ~/music-service
- حذف المشروع لإزالة جميع البنية التحتية والموارد ذات الصلة
—
تاريخ التعديل الأخير: 22/3/23