Google Compute Engine

1. مقدمة

مرحبًا بالجميع، شكرًا على حضوركم اليوم. هل أنت مستعد للتعرّف على Google Compute Engine؟

في هذا الدرس التطبيقي حول الترميز، سنتعرّف على Compute Engine من خلال مثال على تطبيق Guestbook.

ستنشئ أجهزة Compute Engine الافتراضية، وتفعّل nginx، ثم تضع في النهاية أداة موازنة الحمل على الشبكة في المقدمة. يمكنك إنشاء مثيل Compute Engine من وحدة التحكّم الرسومية أو من سطر الأوامر. سيرشدك هذا الدرس التطبيقي إلى كيفية استخدام سطر الأوامر.

ComputeEngine_128px.png

توفّر خدمة Google Compute Engine أجهزة افتراضية تعمل في مراكز بيانات Google المرتبطة بشبكة الألياف العالمية. تتيح الأدوات وسير العمل المتاحان إمكانية التوسّع من مثيلات فردية إلى حوسبة سحابية عالمية ومتوازنة التحميل.

تتميز هذه الأجهزة الافتراضية بإمكانية التشغيل السريع، وتتضمّن مساحة تخزين على قرص ثابت، وتوفّر أداءً ثابتًا. تتوفّر الأجهزة في العديد من الإعدادات، بما في ذلك الأحجام المحدّدة مسبقًا، ويمكن أيضًا إنشاؤها باستخدام "أنواع الأجهزة المخصّصة" المحسّنة لتلبية احتياجاتك المحدّدة.

أخيرًا، تُعدّ الأجهزة الافتراضية في Compute Engine أيضًا التكنولوجيا التي تستخدمها العديد من منتجات Google Cloud الأخرى (مثل Kubernetes Engine وCloud Dataproc وCloud Dataflow وما إلى ذلك).

2. الإعداد والمتطلبات

إعداد البيئة بالسرعة التي تناسبك

  1. سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة من الأحرف لا تستخدمها Google APIs، ويمكنك تعديلها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud، كما أنّه غير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس البرمجة، عليك الرجوع إلى رقم تعريف المشروع (ويتم تحديده عادةً على أنّه PROJECT_ID)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي، أو يمكنك تجربة رقمك الخاص ومعرفة ما إذا كان متاحًا. ثم يتم "تجميده" بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس البرمجي الكثير من المال، إن وُجدت تكلفة على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا الدرس التطبيقي حول الترميز، اتّبِع أي تعليمات "تنظيف" واردة في نهاية الدرس. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.

Google Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud وCompute Engine عن بُعد من الكمبيوتر المحمول، سنستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

يتم تحميل هذا الجهاز الظاهري المستند إلى Debian بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا منزليًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يعني ذلك أنّ كل ما تحتاج إليه لهذا الدرس التطبيقي حول الترميز هو متصفّح (نعم، يمكن استخدامه على جهاز Chromebook).

  1. لتفعيل Cloud Shell من Cloud Console، ما عليك سوى النقر على تفعيل Cloud Shell b125d9eb26a46cc5.png (يستغرق توفير البيئة والاتصال بها بضع لحظات فقط).

1067942a9a93f70.pngScreen Shot 2017-06-14 at 10.13.43 PM.png

بعد الاتصال بـ 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:

cc3895eeac80db2c.png

يضبط Cloud Shell أيضًا بعض متغيرات البيئة تلقائيًا، ما قد يكون مفيدًا عند تنفيذ الأوامر المستقبلية.

echo $GOOGLE_CLOUD_PROJECT

ناتج الأمر

<PROJECT_ID>
  1. أخيرًا، اضبط المنطقة التلقائية وإعدادات المشروع.
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)

لإجراء عملية 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.

bfbc03997a41946e.png

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 الخارجي لمثيل الجهاز من خلال إدراج مثيلاتك إما عبر واجهة مستخدم الويب:

dcc4e56e82ba2603.png

تأكَّد من الخروج من بروتوكول النقل الآمن (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:

49b52b9354041f3b.png

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

لإنشاء مثيل جهاز افتراضي جديد باستخدام نص برمجي للتشغيل هذا، ما عليك سوى كتابة ما يلي :

$ 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، بما في ذلك :

لننشئ جهاز موازنة حمل على مستوى منطقة معيّنة يستهدف مجموعة الأجهزة الافتراضية:

$ 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 مجموعة شاملة من الميزات. ننصحك بالاطّلاع على بعض هذه الموارد :

Google Kubernetes Engine

‫Google Kubernetes Engine (GKE) هي خدمة Kubernetes مُستضافة ومُدارة بالكامل من Google Cloud. تتوفّر العديد من الدروس التطبيقية حول الترميز لمساعدتك في البدء باستخدام GKE. إليك مثالاً جيدًا للبدء :

تقديم ملاحظاتك

  • يُرجى تخصيص بعض الوقت لإكمال الاستطلاع القصير جدًا.