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.png

a99b7ace416376c4.png

bd84a6d3004737c5.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، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

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

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

1067942a9a93f70.png

لقطة شاشة يوم 14-06-2017 في الساعة 10.13.43 مساءً.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 في المثيل

لاستخدام بروتوكول النقل الآمن في المثيل من سطر الأوامر (لا يزال من 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

لإنشاء مثيل جهاز افتراضي (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 بما في ذلك :

لننشئ جهازًا إقليميًا لموازنة حمل الشبكة يستهدف مجموعة المثيلات الخاصة بنا:

$ 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) هو عرض على Google Cloud تتم استضافته وإدارته بالكامل على منصة Kubernetes. هناك العديد من الدروس التطبيقية حول الترميز المتاحة لمساعدتك في بدء استخدام GKE. إليك واحدة جيدة لتبدأ بها :

يُرجى إرسال ملاحظاتك إلينا

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