গুগল কম্পিউট ইঞ্জিন

1. ভূমিকা

সবাইকে নমস্কার, আজ আসার জন্য ধন্যবাদ! গুগল কম্পিউট ইঞ্জিন শিখতে প্রস্তুত?

এই কোডল্যাবে, আমরা একটি উদাহরণ গেস্টবুক অ্যাপ্লিকেশনের মাধ্যমে কম্পিউট ইঞ্জিন কীভাবে কাজ করে তা অন্বেষণ করব।

তুমি কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করবে, nginx স্থাপন করবে এবং অবশেষে সামনে একটি নেটওয়ার্ক লোড ব্যালেন্সার রাখবে। তুমি গ্রাফিকাল কনসোল অথবা কমান্ড লাইন থেকে একটি কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করতে পারো। এই ল্যাব কমান্ড-লাইন ব্যবহার করে তোমাকে এগিয়ে নিয়ে যাবে।

কম্পিউটইঞ্জিন_১২৮পিএক্স.পিএনজি

গুগল কম্পিউট ইঞ্জিন বিশ্বব্যাপী ফাইবার নেটওয়ার্কের সাথে সংযুক্ত গুগলের ডেটা সেন্টারগুলিতে চলমান ভার্চুয়াল মেশিনগুলি অফার করে। প্রদত্ত টুলিং এবং ওয়ার্কফ্লো একক উদাহরণ থেকে বিশ্বব্যাপী, লোড-ব্যালেন্সড ক্লাউড কম্পিউটিংয়ে স্কেলিং সক্ষম করে।

এই ভিএমগুলি দ্রুত বুট হয়, স্থায়ী ডিস্ক স্টোরেজ সহ আসে এবং ধারাবাহিক কর্মক্ষমতা প্রদান করে। মেশিনগুলি পূর্বনির্ধারিত আকার সহ অনেক কনফিগারেশনে পাওয়া যায় এবং আপনার নির্দিষ্ট প্রয়োজনের জন্য অপ্টিমাইজ করা কাস্টম মেশিন টাইপ ব্যবহার করেও তৈরি করা যেতে পারে।

পরিশেষে, কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিনগুলি হল অন্যান্য বেশ কয়েকটি গুগল ক্লাউড পণ্য (কুবারনেটস ইঞ্জিন, ক্লাউড ডেটাপ্রোক, ক্লাউড ডেটাফ্লো, ইত্যাদি...) দ্বারা ব্যবহৃত প্রযুক্তি।

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না এবং আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য হতে হবে এবং এটি অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটি কী তা নিয়ে চিন্তা করেন না। বেশিরভাগ কোডল্যাবে, আপনাকে প্রোজেক্ট আইডি উল্লেখ করতে হবে (এবং এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়), তাই যদি আপনার এটি পছন্দ না হয়, তাহলে অন্য একটি র্যান্ডম তৈরি করুন, অথবা, আপনি নিজের চেষ্টা করে দেখতে পারেন যে এটি উপলব্ধ কিনা। তারপর প্রোজেক্ট তৈরি হওয়ার পরে এটি "ফ্রোজেন" হয়ে যায়।
  • তৃতীয় একটি মান আছে, একটি প্রজেক্ট নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের বাইরে যাতে আপনাকে বিলিং করতে না হয় সেজন্য রিসোর্সগুলি বন্ধ করতে, কোডল্যাবের শেষে পাওয়া যেকোনো "ক্লিন-আপ" নির্দেশাবলী অনুসরণ করুন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

গুগল ক্লাউড শেল

যদিও গুগল ক্লাউড এবং কম্পিউট ইঞ্জিন আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে পূর্ণ। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এর অর্থ হল এই কোডল্যাবের জন্য আপনার যা প্রয়োজন তা হল একটি ব্রাউজার (হ্যাঁ, এটি একটি Chromebook এ কাজ করে)।

  1. ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন b125d9eb26a46cc5.png সম্পর্কে (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে)।

1067942a9a93f70.png সম্পর্কে

স্ক্রিন শট ২০১৭-০৬-১৪ রাত ১০.১৩.৪৩.png

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণিত এবং প্রকল্পটি ইতিমধ্যেই আপনার 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>
  1. অবশেষে, ডিফল্ট জোন এবং প্রকল্প কনফিগারেশন সেট করুন।
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 ফ্ল্যাগ বাদ দিতে পারেন।
  • সর্বশেষ ডেবিয়ান GNU/Linux 9 (stretch) ইমেজ। যদি আপনি আপনার নিজস্ব কাস্টম ইমেজ ব্যবহার করেন, তাহলে এখানে ইমেজের নাম দিন। উদাহরণস্বরূপ, --image my-own-image
  • n1-standard-1 মেশিন টাইপ । আপনি অন্য মেশিন টাইপ নির্বাচন করতে পারেন যেমন n1-highmem-4 অথবা n1-highcpu-6 । যদি পূর্বনির্ধারিত মেশিন টাইপগুলির কোনওটিই আপনার প্রয়োজনের সাথে মেলে না, তাহলে একটি কাস্টম মেশিন টাইপ ব্যবহার করুন।
  • ইনস্ট্যান্সের নামের একই নামের একটি রুট পার্সিস্ট্যান্ট ডিস্ক; ডিস্কটি স্বয়ংক্রিয়ভাবে ইনস্ট্যান্সের সাথে সংযুক্ত হয়ে যায়।

উপলব্ধ সকল অপশন দেখতে gcloud compute instances create --help চালান।

৪. পোর্ট ৮০ এর জন্য ফায়ারওয়াল সক্ষম করুন

ডিফল্টরূপে, গুগল ক্লাউড প্ল্যাটফর্ম শুধুমাত্র কয়েকটি পোর্ট অ্যাক্সেসের অনুমতি দেয়। যেহেতু আমরা শীঘ্রই 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 নামে একটি ফায়ারওয়াল নিয়ম তৈরি করবে যার মধ্যে আইপি অ্যাড্রেস ব্লকের একটি ডিফল্ট তালিকা থাকবে যা ইনবাউন্ড সংযোগ ( --source-ranges ) তৈরি করার জন্য অনুমোদিত 0.0.0.0/0 (Everywhere) এ সেট করা আছে।

gcloud compute firewall-rules create --help চালান, যাতে সমস্ত ডিফল্ট এবং উপলব্ধ সমস্ত বিকল্প দেখা যায়, যার মধ্যে ট্যাগের উপর ভিত্তি করে ফায়ারওয়াল নিয়ম প্রয়োগ করার ক্ষমতাও অন্তর্ভুক্ত।

৫. 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 করতে পারেন।

bfbc03997a41946e.png সম্পর্কে

৬. Nginx ইনস্টল করুন

নতুন তৈরি ইনস্ট্যান্স myinstance এ লগ ইন করুন এবং nginx ইনস্টল করুন:

$ sudo su - 
# apt update
# apt install -y nginx
# service nginx start
# exit

curl from 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>

ওয়েব UI এর মাধ্যমে আপনার ইনস্ট্যান্স তালিকাভুক্ত করে আপনার ইনস্ট্যান্সের জন্য বহিরাগত IP খুঁজুন:

dcc4e56e82ba2603.png সম্পর্কে

নিশ্চিত করুন যে আপনি 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 এর পাবলিক আইপি এবং আপনি nginx পৃষ্ঠাটি দেখতে সক্ষম হবেন:

49b52b9354041f3b.png সম্পর্কে

৭. স্টার্টআপ স্ক্রিপ্ট

প্রতিবার ইনস্ট্যান্স সেট আপ করার পরিবর্তে, আপনি স্টার্টআপের সময় ইনস্ট্যান্সটি শুরু করার জন্য একটি স্টার্টআপ স্ক্রিপ্ট ব্যবহার করতে পারেন।

নিম্নলিখিত কন্টেন্ট দিয়ে 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 চালু করতে পারে।

৮. সার্ভারের একটি ক্লাস্টার তৈরি করুন

সার্ভারের একটি ক্লাস্টার তৈরি করতে, আপনাকে প্রথমে একটি ইনস্ট্যান্স টেমপ্লেট তৈরি করতে হবে। একবার একটি ইনস্ট্যান্স টেমপ্লেট তৈরি হয়ে গেলে, আপনি তৈরি করার জন্য ইনস্ট্যান্সের সংখ্যা পরিচালনা করার জন্য একটি ইনস্ট্যান্স গ্রুপ তৈরি করতে পারেন।

প্রথমে, স্টার্টআপ স্ক্রিপ্ট ব্যবহার করে একটি ইনস্ট্যান্স টেমপ্লেট তৈরি করুন:

$ 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- সাথে প্রিফিক্স যুক্ত নামের সাথে আরও দুটি VM ইনস্ট্যান্স তৈরি করবে।

এখন তুমি তৈরি করা সমস্ত ইনস্ট্যান্স দেখতে পাবে!

$ 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

৯. একটি নেটওয়ার্ক লোড ব্যালেন্সার তৈরি করুন

গুগল ক্লাউড প্ল্যাটফর্মে বিভিন্ন ধরণের লোড ব্যালেন্সার রয়েছে যার মধ্যে রয়েছে:

আমাদের ইনস্ট্যান্স গ্রুপকে লক্ষ্য করে একটি আঞ্চলিক নেটওয়ার্ক লোড ব্যালেন্সার তৈরি করা যাক:

$ 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

উপরের প্রতিটি কমান্ড আপনাকে রিসোর্সটি মুছে ফেলার বিষয়টি নিশ্চিত করতে বলবে।

১১. এরপর কী?

অভিনন্দন, আপনি এই কম্পিউট ইঞ্জিন কোডল্যাবটি সম্পন্ন করেছেন!

আরও কম্পিউট ইঞ্জিন বৈশিষ্ট্য

গুগল কম্পিউট ইঞ্জিনে রয়েছে সমৃদ্ধ বৈশিষ্ট্য। আপনি হয়তো এর মধ্যে কিছু সম্পর্কে জানতে চাইতে পারেন:

গুগল কুবারনেটস ইঞ্জিন

গুগল কুবারনেটস ইঞ্জিন (GKE) হল গুগল ক্লাউডের হোস্টেড এবং সম্পূর্ণরূপে পরিচালিত কুবারনেটস অফার। GKE দিয়ে শুরু করতে আপনাকে সাহায্য করার জন্য বেশ কয়েকটি কোডল্যাব উপলব্ধ। শুরু করার জন্য এখানে একটি ভাল কোডল্যাব দেওয়া হল:

আপনার মতামত জানান

  • আমাদের খুব ছোট জরিপটি সম্পূর্ণ করার জন্য একটু সময় নিন।