অ্যাপ ইঞ্জিন মেমক্যাশ থেকে ক্লাউড মেমোরিস্টোরে স্থানান্তর করুন (মডিউল 13)

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

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

এই কোডল্যাবের উদ্দেশ্য হল Python 2 অ্যাপ ইঞ্জিন ডেভেলপারদের দেখানো যে কিভাবে অ্যাপ ইঞ্জিন মেমক্যাশ থেকে ক্লাউড মেমোরিস্টোরে ( Redis এর জন্য) মাইগ্রেট করতে হয়। অ্যাপ ইঞ্জিন ndb থেকে ক্লাউড NDB তে একটি অন্তর্নিহিত মাইগ্রেশনও রয়েছে, তবে এটি মূলত মডিউল 2 কোডল্যাবে কভার করা হয়েছে; আরও ধাপে ধাপে তথ্যের জন্য এটি দেখুন।

তুমি শিখবে কিভাবে

  • একটি ক্লাউড মেমোরিস্টোর ইনস্ট্যান্স সেট আপ করুন (ক্লাউড কনসোল বা gcloud টুল থেকে)
  • একটি ক্লাউড সার্ভারলেস ভিপিসি অ্যাক্সেস সংযোগকারী সেট আপ করুন (ক্লাউড কনসোল বা gcloud টুল থেকে)
  • অ্যাপ ইঞ্জিন মেমক্যাশ থেকে ক্লাউড মেমোরিস্টোরে স্থানান্তর করুন
  • একটি নমুনা অ্যাপে ক্লাউড মেমোরিস্টোরের সাহায্যে ক্যাশিং বাস্তবায়ন করুন
  • অ্যাপ ইঞ্জিন ndb থেকে ক্লাউড NDB-তে মাইগ্রেট করুন

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

জরিপ

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

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

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

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

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

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

2. পটভূমি

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

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

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

এই টিউটোরিয়ালটি Python 2-এর Module 12 নমুনা অ্যাপ দিয়ে শুরু হয় এবং তারপরে Python 3-তে একটি অতিরিক্ত, ঐচ্ছিক, ছোটখাটো আপগ্রেড করা হয়। যদি আপনি ইতিমধ্যেই Python 3 থেকে Python 3 অ্যাপ ইঞ্জিন SDK- এর মাধ্যমে App Engine বান্ডেলড পরিষেবাগুলি অ্যাক্সেস করার সাথে পরিচিত হন, তাহলে আপনি Module 12 নমুনা অ্যাপের Python 3 সংস্করণ দিয়ে শুরু করতে পারেন। এটি করার ফলে SDK-এর ব্যবহার সরিয়ে ফেলা হবে কারণ Memorystore একটি App Engine বান্ডেলড পরিষেবা নয় । Python 3 অ্যাপ ইঞ্জিন SDK কীভাবে ব্যবহার করবেন তা শেখা এই টিউটোরিয়ালের আওতার বাইরে।

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

  1. সেটআপ/প্রিওয়ার্ক
  2. ক্যাশিং পরিষেবা সেট আপ করুন
  3. কনফিগারেশন ফাইল আপডেট করুন
  4. প্রধান অ্যাপ্লিকেশন আপডেট করুন

৩. সেটআপ/প্রিওয়ার্ক

ক্লাউড প্রকল্প প্রস্তুত করুন

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

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

বেসলাইন নমুনা অ্যাপ পান

আমরা যে বেসলাইন মডিউল ১২ কোড থেকে শুরু করছি, এই কোডল্যাব আপনাকে ধাপে ধাপে মাইগ্রেশনের মাধ্যমে নিয়ে যাবে। সম্পূর্ণ হয়ে গেলে, আপনি একটি কার্যকরী মডিউল ১৩ অ্যাপে পৌঁছাবেন যা FINISH ফোল্ডারগুলির একটিতে থাকা কোডের সাথে সাদৃশ্যপূর্ণ। এখানে সেই রিসোর্সগুলি দেওয়া হল:

START ফোল্ডারে নিম্নলিখিত ফাইলগুলি থাকা উচিত:

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

যদি আপনি পাইথন ২ সংস্করণ দিয়ে শুরু করেন, তাহলে একটি appengine_config.py ফাইলও থাকবে এবং যদি আপনি মডিউল ১২ কোডল্যাব সম্পন্ন করেন তবে সম্ভবত একটি lib ফোল্ডার থাকবে।

(Re)Deploy Module 12 অ্যাপ

আপনার বাকি প্রি-ওয়ার্ক ধাপগুলি:

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

পাইথন ২ ব্যবহারকারীদের এই কমান্ডগুলি ব্যবহার করে lib ফোল্ডারটি মুছে পুনরায় ইনস্টল করা উচিত:

rm -rf ./lib; pip install -t lib -r requirements.txt                

এখন সকলের (পাইথন ২ এবং ৩ ব্যবহারকারীদের) এই কমান্ডটি ব্যবহার করে অ্যাপ ইঞ্জিনে কোডটি আপলোড করা উচিত:

gcloud app deploy                

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

dfe56a02ae59ddd8.png

যেহেতু সাম্প্রতিক ভিজিটগুলি ক্যাশে করা থাকে, তাই পৃষ্ঠা রিফ্রেশগুলি বেশ দ্রুত লোড হওয়া উচিত।

৪. ক্যাশিং পরিষেবা সেট আপ করুন

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

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

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

7eb35ebf7248c010.png সম্পর্কে

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

উভয় রিসোর্স অনলাইনে আসার পর, আপনি প্রাসঙ্গিক তথ্য app.yaml এ যোগ করতে যাচ্ছেন যাতে আপনার অ্যাপ ক্যাশে অ্যাক্সেস করতে পারে। আপনি অফিসিয়াল ডকুমেন্টেশনে Python 2 বা Python 3 গাইডগুলিও উল্লেখ করতে পারেন। ক্লাউড NDB মাইগ্রেশন পৃষ্ঠায় ( Python 2 বা Python 3 ) ডেটা ক্যাশিং গাইডটিও উল্লেখ করার মতো।

একটি ক্লাউড মেমোরিস্টোর ইনস্ট্যান্স তৈরি করুন

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

  • সর্বনিম্ন পরিষেবা স্তর নির্বাচন করুন: বেসিক (কনসোল ডিফল্ট: "স্ট্যান্ডার্ড", gcloud ডিফল্ট: "বেসিক")।
  • সর্বনিম্ন স্টোরেজ পরিমাণ বেছে নিন: ১ জিবি (কনসোল ডিফল্ট: ১৬ জিবি, gcloud ডিফল্ট: ১ জিবি)।
  • সাধারণত যেকোনো সফটওয়্যারের নতুন সংস্করণের জন্য সর্বাধিক পরিমাণে সম্পদের প্রয়োজন হয়, তবে সম্ভবত সবচেয়ে পুরনো সংস্করণটি নির্বাচন করাও সুপারিশ করা হয় না। বর্তমানে দ্বিতীয় সর্বশেষ সংস্করণটি হল Redis সংস্করণ 5.0 (কনসোল ডিফল্ট: 6.x)।

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

ক্লাউড কনসোল থেকে

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

68318997e3105db6.png সম্পর্কে

একবার আপনি এটি সক্ষম করলে (এবং সম্ভবত বিলিং সহ), আপনি মেমোরিস্টোর ড্যাশবোর্ডে পৌঁছে যাবেন। এখানে আপনি আপনার প্রোজেক্টে তৈরি সমস্ত ইনস্ট্যান্স দেখতে পাবেন। নীচে দেখানো প্রোজেক্টটিতে কোনও নেই, তাই আপনি "প্রদর্শনের জন্য কোনও সারি নেই" দেখতে পাবেন। একটি মেমোরিস্টোর ইনস্ট্যান্স তৈরি করতে, উপরে Create instance এ ক্লিক করুন:

63547aa575838a36.png সম্পর্কে

এই পৃষ্ঠায় মেমোরিস্টোর ইনস্ট্যান্স তৈরি করার জন্য আপনার পছন্দসই সেটিংস সহ একটি ফর্ম পূরণ করতে হবে:

b77d927287fdf4c7.png সম্পর্কে

এই টিউটোরিয়াল এবং এর নমুনা অ্যাপের খরচ কমাতে, পূর্বে উল্লিখিত সুপারিশগুলি অনুসরণ করুন। আপনার পছন্দগুলি করার পরে, তৈরি করুন এ ক্লিক করুন। তৈরি প্রক্রিয়াটি কয়েক মিনিট সময় নেয়। এটি শেষ হয়ে গেলে, app.yaml এ যোগ করার জন্য ইনস্ট্যান্সের IP ঠিকানা এবং পোর্ট নম্বরটি অনুলিপি করুন।

কমান্ড-লাইন থেকে

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

ক্লাউড কনসোলের মতো, Redis-এর জন্য Cloud Memorystore সক্রিয় করতে হবে। gcloud services enable redis.googleapis.com কমান্ডটি ইস্যু করুন এবং এটি সম্পূর্ণ হওয়ার জন্য অপেক্ষা করুন, যেমন এই উদাহরণ:

$ gcloud services enable redis.googleapis.com
Operation "operations/acat.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.

যদি পরিষেবাটি ইতিমধ্যেই সক্রিয় করা থাকে, তাহলে (আবার) কমান্ডটি চালানোর কোনও (নেতিবাচক) পার্শ্ব প্রতিক্রিয়া নেই। পরিষেবাটি সক্রিয় করার সাথে সাথে, আসুন একটি মেমোরিস্টোর ইনস্ট্যান্স তৈরি করি। সেই কমান্ডটি দেখতে এরকম:

gcloud redis instances create NAME --redis-version VERSION \
    --region REGION --project PROJECT_ID

আপনার মেমোরিস্টোর ইনস্ট্যান্সের জন্য একটি নাম নির্বাচন করুন; এই ল্যাবটি " demo-ms " নাম হিসেবে ব্যবহার করে এবং " my-project " এর একটি প্রজেক্ট আইডি ব্যবহার করে। এই নমুনা অ্যাপের অঞ্চল হল us-central1 ( us-central এর মতো), তবে যদি ল্যাটেন্সি উদ্বেগের বিষয় হয় তবে আপনি আপনার কাছাকাছি একটি ব্যবহার করতে পারেন। আপনার অ্যাপ ইঞ্জিন অ্যাপের মতো একই অঞ্চল নির্বাচন করতে হবে। আপনি আপনার পছন্দের যেকোনো Redis সংস্করণ নির্বাচন করতে পারেন, তবে আমরা পূর্বে সুপারিশকৃত সংস্করণ 5 ব্যবহার করছি। এই সেটিংসগুলি বিবেচনা করে, আপনি এই কমান্ডটি জারি করবেন (সম্পর্কিত আউটপুট সহ):

$ gcloud redis instances create demo-ms --region us-central1 \
    --redis-version redis_5_0 --project my-project

Create request issued for: [demo-ms]
Waiting for operation [projects/my-project/locations/us-central1/operations/operation-xxxx] to complete...done.
Created instance [demo-ms].

ক্লাউড কনসোলের ডিফল্টের বিপরীতে, gcloud ডিফল্টভাবে ন্যূনতম রিসোর্সে কাজ করে। এর ফলে সেই কমান্ডে পরিষেবা স্তর বা স্টোরেজের পরিমাণের কোনও প্রয়োজন ছিল না। একটি মেমোরিস্টোর ইনস্ট্যান্স তৈরি করতে কয়েক মিনিট সময় লাগে এবং এটি হয়ে গেলে, ইনস্ট্যান্সের IP ঠিকানা এবং পোর্ট নম্বরটি নোট করুন কারণ এগুলি শীঘ্রই app.yaml এ যোগ করা হবে।

তৈরি করা ইনস্ট্যান্স নিশ্চিত করুন

ক্লাউড কনসোল অথবা কমান্ড-লাইন থেকে

আপনি ক্লাউড কনসোল থেকে অথবা কমান্ড-লাইন থেকে আপনার ইনস্ট্যান্স তৈরি করেছেন কিনা, আপনি এই কমান্ডের সাহায্যে নিশ্চিত করতে পারেন যে এটি উপলব্ধ এবং ব্যবহারের জন্য প্রস্তুত: gcloud redis instances list --region REGION

us-central1 রিজিয়নে ইনস্ট্যান্স চেক করার জন্য কমান্ডটি এখানে দেওয়া হল, এবং প্রত্যাশিত আউটপুটটি আমাদের তৈরি করা ইনস্ট্যান্সটি দেখাচ্ছে:

$ gcloud redis instances list --region us-central1
INSTANCE_NAME  VERSION    REGION       TIER   SIZE_GB  HOST         PORT  NETWORK  RESERVED_IP     STATUS  CREATE_TIME
demo-ms        REDIS_5_0  us-central1  BASIC  1        10.aa.bb.cc  6379  default  10.aa.bb.dd/29  READY   2022-01-28T09:24:45

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

c5a6948ec1c056ed.png সম্পর্কে

কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন থেকে

যদি আপনার একটি কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন (VM) থাকে, তাহলে আপনি VM থেকে আপনার Memorystore ইনস্ট্যান্স ডাইরেক্ট কমান্ড পাঠাতে পারেন যাতে এটি কাজ করছে কিনা তা নিশ্চিত করা যায়। মনে রাখবেন যে VM ব্যবহারের সাথে সম্পর্কিত খরচ আপনার ইতিমধ্যে ব্যবহৃত রিসোর্সের উপর নির্ভর করে নাও হতে পারে।

সার্ভারলেস ভিপিসি অ্যাক্সেস সংযোগকারী তৈরি করুন

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

  • সর্বনিম্ন সর্বোচ্চ সংখ্যক ইনস্ট্যান্স নির্বাচন করুন: (কনসোল এবং gcloud ডিফল্ট: ১০)
  • সবচেয়ে কম দামের মেশিনের ধরণটি বেছে নিন: f1-micro (ডিফল্ট কনসোল: e2-micro , ডিফল্ট gcloud নেই)

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

ক্লাউড কনসোল থেকে

ক্লাউড কনসোলে ক্লাউড নেটওয়ার্কিং "সার্ভারলেস ভিপিসি অ্যাক্সেস" পৃষ্ঠায় যান (আপনাকে বিলিং তথ্যের জন্য অনুরোধ করা হতে পারে)। যদি আপনি এখনও API সক্ষম না করে থাকেন, তাহলে আপনাকে এটি করতে অনুরোধ করা হবে:

e3b9c0651de25e97.png সম্পর্কে

একবার আপনি API (এবং সম্ভবত বিলিং সহ) সক্রিয় করার পরে, আপনি তৈরি করা সমস্ত VPC সংযোগকারী প্রদর্শনকারী ড্যাশবোর্ডে পৌঁছে যাবেন। নীচের স্ক্রিনশটে ব্যবহৃত প্রকল্পটিতে কোনও নেই, তাই এটি লেখা আছে, "প্রদর্শনের জন্য কোনও সারি নেই"। আপনার কনসোলে, উপরে সংযোগকারী তৈরি করুন ক্লিক করুন:

b74b49b9d73b7dcf.png সম্পর্কে

পছন্দসই সেটিংস সহ ফর্মটি পূরণ করুন:

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

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

কমান্ড-লাইন থেকে

VPC সংযোগকারী তৈরি করার আগে, প্রথমে Serverless VPC Access API সক্রিয় করুন। নিম্নলিখিত কমান্ডটি দেওয়ার পরে আপনি একই রকম আউটপুট দেখতে পাবেন:

$ gcloud services enable vpcaccess.googleapis.com
Operation "operations/acf.p2-aaa-bbb-ccc-ddd-eee-ffffff" finished successfully.

API সক্রিয় থাকলে, একটি VPC সংযোগকারী তৈরি করা হয় একটি কমান্ড দিয়ে যা দেখতে এরকম:

gcloud compute networks vpc-access connectors create CONNECTOR_NAME \
    --range 10.8.0.0/28 --region REGION --project PROJECT_ID

আপনার সংযোগকারীর জন্য একটি নাম এবং একটি অব্যবহৃত /28 CIDR ব্লকের শুরুর IP ঠিকানা বেছে নিন। এই টিউটোরিয়ালটি নিম্নলিখিত অনুমানগুলি তৈরি করে:

  • প্রকল্প আইডি : my-project
  • ভিপিসি সংযোগকারীর নাম : demo-vpc
  • সর্বনিম্ন উদাহরণ : ২ (ডিফল্ট) এবং সর্বোচ্চ উদাহরণ : ৩
  • ইনস্ট্যান্স টাইপ : f1-micro
  • অঞ্চল : us-central1
  • IPv4 CIDR ব্লক : 10.8.0.0/28 (ক্লাউড কনসোলে সুপারিশকৃত)

উপরের অনুমানগুলি মাথায় রেখে নিম্নলিখিত কমান্ডটি কার্যকর করলে, আপনি নীচে যা দেখছেন তার মতো আউটপুট আশা করুন:

$ gcloud compute networks vpc-access connectors create demo-vpc \
    --max-instances 3 --range 10.8.0.0/28 --machine-type f1-micro \
    --region us-central1  --project my-project

Create request issued for: [demo-vpc]
Waiting for operation [projects/my-project/locations/us-central1/operations/xxx] to complete...done.
Created connector [demo-vpc].

উপরের কমান্ডটি ডিফল্ট মান নির্দিষ্ট করা বাদ দেয়, যেমন 2 এর ন্যূনতম উদাহরণ এবং default নামক একটি নেটওয়ার্ক। একটি VPC সংযোগকারী তৈরি করতে বেশ কয়েক মিনিট সময় লাগে।

সংযোগকারী তৈরি হয়েছে কিনা তা নিশ্চিত করুন

প্রক্রিয়াটি সম্পন্ন হয়ে গেলে, নিম্নলিখিত gcloud কমান্ডটি জারি করুন, ধরে নিন যে এটি region us-central1 , এটি নিশ্চিত করার জন্য যে এটি তৈরি এবং ব্যবহারের জন্য প্রস্তুত:

$ gcloud compute networks vpc-access connectors list --region us-central1
CONNECTOR_ID  REGION       NETWORK  IP_CIDR_RANGE  SUBNET  SUBNET_PROJECT  MIN_THROUGHPUT  MAX_THROUGHPUT  STATE
demo-vpc      us-central1  default  10.8.0.0/28                            200             300             READY

একইভাবে, ড্যাশবোর্ডে এখন আপনার তৈরি করা সংযোগকারীটি প্রদর্শিত হবে:

e03db2c8140ed014.png সম্পর্কে

ক্লাউড প্রজেক্ট আইডি, ভিপিসি সংযোগকারীর নাম এবং অঞ্চলটি লক্ষ্য করুন।

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

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

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

requirements.txt ফাইল

এই বিভাগে, আমরা ক্লাউড মেমোরিস্টোরের পাশাপাশি ক্লাউড এনডিবি সমর্থন করার জন্য প্যাকেজ যুক্ত করছি। রেডিসের জন্য ক্লাউড মেমোরিস্টোরের জন্য, পাইথনের জন্য স্ট্যান্ডার্ড রেডিস ক্লায়েন্ট ( redis ) ব্যবহার করা যথেষ্ট কারণ ক্লাউড মেমোরিস্টোর ক্লায়েন্ট লাইব্রেরি নিজেই নেই। মডিউল ১২ থেকে flask যুক্ত করে requirements.txt তে redis এবং google-cloud-ndb উভয়ই যুক্ত করুন:

flask
redis
google-cloud-ndb

এই requirements.txt ফাইলটিতে কোনও সংস্করণ নম্বর নেই, অর্থাৎ সর্বশেষ সংস্করণগুলি নির্বাচন করা হয়েছে। যদি কোনও অসঙ্গতি দেখা দেয়, তাহলে কার্যকরী সংস্করণগুলিকে লক করার জন্য সংস্করণ নম্বরগুলি নির্দিষ্ট করুন।

অ্যাপ.ইয়ামল

নতুন বিভাগ যোগ করতে হবে

ক্লাউড এনডিবি, যেমন grpcio এবং setuptools ব্যবহার করার সময় Python 2 অ্যাপ ইঞ্জিন রানটাইমের জন্য নির্দিষ্ট তৃতীয় পক্ষের প্যাকেজ প্রয়োজন। Python 2 ব্যবহারকারীদের app.yamlউপলব্ধ সংস্করণের সাথে এই ধরণের অন্তর্নির্মিত লাইব্রেরি তালিকাভুক্ত করতে হবে। যদি আপনার এখনও কোনও libraries বিভাগ না থাকে, তাহলে একটি তৈরি করুন এবং নিম্নলিখিতভাবে উভয় লাইব্রেরি যুক্ত করুন:

libraries:
- name: grpcio
  version: latest
- name: setuptools
  version: latest

আপনার অ্যাপটি মাইগ্রেট করার সময়, এতে ইতিমধ্যেই একটি libraries বিভাগ থাকতে পারে। যদি থাকে, এবং grpcio এবং setuptools অনুপস্থিত থাকে, তাহলে কেবল সেগুলি আপনার বিদ্যমান libraries বিভাগে যুক্ত করুন।

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

env_variables:
    REDIS_HOST: 'YOUR_REDIS_HOST'
    REDIS_PORT: 'YOUR_REDIS_PORT'

vpc_access_connector:
    name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR

প্রয়োজনীয় আপডেটের ক্ষেত্রে এটাই যথেষ্ট। আপনার আপডেট করা 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

env_variables:
    REDIS_HOST: 'YOUR_REDIS_HOST'
    REDIS_PORT: 'YOUR_REDIS_PORT'

vpc_access_connector:
    name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR

app.yaml এ আপনার কোন আপডেটগুলি প্রয়োগ করা উচিত তা নীচে "আগে এবং পরে" দেখানো হল:

অনুসরণ

*পাইথন ৩ পার্থক্য

এই বিভাগটি ঐচ্ছিক এবং শুধুমাত্র যদি আপনি Python 3 এ পোর্টিং করেন। এটি করার জন্য, আপনার Python 2 কনফিগারেশনে বেশ কিছু পরিবর্তন করতে হবে। আপনি যদি এই মুহূর্তে আপগ্রেড না করেন তবে এই বিভাগটি এড়িয়ে যান।

পাইথন ৩ রানটাইমের জন্য threadsafe বা api_version ব্যবহার করা হয় না, তাই এই দুটি সেটিংসই মুছে ফেলুন। সর্বশেষ অ্যাপ ইঞ্জিন রানটাইম বিল্ট-ইন থার্ড-পার্টি লাইব্রেরি বা নন -বিল্ট-ইন লাইব্রেরি কপি করা সমর্থন করে না। থার্ড-পার্টি প্যাকেজগুলির জন্য একমাত্র প্রয়োজনীয়তা হল requirements.txt এ তালিকাভুক্ত করা। ফলস্বরূপ, app.yaml এর সম্পূর্ণ libraries বিভাগটি মুছে ফেলা যেতে পারে।

এরপর, Python 3 রানটাইমের জন্য এমন ওয়েব ফ্রেমওয়ার্ক ব্যবহার করতে হবে যা তাদের নিজস্ব রাউটিং করে, তাই আমরা ডেভেলপারদের মডিউল 1 এ webp2 থেকে Flask এ মাইগ্রেট করার পদ্ধতি দেখিয়েছি। ফলস্বরূপ, সমস্ত স্ক্রিপ্ট হ্যান্ডলারকে auto এ পরিবর্তন করতে হবে। যেহেতু এই অ্যাপটি কোনও স্ট্যাটিক ফাইল পরিবেশন করে না, তাই হ্যান্ডলার তালিকাভুক্ত করা "অর্থহীন" (যেহেতু তারা সব auto ), তাই সম্পূর্ণ handlers বিভাগটিও সরানো যেতে পারে। ফলস্বরূপ, Python 3 এর জন্য আপনার নতুন, সংক্ষিপ্ত app.yaml টুইক করা ছোট করে দেখতে হবে:

runtime: python39

env_variables:
    REDIS_HOST: 'YOUR_REDIS_HOST'
    REDIS_PORT: 'YOUR_REDIS_PORT'

vpc_access_connector:
    name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR

Python 3 এ পোর্ট করার সময় app.yaml এর পার্থক্যগুলির সারসংক্ষেপ:

  • threadsafe এবং api_version সেটিংস মুছুন
  • libraries বিভাগ মুছুন
  • handlers বিভাগটি মুছুন (অথবা যদি আপনার অ্যাপটি স্ট্যাটিক ফাইল পরিবেশন করে তবে কেবল script হ্যান্ডলার)

মানগুলি প্রতিস্থাপন করুন

মেমোরিস্টোর এবং ভিপিসি সংযোগকারীর জন্য নতুন বিভাগগুলির মানগুলি কেবল স্থানধারক। বড় হাতের মানগুলি ( YOUR_REDIS_HOST, YOUR_REDIS_PORT, PROJECT_ID, REGION, CONNECTOR_NAME ) পূর্বে সেই রিসোর্সগুলি তৈরি করার সময় থেকে সংরক্ষিত মানগুলি দিয়ে প্রতিস্থাপন করুন। আপনার মেমোরিস্টোর ইনস্ট্যান্সের ক্ষেত্রে, HOST ( RESERVED_IP নয়) এবং PORT ব্যবহার করতে ভুলবেন না। HOST এবং PORT পাওয়ার জন্য এখানে একটি দ্রুত কমান্ড-লাইন উপায় রয়েছে demo-ms এর একটি ইনস্ট্যান্স নাম ধরে এবং REGION হল us-central1 :

$ gcloud redis instances describe demo-ms --region us-central1 \
    --format "value(host,port)"
10.251.161.51   6379

যদি আমাদের Redis ইনস্ট্যান্স IP ঠিকানাটি 10.10.10.10 হয়, যা আমাদের my-project project প্রকল্পে পোর্ট 6379 ব্যবহার করে, যা us-central1 অঞ্চলে অবস্থিত, এবং demo-vpc নামে একটি VPC সংযোগকারী নাম থাকে, তাহলে app.yaml এর এই বিভাগগুলি এইরকম দেখাবে:

env_variables:
    REDIS_HOST: '10.10.10.10'
    REDIS_PORT: '6379'

vpc_access_connector:
    name: projects/my-project/locations/us-central1/connectors/demo-vpc

appengine_config.py তৈরি বা আপডেট করুন

অন্তর্নির্মিত তৃতীয় পক্ষের লাইব্রেরির জন্য সমর্থন যোগ করুন

ঠিক যেমনটি আমরা আগে app.yaml সাথে করেছি, ঠিক তেমনই grpcio এবং setuptools লাইব্রেরির ব্যবহার যোগ করুন। বিল্ট-ইন থার্ড-পার্টি লাইব্রেরি সমর্থন করার জন্য appengine_config.py পরিবর্তন করুন। যদি এটি পরিচিত মনে হয়, তবে এর কারণ হল App Engine ndb থেকে Cloud NDB-তে মাইগ্রেট করার সময় মডিউল 2-তেও এটি প্রয়োজন ছিল। setuptools.pkg_resources ওয়ার্কিং সেটে lib ফোল্ডারটি যোগ করার জন্য সঠিক পরিবর্তনটি প্রয়োজন:

4140b3800694f77e.png সম্পর্কে

*পাইথন ৩ পার্থক্য

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

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

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

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

চলো, উপরের দিক থেকে শুরু করে একবারে এই একটি অংশ নিয়ে আলোচনা করি।

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

মডিউল ১২-এর জন্য main.py তে আমদানি বিভাগটি ক্লাউড এনডিবি এবং ক্লাউড টাস্ক ব্যবহার করে; এখানে তাদের আমদানিগুলি দেওয়া হল:

আগে:

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

Memorystore-এ স্যুইচ করার জন্য পরিবেশ ভেরিয়েবলগুলি পড়তে হবে, অর্থাৎ আমাদের Python os মডিউলের পাশাপাশি Python Redis ক্লায়েন্ট redis ও প্রয়োজন। যেহেতু Redis Python অবজেক্টগুলিকে ক্যাশে করতে পারে না, তাই pickle ব্যবহার করে সাম্প্রতিক ভিজিট তালিকা মার্শাল করুন, তাই এটিও আমদানি করুন। Memcache-এর একটি সুবিধা হল অবজেক্ট সিরিয়ালাইজেশন স্বয়ংক্রিয়ভাবে ঘটে যেখানে Memorystore একটু বেশি "DIY"। অবশেষে, google.appengine.ext.ndb google.cloud.ndb দিয়ে প্রতিস্থাপন করে App Engine ndb থেকে Cloud NDB-তে আপগ্রেড করুন। এই পরিবর্তনগুলির পরে, আপনার আমদানিগুলি এখন নিম্নরূপ দেখাবে:

পরে:

import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis

আপডেট আরম্ভকরণ

মডিউল ১২ ইনিশিয়ালাইজেশনের মধ্যে রয়েছে ফ্লাস্ক অ্যাপ্লিকেশন অবজেক্ট app ইনস্ট্যান্টিয়েট করা এবং এক ঘন্টার ক্যাশিংয়ের জন্য একটি ধ্রুবক সেট করা:

আগে :

app = Flask(__name__)
HOUR = 3600

ক্লাউড এপিআই ব্যবহারের জন্য একটি ক্লায়েন্ট প্রয়োজন, তাই ফ্লাস্কের ঠিক পরেই একটি ক্লাউড এনডিবি ক্লায়েন্ট ইনস্ট্যান্ট করুন। এরপর, app.yaml এ সেট করা পরিবেশ ভেরিয়েবল থেকে মেমোরিস্টোর ইনস্ট্যান্সের জন্য আইপি ঠিকানা এবং পোর্ট নম্বর পান। সেই তথ্য দিয়ে সজ্জিত হয়ে, একটি রেডিস ক্লায়েন্ট ইনস্ট্যান্ট করুন। এই আপডেটগুলির পরে আপনার কোডটি কেমন দেখাবে তা এখানে দেওয়া হল:

পরে:

app = Flask(__name__)
ds_client = ndb.Client()
HOUR = 3600
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)

*পাইথন ৩ মাইগ্রেশন

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

প্রথমত, যেহেতু মেমক্যাশ একটি অ্যাপ ইঞ্জিন বান্ডেলড পরিষেবা, তাই পাইথন 3 অ্যাপে এটি ব্যবহারের জন্য অ্যাপ ইঞ্জিন SDK প্রয়োজন, বিশেষ করে WSGI অ্যাপ্লিকেশনটি (এবং অন্যান্য প্রয়োজনীয় কনফিগারেশন ) মোড়ানো:

আগে:

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

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

পরে:

import os
import pickle
from flask import Flask, render_template, request
from google.cloud import ndb
import redis

app = Flask(__name__)
ds_client = ndb.Client()
HOUR = 3600
REDIS_HOST = os.environ.get('REDIS_HOST', 'localhost')
REDIS_PORT = os.environ.get('REDIS_PORT', '6379')
REDIS = redis.Redis(host=REDIS_HOST, port=REDIS_PORT)

অবশেষে, app.yaml থেকে SDK এর ব্যবহার সরিয়ে ফেলুন (লাইনটি মুছুন: app_engine_apis: true ) এবং requirements.txt (লাইনটি মুছুন: appengine-python-standard )।

ক্লাউড মেমোরিস্টোরে (এবং ক্লাউড এনডিবি) মাইগ্রেট করুন

ক্লাউড এনডিবি-র ডেটা মডেলটি অ্যাপ ইঞ্জিন ndb -র সাথে সামঞ্জস্যপূর্ণ হওয়ার উদ্দেশ্যে তৈরি করা হয়েছে, যার অর্থ Visit অবজেক্টের সংজ্ঞা একই থাকে। মডিউল 2-কে ক্লাউড এনডিবি-তে স্থানান্তরের অনুকরণ করে, store_visit() এবং fetch_visits() এর সমস্ত ডেটাস্টোর কলগুলি একটি নতুন with ব্লকে বর্ধিত এবং এমবেড করা হয় (কারণ ক্লাউড এনডিবি কনটেক্সট ম্যানেজার ব্যবহার প্রয়োজন)। এই পরিবর্তনের আগে কলগুলি এখানে দেওয়া হল:

আগে:

def store_visit(remote_addr, user_agent):
    'create new Visit entity in Datastore'
    Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    'get most recent visits'
    return Visit.query().order(-Visit.timestamp).fetch(limit)

উভয় ফাংশনে with ds_client.context() ব্লক যুক্ত করুন এবং ডেটাস্টোর কলগুলি ভিতরে রাখুন (এবং ইন্ডেন্টেড করুন)। এই ক্ষেত্রে, কলগুলির জন্য কোনও পরিবর্তন প্রয়োজন নেই:

পরে:

def store_visit(remote_addr, user_agent):
    'create new Visit entity in Datastore'
    with ds_client.context():
        Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()

def fetch_visits(limit):
    'get most recent visits'
    with ds_client.context():
        return Visit.query().order(-Visit.timestamp).fetch(limit)

এরপর, ক্যাশিং পরিবর্তনগুলি দেখা যাক। এখানে মডিউল ১২ থেকে main() ফাংশনটি দেওয়া হল:

আগে:

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

Redis-এর "get" এবং "set" কল আছে, ঠিক Memcache-এর মতো। আমরা কেবল সংশ্লিষ্ট ক্লায়েন্ট লাইব্রেরিগুলি অদলবদল করি, তাই না? প্রায়। যেমনটি আগেই উল্লেখ করা হয়েছে, আমরা Redis-এর সাথে একটি Python তালিকা ক্যাশে করতে পারি না (কারণ এটি প্রথমে সিরিয়ালাইজ করা প্রয়োজন, যা Memcache স্বয়ংক্রিয়ভাবে যত্ন নেয়), তাই set() কলে, pickle.dumps() দিয়ে একটি স্ট্রিংয়ে ভিজিটগুলিকে "pickle" করুন। একইভাবে, ক্যাশে থেকে ভিজিটগুলি পুনরুদ্ধার করার সময়, আপনাকে get() এর ঠিক পরে pickle.loads() দিয়ে এটি আনপিকল করতে হবে। এই পরিবর্তনগুলি বাস্তবায়নের পরে এখানে প্রধান হ্যান্ডলার রয়েছে:

পরে:

@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)
    rsp = REDIS.get('visits')
    visits = pickle.loads(rsp) if rsp else None

    # 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))
        REDIS.set('visits', pickle.dumps(visits), ex=HOUR)

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

এর ফলে main.py তে প্রয়োজনীয় পরিবর্তনগুলি শেষ হয়, যা নমুনা অ্যাপের Memcache ব্যবহারকে ক্লাউড মেমোরিস্টোরে রূপান্তর করে। HTML টেমপ্লেট এবং Python 3-এ পোর্টিং সম্পর্কে কী বলা যায়?

HTML টেমপ্লেট ফাইল এবং পোর্ট Python 3 তে আপডেট করবেন?

আশ্চর্য! এখানে করার কিছু নেই কারণ অ্যাপ্লিকেশনটি Python 2 এবং 3 উভয় সংস্করণেই চালানোর জন্য ডিজাইন করা হয়েছে, কোনও কোড পরিবর্তন বা সামঞ্জস্যতা লাইব্রেরি ছাড়াই। আপনি mod13a (2.x) এবং mod13b (3.x) "FINISH" ফোল্ডার জুড়ে main.py . একই রকম দেখতে পাবেন। requirements.txt এর ক্ষেত্রেও একই কথা প্রযোজ্য, সংস্করণ সংখ্যার পার্থক্য ছাড়াও (যদি ব্যবহার করা হয়)। যেহেতু ব্যবহারকারী ইন্টারফেস অপরিবর্তিত থাকে, তাই templates/index.html এর কোনও আপডেট নেই।

Python 3 App Engine-এ এই অ্যাপটি চালানোর জন্য প্রয়োজনীয় সবকিছু কনফিগারেশনের আগেই সম্পন্ন করা হয়েছিল: app.yaml থেকে অপ্রয়োজনীয় নির্দেশিকাগুলি সরানো হয়েছিল এবং appengine_config.py এবং lib ফোল্ডার উভয়ই মুছে ফেলা হয়েছিল কারণ সেগুলি Python 3-এ অব্যবহৃত ছিল।

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

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

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

শেষ পরীক্ষাটি সর্বদা নমুনা অ্যাপটি স্থাপন করা। Python 2 ডেভেলপার: নীচের কমান্ডগুলি ব্যবহার করে lib মুছে ফেলুন এবং পুনরায় ইনস্টল করুন। (যদি আপনার সিস্টেমে Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে, তাহলে আপনাকে স্পষ্টভাবে pip2 চালানোর প্রয়োজন হতে পারে।)

rm -rf ./lib
pip install -t lib -r requirements.txt

পাইথন ২ এবং ৩ ডেভেলপার উভয়েরই এখন তাদের অ্যাপগুলি নিম্নলিখিত উপায়ে স্থাপন করা উচিত:

gcloud app deploy

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

মডিউল ৭ ভিজিটমি অ্যাপ

এই ধাপটি কোডল্যাব সম্পূর্ণ করে। আমরা আপনাকে আপনার আপডেট করা নমুনা অ্যাপটি মডিউল ১৩ ফোল্ডার, mod13a (পাইথন ২) অথবা mod13b (পাইথন ৩) এর যেকোনো একটির সাথে তুলনা করার জন্য আমন্ত্রণ জানাচ্ছি।

পরিষ্কার করা

সাধারণ

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

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

  • 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 *ation এর উপর নির্ভর করে, উদাহরণস্বরূপ, " us " যদি আপনার অ্যাপটি মার্কিন যুক্তরাষ্ট্রে হোস্ট করা হয়।

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

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

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

এই টিউটোরিয়ালে চারটি ক্লাউড পণ্যের ব্যবহার জড়িত ছিল:

  • অ্যাপ ইঞ্জিন
  • ক্লাউড ডেটাস্টোর
  • ক্লাউড মেমোরিস্টোর
  • ক্লাউড ভিপিসি

এই সম্পদগুলি কীভাবে প্রকাশ করা যায় এবং বিলিং চার্জ এড়ানো/কমানোর জন্য নীচে নির্দেশাবলী দেওয়া হল।

মেমোরিস্টোর ইনস্ট্যান্স এবং ভিপিসি সংযোগকারী বন্ধ করুন

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

ক্লাউড কনসোল থেকে

মেমোরিস্টোর ইনস্ট্যান্স মুছে ফেলার জন্য, মেমোরিস্টোর ড্যাশবোর্ডে ফিরে যান এবং ইনস্ট্যান্স আইডিতে ক্লিক করুন:

2b09baf1aa2e0a25.png সম্পর্কে

একবার সেই ইনস্ট্যান্সের বিশদ পৃষ্ঠায়, "মুছুন" এ ক্লিক করুন এবং নিশ্চিত করুন:

f9d9eb1c1d4c6107.png সম্পর্কে

VPC সংযোগকারীটি মুছে ফেলতে, এর ড্যাশবোর্ডে যান এবং আপনি যে সংযোগকারীটি মুছে ফেলতে চান তার পাশের চেকবক্সটি নির্বাচন করুন, তারপর "মুছুন" এ ক্লিক করুন এবং নিশ্চিত করুন:

ca5fbd9f4c7c9b60.png সম্পর্কে

কমান্ড-লাইন থেকে

নিম্নলিখিত gcloud কমান্ডগুলি যথাক্রমে Memorystore ইনস্ট্যান্স এবং VPC সংযোগকারী উভয়কেই মুছে ফেলে:

  • gcloud redis instances delete INSTANCE --region REGION
  • gcloud compute networks vpc-access connectors delete CONNECTOR --region REGION

If you haven't set your project ID with gcloud config set project , you may have to provide --project PROJECT_ID . If your Memorystore instance is called demo-ms and VPC connector called demo-vpc , and both are in region us-central1 , issue the following pair of commands and confirm:

$ gcloud redis instances delete demo-ms --region us-central1
You are about to delete instance [demo-ms] in [us-central1].
Any associated data will be lost.

Do you want to continue (Y/n)?

Delete request issued for: [demo-ms]
Waiting for operation [projects/PROJECT/locations/REGION/operations/operation-aaaaa-bbbbb-ccccc-ddddd] to complete...done.
Deleted instance [demo-ms].
$
$ gcloud compute networks vpc-access connectors delete demo-vpc --region us-central1
You are about to delete connector [demo-vpc] in [us-central1].
Any associated data will be lost.

Do you want to continue (Y/n)?

Delete request issued for: [demo-vpc]
Waiting for operation [projects/PROJECT/locations/REGION/operations/aaaaa-bbbb-cccc-dddd-eeeee] to complete...done.
Deleted connector [demo-vpc].

Each request takes a few minutes to run. These steps are optional if you choose to shut down your entire Cloud project as described earlier, however you still incur billing until the shut down process has completed.

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

Beyond this tutorial, other migration modules that focus on moving away from the legacy bundled services to consider include:

  • Module 2 : migrate from App Engine ndb to Cloud NDB
  • Modules 7-9 : migrate from App Engine Task Queue push tasks to Cloud Tasks
  • Modules 12-13 : migrate from App Engine Memcache to Cloud Memorystore
  • Modules 15-16 : migrate from App Engine Blobstore to Cloud Storage
  • Modules 18-19 : migrate from App Engine Task Queue (pull tasks) to Cloud Pub/Sub

App Engine is no longer the only serverless platform in Google Cloud. If you have a small App Engine app or one that has limited functionality and wish to turn it into a standalone microservice, or you want to break-up a monolithic app into multiple reusable components, these are good reasons to consider moving to Cloud Functions . If containerization has become part of your application development workflow, particularly if it consists of a CI/CD (continuous integration/continuous delivery or deployment) pipeline, consider migrating to Cloud Run . These scenarios are covered by the following modules:

  • Migrate from App Engine to Cloud Functions: see Module 11
  • Migrate from App Engine to Cloud Run: see Module 4 to containerize your app with Docker, or Module 5 to do it without containers, Docker knowledge, or Dockerfile s

Switching to another serverless platform is optional, and we recommend considering the best options for your apps and use cases before making any changes.

Regardless of which migration module you consider next, all Serverless Migration Station content (codelabs, videos, source code [when available]) can be accessed at its open source repo . The repo's README also provides guidance on which migrations to consider and any relevant "order" of Migration Modules.

8. Additional resources

Listed below are additional resources for developers further exploring this or related Migration Module as well as related products. This includes places to provide feedback on this content, links to the code, and various pieces of documentation you may find useful.

Codelabs issues/feedback

If you find any issues with this codelab, please search for your issue first before filing. Links to search and create new issues:

মাইগ্রেশন রিসোর্স

Links to the repo folders for Module 12 (START) and Module 13 (FINISH) can be found in the table below. They can also be accessed from the repo for all App Engine codelab migrations which you can clone or download a ZIP file.

কোডল্যাব

পাইথন ২

পাইথন ৩

মডিউল ১২

কোড

কোড

Module 13 (this codelab)

কোড

কোড

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

Below are online resources which may be relevant for this tutorial:

অ্যাপ ইঞ্জিন

App Engine NDB and Cloud NDB

App Engine Memcache and Cloud Memorystore

Cloud VPC

Other Cloud information

লাইসেন্স

This work is licensed under a Creative Commons Attribution 2.0 Generic License.