ক্লাউড রানের মাধ্যমে তিনটি সহজ ধাপে প্রডাক

1. ভূমিকা

অ্যাপ্লিকেশন পরিচালনা করা এত কঠিন কেন?

একটি বড় কারণ হল ডেভেলপারদের প্রায়শই খণ্ডকালীন সিস্টেম প্রশাসক হতে হয়। একটি আধুনিক উৎপাদন-গ্রেড ওয়েব অ্যাপ্লিকেশন তৈরি, স্থাপন এবং পরিচালনা করার জন্য এই (আংশিক) উদ্বেগের তালিকাটি বিবেচনা করুন:

4d018476b4a73b47.png সম্পর্কে

আমি তোমার কথা জানি না, কিন্তু এই সব বিষয় নিয়ে আমি চিন্তা করতে চাই না! আমি আসলে যা ভাবতে চাই তা হল আমার প্রয়োগের যুক্তি:

6dfd143d20e5548b.png সম্পর্কে

সংক্ষেপে বলতে গেলে, ক্লাউড রানের মূল উদ্দেশ্য হলো - আপনাকে আপনার অ্যাপের উপর মনোযোগ দেওয়ার ক্ষমতা প্রদান করা, এবং সমস্ত প্রশাসন এবং রক্ষণাবেক্ষণের দায়িত্ব অন্য কারো উপর ছেড়ে দেওয়া, অর্থাৎ গুগল, যারা এই ক্ষেত্রে তাদের দক্ষতা উন্নত এবং নিখুঁত করার জন্য লক্ষ লক্ষ ঘন্টা বিনিয়োগ করেছে।

উপরে উল্লিখিত প্রশাসনিক চ্যালেঞ্জগুলি ছাড়াও, আপনাকে নিম্নলিখিত বিষয়গুলিও মোকাবেলা করতে হবে:

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

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

তুমি যা করবে...

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

তুমি যা শিখবে...

  • পাইথনে কীভাবে একটি সাধারণ ওয়েব সার্ভার অ্যাপ তৈরি করবেন
  • আপনার অ্যাপটিকে যে কোনও জায়গায় চালানোর জন্য ডকার কন্টেইনারে কীভাবে প্যাকেজ করবেন
  • আপনার অ্যাপটি ক্লাউডে কীভাবে স্থাপন করবেন যাতে যে কেউ আপনার নতুন তৈরিটি চেষ্টা করতে পারে
  • বিল্ডপ্যাক ব্যবহার করে উপরের ধাপগুলো আরও সহজ করার উপায়
  • গুগল ক্লাউড কমান্ড লাইন টুল এবং ক্লাউড কনসোল ওয়েব UI কীভাবে ব্যবহার করবেন

তোমার যা লাগবে...

  • একটি ওয়েব ব্রাউজার
  • একটি গুগল অ্যাকাউন্ট

এই ল্যাবটি সকল স্তরের ডেভেলপারদের জন্য তৈরি, এমনকি নতুনদের জন্যও। যদিও আপনি পাইথন ব্যবহার করবেন, তবে কী ঘটছে তা বোঝার জন্য আপনাকে পাইথন প্রোগ্রামিং সম্পর্কে জানতে হবে না কারণ আমরা আপনার ব্যবহৃত সমস্ত কোড ব্যাখ্যা করব।

2. সেট আপ করুন

5110b5081a1e1c49.png সম্পর্কে

এই ল্যাবটি শুরু করার জন্য আপনার যা যা করণীয় তা এই বিভাগে আলোচনা করা হয়েছে।

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

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। (যদি আপনার ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

96a9c957bc475304.png সম্পর্কে

b9a10ebdf5b5a448.png সম্পর্কে

a1e3c01a38fa61c2.png সম্পর্কে

প্রোজেক্ট আইডি মনে রাখবেন, সমস্ত গুগল ক্লাউড প্রোজেক্টের জন্য একটি অনন্য নাম (উপরের নামটি ইতিমধ্যেই নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে পরে এটিকে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপর, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হবে না, এমনকি যদি কিছু হয়ও। "ক্লিনিং আপ" বিভাগে থাকা যেকোনো নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে পরামর্শ দেয় যে কীভাবে রিসোর্সগুলি বন্ধ করতে হবে যাতে এই টিউটোরিয়ালের বাইরে আপনাকে বিলিংয়ের সম্মুখীন না হতে হয়। গুগল ক্লাউডের নতুন ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

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

704a7b7491bd157.png সম্পর্কে

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 4292cbf4971c9786.png সম্পর্কে .

bce75f34b2c53987.png সম্পর্কে

যদি আপনি আগে কখনও ক্লাউড শেল শুরু না করে থাকেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন (ভাঁজের নীচে) দেখানো হবে যেখানে এটি কী তা বর্ণনা করা হবে। যদি তাই হয়, তাহলে Continue এ ক্লিক করুন (এবং আপনি এটি আর কখনও দেখতে পাবেন না)। এই এককালীন স্ক্রিনটি কেমন দেখাবে:

70f315d7b402b476.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

fbe3a0674c982259.png সম্পর্কে

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

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণিত এবং প্রকল্পটি ইতিমধ্যেই আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

আপনার টার্মিনালে কিছু পরিবেশগত ভেরিয়েবল সেট করুন যা পরবর্তী ধাপগুলিতে জীবনকে সহজ করে তুলবে:

export PROJ=$GOOGLE_CLOUD_PROJECT 
export APP=hello 
export PORT=8080
export REGION="us-central1"
export TAG="gcr.io/$PROJ/$APP"

API গুলি সক্ষম করুন

পরবর্তী ধাপগুলিতে, আপনি দেখতে পাবেন যে এই পরিষেবাগুলি কোথায় প্রয়োজন (এবং কেন), কিন্তু আপাতত, আপনার প্রকল্পকে ক্লাউড বিল্ড, কন্টেইনার রেজিস্ট্রি এবং ক্লাউড রান পরিষেবাগুলিতে অ্যাক্সেস দেওয়ার জন্য এই কমান্ডটি চালান:

gcloud services enable cloudbuild.googleapis.com         \
                       containerregistry.googleapis.com  \
                       run.googleapis.com          

এটির ফলে এই বার্তার মতো একটি সফল বার্তা তৈরি হওয়া উচিত:

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

৩. একটি সহজ ওয়েব অ্যাপ তৈরি করুন

eef530b56b8e93a3.png সম্পর্কে

আপনার ক্লাউড শেল প্যানেলের উপরে থাকা " Open Editor বোতামটি ক্লিক করে শুরু করুন। এটি দেখতে এরকম দেখাচ্ছে:

9b81c8a37a6bcdd8.png সম্পর্কে

এরপর আপনি ভিজ্যুয়াল স্টুডিও কোডের মতো একটি IDE পরিবেশে নিজেকে খুঁজে পাবেন, যেখানে আপনি প্রকল্প তৈরি করতে, সোর্স কোড সম্পাদনা করতে, আপনার প্রোগ্রামগুলি চালাতে ইত্যাদি করতে পারবেন। যদি আপনার স্ক্রিনটি খুব সঙ্কুচিত হয়, তাহলে আপনি কনসোল এবং আপনার সম্পাদনা/টার্মিনাল উইন্ডোর মধ্যে বিভাজক রেখাটি প্রসারিত বা সঙ্কুচিত করতে পারেন, এই দুটি অঞ্চলের মধ্যে অনুভূমিক বারটি টেনে, এখানে হাইলাইট করা হয়েছে:

8dea35450851af53.png সম্পর্কে

আপনি যথাক্রমে Open Editor এবং Open Terminal বোতামে ক্লিক করে এডিটর এবং টার্মিনালের মধ্যে এদিক ওদিক স্যুইচ করতে পারেন। এখনই এই দুটি পরিবেশের মধ্যে এদিক ওদিক স্যুইচ করার চেষ্টা করুন।

এরপর, এই ল্যাবের জন্য আপনার কাজ সংরক্ষণ করার জন্য একটি ফোল্ডার তৈরি করুন, File->New Folder নির্বাচন করে, hello লিখুন এবং OK ক্লিক করুন। এই ল্যাবে আপনার তৈরি করা সমস্ত ফাইল এবং Cloud Shell-এ আপনার করা সমস্ত কাজ এই ফোল্ডারে হবে।

এখন একটি requirements.txt ফাইল তৈরি করুন। এটি পাইথনকে বলে দেয় যে আপনার অ্যাপ কোন লাইব্রেরির উপর নির্ভর করে। এই সহজ ওয়েব অ্যাপের জন্য, আপনি Flask নামক ওয়েব সার্ভার তৈরির জন্য একটি জনপ্রিয় Python মডিউল এবং gunicorn নামক একটি ওয়েব সার্ভার ফ্রেমওয়ার্ক ব্যবহার করতে যাচ্ছেন। ক্লাউড এডিটর উইন্ডোতে, একটি নতুন ফাইল তৈরি করতে File->New File মেনুতে ক্লিক করুন। নতুন ফাইলের নাম জিজ্ঞাসা করা হলে, requirements.txt লিখুন এবং OK বোতাম টিপুন। নিশ্চিত করুন যে নতুন ফাইলটি hello প্রজেক্ট ফোল্ডারে শেষ হয়।

আপনার অ্যাপটি পাইথন ফ্লাস্ক প্যাকেজ এবং গানিকর্ন ওয়েব সার্ভারের উপর নির্ভর করে তা নির্দিষ্ট করতে নতুন ফাইলে নিম্নলিখিত লাইনগুলি লিখুন।

Flask
gunicorn

আপনার এই ফাইলটি স্পষ্টভাবে সংরক্ষণ করার দরকার নেই কারণ ক্লাউড এডিটর আপনার জন্য পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে সংরক্ষণ করবে।

সংস্করণ ১: হ্যালো ওয়ার্ল্ড!

একই কৌশল ব্যবহার করে, main.py নামে আরেকটি নতুন ফাইল তৈরি করুন। এটি আপনার অ্যাপের প্রধান (এবং একমাত্র) পাইথন সোর্স ফাইল হবে। আবার, নিশ্চিত করুন যে নতুন ফাইলটি hello প্রজেক্ট ফোল্ডারে শেষ হয়েছে।

এই ফাইলটিতে নিম্নলিখিত কোডটি প্রবেশ করান:

from flask import Flask
import os
import random

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from the environment.

# The app.route decorator routes any GET requests sent to the root path
# to this function, which responds with a "Hello world!" HTML document.
@app.route("/", methods=["GET"])
def say_hello():
    html = "<h1>Hello world!</h1>"
    return html


# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

টার্মিনালে ফিরে যান এবং এই কমান্ডটি ব্যবহার করে প্রজেক্ট ফোল্ডারে যান:

cd hello

আপনার প্রকল্প নির্ভরতা ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

pip3 install -r requirements.txt

এখন টার্মিনালে এই কমান্ডটি চালিয়ে আপনার অ্যাপটি চালু করুন:

python3 main.py

এই মুহুর্তে, আপনার অ্যাপটি আপনার ক্লাউড শেল সেশনের জন্য নিবেদিত ভার্চুয়াল মেশিনে চলছে। ক্লাউড শেলটিতে একটি প্রক্সি মেকানিজম রয়েছে যা আপনাকে বিশ্বব্যাপী ইন্টারনেটের যেকোনো স্থান থেকে আপনার ভার্চুয়াল মেশিনে চলমান ওয়েব সার্ভারগুলি (যেমন আপনি শুরু করেছেন) অ্যাক্সেস করতে দেয়।

web preview বোতামে ক্লিক করুন এবং তারপর Preview on Port 8080 মেনু আইটেমটি এভাবে ক্লিক করুন:

fe45e0192080efd6.png সম্পর্কে

এটি আপনার চলমান অ্যাপে একটি ওয়েব ব্রাউজার ট্যাব খুলবে, যা দেখতে এরকম কিছু হওয়া উচিত:

b1f06501509aefb9.png সম্পর্কে

সংস্করণ ২: URL পাথ প্রতিধ্বনি করা

ক্লাউড এডিটরে ফিরে যান ( Open Editor বোতামের মাধ্যমে) এবং আপনার main.py ফাইলটি নিম্নরূপ আপডেট করে একটি ঐচ্ছিক URL সাফিক্স প্রতিধ্বনির জন্য সমর্থন যোগ করুন:

from flask import Flask
import os
import random

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from environment.

# The app.route decorator routes any GET requests sent to the root path
# to this function, which responds with a "Hello world!" HTML document.
# If something is specified as the URL path (after the '/'), say_hello()
# responds with "Hello X", where X is the string at the end of the URL.
@app.route("/", methods=["GET"])
@app.route("/<name>", methods=["GET"])     # ← NEW
def say_hello(name="world"):               # ← MODIFIED
    html = f"<h1>Hello {name}!</h1>"       # ← MODIFIED
    return html


# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

টার্মিনালে ফিরে যান ( Open Terminal বোতামের মাধ্যমে) এবং আপনার চলমান অ্যাপটি বন্ধ করতে control-C ('C' টিপে নিয়ন্ত্রণ কী ধরে রাখুন) লিখুন এবং তারপর এটি প্রবেশ করে পুনরায় চালু করুন:

python3 main.py

আবার, web preview বোতামে ক্লিক করুন এবং তারপর Preview on Port 8080 মেনু আইটেমে ক্লিক করে আপনার চলমান অ্যাপে একটি ওয়েব ব্রাউজার ট্যাব খুলুন। আপনি আবার "হ্যালো ওয়ার্ল্ড!" বার্তাটি দেখতে পাবেন তবে এখন স্ল্যাশ অক্ষরের পরে URL টেক্সটটি আপনার পছন্দের যেকোনো স্ট্রিং (যেমন /your-name ) দিয়ে প্রতিস্থাপন করুন এবং যাচাই করুন যে আপনি এরকম কিছু দেখতে পাচ্ছেন:

93b87996f88fa370.png সম্পর্কে

সংস্করণ ৩: এলোমেলো রঙ

এখন, ক্লাউড এডিটরে ফিরে ( Open Editor বোতামের মাধ্যমে) এবং আপনার main.py ফাইলটি নিম্নরূপ আপডেট করে এলোমেলো ব্যাকগ্রাউন্ড রঙের জন্য সমর্থন যোগ করুন:

from flask import Flask
import os
import random

app = Flask(__name__)  # Create a Flask object.
PORT = os.environ.get("PORT")  # Get PORT setting from the environment.

# This function decides whether foreground text should be
# displayed in black or white, to maximize fg/bg contrast.
def set_text_color(rgb):                      # ← NEW
    sum = round(                              # ← NEW
        (int(rgb[0]) * 0.299)                 # ← NEW
        + (int(rgb[1]) * 0.587)               # ← NEW
        + (int(rgb[2]) * 0.114)               # ← NEW
    )                                         # ← NEW
    return "black" if sum > 186 else "white"  # ← NEW


# The app.route decorator routes any GET requests sent to the root path
# to this function, which responds with a "Hello world!" HTML document.
# If something is specified as the URL path (after the '/'), say_hello()
# responds with "Hello X", where X is the string at the end of the URL.
# To verify each new invocation of these requests, the HTML document
# includes CSS styling to produce a randomly colored background.
@app.route("/", methods=["GET"])
@app.route("/<name>", methods=["GET"])
def say_hello(name="world"):
    bg = random.sample(range(1, 255), 3)                       # ← NEW
    hex = (int(bg[0]) * 256) + (int(bg[1]) * 16) + int(bg[2])  # ← NEW
    fg_color = set_text_color(bg)                              # ← NEW
    bg_color = f"#{hex:06x}"                                   # ← NEW
    style = f"color:{fg_color}; background-color:{bg_color}"   # ← NEW
    html = f'<h1 style="{style}">Hello {name}!</h1>'           # ← MODIFIED
    return html


# This code ensures that your Flask app is started and listens for
# incoming connections on the local interface and port 8080.
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=PORT)

টার্মিনালে ফিরে যান ( Open Terminal বোতামের মাধ্যমে) এবং আপনার চলমান অ্যাপটি বন্ধ করতে control-C ('C' টিপে নিয়ন্ত্রণ কী ধরে রাখুন) লিখুন এবং তারপর এটি প্রবেশ করে পুনরায় চালু করুন:

python3 main.py

আবার, web preview বোতামে ক্লিক করুন এবং তারপর Preview on Port 8080 মেনু আইটেমে ক্লিক করুন যাতে আপনার চলমান অ্যাপে একটি ওয়েব ব্রাউজার ট্যাব খুলতে পারে। আপনি জেনারেট করা টেক্সট দেখতে পাবেন, যেটিতে যেকোনো নির্দিষ্ট প্রত্যয় অথবা ডিফল্ট "হ্যালো ওয়ার্ল্ড!" স্ট্রিং থাকবে, যা এলোমেলোভাবে রঙিন ব্যাকগ্রাউন্ডের সামনে প্রদর্শিত হবে, যেমন:

baf8d028f15ea7f4.png

প্রতিবার অ্যাপটি দেখার সময় এলোমেলো পটভূমির রঙ পরিবর্তন হয় তা দেখতে পৃষ্ঠাটি কয়েকবার পুনরায় লোড করুন।

আর এর সাথে সাথে, আপনার অ্যাপটি তৈরি হয়ে গেল - অভিনন্দন! পরবর্তী ধাপে, আপনি শিখবেন কিভাবে আপনার অ্যাপটিকে একটি পাত্রে প্যাকেজ করতে হয় এবং কেন এটি একটি কার্যকর জিনিস।

৪. আপনার অ্যাপটি কনটেইনারাইজ করুন

17cc234ec3325a8a.png সম্পর্কে

কন্টেইনার কী?

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

নির্ভরতার কথা বলতে গেলে, আগের ধাপে, যখন আপনি একটি ডেভেলপার পরিবেশে আপনার অ্যাপটি চালাচ্ছিলেন, তখন আপনাকে pip3 install -r requirements.txt চালাতে হত, এবং নিশ্চিত করতে হত যে requirements.txt ফাইলটিতে আপনার সমস্ত নির্ভরশীল লাইব্রেরি এবং সংশ্লিষ্ট সংস্করণ রয়েছে। কন্টেইনারের সাহায্যে, আপনি যখন কন্টেইনার ইমেজ তৈরি করেন তখন আপনি সেই প্রয়োজনীয়তাগুলি ইনস্টল করেন, তাই কন্টেইনারের গ্রাহককে কিছু ইনস্টল করার বিষয়ে চিন্তা করার দরকার নেই

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

কন্টেইনারগুলি আপনার অ্যাপ্লিকেশন তৈরিতে সাহায্য করে:

  • পুনরুৎপাদনযোগ্য - পাত্রগুলি স্বয়ংসম্পূর্ণ এবং সম্পূর্ণ
  • পোর্টেবল - কন্টেইনারগুলি হল ক্রস-ইন্ডাস্ট্রি বিল্ডিং ব্লক, যা ক্লাউড সরবরাহকারী এবং পরিবেশ জুড়ে অ্যাপ্লিকেশন পোর্টেবিলিটি সক্ষম করে

সংক্ষেপে, কন্টেইনারগুলি অবশেষে "একবার লিখুন এবং সর্বত্র চালান" করার ক্ষমতা প্রদান করে। এই নিয়মের একটি ব্যতিক্রম হল যে তৈরি করা কন্টেইনারটি আপনি যে প্রসেসর টাইপে এটি তৈরি করেছেন তাতে চলতে বাধ্য, তবে অন্যান্য হার্ডওয়্যার কনফিগারেশনের জন্যও কন্টেইনার সংস্করণ তৈরি করার উপায় রয়েছে।

অনেক কথা হলো - চলো একটা কন্টেইনার বানাই! তুমি ডকার নামক একটা কন্টেইনার তৈরির জন্য একটা নির্দিষ্ট প্রযুক্তি ব্যবহার করবে।

ক্লাউড এডিটরে, Dockerfile নামে একটি নতুন ফাইল তৈরি করুন। এই ফাইলটি আপনার ছবি তৈরির জন্য একটি নীলনকশা। এটি ডকারকে আপনার অপারেটিং পরিবেশ এবং আপনার সোর্স কোড, আপনার নির্ভরতা কীভাবে ইনস্টল করবেন, আপনার অ্যাপ তৈরি করবেন এবং আপনার কোড চালাবেন সে সম্পর্কে বলে।

# Use an official lightweight Python image.
FROM python:3.9-slim

# Copy local code to the container image.
WORKDIR /app
COPY main.py .
COPY requirements.txt .

# Install dependencies into this container so there's no need to 
# install anything at container run time.
RUN pip install -r requirements.txt

# Service must listen to $PORT environment variable.
# This default value facilitates local development.
ENV PORT 8080

# Run the web service on container startup. Here you use the gunicorn
# server, with one worker process and 8 threads. For environments 
# with multiple CPU cores, increase the number of workers to match 
# the number of cores available.
CMD exec gunicorn --bind 0.0.0.0:$PORT --workers 1 --threads 8 --timeout 0 main:app

ক্লাউড টার্মিনালে, নিম্নলিখিত কমান্ডটি চালিয়ে ক্লাউড বিল্ড ব্যবহার করে আপনার কন্টেইনার চিত্রটি তৈরি করুন:

gcloud builds submit --tag $TAG

রেজিস্ট্রিতে পুশ করার পর, আপনি ছবির নাম সম্বলিত একটি SUCCESS বার্তা দেখতে পাবেন, যা দেখতে এরকম হওয়া উচিত: gcr.io/<project-id>/hello /hello। ছবিটি এখন গুগল কন্টেইনার রেজিস্ট্রিতে সংরক্ষিত আছে এবং যখনই এবং যেখানে খুশি পুনরায় ব্যবহার করা যেতে পারে।

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

gcloud container images list

এখন এই docker কমান্ড ব্যবহার করে ক্লাউড শেল থেকে স্থানীয়ভাবে অ্যাপ্লিকেশনটি চালান এবং পরীক্ষা করুন:

docker run -p $PORT:$PORT -e PORT=$PORT $TAG

-p $PORT:$PORT বিকল্পটি ডকারকে হোস্ট পরিবেশে $PORT (উপরে 8080 তে সেট করা) বহিরাগত পোর্টটি চলমান কন্টেইনারের ভিতরে একই পোর্ট নম্বরে ম্যাপ করতে বলে। এটি জীবনকে সহজ করে তোলে কারণ আপনি যে সার্ভার কোডটি লিখবেন এবং আপনার অ্যাপটি পরীক্ষা করার সময় আপনি যে বহিরাগত পোর্ট নম্বরটি সংযুক্ত করবেন তা একই হবে (8080), তবে আপনি -p বিকল্পটি ব্যবহার করে হোস্টের যেকোনো ইচ্ছামত বহিরাগত পোর্টকে কন্টেইনারের ভিতরে যেকোনো পছন্দসই অভ্যন্তরীণ পোর্টে ম্যাপ করতে পারেন।

-e PORT=$PORT বিকল্পটি ডকারকে $PORT এনভায়রনমেন্ট ভেরিয়েবল (উপরে 8080 তে সেট করা) আপনার অ্যাপের জন্য কন্টেইনারের ভিতরে চলমান করার জন্য উপলব্ধ করতে বলে।

এখন আপনি আপনার অ্যাপটি পরীক্ষা করার জন্য প্রস্তুত, একটি ওয়েব ব্রাউজারকে কন্টেইনারের ভিতরে চলমান পাইথন কোডের দিকে নির্দেশ করে। ক্লাউড শেল উইন্ডোতে, "ওয়েব প্রিভিউ" আইকনে ক্লিক করুন এবং "পোর্ট 8080-এ প্রিভিউ" নির্বাচন করুন, যেমনটি আপনি আগের ধাপে করেছিলেন।

ফলাফলটি পরিচিত দেখাবে - আপনি একটি এলোমেলো রঙিন ব্যাকগ্রাউন্ডের সামনে জেনারেট করা টেক্সটটি দেখতে পাবেন, ঠিক যেমনটি আপনি যখন সরাসরি আপনার ক্লাউড শেল টার্মিনালে অ্যাপটি চালাতেন তখন দেখতে পেতেন। প্রতিবার অ্যাপটি দেখার সময় এলোমেলো ব্যাকগ্রাউন্ডের রঙ পরিবর্তন হয় তা দেখতে পৃষ্ঠাটি কয়েকবার পুনরায় লোড করুন।

অভিনন্দন! আপনি এখন আপনার অ্যাপের একটি কন্টেইনারাইজড ভার্সন ব্যবহার করেছেন। পরবর্তী বিভাগে, কোডের একটি লাইন স্পর্শ না করেই, আপনি আপনার কন্টেইনার ইমেজটিকে একটি প্রোডাকশন কোয়ালিটি ওয়েব অ্যাপে পরিণত করবেন

৫. মেঘের দিকে...

অনুসরণ

এখন যেহেতু আপনি আপনার অ্যাপটি কন্টেইনারাইজ করেছেন, আপনি এই অসাধারণত্বের কিছু অংশ বিশ্বের সাথে ভাগ করে নিতে চাইবেন, তাই এটি ক্লাউডে স্থাপন করার সময় এসেছে। কিন্তু আপনি এটি কেবল ভাগ করে নেওয়ার চেয়ে আরও বেশি কিছু করতে চাইবেন। আপনি এটি নিশ্চিত করতে চান:

  • নির্ভরযোগ্যভাবে চলে - আপনার অ্যাপ চালানো কম্পিউটার ক্র্যাশ করলে আপনি স্বয়ংক্রিয় ফল্ট টলারেন্স পাবেন
  • স্বয়ংক্রিয়ভাবে স্কেল হবে - আপনার অ্যাপটি বিশাল ট্র্যাফিকের সাথে তাল মিলিয়ে চলবে এবং অব্যবহৃত অবস্থায় স্বয়ংক্রিয়ভাবে এর পদচিহ্ন হ্রাস করবে
  • আপনার খরচ কমিয়ে দেয়, আপনি যে রিসোর্সগুলি ব্যবহার করছেন না তার জন্য আপনাকে চার্জ না করে - ট্র্যাফিকের প্রতিক্রিয়া জানাতে গিয়ে কেবল ব্যবহৃত রিসোর্সের জন্য আপনাকে চার্জ করা হবে
  • একটি কাস্টম ডোমেইন নামের মাধ্যমে অ্যাক্সেসযোগ্য - আপনার পরিষেবাতে একটি কাস্টম ডোমেইন নাম বরাদ্দ করার জন্য আপনার এক-ক্লিক সমাধানে অ্যাক্সেস রয়েছে
  • চমৎকার রেসপন্স টাইম অফার করে - কোল্ড স্টার্টগুলি মোটামুটি রেসপন্সিভ, তবে আপনি একটি ন্যূনতম ইনস্ট্যান্স কনফিগারেশন নির্দিষ্ট করে এটিকে আরও সুন্দর করে তুলতে পারেন।
  • স্ট্যান্ডার্ড SSL/TLS ওয়েব সিকিউরিটি ব্যবহার করে এন্ড-টু-এন্ড এনক্রিপশন সমর্থন করে - যখন আপনি কোনও পরিষেবা স্থাপন করেন, তখন আপনি স্ট্যান্ডার্ড ওয়েব এনক্রিপশন এবং সংশ্লিষ্ট প্রয়োজনীয় সার্টিফিকেট বিনামূল্যে এবং স্বয়ংক্রিয়ভাবে পাবেন।

আপনার অ্যাপটি গুগল ক্লাউড রানে স্থাপন করে, আপনি উপরের সমস্ত কিছু এবং আরও অনেক কিছু পাবেন।

ক্লাউড রানে আপনার অ্যাপ স্থাপন করুন

প্রথমে, আপনার অ্যাপটি এমনভাবে পরিবর্তন করা যাক যাতে আপনি নতুন সংস্করণটি পুরাতন সংস্করণ থেকে আলাদা করতে পারেন। main.py ফাইলটি এমনভাবে পরিবর্তন করে এটি করুন যাতে ডিফল্ট বার্তাটি "Hello world!" থেকে "Hello from Cloud Run!" এ পরিবর্তিত হয়। অন্য কথায়, main.py এর এই লাইনটি এখান থেকে পরিবর্তন করুন:

def say_hello(name="world"):

এর প্রতি:

def say_hello(name="from Cloud Run"):

ক্লাউড রান হল আঞ্চলিক, যার অর্থ হল আপনার ক্লাউড রান পরিষেবাগুলি পরিচালনা করে এমন পরিকাঠামো একটি নির্দিষ্ট অঞ্চলে অবস্থিত এবং Google দ্বারা পরিচালিত হয় যাতে সেই অঞ্চলের সমস্ত জোনে অতিরিক্তভাবে উপলব্ধ থাকে। উপরের "সেট আপ করুন" বিভাগে, আপনি REGION পরিবেশ ভেরিয়েবলের মাধ্যমে একটি ডিফল্ট অঞ্চল সংজ্ঞায়িত করেছেন।

আপনার কন্টেইনার ইমেজটি পুনর্নির্মাণ করুন এবং নিম্নলিখিত কমান্ডটি ব্যবহার করে ক্লাউড রানে আপনার কন্টেইনারাইজড অ্যাপ্লিকেশনটি স্থাপন করুন:

gcloud builds submit --tag $TAG
gcloud run deploy "$APP"   \
  --image "$TAG"           \
  --platform "managed"     \
  --region "$REGION"       \
  --allow-unauthenticated
  • আপনি gcloud config set run/region $REGION দিয়ে একটি ডিফল্ট অঞ্চলও নির্ধারণ করতে পারেন।
  • --allow-unauthenticated বিকল্পটি পরিষেবাটি সর্বজনীনভাবে উপলব্ধ করে। অননুমোদিত অনুরোধগুলি এড়াতে, এর পরিবর্তে --no-allow-unauthenticated ব্যবহার করুন।

এখানে উল্লেখিত ছবিটি হল আপনার শেষ ধাপে তৈরি ডকার ইমেজ। ক্লাউড বিল্ড সার্ভিসের জন্য ধন্যবাদ, যা ফলাফলের ছবিটি গুগল কন্টেইনার রেজিস্ট্রিতে সংরক্ষণ করেছে, ক্লাউড রান সার্ভিস এটি খুঁজে পেতে এবং আপনার জন্য এটি স্থাপন করতে পারে।

স্থাপনা সম্পূর্ণ না হওয়া পর্যন্ত কিছুক্ষণ অপেক্ষা করুন। সফল হলে, কমান্ড লাইন পরিষেবা URL প্রদর্শন করবে:

Deploying container to Cloud Run service [hello] in project [PROJECT_ID...
✓ Deploying new service... Done.                                   
  ✓ Creating Revision... Revision deployment finished. Waiting for health check...
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [hello] revision [hello-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://hello-....a.run.app

আপনি এই কমান্ডের সাহায্যে আপনার পরিষেবা URL পুনরুদ্ধার করতে পারেন:

gcloud run services describe hello  \
  --platform managed                \
  --region $REGION                  \
  --format "value(status.url)"

এটি এরকম কিছু প্রদর্শন করা উচিত:

https://hello-....a.run.app

এই লিঙ্কটি আপনার ক্লাউড রান পরিষেবার জন্য TLS সুরক্ষা সহ একটি ডেডিকেটেড URL। এই লিঙ্কটি স্থায়ী (যতক্ষণ না আপনি আপনার পরিষেবাটি অক্ষম করেন) এবং ইন্টারনেটের যেকোনো জায়গায় ব্যবহারযোগ্য। এটি পূর্বে উল্লিখিত ক্লাউড শেলের প্রক্সি প্রক্রিয়া ব্যবহার করে না, যা একটি ক্ষণস্থায়ী ভার্চুয়াল মেশিনের উপর নির্ভর করে।

আপনার চলমান অ্যাপের জন্য একটি ওয়েব ব্রাউজার ট্যাব খুলতে হাইলাইট করা Service URL এ ক্লিক করুন। ফলাফলে একটি এলোমেলো রঙিন ব্যাকগ্রাউন্ডের সামনে "হ্যালো ফ্রম ক্লাউড রান!" বার্তাটি প্রদর্শিত হবে।

অভিনন্দন! আপনার অ্যাপটি এখন গুগলের ক্লাউডে চলছে। চিন্তা না করেই, আপনার অ্যাপটি সর্বজনীনভাবে উপলব্ধ, TLS (HTTPS) এনক্রিপশন সহ, এবং ট্র্যাফিকের অবাস্তব স্তরে স্বয়ংক্রিয়ভাবে স্কেলিং।

কিন্তু আমার মনে হয় এই প্রক্রিয়াটি আরও সহজ হতে পারত...

৬. স্বয়ংক্রিয়ভাবে কন্টেইনার তৈরি করুন

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

মনে রাখবেন যে কিছু ক্ষেত্রে একজন ডেভেলপার হয়তো একটি স্পষ্ট Dockerfile ব্যবহার করতে পছন্দ করতে পারেন, উদাহরণস্বরূপ, যদি তারা তাদের কন্টেইনার তৈরির ক্ষেত্রে উচ্চ মাত্রার কাস্টমাইজেশন চান। কিন্তু এই অনুশীলনের মতো সাধারণ ক্ষেত্রে, buildpacks সুন্দরভাবে কাজ করে এবং Dockerfile হাতে তৈরি করার প্রয়োজন এড়ায়। আসুন buildpacks ব্যবহার করার জন্য আপনার কোড পরিবর্তন করি।

প্রথমে, আপনার অ্যাপটি এমনভাবে পরিবর্তন করা যাক যাতে আপনি নতুন সংস্করণটি পুরাতন সংস্করণ থেকে আলাদা করতে পারেন। main.py ফাইলটি এমনভাবে পরিবর্তন করে এটি করুন যাতে ডিফল্ট বার্তাটি "Hello from Cloud Run!" থেকে "Hello from Cloud Run with Buildpacks!" এ পরিবর্তিত হয়। অন্য কথায়, main.py এর এই লাইনটি এখান থেকে পরিবর্তন করুন:

def say_hello(name="from Cloud Run"):

এর প্রতি:

def say_hello(name="from Cloud Run with Buildpacks"):

এবার আসুন Procfile নামে একটি নতুন ফাইল তৈরি করে buildpacks এর সুবিধা গ্রহণ করি। এগিয়ে যান এবং ক্লাউড এডিটরে সেই ফাইলটি তৈরি করুন এবং এই এক লাইনের লেখাটি সন্নিবেশ করুন:

web: python3 main.py

এটি বিল্ডব্যাক সিস্টেমকে অটো-জেনারেটেড কন্টেইনারে আপনার অ্যাপটি কীভাবে চালাতে হবে তা বলে দেয়। এই সামান্য নির্দেশনার মাধ্যমে, আপনার আর কোনও ডকারফাইলের প্রয়োজন নেই। এটি যাচাই করতে, আপনার ডকারফাইলটি মুছে ফেলুন এবং ক্লাউড শেল টার্মিনালে নিম্নলিখিত কমান্ডটি চালান:

gcloud beta run deploy "$APP"  \
    --source .                 \
    --platform "managed"       \
    --region "$REGION"         \
    --allow-unauthenticated

এটি আগের ধাপে আপনার অ্যাপ স্থাপনের জন্য যে কমান্ডটি ব্যবহার করেছিলেন তার অনুরূপ, কিন্তু এবার আপনি --image বিকল্পটি --source . বিকল্প দিয়ে প্রতিস্থাপন করেছেন। এটি gcloud কমান্ডকে বলে যে আপনি buildpacks ব্যবহার করে আপনার কন্টেইনার ইমেজ তৈরি করতে চান, বর্তমান ডিরেক্টরিতে পাওয়া সোর্স ফাইলের উপর ভিত্তি করে ( --source . এর dot বর্তমান ডিরেক্টরির জন্য সংক্ষেপে)। যেহেতু পরিষেবাটি কন্টেইনার ইমেজের যত্ন নেয়, তাই আপনাকে এই gcloud কমান্ডে কোনও ছবি নির্দিষ্ট করার প্রয়োজন নেই।

আবারও, আপনার চলমান অ্যাপে একটি ওয়েব ব্রাউজার ট্যাব খুলতে হাইলাইট করা Service URL এ ক্লিক করে এই স্থাপনাটি কাজ করছে কিনা তা যাচাই করুন এবং নিশ্চিত করুন যে আপনার পরিষেবাটি এলোমেলোভাবে রঙিন ব্যাকগ্রাউন্ডের সামনে "Hello from Cloud Run with Buildpacks!" প্রদর্শন করছে।

লক্ষ্য করুন যে buildpacks ব্যবহার করে আপনার Dockerfile তৈরি করে, আপনি মূলত তিনটি সহজ ধাপ দুটিতে কমিয়ে এনেছেন:

  1. আপনার ডেভেলপমেন্ট পরিবেশে একটি অ্যাপ তৈরি করুন।
  2. একটি কমান্ডের মাধ্যমে ক্লাউডে ঠিক একই কোড স্থাপন করুন।

৭. আমাকে কি কমান্ড লাইন ব্যবহার করতে হবে?

না! প্রায় প্রতিটি গুগল ক্লাউড পরিষেবার মতো, ক্লাউড রানের সাথে ইন্টারঅ্যাক্ট করার তিনটি উপায় রয়েছে:

  • gcloud কমান্ড লাইন টুল, যা আপনি এখনই দেখেছেন।
  • ক্লাউড কনসোলের মাধ্যমে একটি সমৃদ্ধ ওয়েব ইউজার ইন্টারফেস, যা একটি স্বজ্ঞাত পয়েন্ট এবং ক্লিক ইন্টারঅ্যাকশন স্টাইল সমর্থন করে।
  • প্রোগ্রাম্যাটিকভাবে, জাভা, সি#, পাইথন, গো, জাভাস্ক্রিপ্ট, রুবি, সি/সি++ এবং অন্যান্য সহ অনেক জনপ্রিয় ভাষার জন্য উপলব্ধ গুগল ক্লায়েন্ট লাইব্রেরি ব্যবহার করা হচ্ছে।

কনসোল UI ব্যবহার করে আপনার ক্লাউড রান অ্যাপের একটি অতিরিক্ত উদাহরণ স্থাপন করা যাক। উপরের-বাম মেনু দিয়ে ক্লাউড রান সার্ভিস ল্যান্ডিং পৃষ্ঠায় নেভিগেট করুন:

e2b4983b38c81796.png সম্পর্কে

এরপর আপনার ক্লাউড রান পরিষেবার একটি সারাংশ দেখতে পাবেন, যেমন:

b335e7bf0a3af845.png সম্পর্কে

স্থাপনার প্রক্রিয়া শুরু করতে "পরিষেবা তৈরি করুন" লিঙ্কে ক্লিক করুন:

51f61a8ddc7a4c0b.png সম্পর্কে

পরিষেবার নাম হিসেবে "hello-again" লিখুন, ডিফল্ট ডিপ্লয়মেন্ট প্ল্যাটফর্ম এবং অঞ্চলটি নিন এবং "পরবর্তী" এ ক্লিক করুন।

8a17baa45336c4c9.png সম্পর্কে

কন্টেইনার ছবির জন্য এই URL টি লিখুন: gcr.io/cloudrun/hello , যা পরীক্ষার উদ্দেশ্যে গুগল দ্বারা তৈরি একটি কন্টেইনার, এবং আপনার জন্য উপলব্ধ অনেক কনফিগারেশন সেটিংসের কিছু দেখতে "উন্নত সেটিংস" ড্রপ-ডাউনে ক্লিক করুন। মাত্র কয়েকটি উল্লেখ করার জন্য আপনি কাস্টমাইজ করতে পারেন:

  • পোর্ট নম্বর এবং কন্টেইনার এন্ট্রি পয়েন্ট (যা কন্টেইনার তৈরির সময় নির্দিষ্ট এন্ট্রি পয়েন্টকে ওভাররাইড করবে)
  • হার্ডওয়্যার: মেমরি এবং সিপিইউ সংখ্যা
  • স্কেলিং: সর্বনিম্ন এবং সর্বোচ্চ উদাহরণ
  • পরিবেশগত পরিবর্তনশীল
  • অন্যান্য: অনুরোধের সময়সীমা নির্ধারণ, প্রতি কন্টেইনারে সর্বাধিক অনুরোধের সংখ্যা, HTTP/2

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

e78281d1cff3418.png সম্পর্কে

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

এখন আপনার ক্লাউড রান পরিষেবা তৈরি করতে Create বোতামে ক্লিক করুন। কয়েক সেকেন্ড পরে, আপনার ক্লাউড রান পরিষেবার সারাংশ তালিকায় আপনার নতুন পরিষেবাটি উপস্থিত হবে। সারাংশ লাইনটি কিছু মূল কনফিগারেশন সেটিংসের সাথে সাম্প্রতিকতম স্থাপনা (তারিখ/সময় এবং কার দ্বারা) প্রদান করে। আপনার নতুন পরিষেবা সম্পর্কে বিশদ জানতে পরিষেবার নাম লিঙ্কে ক্লিক করুন।

আপনার পরিষেবা যাচাই করতে, নীচের উদাহরণে হাইলাইট করা সারাংশ পৃষ্ঠার উপরে দেখানো URL-এ ক্লিক করুন:

6c35cf0636dddc51.png সম্পর্কে

তোমার এরকম কিছু দেখা উচিত:

3ba6ab4fe0da1f84.png সম্পর্কে

এখন যেহেতু আপনি একটি নতুন ক্লাউড রান পরিষেবা স্থাপন করেছেন, একাধিক স্থাপনা পরিচালনা করার কিছু উপায় দেখতে REVISIONS ট্যাবটি নির্বাচন করুন।

2351ee7ec4a356f0.png সম্পর্কে

কনসোল থেকে সরাসরি নতুন রিভিশন স্থাপন করতে, আপনি EDIT & DEPLOY NEW REVISION বোতামে ক্লিক করতে পারেন, যেমনটি নীচের স্ক্রিনশটে হাইলাইট করা হয়েছে:

a599fa88d00d6776.png সম্পর্কে

নতুন সংস্করণ তৈরি করতে এখনই সেই বোতামটি ক্লিক করুন। কন্টেইনার URL এর কাছে, নীচে দেখানো হিসাবে SELECT বোতামটি ক্লিক করুন:

5fd1b1f8e1f11d40.png সম্পর্কে

পপ আপ হওয়া ডায়ালগে, Buildpacks ব্যবহার করে Cloud Build থেকে আপনি যে সহজ ওয়েব অ্যাপটি আগে ব্যবহার করেছিলেন তা খুঁজুন এবং তারপর select এ ক্লিক করুন। নিশ্চিত করুন যে আপনি নীচের কন্টেইনার ইমেজটি বেছে নিয়েছেন।

gcr.io/<project>/cloud-run-source-deploy

ফোল্ডার , এইভাবে:

8a756c6157face3a.png সম্পর্কে

একবার নির্বাচিত হয়ে গেলে, নীচে স্ক্রোল করুন এবং DEPLOY বোতামে ক্লিক করুন। আপনি এখন আপনার অ্যাপের একটি নতুন সংস্করণ স্থাপন করেছেন। যাচাই করতে, আপনার পরিষেবা URL আবার দেখুন এবং যাচাই করুন যে আপনি এখন আপনার রঙিন "Hello from Cloud Run with Buildpacks!" ওয়েব অ্যাপটি দেখতে পাচ্ছেন।

আপনি দেখতে পাচ্ছেন, রিভিশন ট্যাবে আপনার দ্বারা প্রয়োগ করা প্রতিটি রিভিশনের সারাংশ দেওয়া আছে এবং এখন আপনি এই পরিষেবার জন্য দুটি রিভিশন দেখতে পাবেন। রিভিশন নামের বাম দিকে রেডিও বোতামে ক্লিক করে আপনি একটি প্রদত্ত রিভিশন নির্বাচন করতে পারেন, যা স্ক্রিনের ডান দিকে রিভিশনের বিবরণের সারাংশ প্রদর্শন করবে। এই বোতামগুলি নির্বাচন করে, আপনি দেখতে পাবেন যে আপনার দুটি রিভিশন দুটি ভিন্ন কন্টেইনার ছবি থেকে নেওয়া হয়েছে।

MANAGE TRAFFIC বোতামটি আপনাকে একটি নির্দিষ্ট সংস্করণে প্রেরিত আগত অনুরোধগুলির বিতরণ পরিবর্তন করতে সক্ষম করে। একটি নির্দিষ্ট সংস্করণে কত ট্র্যাফিক পাঠানো হবে তা ঠিক করার এই ক্ষমতাটি বেশ কয়েকটি মূল্যবান ব্যবহারের ক্ষেত্রে সক্ষম করে:

  • ক্যানারি আপনার অ্যাপের একটি নতুন সংস্করণ পরীক্ষা করছে, যা অল্প কিছু ট্রাফিকের সাথে যুক্ত।
  • সমস্যাযুক্ত রিলিজ থেকে পূর্ববর্তী রিভিশনে ট্র্যাফিক ফিরিয়ে আনুন
  • এ/বি পরীক্ষা

এখানে MANAGE TRAFFIC বোতামটি খুঁজুন:

519d3c22ae028287.png সম্পর্কে

আপনার দুটি সংস্করণের মধ্যে ৫০/৫০ ট্র্যাফিক বিভাজন কনফিগার করুন, ৫০/৫০ ট্র্যাফিক বিভাজন এভাবে নির্দিষ্ট করে:

8c37d4f115d9ded4.png সম্পর্কে

এখন SAVE বাটনে ক্লিক করুন এবং আপনার পরিষেবার URL বারবার পরিদর্শন করে 50/50 স্প্লিট যাচাই করুন এবং পরীক্ষা করুন যে, গড়ে, আপনার অনুরোধের অর্ধেক বর্তমান সংস্করণ ("Hello from Cloud Run with Buildpacks!") দ্বারা পরিবেশিত হয়েছে এবং অর্ধেক পূর্ববর্তী সংস্করণ ("It's running!") দ্বারা পরিবেশিত হয়েছে।

পরিষেবার বিবরণ পৃষ্ঠার অন্যান্য ট্যাবগুলি কর্মক্ষমতা, ট্র্যাফিক এবং লগগুলি পর্যবেক্ষণ করার ক্ষমতা প্রদান করে, যা আপনার পরিষেবা কতটা কঠোর এবং কতটা ভালভাবে কাজ করছে সে সম্পর্কে মূল্যবান অন্তর্দৃষ্টি প্রদান করে। "অনুমতি" ট্যাবের মাধ্যমে আপনার পরিষেবার অ্যাক্সেস সূক্ষ্মভাবে সুরক্ষিত করার ক্ষমতাও আপনার রয়েছে। এখানে উপলব্ধ ক্ষমতাগুলি সম্পর্কে ধারণা পেতে এই পৃষ্ঠার ট্যাবগুলি অন্বেষণ করার জন্য কিছু সময় নিন।

প্রোগ্রাম্যাটিক ইন্টারফেস

যেমনটি আগে উল্লেখ করা হয়েছে, আপনার কাছে প্রোগ্রাম্যাটিকভাবে আপনার ক্লাউড রান পরিষেবা তৈরি, স্থাপন এবং পরিচালনা করার বিকল্পও রয়েছে। ম্যানুয়াল কাজের জন্য, এই বিকল্পটি কমান্ড লাইন বা ওয়েব কনসোলের চেয়ে আরও উন্নত, তবে এটি অবশ্যই ক্লাউড রান পরিষেবাগুলিকে স্বয়ংক্রিয় করার জন্য সঠিক উপায়। আপনার কাছে বেশ কয়েকটি জনপ্রিয় প্রোগ্রামিং ভাষায় গুগল ক্লায়েন্ট লাইব্রেরি ব্যবহার করার বিকল্প রয়েছে।

৮. আপনার অ্যাপ পরীক্ষা করুন

198ada162d1f0bf1.png সম্পর্কে

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

পরীক্ষাটি চালান

ক্লাউড শেল টার্মিনালে, লোড পরীক্ষা চালানোর জন্য এই কমান্ডটি চালান:

hey -q 1000 -c 200 -z 30s https://hello-...run.app

কমান্ড আর্গুমেন্টগুলি নিম্নরূপ ব্যাখ্যা করা হয়েছে:

  • -q 1000 - প্রতি সেকেন্ডে প্রায় 1,000 অনুরোধে লোড চালানোর চেষ্টা করুন
  • -c 200 - 200 জন সমান্তরাল কর্মী বরাদ্দ করুন
  • -z 30s - 30 সেকেন্ডের জন্য লোড পরীক্ষা চালান
  • এই কমান্ড লাইনে শেষ আর্গুমেন্ট হিসেবে আপনার পরিষেবা URL ব্যবহার করতে ভুলবেন না।

আপনার পরীক্ষার ফলাফল এইরকম দেখতে হবে:

 Summary:
 Total:        30.2767 secs
 Slowest:      3.3633 secs
 Fastest:      0.1071 secs
 Average:      0.1828 secs
 Requests/sec: 1087.2387
 Total data:   3028456 bytes
 Size/request: 92 bytes

Response time histogram:
 0.107 [1]     |
 0.433 [31346] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
 0.758 [1472]  |■■
 1.084 [82]    |
 1.410 [4]     |
...

Latency distribution:
...
 50% in 0.1528 secs
 75% in 0.1949 secs
 90% in 0.2442 secs
 95% in 0.4052 secs
 99% in 0.7062 secs

Details (average, fastest, slowest):
...
 req write:    0.0000 secs, 0.0000 secs, 0.0232 secs
 resp wait:    0.1824 secs, 0.1070 secs, 3.2953 secs
 resp read:    0.0000 secs, 0.0000 secs, 0.0010 secs
Status code distribution:
 [200] 32918 responses

এই সারসংক্ষেপটি আমাদের বেশ কয়েকটি আগ্রহের বিষয় বলে:

  • ৩০ সেকেন্ডের জন্য প্রায় ১ হাজার টাকা/সেকেন্ড গতিতে ৩২,৯১৮টি অনুরোধ পাঠানো হয়েছিল।
  • কোনও ত্রুটি ছিল না (মাত্র ২০০টি HTTP প্রতিক্রিয়া)।
  • গড় ল্যাটেন্সি ছিল ১৮০ মিলিসেকেন্ড।
  • সর্বনিম্ন ল্যাটেন্সি ছিল ১০৭ মিলিসেকেন্ড, সবচেয়ে খারাপ ক্ষেত্রে ছিল ৩.৩ সেকেন্ড
  • ৯০তম পার্সেন্টাইল ল্যাটেন্সি ছিল ২৪৪ মিলিসেকেন্ড।

আপনি যদি ক্লাউড রান কনসোলে METRICS ট্যাবটি পরীক্ষা করেন, তাহলে আপনি সার্ভারের পারফরম্যান্স স্টোরির দিকটি দেখতে পাবেন:

e635c6831c468dd3.png সম্পর্কে

৯. পরিষ্কার করা

পরিষেবাটি ব্যবহার না করা অবস্থায় ক্লাউড রান চার্জ করলেও, বিল্ট কন্টেইনার ইমেজ সংরক্ষণের জন্য আপনাকে চার্জ করা হতে পারে।

চার্জ এড়াতে আপনি আপনার GCP প্রকল্পটি মুছে ফেলতে পারেন, যার ফলে সেই প্রকল্পের মধ্যে ব্যবহৃত সমস্ত সংস্থানের জন্য বিলিং বন্ধ হয়ে যাবে, অথবা এই কমান্ডটি ব্যবহার করে আপনার কন্টেইনার চিত্রটি মুছে ফেলতে পারেন:

gcloud container images delete $TAG

আপনার ক্লাউড রান পরিষেবাগুলি মুছে ফেলতে, এই কমান্ডগুলি ব্যবহার করুন:

gcloud run services delete hello --platform managed --region $REGION --quiet
gcloud run services delete hello-again --platform managed --region $REGION --quiet

১০. তুমি এটা করেছো!

9a31f4fdbbf1ddcb.png সম্পর্কে

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

আমি আপনাকে একটি গুরুত্বপূর্ণ প্রশ্ন রেখে যেতে চাই:

একবার আপনার অ্যাপটি আপনার ডেভেলপার পরিবেশে কাজ করার পর, ক্লাউড রান দ্বারা প্রদত্ত সমস্ত প্রোডাকশন-গ্রেড বৈশিষ্ট্য সহ ক্লাউডে স্থাপন করার জন্য আপনাকে কত লাইন কোড পরিবর্তন করতে হয়েছিল?

উত্তরটা অবশ্যই শূন্য। :)

কোডল্যাবগুলি পরীক্ষা করে দেখার জন্য...

অন্বেষণ করার জন্য অন্যান্য দুর্দান্ত বৈশিষ্ট্য...

রেফারেন্স ডক্স...

১১. আহ্বান জানাও কর্মকাণ্ড

গুগল ক্লাউড লোগো

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

ইনোভেটরস জেনারেল সদস্য ব্যাজ লোগো

গুগল ক্লাউড ইনোভেটরস বিনামূল্যে এবং এতে অন্তর্ভুক্ত রয়েছে:

  • গুগলারদের কাছ থেকে সরাসরি সর্বশেষ তথ্য জানতে লাইভ আলোচনা , AMA এবং রোডম্যাপ সেশন।
  • আপনার ইনবক্সে সর্বশেষ গুগল ক্লাউড সংবাদ
  • ডিজিটাল ব্যাজ এবং ভিডিও কনফারেন্সের পটভূমি
  • স্কিলস বুস্টে ল্যাব এবং শেখার ৫০০ ক্রেডিট

নিবন্ধন করতে এখানে ক্লিক করুন!