১. ভূমিকা
সবাইকে নমস্কার, আজ আসার জন্য ধন্যবাদ! গুগল কম্পিউট ইঞ্জিন শিখতে প্রস্তুত তো?
এই কোডল্যাবে, আমরা একটি উদাহরণ গেস্টবুক অ্যাপ্লিকেশনের মাধ্যমে কম্পিউট ইঞ্জিন কীভাবে কাজ করে তা দেখব।
আপনি Compute Engine ইনস্ট্যান্স তৈরি করবেন, nginx ডেপ্লয় করবেন এবং সবশেষে সামনে একটি নেটওয়ার্ক লোড ব্যালেন্সার স্থাপন করবেন। আপনি গ্রাফিক্যাল কনসোল অথবা কমান্ড লাইন থেকে একটি Compute Engine ইনস্ট্যান্স তৈরি করতে পারেন। এই ল্যাবটি আপনাকে কমান্ড-লাইন ব্যবহার করার পদ্ধতি ধাপে ধাপে দেখাবে।

গুগল কম্পিউট ইঞ্জিন গুগলের ডেটা সেন্টারে চালিত ভার্চুয়াল মেশিন সরবরাহ করে, যা এর বিশ্বব্যাপী ফাইবার নেটওয়ার্কের সাথে সংযুক্ত। এর টুলিং এবং ওয়ার্কফ্লো একক ইনস্ট্যান্স থেকে শুরু করে বৈশ্বিক, লোড-ব্যালেন্সড ক্লাউড কম্পিউটিং পর্যন্ত স্কেল করার সুযোগ দেয়।
এই ভিএমগুলো দ্রুত বুট হয়, এতে স্থায়ী ডিস্ক স্টোরেজ থাকে এবং এটি ধারাবাহিক পারফরম্যান্স প্রদান করে। মেশিনগুলো পূর্বনির্ধারিত আকারসহ বিভিন্ন কনফিগারেশনে পাওয়া যায় এবং আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী অপ্টিমাইজ করা কাস্টম মেশিন টাইপ দিয়েও তৈরি করা যেতে পারে।
অবশেষে, Compute Engine ভার্চুয়াল মেশিন প্রযুক্তিটি Google Cloud-এর আরও বেশ কিছু পণ্যেও (Kubernetes Engine, Cloud Dataproc, Cloud Dataflow, ইত্যাদি) ব্যবহৃত হয়।
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না, এবং আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে প্রজেক্ট আইডি অবশ্যই অনন্য হতে হবে এবং এটি অপরিবর্তনীয় (একবার সেট করার পর পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়), তাই যদি এটি আপনার পছন্দ না হয়, তবে এলোমেলোভাবে অন্য একটি তৈরি করুন, অথবা, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এরপর প্রজেক্ট তৈরি হয়ে গেলে এটি "স্থির" হয়ে যায়। - তৃতীয় আরেকটি ভ্যালু আছে, যা হলো প্রজেক্ট নম্বর এবং কিছু এপিআই এটি ব্যবহার করে। এই তিনটি ভ্যালু সম্পর্কে আরও জানতে ডকুমেন্টেশন দেখুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে কোডল্যাবের শেষে দেওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
গুগল ক্লাউড শেল
যদিও গুগল ক্লাউড এবং কম্পিউট ইঞ্জিন আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যায়, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চালিত একটি কমান্ড লাইন পরিবেশ।
এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এর মানে হলো, এই কোডল্যাবের জন্য আপনার শুধু একটি ব্রাউজার প্রয়োজন হবে (হ্যাঁ, এটি ক্রোমবুকেও কাজ করে)।
- ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল 'Activate 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 খুঁজছেন? সেটআপের ধাপগুলিতে আপনি কোন আইডি ব্যবহার করেছিলেন তা দেখে নিন অথবা ক্লাউড কনসোল ড্যাশবোর্ডে এটি খুঁজে দেখুন:

ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা ভবিষ্যতে কমান্ড চালানোর সময় কাজে লাগতে পারে।
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ফ্ল্যাগটি বাদ দিতে পারেন। - সর্বশেষ ডেবিয়ান জিএনইউ/লিনাক্স ৯ (স্ট্রেচ) ইমেজ। আপনি যদি আপনার নিজস্ব কাস্টম ইমেজ ব্যবহার করেন, তাহলে এর পরিবর্তে এখানে ইমেজের নামটি দিন। উদাহরণস্বরূপ,
--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 নামের একটি ফায়ারওয়াল নিয়ম তৈরি করবে, যেখানে ইনবাউন্ড সংযোগ স্থাপনের জন্য অনুমোদিত আইপি অ্যাড্রেস ব্লকগুলির একটি ডিফল্ট তালিকা ( --source-ranges ) 0.0.0.0/0 (সর্বত্র) হিসেবে সেট করা থাকবে।
সমস্ত ডিফল্ট এবং উপলব্ধ সমস্ত বিকল্প দেখতে, যার মধ্যে ট্যাগের উপর ভিত্তি করে ফায়ারওয়াল নিয়ম প্রয়োগ করার ক্ষমতাও রয়েছে, gcloud compute firewall-rules create --help চালান।
৫. ইনস্ট্যান্সটিতে SSH করুন
কমান্ড লাইন থেকে ইনস্ট্যান্সে SSH করতে (এখনও ক্লাউড শেল থেকে):
$ gcloud compute ssh myinstance Waiting for SSH key to propagate. Warning: Permanently added 'compute.12345' (ECDSA) to the list of known hosts. ... yourusername@myinstance:~#
ব্যাস! বেশ সহজ। (প্রোডাকশনের সময়, একটি পাসফ্রেজ দিতে ভুলবেন না :)
বিকল্পভাবে, আপনি Compute Engine > VM Instances- এ গিয়ে এবং SSH- এ ক্লিক করে কনসোল ( console.cloud.google.com ) থেকেও সরাসরি ইনস্ট্যান্সটিতে SSH করতে পারেন।

৬. Nginx ইনস্টল করুন
নতুন তৈরি করা ইনস্ট্যান্স myinstance- এ লগ ইন করুন এবং nginx ইনস্টল করুন:
$ sudo su - # apt update # apt install -y nginx # service nginx start # exit
myinstance থেকে curl ব্যবহার করে সার্ভারটি চলছে কিনা তা পরীক্ষা করুন:
$ 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>
ওয়েব UI-এর মাধ্যমে আপনার ইনস্ট্যান্সগুলির তালিকা করে সেগুলির এক্সটার্নাল আইপি খুঁজে নিন:

SSH থেকে বেরিয়ে আসুন , এবং ক্লাউড শেল থেকে এই কমান্ডটি চালান:
$ 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 হলো myinstance- এর পাবলিক IP, এবং আপনি 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 চালু করছে।
৮. সার্ভারগুলোর একটি ক্লাস্টার তৈরি করুন
সার্ভারের একটি ক্লাস্টার তৈরি করতে, আপনাকে প্রথমে একটি ইনস্ট্যান্স টেমপ্লেট তৈরি করতে হবে। ইনস্ট্যান্স টেমপ্লেট তৈরি হয়ে গেলে, আপনি কতগুলো ইনস্ট্যান্স তৈরি করবেন তা পরিচালনা করার জন্য একটি ইনস্ট্যান্স গ্রুপ তৈরি করতে পারবেন।
প্রথমে, স্টার্টআপ স্ক্রিপ্ট ব্যবহার করে একটি ইনস্ট্যান্স টেমপ্লেট তৈরি করুন:
$ 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
৯. একটি নেটওয়ার্ক লোড ব্যালেন্সার তৈরি করুন
গুগল ক্লাউড প্ল্যাটফর্মে বিভিন্ন ধরণের লোড ব্যালেন্সার রয়েছে, যেমন:
- একটি 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 লোড ব্যালান্সার তৈরি করব না।
১০. ক্লাস্টারটি পরিষ্কার করুন
আপনার ক্লাস্টারটি বন্ধ করতে ভুলবেন না, অন্যথায় সেগুলি চলতে থাকবে এবং খরচ বাড়াতে থাকবে। নিম্নলিখিত কমান্ডগুলি 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
উপরের প্রতিটি কমান্ড রিসোর্সটি মুছে ফেলার বিষয়টি নিশ্চিত করতে আপনাকে জিজ্ঞাসা করবে।
১১. এরপর কী?
অভিনন্দন, আপনি এই কম্পিউট ইঞ্জিন কোডল্যাবটি সম্পন্ন করেছেন!
কম্পিউট ইঞ্জিনের আরও বৈশিষ্ট্য
গুগল কম্পিউট ইঞ্জিনে রয়েছে প্রচুর বৈশিষ্ট্য। আপনি এর মধ্যে কয়েকটি বিস্তারিতভাবে দেখতে পারেন:
- প্রিএমপ্টিবল ভিএম - https://cloud.google.com/compute/docs/instances/create-start-preemptible-instance
- একক-ভাড়াটে নোড - https://cloud.google.com/compute/docs/nodes/create-nodes
- GPUs এবং TPUs - 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
আপনার মতামত দিন
- অনুগ্রহ করে একটু সময় নিয়ে আমাদের এই সংক্ষিপ্ত সমীক্ষাটি পূরণ করুন।