মডিউল 11: গুগল অ্যাপ ইঞ্জিন থেকে ক্লাউড ফাংশনে স্থানান্তর করা

১. সংক্ষিপ্ত বিবরণ

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

এমন পরিস্থিতিও আসে যখন আপনার কাছে App Engine বা Cloud Run- এর রিসোর্সের প্রয়োজন হয় এমন কোনো "সম্পূর্ণ অ্যাপ" থাকে না। যদি আপনার কোডে শুধুমাত্র একটি মাইক্রোসার্ভিস বা সাধারণ ফাংশন থাকে, তবে Cloud Functions সম্ভবত আপনার জন্য আরও উপযুক্ত হবে। এই কোডল্যাবটি আপনাকে শেখাবে কীভাবে সাধারণ App Engine অ্যাপগুলোকে (অথবা বড় অ্যাপগুলোকে ভেঙে একাধিক মাইক্রোসার্ভিসে বিভক্ত করে) Cloud Functions-এ মাইগ্রেট এবং ডেপ্লয় করতে হয়। Cloud Functions হলো আরেকটি সার্ভারলেস প্ল্যাটফর্ম যা বিশেষভাবে এই ধরনের ব্যবহারের জন্যই তৈরি করা হয়েছে।

আপনি শিখবেন কিভাবে

  • ক্লাউড শেল ব্যবহার করুন
  • গুগল ক্লাউড ট্রান্সলেশন এপিআই সক্রিয় করুন
  • এপিআই অনুরোধগুলি প্রমাণীকরণ করুন
  • একটি ছোট অ্যাপ ইঞ্জিন অ্যাপকে ক্লাউড ফাংশনে চালানোর জন্য রূপান্তর করুন
  • আপনার কোড ক্লাউড ফাংশনে ডিপ্লয় করুন

আপনার যা যা লাগবে

জরিপ

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

পাইথন নিয়ে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. পটভূমি

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

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

ক্লাউড ফাংশন অল্প পরিমাণ কোড ডেপ্লয় করার জন্য ব্যবহৃত হয়, যা:

  • সম্পূর্ণ অ্যাপ্লিকেশনের অংশ নয়
  • সম্পূর্ণ ডেভেলপমেন্ট স্ট্যাকে এর প্রয়োজন নেই
  • এটি এমন কোনো অ্যাপ্লিকেশন বা একক মোবাইল অ্যাপের ব্যাকএন্ডে অবস্থিত যা একটি নির্দিষ্ট বিষয়ের উপর মনোযোগ দেয়।

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

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

  • প্রস্তুতি/পূর্বপ্রস্তুতি
  • কনফিগারেশন ফাইলগুলি সরান
  • অ্যাপ্লিকেশন ফাইলগুলি পরিবর্তন করুন

৩. প্রস্তুতি/পূর্বপ্রস্তুতি

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

১. প্রকল্প স্থাপন করুন

আপনি যদি মডিউল ২-এর কোডল্যাবটি সম্পন্ন করে থাকেন (এবং এটিকে পাইথন ৩-এ পোর্ট করে থাকেন), তাহলে আমরা সেই একই প্রজেক্ট (এবং কোড) পুনরায় ব্যবহার করার পরামর্শ দিই। বিকল্পভাবে, আপনি একটি সম্পূর্ণ নতুন প্রজেক্ট তৈরি করতে পারেন অথবা অন্য কোনো বিদ্যমান প্রজেক্ট পুনরায় ব্যবহার করতে পারেন। নিশ্চিত করুন যে প্রজেক্টটিতে একটি সক্রিয় বিলিং অ্যাকাউন্ট রয়েছে এবং অ্যাপ ইঞ্জিন পরিষেবাটি চালু করা আছে।

২. বেসলাইন নমুনা অ্যাপটি নিন

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

আপনি আপনারটি ব্যবহার করুন বা আমাদেরটি, আমরা মডিউল ২-এর পাইথন ৩ কোড থেকেই শুরু করব। এই মডিউল ১১ কোডল্যাবটি আপনাকে প্রতিটি ধাপের মধ্য দিয়ে নিয়ে যাবে এবং শেষে এমন একটি কোড দিয়ে শেষ হবে যা মডিউল ১১ রিপো ফোল্ডারের কোডের অনুরূপ (শেষ)।

পাইথন ৩ মডিউল ২-এর স্টার্টিং ফাইলগুলোর ডিরেক্টরি (আপনার বা আমাদের) দেখতে এইরকম হওয়া উচিত:

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

৩. বেসলাইন অ্যাপ (পুনরায়) স্থাপন করুন

এখন আপনার বাকি প্রস্তুতিমূলক ধাপগুলো সম্পন্ন করতে হবে:

  1. gcloud কমান্ড-লাইন টুলটির সাথে পুনরায় পরিচিত হয়ে নিন।
  2. gcloud app deploy ব্যবহার করে নমুনা অ্যাপটি পুনরায় ডিপ্লয় করুন।
  3. অ্যাপটি অ্যাপ ইঞ্জিনে কোনো সমস্যা ছাড়াই চলে কিনা তা নিশ্চিত করুন।

একবার আপনি সফলভাবে সেই ধাপগুলো সম্পন্ন করলে, আপনি এটিকে ক্লাউড ফাংশনে রূপান্তর করার জন্য প্রস্তুত।

৪. কনফিগারেশন ফাইলগুলি মুছে ফেলুন

app.yaml ফাইলটি একটি অ্যাপ ইঞ্জিন আর্টিফ্যাক্ট যা ক্লাউড ফাংশনসের সাথে ব্যবহৃত হয় না, তাই এখনই এটি ডিলিট করে দিন । আপনি যদি এটি না করেন বা করতে ভুলে যান, তাতে কোনো ক্ষতি নেই, কারণ ক্লাউড ফাংশনস এটি ব্যবহার করে না। কনফিগারেশনে শুধু এই একটিই পরিবর্তন করতে হবে, কারণ requirements.txt ফাইলটি মডিউল ২-এর মতোই হুবহু একই থাকবে।

আপনিও যদি একটি পাইথন ২ অ্যাপ ইঞ্জিন অ্যাপকে পাইথন ৩-এ পোর্ট করেন, তাহলে appengine_config.py এবং lib ফোল্ডারটি (যদি থাকে) ডিলিট করে দিন। এগুলো অ্যাপ ইঞ্জিনের এমন কিছু অংশ যা পাইথন ৩ রানটাইমে ব্যবহৃত হয় না।

৫. অ্যাপ্লিকেশন ফাইলগুলি পরিবর্তন করুন

অ্যাপ্লিকেশন ফাইলটি একটাই, main.py , তাই ক্লাউড ফাংশনে স্থানান্তরের জন্য প্রয়োজনীয় সমস্ত পরিবর্তন এই ফাইলেই করা হয়।

আমদানি

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

যেহেতু ওয়েব ফ্রেমওয়ার্কগুলো ক্লাউড ফাংশনস-এর আওতাভুক্ত নয়, তাই আপনার অ্যাপ যদি ফ্লাস্কের অন্য কোনো ফিচার ব্যবহার না করে, তবে ফ্লাস্ক থেকে কোনো কিছু ইম্পোর্ট করার প্রয়োজন নেই। আমাদের ক্ষেত্রেও বিষয়টি এমনই, কারণ ফাংশনে রূপান্তরের পরেও টেমপ্লেট রেন্ডারিং সম্পন্ন হয়, যার অর্থ হলো flask.render_template() কল করার প্রয়োজন এখনও রয়েছে, আর একারণেই ফ্লাস্ক থেকে এটি ইম্পোর্ট করা হয়েছে। কোনো ওয়েব ফ্রেমওয়ার্ক না থাকায় ফ্লাস্ক অ্যাপ ইনস্ট্যানশিয়েট করারও প্রয়োজন নেই, তাই app = Flask(__name__) মুছে ফেলুন। পরিবর্তনগুলো প্রয়োগ করার আগে ও পরে আপনার কোডটি দেখতে নিচের মতো হবে:

পূর্বে:

from flask import Flask, render_template, request
from google.cloud import ndb

app = Flask(__name__)
ds_client = ndb.Client()

পরে:

from flask import render_template
from google.cloud import ndb

ds_client = ndb.Client()

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

প্রধান হ্যান্ডলার ফাংশনের সিগনেচার আপডেট করুন

ফাংশন সিগনেচারে প্রয়োজনীয় পরিবর্তনগুলো নিম্নরূপ:

  1. অ্যাপটিকে ক্লাউড ফাংশনে রূপান্তর করার পর ফ্লাস্ক আর ব্যবহার করা হয় না, তাই রাউট ডেকোরেটরগুলো সরিয়ে ফেলুন।
  2. ক্লাউড ফাংশন স্বয়ংক্রিয়ভাবে ফ্লাস্ক Request অবজেক্টটিকে একটি প্যারামিটার হিসেবে পাঠিয়ে দেয়, তাই এর জন্য একটি ভেরিয়েবল তৈরি করুন। আমাদের স্যাম্পল অ্যাপে, আমরা এর নাম দেব ` request
  3. ডেপ্লয় করা ক্লাউড ফাংশনগুলোর একটি নাম থাকা আবশ্যক। অ্যাপ ইঞ্জিনে আমাদের প্রধান হ্যান্ডলারটির নাম যথাযথভাবে root() রাখা হয়েছিল, যা এর পরিচয় (রুট অ্যাপ্লিকেশন হ্যান্ডলার) প্রকাশ করে। একটি ক্লাউড ফাংশন হিসেবে, এই নামটি ব্যবহার করার তেমন কোনো যৌক্তিকতা নেই। এর পরিবর্তে, আমরা ক্লাউড ফাংশনটি visitme নামে ডেপ্লয় করব, তাই পাইথন ফাংশনের নাম হিসেবেও এটিই ব্যবহার করুন। একইভাবে, মডিউল ৪ এবং ৫-এ আমরা ক্লাউড রান সার্ভিসটির নামও visitme রেখেছিলাম।

এই আপডেটগুলোর আগের ও পরের অবস্থা নিচে দেওয়া হলো:

পূর্বে:

@app.route('/')
def root():
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10)
    return render_template('index.html', visits=visits)

পরে:

def visitme(request):
    'main application (GET) handler'
    store_visit(request.remote_addr, request.user_agent)
    visits = fetch_visits(10)
    return render_template('index.html', visits=visits)

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

668f30e3865b27a9.png

স্থানীয় উন্নয়ন এবং পরীক্ষা

অ্যাপ ইঞ্জিনে যেমন dev_appserver.py লোকাল ডেভেলপমেন্ট সার্ভার রয়েছে, তেমনি ক্লাউড ফাংশনসে রয়েছে এর ফাংশনস ফ্রেমওয়ার্ক । এই ফ্রেমওয়ার্কের সাহায্যে আপনি স্থানীয়ভাবে ডেভেলপ ও টেস্ট করতে পারেন। আপনার কোড ক্লাউড ফাংশনসে ডেপ্লয় করা যায়, তবে এটি কম্পিউট ইঞ্জিন , ক্লাউড রান-এর মতো অন্যান্য কম্পিউট প্ল্যাটফর্মে, এমনকি নেটিভ (Knative) সাপোর্ট করে এমন অন-প্রেম বা হাইব্রিড ক্লাউড সিস্টেমেও ডেপ্লয় করা যেতে পারে। ফাংশনস ফ্রেমওয়ার্কের অতিরিক্ত লিঙ্কের জন্য নিচে দেখুন।

৬. তৈরি এবং স্থাপন করুন

ক্লাউড ফাংশনে ডিপ্লয় করার পদ্ধতি অ্যাপ ইঞ্জিন থেকে কিছুটা ভিন্ন। যেহেতু requirements.txt ছাড়া অন্য কোনো কনফিগারেশন ফাইল ব্যবহার করা হয় না, তাই কোড সম্পর্কে আরও তথ্য কমান্ড-লাইনে উল্লেখ করতে হয়। পাইথন ৩.১০-এ চালিত আপনার নতুন HTTP-ট্রিগারড ক্লাউড ফাংশনটি এই কমান্ডের মাধ্যমে ডিপ্লয় করুন:

$ gcloud functions deploy visitme --runtime python310 --trigger-http --allow-unauthenticated

নিম্নলিখিতের অনুরূপ আউটপুট আশা করুন:

Deploying function (may take a while - up to 2 minutes)...⠛
For Cloud Build Logs, visit: https://console.cloud.google.com/cloud-build/builds;region=REGION/f5f6fc81-1bb3-4cdb-8bfe?project=PROJECT_ID
Deploying function (may take a while - up to 2 minutes)...done.
availableMemoryMb: 256
buildId: f5f6fc81-1bb3-4cdb-8bfe
buildName: projects/PROJECT_ID/locations/REGION/builds/f5f6fc81-1bb3-4cdb-8bfe
dockerRegistry: CONTAINER_REGISTRY
entryPoint: visitme
httpsTrigger:
  securityLevel: SECURE_OPTIONAL
  url: https://REGION-PROJECT_ID.cloudfunctions.net/visitme
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/PROJECT_ID/locations/REGION/functions/visitme
runtime: python310
serviceAccountEmail: PROJECT_ID@appspot.gserviceaccount.com
sourceUploadUrl: https://storage.googleapis.com/uploads-853031211983.REGION.cloudfunctions.appspot.com/8c923758-cee8-47ce-8e97-5720a5301c34.zip
status: ACTIVE
timeout: 60s
updateTime: '2022-05-16T18:28:06.153Z'
versionId: '8'

আপনার ফাংশনটি ডিপ্লয় করার পর, ডিপ্লয়মেন্ট আউটপুট থেকে পাওয়া URL-টি ব্যবহার করে আপনার অ্যাপটি ভিজিট করুন। URL-টি এই ধরনের হবে: REGION-PROJECT_ID.cloudfunctions.net/visitme । আউটপুটটি ঠিক তেমনই হওয়া উচিত যেমনটি আপনি আগে অ্যাপ ইঞ্জিনে ডিপ্লয় করার সময় পেয়েছিলেন:

2732ae9218f011a2.png

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

৭. সারসংক্ষেপ/পরিষ্কারকরণ

এই ছোট অ্যাপ ইঞ্জিন অ্যাপটিকে ক্লাউড ফাংশনে রূপান্তর করার জন্য অভিনন্দন! এর আরেকটি উপযুক্ত ব্যবহার হলো: একটি বড় মনোলিথিক অ্যাপ ইঞ্জিন অ্যাপকে ভেঙে একাধিক মাইক্রোসার্ভিসে পরিণত করা, যার প্রতিটি হবে একটি ক্লাউড ফাংশন। এটি একটি আধুনিক ডেভেলপমেন্ট কৌশল, যার ফলে আরও "প্লাগ-এন্ড-প্লে" কম্পোনেন্ট (যেমন " জ্যাম স্ট্যাক ") স্টাইল পাওয়া যায়। এটি বিভিন্ন অংশের মিশ্রণ ও সমন্বয় এবং কোড পুনঃব্যবহারের সুযোগ দেয়, যা এর দুটি মূল লক্ষ্য। তবে এর আরেকটি সুবিধা হলো, এই মাইক্রোসার্ভিসগুলো সময়ের সাথে সাথে ডিবাগ হতে থাকবে, যার ফলে কোড স্থিতিশীল থাকবে এবং সার্বিকভাবে রক্ষণাবেক্ষণের খরচ কম হবে।

পরিষ্কার করা

এই কোডল্যাবটি সম্পন্ন করার পর, আপনি বিলিং এড়ানোর জন্য মডিউল ২ অ্যাপ ইঞ্জিন অ্যাপটি (অস্থায়ীভাবে বা স্থায়ীভাবে) নিষ্ক্রিয় করতে পারেন। অ্যাপ ইঞ্জিন প্ল্যাটফর্মের একটি ফ্রি কোটা রয়েছে, তাই আপনি এর ব্যবহারের স্তরের মধ্যে থাকলে আপনাকে বিল করা হবে না। ডেটাস্টোরের ক্ষেত্রেও একই নিয়ম প্রযোজ্য; আরও বিস্তারিত জানতে ক্লাউড ডেটাস্টোর প্রাইসিং পেজটি দেখুন।

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

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

পরবর্তী পদক্ষেপ

এই টিউটোরিয়াল ছাড়াও, ক্লাউড রানের জন্য আপনার অ্যাপ ইঞ্জিন অ্যাপকে কন্টেইনারাইজ করার মতো অন্যান্য মাইগ্রেশন মডিউলগুলোও দেখতে পারেন। মডিউল ৪ এবং মডিউল ৫ কোডল্যাবের লিঙ্কগুলো দেখুন:

  • মডিউল ৪ : ডকারের সাহায্যে ক্লাউড রানে মাইগ্রেট করুন
  • ডকারের সাহায্যে আপনার অ্যাপকে কন্টেইনারাইজ করে ক্লাউড রানে চালান।
  • এই মাইগ্রেশন আপনাকে পাইথন ২ ব্যবহার করার সুযোগ দেবে।
  • মডিউল ৫ : ক্লাউড বিল্ডপ্যাকস সহ ক্লাউড রান-এ মাইগ্রেট করুন
  • Cloud Buildpacks ব্যবহার করে আপনার অ্যাপকে Cloud Run-এ চালানোর জন্য কন্টেইনারাইজ করুন।
  • আপনার ডকার, কন্টেইনার বা Dockerfile সম্পর্কে কিছুই জানার প্রয়োজন নেই।
  • আপনার অ্যাপটিকে অবশ্যই আগে থেকে পাইথন ৩-এ স্থানান্তরিত হতে হবে (বিল্ডপ্যাকস পাইথন ২ সমর্থন করে না)।

অন্যান্য মডিউলগুলোর মধ্যে অনেকগুলোই ডেভেলপারদেরকে দেখায় কীভাবে অ্যাপ ইঞ্জিনের অন্তর্ভুক্ত পরিষেবাগুলো থেকে সরে এসে ক্লাউডের স্বতন্ত্র বিকল্পগুলোতে স্থানান্তরিত হতে হয়:

  • মডিউল ২ : অ্যাপ ইঞ্জিন ndb থেকে ক্লাউড এনডিবি-তে মাইগ্রেট করুন
  • মডিউল ৭-৯ : অ্যাপ ইঞ্জিন টাস্ক কিউ থেকে ক্লাউড টাস্কে টাস্ক স্থানান্তর ও পুশ করা
  • মডিউল ১২-১৩ : অ্যাপ ইঞ্জিন মেমক্যাশ থেকে ক্লাউড মেমোরিস্টোরে স্থানান্তর
  • মডিউল ১৫-১৬ : অ্যাপ ইঞ্জিন ব্লবস্টোর থেকে ক্লাউড স্টোরেজে স্থানান্তর
  • মডিউল ১৮-১৯ : অ্যাপ ইঞ্জিন টাস্ক কিউ (পুল টাস্ক) থেকে ক্লাউড পাব/সাব-এ মাইগ্রেট করা

যদি কন্টেইনারাইজেশন আপনার অ্যাপ্লিকেশন ডেভেলপমেন্ট ওয়ার্কফ্লোর একটি অংশ হয়ে থাকে, বিশেষ করে যদি এতে একটি CI/CD (কন্টিনিউয়াস ইন্টিগ্রেশন/কন্টিনিউয়াস ডেলিভারি বা ডিপ্লয়মেন্ট) পাইপলাইন থাকে, তাহলে Cloud Functions-এর পরিবর্তে Cloud Run- এ মাইগ্রেট করার কথা বিবেচনা করুন। Docker ব্যবহার করে আপনার অ্যাপকে কন্টেইনারাইজ করতে মডিউল ৪ দেখুন, অথবা কন্টেইনার, Docker-এর জ্ঞান বা Dockerfile ছাড়াই এটি করতে মডিউল ৫ দেখুন। Cloud Functions বা Cloud Run, যা-ই বিবেচনা করুন না কেন, অন্য কোনো সার্ভারলেস প্ল্যাটফর্মে যাওয়া ঐচ্ছিক, এবং আমরা যেকোনো পরিবর্তন করার আগে আপনার অ্যাপ ও ব্যবহারের ক্ষেত্রগুলোর জন্য সেরা বিকল্পগুলো বিবেচনা করার পরামর্শ দিই।

এরপরে আপনি যে মাইগ্রেশন মডিউলটিই বিবেচনা করুন না কেন, সার্ভারলেস মাইগ্রেশন স্টেশনের সমস্ত কন্টেন্ট (কোডল্যাব, ভিডিও, সোর্স কোড [যখন উপলব্ধ]) এর ওপেন সোর্স রিপো থেকে অ্যাক্সেস করা যাবে। রিপোটির README কোন মাইগ্রেশনগুলো বিবেচনা করা উচিত এবং মাইগ্রেশন মডিউলগুলোর প্রাসঙ্গিক "ক্রম" সম্পর্কেও নির্দেশনা দেওয়া আছে।

৮. অতিরিক্ত সম্পদ

অ্যাপ ইঞ্জিন মাইগ্রেশন মডিউল কোডল্যাবস সমস্যা/মতামত

এই কোডল্যাবে কোনো সমস্যা পেলে, অভিযোগ জানানোর আগে অনুগ্রহ করে সমস্যাটি অনুসন্ধান করুন। নতুন সমস্যা অনুসন্ধান ও তৈরি করার লিঙ্ক:

অভিবাসন সম্পদ

মডিউল ৮ (শুরু) এবং মডিউল ৯ (শেষ)-এর রিপো ফোল্ডারগুলোর লিঙ্ক নিচের টেবিলে দেওয়া আছে। এছাড়াও, সমস্ত অ্যাপ ইঞ্জিন কোডল্যাব মাইগ্রেশনের রিপো থেকেও এগুলো অ্যাক্সেস করা যাবে, যা আপনি ক্লোন করতে পারেন অথবা একটি জিপ ফাইল হিসেবে ডাউনলোড করতে পারেন।

কোডল্যাব

পাইথন ৩

মডিউল ২

কোড

মডিউল ১১

কোড

অনলাইন রিসোর্স

এই টিউটোরিয়ালটির জন্য প্রাসঙ্গিক হতে পারে এমন কিছু অনলাইন রিসোর্স নিচে দেওয়া হলো:

অ্যাপ ইঞ্জিন

ক্লাউড ফাংশন

অন্যান্য ক্লাউড তথ্য

ভিডিও

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।