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

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

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

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

এই মডিউলে আমরা পুশ টাস্কের ব্যবহার যুক্ত করব, তারপর মডিউল ৮-এ সেই ব্যবহারকে ক্লাউড টাস্কে এবং পরবর্তীতে মডিউল ৯-এ পাইথন ৩ ও ক্লাউড ডেটাস্টোরে স্থানান্তরিত করব। যারা পুল টাস্কের জন্য টাস্ক কিউ ব্যবহার করেন, তারা ক্লাউড পাব/সাব-এ স্থানান্তরিত হবেন এবং তাদের পরিবর্তে মডিউল ১৮-১৯ দেখতে হবে।

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

  • অ্যাপ ইঞ্জিন টাস্ক কিউ এপিআই/বান্ডেলড পরিষেবা ব্যবহার করুন
  • একটি সাধারণ পাইথন ২ ফ্লাস্ক অ্যাপ ইঞ্জিন এনডিবি অ্যাপে পুশ টাস্কের ব্যবহার যুক্ত করুন।

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

জরিপ

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

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

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

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

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

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

২. পটভূমি

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

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

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

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

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

এই বিভাগে ব্যাখ্যা করা হয়েছে কীভাবে:

  1. আপনার ক্লাউড প্রজেক্ট সেট আপ করুন
  2. বেসলাইন নমুনা অ্যাপ পান
  3. বেসলাইন অ্যাপ পুনরায় স্থাপন এবং যাচাই করুন

এই ধাপগুলো নিশ্চিত করে যে আপনি একটি কার্যকর কোড দিয়ে কাজ শুরু করছেন।

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

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

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

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

আপনি মডিউল ১-এর যে অ্যাপই ব্যবহার করুন না কেন, ফোল্ডারটি নিচের মতো দেখতে হবে, সম্ভবত এর সাথে একটি lib ফোল্ডারও থাকবে:

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

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

মডিউল ১ অ্যাপটি (পুনরায়) স্থাপন করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. যদি lib ফোল্ডারটি থাকে তবে সেটি মুছে ফেলুন এবং lib পুনরায় তৈরি করতে pip install -t lib -r requirements.txt চালান। আপনার যদি Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে, তবে এর পরিবর্তে আপনাকে pip2 কমান্ডটি ব্যবহার করতে হতে পারে।
  2. আপনি gcloud কমান্ড-লাইন টুলটি ইনস্টলচালু করেছেন কিনা তা নিশ্চিত করুন এবং এর ব্যবহারবিধি পর্যালোচনা করেছেন।
  3. যদি আপনি প্রতিটি gcloud কমান্ডের সাথে আপনার PROJECT_ID প্রবেশ করাতে না চান, তাহলে gcloud config set project PROJECT_ID ব্যবহার করে আপনার ক্লাউড প্রজেক্ট সেট করুন।
  4. gcloud app deploy ব্যবহার করে নমুনা অ্যাপটি ডিপ্লয় করুন।
  5. নিশ্চিত করুন যে মডিউল ১ অ্যাপটি কোনো সমস্যা ছাড়াই প্রত্যাশিতভাবে চলছে এবং সাম্প্রতিকতম ভিজিটগুলো প্রদর্শন করছে (নিচে চিত্রিত)।

a7a9d2b80d706a2b.png

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

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

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

মূল অ্যাপ্লিকেশন ফাইলটি হলো main.py , এবং এই অংশের সমস্ত আপডেট সেই ফাইলটির সাথেই সম্পর্কিত। এছাড়াও, ওয়েব টেমপ্লেট templates/index.html এ একটি ছোটখাটো আপডেট রয়েছে। এই অংশে নিম্নলিখিত পরিবর্তনগুলো বাস্তবায়ন করতে হবে:

  1. আমদানি আপডেট করুন
  2. পুশ টাস্ক যোগ করুন
  3. টাস্ক হ্যান্ডলার যোগ করুন
  4. ওয়েব টেমপ্লেট আপডেট করুন

১. আমদানি আপডেট করুন

google.appengine.api.taskqueue ইম্পোর্ট করলে টাস্ক কিউ (Task Queue) কার্যকারিতা যুক্ত হয়। এছাড়াও কিছু পাইথন স্ট্যান্ডার্ড লাইব্রেরি প্যাকেজ প্রয়োজন:

  • যেহেতু আমরা সবচেয়ে পুরোনো ভিজিটগুলো মুছে ফেলার জন্য একটি টাস্ক যোগ করছি, তাই অ্যাপটিকে টাইমস্ট্যাম্প নিয়ে কাজ করতে হবে, যার অর্থ হলো time এবং datetime ব্যবহার করা।
  • টাস্ক সম্পাদনা সংক্রান্ত দরকারি তথ্য লিপিবদ্ধ করার জন্য আমাদের logging প্রয়োজন।

এই সমস্ত ইম্পোর্ট যোগ করার পর, পরিবর্তনগুলোর আগে ও পরে আপনার কোডটি দেখতে নিচের মতো হবে:

পূর্বে:

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

পরে:

from datetime import datetime
import logging
import time
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb

২. পুশ টাস্ক যোগ করুন (টাস্কের জন্য ডেটা সংগ্রহ করুন, নতুন টাস্ক কিউতে যুক্ত করুন)

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

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

  1. সর্বশেষ ভিজিটগুলো অনুসন্ধান করার সময়, সেই ভিজিটগুলো তাৎক্ষণিকভাবে ফেরত না দিয়ে, অ্যাপটিকে এমনভাবে পরিবর্তন করুন যাতে এটি প্রদর্শিত সর্বশেষ Visit (অর্থাৎ সবচেয়ে পুরোনো) টাইমস্ট্যাম্প সংরক্ষণ করে—এর চেয়ে পুরোনো সমস্ত ভিজিট নিরাপদে মুছে ফেলা যায়।
  2. এই টাইমস্ট্যাম্পটিকে পেলোড হিসেবে ব্যবহার করে একটি পুশ টাস্ক তৈরি করুন এবং এটিকে টাস্ক হ্যান্ডলারে পাঠান, যা /trim এ একটি HTTP POST মাধ্যমে অ্যাক্সেসযোগ্য। বিশেষভাবে, স্ট্যান্ডার্ড পাইথন ইউটিলিটি ব্যবহার করে ডেটাস্টোর টাইমস্ট্যাম্পটি রূপান্তর করুন এবং এটিকে (ফ্লোট হিসেবে) টাস্কে পাঠান, সেইসাথে এটিকে (স্ট্রিং হিসেবে) লগ করুন এবং সেই স্ট্রিংটিকে ব্যবহারকারীকে দেখানোর জন্য একটি সেন্টিনেল ভ্যালু হিসেবে রিটার্ন করুন।

এই সবকিছু fetch_visits() মধ্যেই সম্পন্ন হয়, এবং এই আপডেটগুলো করার আগে ও পরে এটি দেখতে এইরকম হয়:

পূর্বে:

def fetch_visits(limit):
    return (v.to_dict() for v in Visit.query().order(
            -Visit.timestamp).fetch(limit))

পরে:

def fetch_visits(limit):
    'get most recent visits and add task to delete older visits'
    data = Visit.query().order(-Visit.timestamp).fetch(limit)
    oldest = time.mktime(data[-1].timestamp.timetuple())
    oldest_str = time.ctime(oldest)
    logging.info('Delete entities older than %s' % oldest_str)
    taskqueue.add(url='/trim', params={'oldest': oldest})
    return (v.to_dict() for v in data), oldest_str

৩. টাস্ক হ্যান্ডলার যোগ করুন (টাস্ক চলার সময় এই কোডটি কল করা হয়)

যদিও fetch_visits() ফাংশনের মাধ্যমে পুরোনো ভিজিটগুলো মুছে ফেলার কাজটি সহজেই করা যেত, তবে মনে রাখবেন যে এই কার্যকারিতার সাথে সাধারণ ব্যবহারকারীর তেমন কোনো সম্পর্ক নেই। এটি একটি সহায়ক কার্যকারিতা এবং সাধারণ অ্যাপ রিকোয়েস্টের বাইরে অ্যাসিঙ্ক্রোনাসভাবে প্রসেস করার জন্য একটি উপযুক্ত বিকল্প। এর ফলে ব্যবহারকারী দ্রুততর কোয়েরির সুবিধা পাবেন, কারণ ডেটাস্টোরে তথ্যের পরিমাণ কমে যাবে। trim() নামে একটি নতুন ফাংশন তৈরি করুন, যা /trim এ একটি টাস্ক কিউ POST রিকোয়েস্টের মাধ্যমে কল করা হবে এবং যা নিম্নলিখিত কাজগুলো করবে:

  1. "সবচেয়ে পুরানো ভিজিট" টাইমস্ট্যাম্প পেলোড বের করে।
  2. উক্ত টাইমস্ট্যাম্পের চেয়ে পুরোনো সমস্ত এনটিটি খুঁজে বের করার জন্য একটি ডেটাস্টোর কোয়েরি জারি করা হয়।
  3. দ্রুততর 'শুধুমাত্র কী-ভিত্তিক' কোয়েরি বেছে নেওয়া হয়, কারণ এক্ষেত্রে কোনো প্রকৃত ব্যবহারকারী ডেটার প্রয়োজন হয় না।
  4. মুছে ফেলার জন্য সত্তার সংখ্যা লগ করে (শূন্য সহ)।
  5. যেকোনো এনটিটি মুছে ফেলার জন্য ndb.delete_multi() কল করা হয় (না থাকলে এটি এড়িয়ে যাওয়া হয়)।
  6. একটি খালি স্ট্রিং ফেরত দেয় (সাথে একটি অন্তর্নিহিত HTTP 200 রিটার্ন কোড থাকে)।

আপনি এই সবকিছু নিচের trim() ফাংশনে দেখতে পাবেন। এটি main.py ফাইলে fetch_visits() ঠিক পরেই যোগ করুন:

@app.route('/trim', methods=['POST'])
def trim():
    '(push) task queue handler to delete oldest visits'
    oldest = request.form.get('oldest', type=float)
    keys = Visit.query(
            Visit.timestamp < datetime.fromtimestamp(oldest)
    ).fetch(keys_only=True)
    nkeys = len(keys)
    if nkeys:
        logging.info('Deleting %d entities: %s' % (
                nkeys, ', '.join(str(k.id()) for k in keys)))
        ndb.delete_multi(keys)
    else:
        logging.info('No entities older than: %s' % time.ctime(oldest))
    return ''   # need to return SOME string w/200

৪. ওয়েব টেমপ্লেট আপডেট করুন

যদি ভেরিয়েবলটি বিদ্যমান থাকে, তবে সবচেয়ে পুরানো টাইমস্ট্যাম্পটি প্রদর্শন করার জন্য এই Jinja2 কন্ডিশনালটি দিয়ে ওয়েব টেমপ্লেট ( templates/index.html ) আপডেট করুন:

{% if oldest is defined %}
    <b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}

প্রদর্শিত ভিজিট তালিকার পরে কিন্তু বডি বন্ধ করার আগে এই কোডটুকু যোগ করুন, যাতে আপনার টেমপ্লেটটি দেখতে এইরকম হয়:

<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>

<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
    <li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>

{% if oldest is defined %}
    <b>Deleting visits older than:</b> {{ oldest }}</p>
{% endif %}
</body>
</html>

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

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

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

gcloud app deploy দিয়ে অ্যাপটি ডিপ্লয় করুন। আউটপুটটি মডিউল ১ অ্যাপের মতোই হবে, তবে একদম নিচে একটি নতুন লাইন থাকবে যেখানে দেখানো হবে কোন ভিজিটগুলো ডিলিট করা হবে:

4aa8a2cb5f527079.png

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন। আপনার কোড এখন মডিউল ৭ রিপো ফোল্ডারের কোডের সাথে মিলে যাওয়ার কথা। এটি এখন মডিউল ৮-এর ক্লাউড টাস্ক-এ স্থানান্তরের জন্য প্রস্তুত।

পরিষ্কার করা

সাধারণ

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

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

  • 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 " যদি আপনার অ্যাপটি মার্কিন যুক্তরাষ্ট্রে হোস্ট করা হয়।

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

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

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

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

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

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

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

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

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

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

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

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

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

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

মডিউল ২ (শুরু) এবং মডিউল ৭ (শেষ)-এর রিপো ফোল্ডারগুলোর লিঙ্ক নিচের টেবিলে পাওয়া যাবে।

কোডল্যাব

পাইথন ২

পাইথন ৩

মডিউল ১

কোড

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

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

কোড

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

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

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

অ্যাপ ইঞ্জিন টাস্ক কিউ

অ্যাপ ইঞ্জিন প্ল্যাটফর্ম

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

ভিডিও

লাইসেন্স

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