ফ্লাস্ক অ্যাপে অ্যাপ ইঞ্জিন মেমক্যাশে কীভাবে ব্যবহার করবেন (মডিউল 12)

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

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

এই কোডল্যাবটি আপনাকে শেখাবে কিভাবে মডিউল ১ কোডল্যাবের স্যাম্পল অ্যাপটিতে অ্যাপ ইঞ্জিন মেমক্যাশ (App Engine Memcache) অন্তর্ভুক্ত ও ব্যবহার করতে হয়। আমরা এই মডিউল ১২ টিউটোরিয়ালে মেমক্যাশের ব্যবহার যুক্ত করব এবং এরপর মডিউল ১৩-তে ক্লাউড মেমোরিস্টোরে (Cloud Memorystore) মাইগ্রেট করব

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

  • অ্যাপ ইঞ্জিন মেমক্যাশ এপিআই/লাইব্রেরি ব্যবহার করুন
  • একটি সাধারণ পাইথন ২ ফ্লাস্ক অ্যাপ ইঞ্জিন এনডিবি অ্যাপে ক্যাশিং যোগ করুন

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

জরিপ

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

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

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

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

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

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

২. পটভূমি

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

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

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

  1. প্রস্তুতি/পূর্বপ্রস্তুতি
  2. কনফিগারেশন আপডেট করুন
  3. অ্যাপ্লিকেশন কোড পরিবর্তন করুন

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

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

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

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

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

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

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

মডিউল ১-এর প্রারম্ভিক ফাইলগুলোর ডিরেক্টরি (আপনার বা আমাদের) দেখতে এইরকম হবে:

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

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

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

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

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

a7a9d2b80d706a2b.png

৪. কনফিগারেশন আপডেট করুন

স্ট্যান্ডার্ড অ্যাপ ইঞ্জিন কনফিগারেশন ফাইলগুলিতে ( app.yaml , requirements.txt , appengine_config.py ) কোনো পরিবর্তনের প্রয়োজন নেই।

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

যেহেতু আমরা শুধুমাত্র একটি অ্যাপ ইঞ্জিন এপিআই (App Engine API) যোগ করছি, তাই এর সাথে কোনো বাহ্যিক প্যাকেজ জড়িত নেই, যার অর্থ কোনো কনফিগারেশন ফাইল ( app.yaml , requirements.txt , appengine_config.py ) আপডেট করার প্রয়োজন নেই। এখানে শুধুমাত্র একটি অ্যাপ্লিকেশন ফাইল, main.py , রয়েছে, তাই এই অংশের সমস্ত পরিবর্তন কেবল সেই ফাইলটিকেই প্রভাবিত করবে।

আমদানি

সবচেয়ে গুরুত্বপূর্ণ ধাপ হলো Memcache লাইব্রেরি, google.appengine.api.memcache , ইম্পোর্ট করা। যেহেতু আমরা এক ঘণ্টার জন্য সাম্প্রতিকতম ভিজিটগুলো ক্যাশ করতে যাচ্ছি, তাই এক ঘণ্টায় কত সেকেন্ড আছে তার জন্য একটি কনস্ট্যান্টও যোগ করা যাক। এই পরিবর্তনের আগে এবং পরে আপনার কোডটি দেখতে কেমন তা নিচে দেওয়া হলো:

পূর্বে:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

app = Flask(__name__)

পরে:

from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb

app = Flask(__name__)
HOUR = 3600

Memcache সাপোর্টের সাথে ক্যাশিং যোগ করুন

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

  1. বর্তমান ভিজিট সেট করুন এবং একে visitor বলুন।
  2. ক্যাশে থেকে সাম্প্রতিকতম visits আনার চেষ্টা
  3. যদি ক্যাশে খালি থাকে অথবা সর্বশেষ পরিদর্শক ( visits[0]['visitor'] ) বর্তমান visitor থেকে ভিন্ন হয়: এই নতুনতম পরিদর্শনটি সংরক্ষণ করুন, সাম্প্রতিকতম পরিদর্শনগুলি সংগ্রহ করুন এবং সেগুলিকে এক ঘন্টার জন্য ক্যাশে করুন।
  4. ওয়েব টেমপ্লেটের মাধ্যমে ব্যবহারকারীর visits প্রদর্শন করুন

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

পূর্বে:

@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)

পরে:

@app.route('/')
def root():
    'main application (GET) handler'
    # check for (hour-)cached visits
    ip_addr, usr_agt = request.remote_addr, request.user_agent
    visitor = '{}: {}'.format(ip_addr, usr_agt)
    visits = memcache.get('visits')

    # register visit & run DB query if cache empty or new visitor
    if not visits or visits[0]['visitor'] != visitor:
        store_visit(ip_addr, usr_agt)
        visits = list(fetch_visits(10))
        memcache.set('visits', visits, HOUR)  # set() not add()

    return render_template('index.html', visits=visits)

যে পরিবর্তনগুলো করা হয়েছিল তার একটি চিত্ররূপ নিচে দেওয়া হলো:

b1242503602f7bf0.png

মডিউল ১ স্যাম্পল অ্যাপে অ্যাপ ইঞ্জিন memcache ব্যবহার যুক্ত করার জন্য প্রয়োজনীয় সমস্ত পরিবর্তন এখানেই শেষ। চলুন, অ্যাপটি বিল্ড ও ডিপ্লয় করে দেখি এটি কীভাবে কাজ করে!

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

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

অ্যাপ্লিকেশনটি স্থাপন এবং যাচাই করুন

gcloud app deploy দিয়ে আপনার অ্যাপটি পুনরায় ডিপ্লয় করুন এবং অ্যাপটি কাজ করছে কিনা তা নিশ্চিত করুন। আপনার কোড এখন FINISH ( মডিউল ১২ ফোল্ডার )-এ যা আছে তার সাথে মিলে যাওয়া উচিত। আউটপুটটি আপনার পূর্বে ডিপ্লয় করা মডিউল ১ অ্যাপটির মতোই হওয়া উচিত।

a7a9d2b80d706a2b.png

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

আমাদের নমুনা অ্যাপ্লিকেশনে অ্যাপ ইঞ্জিন memcache সার্ভিস যুক্ত করার মডিউল ১২ কোডল্যাবটি সফলভাবে সম্পন্ন করার জন্য আপনাকে অভিনন্দন। বোনাস ধাপে এখন আপনার কাছে এই পাইথন ২ অ্যাপটিকে পাইথন ৩-এ পোর্ট করার সুযোগ রয়েছে।

পরিষ্কার করা

সাধারণ

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

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

  • console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • উপরের স্টোরেজ লিঙ্কগুলি আপনার PROJECT_ID এবং * LOC *-এর উপর নির্ভর করে, উদাহরণস্বরূপ, " us " যদি আপনার অ্যাপটি মার্কিন যুক্তরাষ্ট্রে হোস্ট করা হয়।

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

এই কোডল্যাবের জন্য নির্দিষ্ট

নীচে তালিকাভুক্ত পরিষেবাগুলি এই কোডল্যাবের জন্য অনন্য। আরও তথ্যের জন্য প্রতিটি পণ্যের ডকুমেন্টেশন দেখুন:

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

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

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

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

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

পরবর্তী আরেকটি সম্ভাব্য পদক্ষেপ হলো পাইথন ৩-এ পোর্ট করা, যা পরবর্তী বিভাগে একটি ঐচ্ছিক পদক্ষেপ হিসেবে আলোচনা করা হয়েছে।

৭. বোনাস: পাইথন ৩-এ স্থানান্তর

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

এই বিভাগে ঐচ্ছিক অতিরিক্ত বিষয়বস্তু রয়েছে, যেখানে আমরা উপরে শেষ করা মডিউল ১২-এর অ্যাপ্লিকেশনটিকে পাইথন ৩-এ স্থানান্তর করব। আমরা প্রথমে কনফিগারেশন এবং তারপরে অ্যাপ্লিকেশনটি নিয়ে কাজ করব।

app.yaml সরল করুন

পাইথন ৩ রানটাইমের একটি সুবিধা হলো app.yaml ফাইলটিকে উল্লেখযোগ্যভাবে সরল করা যায়।

পূর্বে:

মডিউল ১২-এর শেষে app.yaml ফাইলে যা আছে তা নিচে দেওয়া হলো:

runtime: python27
threadsafe: yes
api_version: 1

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

যেহেতু পাইথন ৩ রানটাইমের জন্য ওয়েব ফ্রেমওয়ার্কগুলোকে নিজস্ব রাউটিং করতে হয়, তাই app.yaml এর সমস্ত রাউট হ্যান্ডলারকে অবশ্যই auto তে পরিবর্তন করতে হবে। যদি কোনো স্ট্যাটিক ফাইল সার্ভ করা না হয়, তবে ব্যবহারকারীরা পুরো handlers: সেকশনটি সরাসরি মুছে ফেলতে পারেন। এছাড়াও, threadsafe এবং api_version উভয়কেই ডেপ্রিকেটেড করা হয়েছে

পরে:

উপরে বর্ণিত প্রয়োজনীয় পরিবর্তনগুলো করার পর, পাইথন ৩-এর জন্য প্রতিস্থাপিত app.yaml ফাইলটি হলো এটি:

runtime: python39
app_engine_apis: true

একমাত্র যে লাইনটির ব্যাখ্যার প্রয়োজন তা হলো app_engine_apis: true২০২১ সালে যখন লিগ্যাসি অ্যাপ ইঞ্জিন সার্ভিসগুলো দ্বিতীয় প্রজন্মের রানটাইমগুলোর জন্য উপলব্ধ হয় , তখন পাইথন ৩ সহ কিছু রানটাইমের ndb , taskqueue , এবং memcache মতো এপিআইগুলো অ্যাক্সেস করার জন্য অতিরিক্ত বুটস্ট্র্যাপিংয়ের প্রয়োজন হয়। কনফিগারেশনের এই লাইনটি সেই উদ্দেশ্যই পূরণ করে।

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

requirements.txt ফাইলে মূল API-গুলোর পুনরায় বুটস্ট্র্যাপিং প্রয়োজন: নতুন App Engine SDK-তে অ্যাক্সেস অবশ্যই অন্তর্ভুক্ত করতে হবে।

পূর্বে:

মডিউল ১২-এর শেষে app.yaml ফাইলে যা আছে তা নিচে দেওয়া হলো:

flask

পরে:

শুধু অ্যাপ ইঞ্জিন পাইথন এসডিকে যোগ করুন, এবং আপনার কাছে নিম্নলিখিত বিষয়গুলো থাকা উচিত:

flask
appengine-python-standard

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

পরবর্তী প্রজন্মের অ্যাপ ইঞ্জিন রানটাইমগুলো থার্ড-পার্টি প্যাকেজ ব্যবহারের ক্ষেত্রে আমূল পরিবর্তন আনছে:

  • বিল্ট-ইন লাইব্রেরিগুলো হলো গুগল দ্বারা যাচাইকৃত এবং অ্যাপ ইঞ্জিন সার্ভারে উপলব্ধ করা লাইব্রেরি, সম্ভবত কারণ সেগুলোতে এমন C/C++ কোড থাকে যা ডেভেলপারদের ক্লাউডে স্থাপন করার অনুমতি নেই—এগুলো দ্বিতীয় প্রজন্মের রানটাইমগুলোতে আর পাওয়া যায় না।
  • দ্বিতীয় প্রজন্মের রানটাইমগুলোতে নন-বিল্ট-ইন লাইব্রেরি কপি করার (যাকে কখনও কখনও 'ভেন্ডরিং' বা 'সেলফ-বান্ডলিং' বলা হয়) আর প্রয়োজন নেই। এর পরিবর্তে, সেগুলোকে requirements.txt ফাইলে তালিকাভুক্ত করা উচিত, যেখানে বিল্ড সিস্টেম ডিপ্লয় করার সময় আপনার হয়ে স্বয়ংক্রিয়ভাবে সেগুলো ইনস্টল করে দেয়।

থার্ড-পার্টি প্যাকেজ ম্যানেজমেন্টে করা সেই পরিবর্তনগুলোর ফলে, appengine_config.py ফাইল বা lib ফোল্ডার কোনোটিরই আর প্রয়োজন নেই, তাই সেগুলো ডিলিট করে দিন। দ্বিতীয় প্রজন্মের রানটাইমগুলোতে, App Engine স্বয়ংক্রিয়ভাবে requirements.txt এ তালিকাভুক্ত থার্ড-পার্টি প্যাকেজগুলো ইনস্টল করে। সারসংক্ষেপ:

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

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

App Engine SDK ব্যবহার করার জন্য অ্যাপ্লিকেশনটি আপডেট করুন

উপরে যেমন উল্লেখ করা হয়েছে, অ্যাপ ইঞ্জিনের বান্ডেল করা পরিষেবাগুলো অ্যাক্সেস করার জন্য পাইথন ৩ অ্যাপে কিছু পরিবর্তন প্রয়োজন হয়:

  1. অ্যাপ ইঞ্জিন এসডিকে বান্ডেল করুন ( requirements.txt ফাইলে)
  2. অ্যাপ ইঞ্জিন এসডিকে সক্রিয় করুন ( app.yaml ফাইলে)
  3. WSGI অবজেক্টটিকে র‍্যাপ করুন ( main.py ফাইলে)

প্রথম জোড়ার কাজ উপরে সম্পন্ন করা হয়েছে, তাই শেষ কাজ হলো main.py আপডেট করা।

পূর্বে:

নিচে মডিউল ১২-এর শেষে থাকা Python 2 main.py ফাইলটি দেওয়া হলো:

from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb

app = Flask(__name__)
HOUR = 3600

পরে:

পাইথন ৩ পোর্টের জন্য, SDK ইম্পোর্ট করুন এবং Flask অ্যাপ অবজেক্টটিকে এটি (SDK র‍্যাপার) দিয়ে র‍্যাপ করুন, যার ফলে নিম্নলিখিত ফলাফল পাওয়া যাবে:

from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb

app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600

বান্ডেল করা সার্ভিসগুলো অ্যাক্সেস করার জন্য ডেভেলপারদের তাদের পাইথন অ্যাপ ২.x থেকে ৩.x-এ পোর্ট করার সময় এই পরিবর্তনগুলো করতে হবে। আপনি যদি ফ্লাস্ক (Flask) ব্যবহার না করেন, তাহলে ডক্স-এ জ্যাঙ্গো (Django) এবং পিরামিড (Pyramid)-এর স্যাম্পলও রয়েছে। আপনার পাইথন ২ কোডটি যদি কোনো ওয়েব অ্যাপ না হয়, তবে পাইথন ৩-এ পোর্ট করার সময় শুধু এসডিকে (SDK) প্যাকেজটি অন্তর্ভুক্ত করাই যথেষ্ট হবে। আমাদের অ্যাপ্লিকেশন কোডটি মূলত পাইথন ২ এবং ৩-এ কাজ করার জন্য তৈরি করা হয়েছিল, তাই অতিরিক্ত কোনো কম্প্যাটিবিলিটি পরিবর্তনের প্রয়োজন নেই।

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

উপরোক্ত পরিবর্তনগুলি সম্পন্ন করার পর, আপনি আপডেট করা স্যাম্পল অ্যাপটি ডেপ্লয় করতে পারেন। (একই GCP প্রোজেক্টে মূল Python 2 ভার্সনের উপর আপনার অ্যাপের Python 3 ভার্সন ডেপ্লয় করলে কোনো সমস্যা নেই।) অ্যাপের আচরণ একই থাকা উচিত। আপনার আপডেট করা অ্যাপটিকে আমাদের অ্যাপের সাথে তুলনা করার প্রয়োজন হলে, মাইগ্রেশন রিপো-তে থাকা মডিউল 12b ফোল্ডারটি দেখুন। Python 3-এর মতো লেটেস্ট রানটাইমগুলিতে App Engine বান্ডলড সার্ভিসগুলির সাপোর্ট সম্পর্কে আরও জানতে, ফিচার লঞ্চের ঘোষণা এবং মডিউল 17 কোডল্যাব দেখুন।

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

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

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

কোডল্যাবের সমস্যা/মতামত

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

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

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

কোডল্যাব

পাইথন ২

পাইথন ৩

মডিউল ১

কোড

কোড (এই টিউটোরিয়ালে অন্তর্ভুক্ত নয়)

মডিউল ১২ (এই কোডল্যাব)

কোড

কোড

অনলাইন রেফারেন্স

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

অ্যাপ ইঞ্জিন

ক্লাউড মেমোরিস্টোর এবং ক্লাউড ডেটাস্টোর

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

ভিডিও

লাইসেন্স

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