۱. مقدمه
سلام به همه، از حضورتان متشکریم! آمادهاید تا موتور محاسبات گوگل را یاد بگیرید؟
در این آزمایشگاه کد، نحوه کار Compute Engine را از طریق یک برنامه Guestbook نمونه بررسی خواهیم کرد.
شما نمونههایی از Compute Engine ایجاد خواهید کرد، nginx را مستقر خواهید کرد و در نهایت یک متعادلکننده بار شبکه را در جلو قرار خواهید داد. میتوانید یک نمونه از Compute Engine را یا از طریق کنسول گرافیکی یا از طریق خط فرمان ایجاد کنید. این آزمایش با استفاده از خط فرمان شما را راهنمایی خواهد کرد.

موتور محاسبات گوگل (Google Compute Engine) ماشینهای مجازی را ارائه میدهد که در مراکز داده گوگل متصل به شبکه فیبر جهانی آن اجرا میشوند. ابزارها و گردش کار ارائه شده، امکان مقیاسپذیری از نمونههای منفرد تا محاسبات ابری جهانی و متعادل از نظر بار را فراهم میکند.
این ماشینهای مجازی به سرعت بوت میشوند، دارای فضای ذخیرهسازی دیسک پایدار هستند و عملکرد پایداری را ارائه میدهند. این ماشینها در پیکربندیهای مختلفی از جمله اندازههای از پیش تعریف شده موجود هستند و همچنین میتوانند با انواع ماشینهای سفارشی بهینه شده برای نیازهای خاص شما ایجاد شوند.
در نهایت، ماشینهای مجازی Compute Engine فناوری مورد استفاده توسط چندین محصول دیگر Google Cloud (Kubernetes Engine، Cloud Dataproc، Cloud Dataflow و غیره) نیز هستند.
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود و شما میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه باید در تمام پروژههای گوگل کلود منحصر به فرد باشد و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (و معمولاً با نام
PROJECT_IDشناخته میشود)، بنابراین اگر آن را دوست ندارید، یک شناسه تصادفی دیگر ایجاد کنید، یا میتوانید شناسه خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. سپس پس از ایجاد پروژه، آن "منجمد" میشود. - یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای اطلاعات بیشتر در مورد هر سه این مقادیر به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/APIهای ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، دستورالعملهای «پاکسازی» موجود در انتهای آزمایشگاه کد را دنبال کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
پوسته ابری گوگل
اگرچه میتوان از راه دور و از طریق لپتاپ، گوگل کلود و کامپیوت انجین را مدیریت کرد، اما در این آزمایشگاه کد، از گوگل کلود شل ، یک محیط خط فرمان که در فضای ابری اجرا میشود، استفاده خواهیم کرد.
این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کرومبوک هم کار میکند).
- برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate 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
شما میتوانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به بخش مناطق و نواحی مراجعه کنید.
۳. یک نمونه موتور محاسباتی ایجاد کنید
همانطور که قبلاً بحث شد، ما در این آزمایشگاه کد از خط فرمان 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 اجرا کنید.
۴. فعال کردن فایروال برای پورت ۸۰
به طور پیشفرض، پلتفرم ابری گوگل فقط دسترسی به چند پورت را مجاز میداند. از آنجایی که به زودی Nginx را نصب خواهیم کرد، ابتدا پورت ۸۰ را در پیکربندی فایروال فعال میکنیم.
$ 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 اجرا کنید.
۵. اتصال 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:~#
همین! خیلی آسان. (در محیط عملیاتی، مطمئن شوید که یک عبارت عبور وارد میکنید :)
به عنوان یک روش جایگزین، میتوانید مستقیماً از کنسول ( console.cloud.google.com ) با رفتن به Compute Engine > VM Instances و کلیک روی SSH ، به نمونه (instance) مورد نظر SSH کنید.

۶. نصب 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 را ببینید:

۷. اسکریپت راهاندازی
به جای تنظیم نمونه هر بار، میتوانید از یک اسکریپت راهاندازی برای مقداردهی اولیه نمونه در هنگام راهاندازی استفاده کنید.
فایلی با نام 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 باشد.
۸. ایجاد یک خوشه از سرورها
برای ایجاد یک کلاستر از سرورها، ابتدا باید یک الگوی نمونه (Instance Template ) ایجاد کنید. پس از ایجاد الگوی نمونه، میتوانید یک گروه نمونه (Instance Group) ایجاد کنید تا تعداد نمونههایی که باید ایجاد شوند را مدیریت کنید.
ابتدا، با استفاده از اسکریپت راهاندازی، یک الگوی نمونه ایجاد کنید:
$ 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
دوم، بیایید یک target pool ایجاد کنیم. target pool به ما این امکان را میدهد که یک نقطه دسترسی واحد به تمام نمونههای یک گروه داشته باشیم و برای متعادلسازی بار در مراحل آینده ضروری است.
$ 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
۹. ایجاد یک متعادلکننده بار شبکه
انواع مختلفی از متعادلکنندههای بار در پلتفرم ابری گوگل وجود دارد، از جمله:
- متعادلکننده بار شبکه سطح ۳
- متعادلکننده بار 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 ایجاد نخواهیم کرد.
۱۰. کلاستر را تمیز کنید
فراموش نکنید که کلاستر خود را خاموش کنید، در غیر این صورت آنها به کار خود ادامه میدهند و هزینهها را افزایش میدهند. دستورات زیر نمونههای Google Compute Engine، Instance Group، Targeting Group و Load Balancer را حذف میکنند.
$ 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
هر یک از دستورات بالا باید از شما بخواهد که حذف منبع را تأیید کنید.
۱۱. قدم بعدی چیست؟
تبریک میگویم، شما این آزمایشگاه کدنویسی موتور محاسباتی را به پایان رساندید!
ویژگیهای بیشتر موتور محاسباتی
موتور محاسبات گوگل (Google Compute Engine) مجموعهای غنی از ویژگیها را ارائه میدهد. شاید بخواهید برخی از این ویژگیها را بررسی کنید:
- ماشینهای مجازی قابل قبضه کردن - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- گرههای تکمستأجر - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPU و TPU - https://cloud.google.com/compute/docs/gpus/add-gpus
- نمونههای ویندوز - https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances
- منابع برچسبگذاری - https://cloud.google.com/compute/docs/labeling-resources
- مهاجرت ماشینهای مجازی به موتور محاسباتی - https://cloud.google.com/compute/docs/vm-migration/
موتور گوگل کوبرنتیز
موتور کوبرنتیز گوگل (GKE) ارائه دهنده کوبرنتیز میزبانی شده و کاملاً مدیریت شده توسط گوگل کلود است. چندین آزمایشگاه کد برای کمک به شما در شروع کار با GKE در دسترس است. در اینجا یک مورد خوب برای شروع آورده شده است:
- آزمایشگاه کد موتور کوبرنتیز گوگل - https://codelabs.developers.google.com/codelabs/cloud-gke-workshop-v2
نظرات خود را با ما در میان بگذارید
- لطفا کمی وقت بگذارید و نظرسنجی بسیار کوتاه ما را تکمیل کنید.