1. مقدمة
مرحبًا بالجميع، شكرًا لمجيئك اليوم. هل أنت مستعد للتعرّف على Google Compute Engine؟
في هذا الدرس التطبيقي حول الترميز، سنستكشف Compute Engine من خلال مثال على تطبيق Guestbook.
ستنشئ مثيلات Compute Engine وتنشر nginx، وأخيرًا تضع جهاز موازنة حمل الشبكة في المقدمة. يمكنك إنشاء مثيل في Compute Engine إما من وحدة التحكم الرسومية أو من سطر الأوامر. سيرشدك هذا التمرين المعملي خلال استخدام سطر الأوامر.
يوفّر Google Compute Engine أجهزة افتراضية يتم تشغيلها في مراكز بيانات Google المتصلة بشبكة الألياف الضوئية العالمية التابعة لها. توفِّر الأدوات وسير العمل اللذان تقدّمهما إمكانية التوسُّع من مثيل واحد إلى حوسبة سحابية عالمية متوازنة.
يتم تشغيل هذه الأجهزة الافتراضية بسرعة، وتتميز بمساحة تخزين دائمة على القرص وتحقّق أداءً ثابتًا. تتوفر الأجهزة بالعديد من التكوينات بما في ذلك الأحجام المحددة مسبقًا، ويمكن إنشاؤها أيضًا باستخدام أنواع أجهزة مخصصة محسَّنة لاحتياجاتك الخاصة.
وأخيرًا، الآلات الافتراضية Compute Engine هي أيضًا التكنولوجيا التي تستخدمها العديد من منتجات Google Cloud الأخرى (Kubernetes Engine وCloud Dataproc وCloud Dataflow، وما إلى ذلك).
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه
PROJECT_ID
). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
Google Cloud Shell
يمكن إدارة Google Cloud وCompute Engine عن بُعد من الكمبيوتر المحمول، إلا أننا سنستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
هذا الجهاز الافتراضي المستند إلى نظام دبيان محمل بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. وهذا يعني أنّ كل ما ستحتاجه في هذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يعمل على جهاز Chromebook).
- لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell (من المفترَض أن تستغرق عملية الإعداد والاتصال بالبيئة بضع دقائق فقط).
بعد الربط بتطبيق Cloud Shell، من المفترض أن يظهر لك أنّه قد تمت مصادقتك وأنّ المشروع سبق أن تم ضبطه على PROJECT_ID
.
gcloud auth list
مخرجات الأمر
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
مخرجات الأمر
[core] project = <PROJECT_ID>
إذا لم يتم ضبط المشروع لسبب ما، ما عليك سوى إصدار الأمر التالي:
gcloud config set project <PROJECT_ID>
هل تبحث عن PROJECT_ID
؟ تحقَّق من المعرّف الذي استخدمته في خطوات الإعداد أو ابحث عنه في لوحة بيانات Cloud Console:
تضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، وهو ما قد يكون مفيدًا عند تشغيل الأوامر المستقبلية.
echo $GOOGLE_CLOUD_PROJECT
مخرجات الأمر
<PROJECT_ID>
- أخيرًا، قم بتعيين تهيئة المنطقة الافتراضية والمشروع.
gcloud config set compute/zone us-central1-f
يمكنك اختيار مجموعة متنوعة من المناطق المختلفة. لمزيد من المعلومات، راجع المناطق المناطق:
3- إنشاء مثيل في Compute Engine
كما ناقشنا سابقًا، سنستخدم سطر أوامر gcloud
في هذا الدرس التطبيقي حول الترميز. ويمكن إنجاز جميع المهام هنا باستخدام وحدة التحكّم (المتوفّرة على console.cloud.google.com).
لنبدأ أولاً بإنشاء مثيل بالإعدادات الافتراضية :
$ gcloud compute instances create myinstance Created [...]. NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
دوِّن EXTERNAL_IP
، هذا مهم لاحقًا.
يتم إنشاء المثيل باستخدام عدد من الإعدادات الافتراضية :
- المنطقة التي تختارها. تكون جميع النُسخ الافتراضية في منطقة. يمكنك اختيار منطقة في وقت الإنشاء باستخدام العلامة
--zone
أو يمكنك ضبط منطقة تلقائية (كما فعلنا في عملية الإعداد الأوّلية) وحذف العلامة--zone
. - أحدث صورة Debian GNU/Linux 9 (stretch) إذا كنت تستخدم صورتك المخصّصة، أدخِل اسم الصورة هنا بدلاً من ذلك. مثلاً:
--image my-own-image
- نوع الجهاز
n1-standard-1
: يمكنك اختيار نوع جهاز آخر، مثلn1-highmem-4
أوn1-highcpu-6
. إذا لم يلائم أي نوع من أنواع الأجهزة المحددة مسبقًا احتياجاتك، يمكنك استخدام نوع جهاز مخصّص. - قرص دائم جذري يحمل الاسم نفسه للمثيل يتم توصيل القرص تلقائيًا بالمثيل.
يمكنك تشغيل "gcloud compute instances create --help
" للاطّلاع على جميع الخيارات المتاحة.
4. تفعيل جدار الحماية للمنفذ 80
وفقًا للإعدادات التلقائية، لا تسمح خدمة Google Cloud Platform إلا بالوصول إلى عدد قليل من المنافذ. نظرًا لأننا سنقوم بتثبيت Nginx قريبًا - فلنقم بتمكين المنفذ 80 في تهيئة جدار الحماية أولاً.
$ gcloud compute firewall-rules create allow-80 --allow tcp:80 Created [...]. NAME: allow-80 NETWORK: default DIRECTION: INGRESS PRIORITY: 1000 ALLOW: tcp:80 DENY: DISABLED: False
سيؤدي ذلك إلى إنشاء قاعدة جدار حماية باسم allow-80
ولها قائمة تلقائية بمجموعات عناوين IP المسموح لها بإجراء اتصالات واردة (--source-ranges
) ويتم ضبطها على 0.0.0.0/0
(في كل مكان).
يمكنك تشغيل gcloud compute firewall-rules create --help
للاطّلاع على جميع الإعدادات التلقائية وجميع الخيارات المتاحة، بما في ذلك إمكانية تطبيق قواعد جدار الحماية استنادًا إلى العلامات.
5- SSH في المثيل
لاستخدام بروتوكول النقل الآمن في المثيل من سطر الأوامر (لا يزال من Cloud Shell) :
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
هذا كل ما في الأمر! الأمر سهل جدًا. (في الإنتاج، تأكد من إدخال عبارة مرور :)
بدلاً من ذلك، يمكنك أيضًا استخدام بروتوكول النقل الآمن (SSH) في المثيل مباشرةً من وحدة التحكّم (console.cloud.google.com)، من خلال الانتقال إلى Compute Engine > نسخ الجهاز الافتراضي (VM)، والنقر على بروتوكول النقل الآمن (SSH)
6- تثبيت Nginx
سجِّل الدخول إلى myinstance، المثيل الذي تم إنشاؤه حديثًا، وثبِّت nginx:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
اختبار عمل الخادم باستخدام curl
من myinstance:
$ curl -s localhost | grep nginx <title>Welcome to nginx!</title> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and <a href="http://nginx.org/">nginx.org</a>.<br/> <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p>
ابحث عن عنوان IP الخارجي للمثيل من خلال إدراج المثيلات إما من خلال واجهة مستخدم الويب:
تأكَّد من الخروج من بروتوكول النقل الآمن (SSH)، ثم شغِّل الأمر من Cloud Shell:
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
بعد ذلك، انتقِل إلى http://EXTERNAL_IP/
حيث يكون EXTERNAL_IP
هو عنوان IP العلني لحساب myinstance وستظهر لك صفحة nginx.
7. النص البرمجي للتشغيل
بدلاً من إعداد المثيل في كل مرة، يمكنك استخدام نص برمجي لبدء التشغيل لإعداد المثيل عند بدء التشغيل.
أنشئ ملفًا باسم startup.sh
يتضمن المحتوى التالي (يمكنك استخدام محرِّر النصوص المفضّل لديك: vim
أو nano
أو emacs
):
#! /bin/bash apt-get update apt-get install -y nginx service nginx start sed -i -- 's/nginx/Google Cloud Platform - '"$HOSTNAME"'/' /var/www/html/index.nginx-debian.html
لإنشاء مثيل جهاز افتراضي (VM) جديد باستخدام هذا النص البرمجي لبدء التشغيل، ما عليك سوى كتابة :
$ gcloud compute instances create nginx \ --metadata-from-file startup-script=startup.sh Created [...]. NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
يمكنك الانتقال إلى "http://EXTERNAL_IP/
" للاطّلاع على الصفحة الرئيسية المحدَّثة. إذا لم تعرض الصفحة إعادة المحاولة على الفور بعد بضع ثوانٍ، فربما يكون المضيف لا يزال يبدأ في nginx.
8. إنشاء مجموعة من الخوادم
لإنشاء مجموعة من الخوادم، عليك أولاً إنشاء نموذج مثيل. بعد إنشاء نموذج المثيل، يمكنك إنشاء مجموعة مثيلات لإدارة عدد المثيلات المراد إنشاؤها.
أولاً، أنشئ نموذج مثيل باستخدام النص البرمجي لبدء التشغيل :
$ gcloud compute instance-templates create nginx-template \ --metadata-from-file startup-script=startup.sh Created [...]. NAME: nginx-template MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: CREATION_TIMESTAMP: 2022-03-18T15:10:37.621-07:00
ثانيًا، لنقم بإنشاء مجموعة مستهدفة. تتيح لنا المجموعة المستهدَفة الحصول على نقطة وصول واحدة إلى جميع الأجهزة الافتراضية في مجموعة، وهي ضرورية لموازنة التحميل في الخطوات المستقبلية.
$ gcloud compute target-pools create nginx-pool Created [...]. NAME: nginx-pool REGION: us-central1 SESSION_AFFINITY: NONE BACKUP: HEALTH_CHECKS:
أخيرًا، أنشئ مجموعة مثيلات باستخدام النموذج:
$ gcloud compute instance-groups managed create nginx-group \ --base-instance-name nginx \ --size 2 \ --template nginx-template \ --target-pool nginx-pool Created [...]. NAME: nginx-group LOCATION: us-central1-f SCOPE: zone BASE_INSTANCE_NAME: nginx SIZE: 0 TARGET_SIZE: 2 INSTANCE_TEMPLATE: nginx-template AUTOSCALED: no
سيؤدي ذلك إلى إنشاء مثيلَين إضافيَين للجهاز الافتراضي بأسماء تبدأ بـ nginx-
.
من المفترض أن تتمكّن الآن من الاطّلاع على جميع النُسخ الافتراضية التي تم إنشاؤها.
$ gcloud compute instances list NAME: myinstance ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-frpl ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING NAME: nginx-ztg4 ZONE: us-central1-f MACHINE_TYPE: n1-standard-1 PREEMPTIBLE: INTERNAL_IP: 10.128.X.X EXTERNAL_IP: X.X.X.X STATUS: RUNNING
9. إنشاء جهاز موازنة حمل الشبكة
هناك العديد من أنواع أجهزة موازنة الحمل في Google Cloud Platform بما في ذلك :
- a L3 موازن حمل الشبكة
- جهاز موازنة الحمل L7 HTTP(S)
لننشئ جهازًا إقليميًا لموازنة حمل الشبكة يستهدف مجموعة المثيلات الخاصة بنا:
$ gcloud compute forwarding-rules create nginx-lb \ --ports 80 \ --target-pool nginx-pool Created [...]. $ gcloud compute forwarding-rules list NAME: nginx-lb REGION: us-central1 IP_ADDRESS: X.X.X.X IP_PROTOCOL: TCP TARGET: us-central1/targetPools/nginx-pool
يمكنك بعد ذلك الانتقال إلى جهاز موازنة الحمل من المتصفّح http://IP_ADDRESS/
، حيث يكون IP_ADDRESS
هو العنوان الذي يظهر نتيجة تنفيذ الأمر السابق.
وبسبب هذا الوقت، لن ننشئ اليوم جهاز موازنة حمل HTTP.
10. تنظيف المجموعة
يُرجى تذكُّر إيقاف المجموعة، وإلا سيستمر عرضها وتراكم التكاليف. ستؤدي الأوامر التالية إلى حذف مثيلات Google Compute Engine ومجموعة المثيلات ومجموعة الاستهداف وموازن التحميل.
$ gcloud compute forwarding-rules delete nginx-lb $ gcloud compute instance-groups managed delete nginx-group $ gcloud compute target-pools delete nginx-pool $ gcloud compute instance-templates delete nginx-template $ gcloud compute instances delete nginx $ gcloud compute instances delete myinstance $ gcloud compute firewall-rules delete allow-80
يجب أن يطلب منك كل أمر من الأوامر أعلاه تأكيد حذف المورد.
11. ما هي الخطوات التالية؟
تهانينا، لقد أكملت هذا الدرس التطبيقي حول الترميز في Compute Engine.
المزيد من ميزات Compute Engine
يتضمّن Google Compute Engine مجموعة كبيرة من الميزات. ننصحك بالتعرّف على المزيد من المعلومات التالية :
- الأجهزة الافتراضية الاستباقية: https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- عُقد المستأجر الوحيد: https://cloud.google.com/compute/docs/nodes/create-nodes
- وحدات معالجة الرسومات وحدات معالجة الموتّرات: https://cloud.google.com/compute/docs/gpus/add-gpus
- الأجهزة الافتراضية لنظام التشغيل Windows: https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- تصنيف الموارد: https://cloud.google.com/compute/docs/labeling-resources
- نقل الأجهزة الافتراضية إلى Compute Engine - https://cloud.google.com/compute/docs/vm-migration/
Google Kubernetes Engine
Google Kubernetes Engine (GKE) هو عرض على Google Cloud تتم استضافته وإدارته بالكامل على منصة Kubernetes. هناك العديد من الدروس التطبيقية حول الترميز المتاحة لمساعدتك في بدء استخدام GKE. إليك واحدة جيدة لتبدأ بها :
- درس تطبيقي حول ترميز Google Kubernetes Engine - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
يُرجى إرسال ملاحظاتك إلينا
- يُرجى تخصيص بعض الوقت لإكمال الاستطلاع القصير جدًا.