মডিউল 3: Google Cloud NDB থেকে ক্লাউড ডেটাস্টোরে স্থানান্তর করুন৷

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

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

এই ঐচ্ছিক টিউটোরিয়ালটি ডেভেলপারদের দেখায় কিভাবে ডেটাস্টোর সার্ভিসের সাথে যোগাযোগের জন্য ক্লায়েন্ট লাইব্রেরি হিসেবে ক্লাউড এনডিবি (Cloud NDB) থেকে ক্লাউড ডেটাস্টোরে (Cloud Datastore) মাইগ্রেট করতে হয়। যে সকল ডেভেলপার এনডিবি (NDB) পছন্দ করেন, তারা সেটিই ব্যবহার করতে পারেন, কারণ এটি পাইথন ৩ (Python 3) এর সাথে সামঞ্জস্যপূর্ণ, আর একারণেই এই মাইগ্রেশনটি ঐচ্ছিক। এই মাইগ্রেশনটি শুধুমাত্র তাদের জন্য, যারা ক্লাউড ডেটাস্টোর ব্যবহারকারী অন্যান্য অ্যাপের সাথে একটি সামঞ্জস্যপূর্ণ কোডবেস এবং শেয়ার্ড লাইব্রেরি তৈরি করতে চান। এই বিষয়টি "ব্যাকগ্রাউন্ড" (Background) অংশে ব্যাখ্যা করা হয়েছে।

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

  • ক্লাউড এনডিবি ব্যবহার করুন (যদি আপনি এটির সাথে পরিচিত না হন)।
  • ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে স্থানান্তর করুন
  • আপনার অ্যাপটিকে আরও পাইথন ৩-এ স্থানান্তর করুন।

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

  • একটি সক্রিয় GCP বিলিং অ্যাকাউন্ট সহ একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্ট
  • পাইথনের প্রাথমিক দক্ষতা
  • লিনাক্সের মৌলিক কমান্ড সম্পর্কে কার্যকরী জ্ঞান
  • অ্যাপ ইঞ্জিন অ্যাপ তৈরি এবং স্থাপন করার প্রাথমিক জ্ঞান
  • একটি কার্যকর মডিউল ২ অ্যাপ ইঞ্জিন ২.x বা ৩.x অ্যাপ।

জরিপ

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

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

২. পটভূমি

যদিও ক্লাউড এনডিবি দীর্ঘদিনের অ্যাপ ইঞ্জিন ডেভেলপারদের জন্য একটি চমৎকার ডেটাস্টোর সমাধান এবং পাইথন ৩-এ রূপান্তরে সাহায্য করে, তবে অ্যাপ ইঞ্জিন ডেভেলপারদের ডেটাস্টোর অ্যাক্সেস করার এটিই একমাত্র উপায় নয়। ২০১৩ সালে যখন অ্যাপ ইঞ্জিনের ডেটাস্টোর ‘গুগল ক্লাউড ডেটাস্টোর’ নামে একটি স্বতন্ত্র পণ্য হয়ে ওঠে , তখন একটি নতুন ক্লায়েন্ট লাইব্রেরি তৈরি করা হয়েছিল যাতে সকল ব্যবহারকারী ডেটাস্টোর ব্যবহার করতে পারেন।

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

ক্লাউড এনডিবি থেকে ক্লাউড ডেটাস্টোরে স্থানান্তর

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

এই মাইগ্রেশন প্রক্রিয়ায় নিম্নলিখিত প্রধান ধাপগুলো রয়েছে:

  1. প্রস্তুতি/পূর্বপ্রস্তুতি
  2. ক্লাউড এনডিবি-কে ক্লাউড ডেটাস্টোর ক্লায়েন্ট লাইব্রেরি দিয়ে প্রতিস্থাপন করুন
  3. অ্যাপ্লিকেশন আপডেট করুন

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

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

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

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

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

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

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

পাইথন ২

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

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

আপনি যদি মডিউল ২ টিউটোরিয়ালটি সম্পন্ন করে থাকেন, তাহলে আপনার একটি lib ফোল্ডারও থাকবে যেখানে Flask এবং এর ডিপেন্ডেন্সিগুলো রয়েছে। যদি আপনার ' lib ফোল্ডার না থাকে, তাহলে pip install -t lib -r requirements.txt ' কমান্ডটি দিয়ে এটি তৈরি করুন, যাতে আমরা পরবর্তী ধাপে এই বেসলাইন অ্যাপটি ডেপ্লয় করতে পারি। যদি আপনার সিস্টেমে Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে, তাহলে Python 3-এর সাথে বিভ্রান্তি এড়াতে আমরা ' pip এর পরিবর্তে pip2 ব্যবহার করার পরামর্শ দিই।

পাইথন ৩

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

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

পাইথন ৩-এর জন্য lib বা appengine_config.py কোনোটিই ব্যবহৃত হয় না।

৩. মডিউল ২ অ্যাপ (পুনরায়) স্থাপন করুন

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

  1. gcloud কমান্ড-লাইন টুলটির সাথে পুনরায় পরিচিত হয়ে নিন (প্রয়োজন হলে)।
  2. (প্রয়োজন হলে) মডিউল ১-এর কোড অ্যাপ ইঞ্জিনে পুনরায় ডেপ্লয় করুন।

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

৪. ক্লাউড এনডিবি-কে ক্লাউড ডেটাস্টোর ক্লায়েন্ট লাইব্রেরি দিয়ে প্রতিস্থাপন করুন

একমাত্র কনফিগারেশন পরিবর্তন হলো আপনার requirements.txt ফাইলে একটি ছোট প্যাকেজ অদলবদল করা।

১. requirements.txt আপডেট করুন।

মডিউল ২ সম্পন্ন করার পর, আপনার requirements.txt ফাইলটি দেখতে এইরকম ছিল:

  • পূর্বে (পাইথন ২ এবং ৩):
Flask==1.1.2
google-cloud-ndb==1.7.1

requirements.txt আপডেট করুন এবং Cloud NDB লাইব্রেরি ( google-cloud-ndb )-এর পরিবর্তে Cloud Datastore লাইব্রেরির ( google-cloud-datastore ) সর্বশেষ সংস্করণটি যোগ করুন। Flask-এর এন্ট্রিটি অপরিবর্তিত রাখুন এবং মনে রাখবেন যে Cloud Datastore-এর Python 2-এর সাথে সামঞ্জস্যপূর্ণ সর্বশেষ সংস্করণটি হলো 1.15.3।

  • পরে (পাইথন ২):
Flask==1.1.2
google-cloud-datastore==1.15.3
  • পরে (পাইথন ৩):
Flask==1.1.2
google-cloud-datastore==2.1.0

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

২. অন্যান্য কনফিগারেশন ফাইল

অন্যান্য কনফিগারেশন ফাইল, app.yaml এবং appengine_config.py , পূর্ববর্তী মাইগ্রেশন ধাপ থেকে অপরিবর্তিত থাকা উচিত:

  • app.yaml (এখনও) grpcio এবং setuptools এই থার্ড-পার্টি বান্ডেল প্যাকেজগুলোর রেফারেন্স থাকা উচিত।
  • appengine_config.py (এখনও) pkg_resources এবং google.appengine.ext.vendor lib এ থাকা থার্ড-পার্টি রিসোর্সগুলোর দিকে নির্দেশ করতে হবে।

এবার অ্যাপ্লিকেশন ফাইলগুলোর দিকে যাওয়া যাক।

৫. অ্যাপ্লিকেশন ফাইলগুলো আপডেট করুন

template/index.html এ কোনো পরিবর্তন নেই, কিন্তু main.py তে কয়েকটি আপডেট করা হয়েছে।

১. আমদানি

ইম্পোর্ট সেকশনের শুরুর কোডটি দেখতে নিম্নরূপ হবে:

  • পূর্বে:
from flask import Flask, render_template, request
from google.cloud import ndb

google.cloud.ndb ইম্পোর্টটি Cloud Datastore-এর ইম্পোর্ট google.cloud.datastore দিয়ে প্রতিস্থাপন করুন। যেহেতু Datastore ক্লায়েন্ট লাইব্রেরি একটি Entity-তে স্বয়ংক্রিয়ভাবে টাইমস্ট্যাম্প ফিল্ড তৈরি করা সমর্থন করে না, তাই ম্যানুয়ালি একটি তৈরি করার জন্য স্ট্যান্ডার্ড লাইব্রেরির datetime মডিউলটিও ইম্পোর্ট করুন। প্রচলিত নিয়ম অনুযায়ী, স্ট্যান্ডার্ড লাইব্রেরির ইম্পোর্টগুলো থার্ড-পার্টি প্যাকেজ ইম্পোর্টের উপরে থাকে। এই পরিবর্তনগুলো করার পর, এটি দেখতে এইরকম হবে:

  • পরে:
from datetime import datetime
from flask import Flask, render_template, request
from google.cloud import datastore

২. প্রারম্ভিককরণ এবং ডেটা মডেল

Flask ইনিশিয়ালাইজ করার পর, মডিউল ২-এর স্যাম্পল অ্যাপটিতে তৈরি করা NDB ডেটা মডেল ক্লাস এবং এর ফিল্ডগুলো দেখতে নিম্নরূপ হয়:

  • পূর্বে:
app = Flask(__name__)
ds_client = ndb.Client()

class Visit(ndb.Model):
    visitor   = ndb.StringProperty()
    timestamp = ndb.DateTimeProperty(auto_now_add=True)

ক্লাউড ডেটাস্টোর লাইব্রেরিতে এই ধরনের কোনো ক্লাস নেই, তাই Visit ক্লাস ডিক্লারেশনটি মুছে দিন। ডেটাস্টোরের সাথে যোগাযোগের জন্য আপনার এখনও একটি ক্লায়েন্ট প্রয়োজন, তাই ndb.Client() কে datastore.Client() এ পরিবর্তন করুন। ডেটাস্টোর লাইব্রেরিটি আরও "নমনীয়", যা আপনাকে NDB-এর মতো কাঠামো "পূর্ব-ঘোষণা" না করেই এনটিটি তৈরি করার সুযোগ দেয়। এই আপডেটের পরে, main.py এর এই অংশটি দেখতে এইরকম হবে:

  • পরে:
app = Flask(__name__)
ds_client = datastore.Client()

৩. ডেটাস্টোর অ্যাক্সেস

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

  • পূর্বে:
def store_visit(remote_addr, user_agent):
    with ds_client.context():
        Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    with ds_client.context():
        return (v.to_dict() for v in Visit.query().order(
                -Visit.timestamp).fetch_page(limit)[0])

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

  • পরে:
def store_visit(remote_addr, user_agent):
    entity = datastore.Entity(key=ds_client.key('Visit'))
    entity.update({
        'timestamp': datetime.now(),
        'visitor': '{}: {}'.format(remote_addr, user_agent),
    })
    ds_client.put(entity)

def fetch_visits(limit):
    query = ds_client.query(kind='Visit')
    query.order = ['-timestamp']
    return query.fetch(limit=limit)

উপরে যেমন বলা হয়েছে, store_visit() এবং fetch_visits() ফাংশনের বডিগুলো আপডেট করুন এবং এদের সিগনেচার আগের ভার্সনের মতোই রাখুন। মূল হ্যান্ডলার root() -এ কোনো পরিবর্তন নেই। এই পরিবর্তনগুলো সম্পন্ন করার পর, আপনার অ্যাপটি এখন ক্লাউড ডেটাস্টোর ব্যবহার করার জন্য প্রস্তুত এবং টেস্ট করার জন্য তৈরি।

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

অ্যাপ্লিকেশন স্থাপন করুন

gcloud app deploy দিয়ে আপনার অ্যাপটি পুনরায় ডিপ্লয় করুন এবং অ্যাপটি কাজ করছে কিনা তা নিশ্চিত করুন। আপনার কোড এখন মডিউল ৩ রিপো ফোল্ডারগুলোতে যা আছে তার সাথে মিলে যাওয়া উচিত:

আপনি যদি আগের কোনো কোডল্যাব না করেই এই সিরিজে চলে আসেন, তাহলেও অ্যাপটির নিজের কোনো পরিবর্তন হয় না; এটি মূল ওয়েব পেজে ( / ) সমস্ত ভিজিট রেকর্ড করে এবং যথেষ্ট সংখ্যকবার সাইটটি ভিজিট করার পর এটি দেখতে এইরকম হয়ে যায়:

ভিজিটমি অ্যাপ

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

ঐচ্ছিক: পরিষ্কার করা

পরবর্তী মাইগ্রেশন কোডল্যাবে যাওয়ার জন্য প্রস্তুত না হওয়া পর্যন্ত বিল এড়ানোর জন্য কোডগুলো গুছিয়ে নিলে কেমন হয়? বিদ্যমান ডেভেলপার হিসেবে, আপনারা সম্ভবত অ্যাপ ইঞ্জিনের মূল্য নির্ধারণের তথ্য সম্পর্কে ইতিমধ্যেই অবগত আছেন।

ঐচ্ছিক: অ্যাপটি নিষ্ক্রিয় করুন

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

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

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

এখান থেকে, পরবর্তী এই মাইগ্রেশন মডিউলগুলো অন্বেষণ করতে পারেন:

  • মডিউল ৩ বোনাস: পাইথন ৩ এবং পরবর্তী প্রজন্মের অ্যাপ ইঞ্জিন রানটাইমে কীভাবে পোর্ট করতে হয় তা শিখতে বোনাস বিভাগে যান।
  • মডিউল ৭: অ্যাপ ইঞ্জিন পুশ টাস্ক কিউ (যদি আপনি [push] টাস্ক কিউ ব্যবহার করেন তবে এটি আবশ্যক)
    • মডিউল ১ অ্যাপে অ্যাপ ইঞ্জিন taskqueue পুশ টাস্ক যোগ করে।
    • মডিউল ৮-এ ক্লাউড টাস্ক- এ স্থানান্তরের জন্য ব্যবহারকারীদের প্রস্তুত করে।
  • মডিউল ৪: ডকারের সাহায্যে ক্লাউড রানে মাইগ্রেট করুন
    • ডকারের সাহায্যে আপনার অ্যাপকে কন্টেইনারাইজ করে ক্লাউড রানে চালান।
    • আপনাকে পাইথন ২ ব্যবহার করতে দেয়
  • মডিউল ৫: ক্লাউড বিল্ডপ্যাকস সহ ক্লাউড রান-এ মাইগ্রেট করুন
    • Cloud Buildpacks ব্যবহার করে আপনার অ্যাপকে Cloud Run-এ চালানোর জন্য কন্টেইনারাইজ করুন।
    • ডকার, কন্টেইনার বা Dockerfile সম্পর্কে কিছুই জানার প্রয়োজন নেই।
    • এর জন্য আপনাকে ইতিমধ্যেই আপনার অ্যাপটি পাইথন ৩-এ মাইগ্রেট করে থাকতে হবে।
  • মডিউল ৬: ক্লাউড ফায়ারস্টোরে স্থানান্তর
    • ফায়ারবেস ফিচারগুলো অ্যাক্সেস করতে ক্লাউড ফায়ারস্টোরে মাইগ্রেট করুন।
    • যদিও ক্লাউড ফায়ারস্টোর পাইথন ২ সমর্থন করে, এই কোডল্যাবটি শুধুমাত্র পাইথন ৩-এ উপলব্ধ।

৭. বোনাস: পাইথন ৩-এ মাইগ্রেট করুন

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

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

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

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

  1. পাইথন ৩-এর রেফারেন্স যুক্ত করতে এবং বান্ডেল করা থার্ড-পার্টি লাইব্রেরির রেফারেন্স সরাতে app.yaml সরল করুন।
  2. appengine_config.py এবং lib ফোল্ডারটি মুছে ফেলুন, কারণ এগুলোর আর প্রয়োজন নেই।

main.py এবং templates/index.html অ্যাপ্লিকেশন ফাইলগুলো অপরিবর্তিত থাকে।

requirements.txt আপডেট করুন।

পাইথন ২ সমর্থনকারী ক্লাউড ডেটাস্টোরের সর্বশেষ সংস্করণটি হলো ১.১৫.৩। পাইথন ৩-এর জন্য সর্বশেষ সংস্করণ দিয়ে requirements.txt আপডেট করুন (ইতিমধ্যে এটি আরও নতুন হতে পারে)। যখন এই টিউটোরিয়ালটি লেখা হয়েছিল, তখন সর্বশেষ সংস্করণটি ছিল ২.১.০, তাই লাইনটি সম্পাদনা করে এইরকম করুন (অথবা সর্বশেষ সংস্করণটি যা-ই হোক না কেন):

google-cloud-datastore==2.1.0

app.yaml সরল করুন

পূর্বে:

এই স্যাম্পল অ্যাপটির জন্য একমাত্র আসল পরিবর্তন হলো app.yaml উল্লেখযোগ্যভাবে ছোট করা। মনে করিয়ে দেওয়ার জন্য, মডিউল ৩-এর শেষে app.yaml এ যা ছিল তা নিচে দেওয়া হলো:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

libraries:
- name: grpcio
  version: 1.0.0
- name: setuptools
  version: 36.6.0

পরে:

পাইথন ৩-এ, threadsafe , api_version , এবং libraries ডিরেক্টিভগুলো সবই ডেপ্রিকেটেড; সমস্ত অ্যাপকে থ্রেডসেফ হিসেবে ধরে নেওয়া হয় এবং পাইথন ৩-এ api_version ব্যবহৃত হয় না। অ্যাপ ইঞ্জিন সার্ভিসগুলোতে এখন আর কোনো বিল্ট-ইন থার্ড-পার্টি প্যাকেজ আগে থেকে ইনস্টল করা থাকে না, তাই libraries ও ডেপ্রিকেটেড। এই পরিবর্তনগুলো সম্পর্কে আরও তথ্যের জন্য app.yaml এর পরিবর্তন সংক্রান্ত ডকুমেন্টেশন দেখুন। ফলস্বরূপ, আপনার app.yaml থেকে এই তিনটিই মুছে ফেলা উচিত এবং একটি সমর্থিত পাইথন ৩ সংস্করণে আপডেট করা উচিত (নিচে দেখুন)।

ঐচ্ছিক: handlers নির্দেশিকার ব্যবহার

এছাড়াও, handlers ডিরেক্টিভ, যা অ্যাপ ইঞ্জিন অ্যাপ্লিকেশনগুলিতে ট্র্যাফিক নির্দেশ করে, সেটিও বাতিল করা হয়েছে। যেহেতু নেক্সট-জেন রানটাইম অ্যাপ রাউটিং পরিচালনার জন্য ওয়েব ফ্রেমওয়ার্কের উপর নির্ভর করে, তাই সমস্ত "হ্যান্ডলার স্ক্রিপ্ট" অবশ্যই " auto "-তে পরিবর্তন করতে হবে। উপরের পরিবর্তনগুলি একত্রিত করলে, আপনি এই app.yaml পাবেন:

runtime: python38

handlers:
- url: /.*
  script: auto

app.yaml রেফারেন্স পৃষ্ঠা থেকে script: auto সম্পর্কে আরও জানুন।

handlers নির্দেশিকা অপসারণ

যেহেতু handlers এখন আর ব্যবহৃত হয় না, আপনি পুরো অংশটিই মুছে ফেলতে পারেন, সেক্ষেত্রে app.yaml শুধু একটি লাইন থাকবে:

runtime: python38

ডিফল্টরূপে, এটি Gunicorn WSGI ওয়েব সার্ভার চালু করবে যা সকল অ্যাপ্লিকেশনের জন্য উপলব্ধ। আপনি যদি gunicorn সাথে পরিচিত হন, তবে বেয়ারবোনস app.yaml সাথে ডিফল্টরূপে এটি চালু করার সময় এই কমান্ডটিই এক্সিকিউট করা হয়:

gunicorn main:app --workers 2 -c /config/gunicorn.py

ঐচ্ছিক: entrypoint ডিরেক্টিভের ব্যবহার

তবে, যদি আপনার অ্যাপ্লিকেশনের জন্য একটি নির্দিষ্ট স্টার্ট-আপ কমান্ডের প্রয়োজন হয়, তাহলে সেটি একটি entrypoint ডিরেক্টিভের মাধ্যমে নির্দিষ্ট করা যেতে পারে, যার ফলে app.yaml দেখতে এইরকম হবে:

runtime: python38
entrypoint: python main.py

এই উদাহরণটিতে বিশেষভাবে gunicorn এর পরিবর্তে Flask ডেভেলপমেন্ট সার্ভার ব্যবহার করার অনুরোধ করা হয়েছে। আপনার অ্যাপকে 0.0.0.0 ইন্টারফেসে 8080 পোর্টে চালু করার জন্য, main.py শেষে এই ছোট অংশটি যোগ করে ডেভেলপমেন্ট সার্ভার চালু করার কোডও যোগ করতে হবে:

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080, debug=True)

app.yaml রেফারেন্স পৃষ্ঠা থেকে entrypoint সম্পর্কে আরও জানুন। আরও উদাহরণ এবং সেরা অনুশীলনসমূহ অ্যাপ ইঞ্জিন স্ট্যান্ডার্ড এনভায়রনমেন্ট স্টার্টআপ ডক্স এবং অ্যাপ ইঞ্জিন ফ্লেক্সিবল এনভায়রনমেন্ট স্টার্টআপ ডক্স- এ পাওয়া যাবে।

appengine_config.py এবং lib মুছে ফেলুন

appengine_config.py ফাইল এবং lib ফোল্ডারটি মুছে ফেলুন। পাইথন ৩-এ স্থানান্তরের সময়, অ্যাপ ইঞ্জিন requirements.txt এ তালিকাভুক্ত প্যাকেজগুলি সংগ্রহ ও ইনস্টল করে।

appengine_config.py কনফিগারেশন ফাইলটি থার্ড-পার্টি লাইব্রেরি/প্যাকেজ শনাক্ত করতে ব্যবহৃত হয়, আপনি সেগুলো নিজে কপি করুন বা অ্যাপ ইঞ্জিন সার্ভারে আগে থেকেই উপলব্ধ (বিল্ট-ইন) লাইব্রেরি/প্যাকেজ ব্যবহার করুন। পাইথন ৩-এ স্থানান্তরের সময় বড় পরিবর্তনগুলোর সারসংক্ষেপ হলো:

  1. কপি করা থার্ড-পার্টি লাইব্রেরিগুলোর ( requirements.txt এ তালিকাভুক্ত) কোনো বান্ডলিং করা যাবে না।
  2. lib ফোল্ডারে pip install যাবে না, অর্থাৎ lib ফোল্ডারই থাকবে না।
  3. app.yaml এ কোনো বিল্ট-ইন থার্ড-পার্টি লাইব্রেরি তালিকাভুক্ত করা নেই।
  4. অ্যাপটিকে থার্ড-পার্টি লাইব্রেরির সাথে রেফারেন্স করার প্রয়োজন নেই, তাই কোনো appengine_config.py ফাইল নেই।

requirements.txt ফাইলে সমস্ত প্রয়োজনীয় থার্ড-পার্টি লাইব্রেরির তালিকা দিলেই চলবে।

অ্যাপ্লিকেশন স্থাপন করুন

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

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

আপনার আবেদনপত্র প্রস্তুত করা

যখন আপনার অ্যাপ্লিকেশনটি মাইগ্রেট করার সময় আসবে, তখন আপনাকে আপনার main.py এবং অন্যান্য অ্যাপ্লিকেশন ফাইলগুলো 3.x-এ পোর্ট করতে হবে, তাই একটি উত্তম অনুশীলন হলো আপনার 2.x অ্যাপ্লিকেশনটিকে যতটা সম্ভব "ফরওয়ার্ড-কম্প্যাটিবল" করে তোলার জন্য যথাসাধ্য চেষ্টা করা।

এই কাজটি সম্পন্ন করার জন্য অনলাইনে প্রচুর রিসোর্স রয়েছে, তবে কয়েকটি গুরুত্বপূর্ণ টিপস হলো:

  1. নিশ্চিত করুন যে অ্যাপ্লিকেশনের সমস্ত নির্ভরতা সম্পূর্ণরূপে 3.x-এর সাথে সামঞ্জস্যপূর্ণ।
  2. আপনার অ্যাপ্লিকেশনটি যেন অন্তত ২.৬ (বিশেষত ২.৭) সংস্করণে চলে, তা নিশ্চিত করুন।
  3. অ্যাপ্লিকেশনটি যেন সম্পূর্ণ টেস্ট স্যুট পাস করে (এবং ন্যূনতম ৮০% কভারেজ নিশ্চিত করে)
  4. six , Future, এবং/অথবা Modernize-এর মতো কম্প্যাটিবিলিটি লাইব্রেরি ব্যবহার করুন।
  5. 2.x এবং 3.x এর মধ্যে পশ্চাৎমুখী অসামঞ্জস্যপূর্ণ মূল পার্থক্যগুলো সম্পর্কে জেনে নিন।
  6. যেকোনো ইনপুট/আউটপুটের ফলে সম্ভবত ইউনিকোড এবং বাইট স্ট্রিংয়ের মধ্যে অসামঞ্জস্য দেখা দেবে।

এই সবকিছু মাথায় রেখেই স্যাম্পল অ্যাপটি ডিজাইন করা হয়েছে, আর একারণেই অ্যাপটি 2.x এবং 3.x ভার্সনে কোনো পরিবর্তন ছাড়াই চলে, যাতে আমরা আপনাকে দেখাতে পারি যে নেক্সট-জেন প্ল্যাটফর্মটি ব্যবহার করার জন্য কী কী পরিবর্তন করতে হবে।

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

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

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

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

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

কোডল্যাব

পাইথন ২

পাইথন ৩

মডিউল ২

কোড

কোড

মডিউল ৩

কোড

কোড

অ্যাপ ইঞ্জিন রিসোর্স

এই নির্দিষ্ট মাইগ্রেশন সম্পর্কিত অতিরিক্ত তথ্যসূত্র নিচে দেওয়া হলো: