১. সংক্ষিপ্ত বিবরণ
এই কোডল্যাব সিরিজটির (নিজের গতিতে শেখার উপযোগী হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হলো, গুগল অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড) ডেভেলপারদের কয়েকটি মাইগ্রেশন প্রক্রিয়ার মধ্য দিয়ে পথ দেখানোর মাধ্যমে তাদের অ্যাপগুলোকে আধুনিক করে তুলতে সাহায্য করা। এটি সম্পন্ন হয়ে গেলে, ব্যবহারকারীরা তাদের অ্যাপগুলোকে ক্লাউড রান (অ্যাপ ইঞ্জিনের সহযোগী গুগল ক্লাউডের কন্টেইনার-হোস্টিং পরিষেবা) এবং অন্যান্য কন্টেইনার-হোস্টিং পরিষেবাগুলোর জন্য সুস্পষ্টভাবে কন্টেইনারাইজ করার মাধ্যমে আরও বেশি পোর্টেবল করে তুলতে পারেন।
এই টিউটোরিয়ালটি আপনাকে শেখাবে কিভাবে ডকার ব্যবহার করে অ্যাপ ইঞ্জিন অ্যাপগুলোকে কন্টেইনারাইজ করে ক্লাউড রান ফুললি-ম্যানেজড সার্ভিসে ডেপ্লয় করতে হয়। ডকার হলো ইন্ডাস্ট্রিতে কন্টেইনারে অ্যাপ্লিকেশন ডেভেলপ, শিপিং এবং রান করার জন্য একটি সুপরিচিত প্ল্যাটফর্ম। পাইথন ২ ডেভেলপারদের জন্য এই টিউটোরিয়ালটি মডিউল ২-এর ক্লাউড এনডিবি অ্যাপ ইঞ্জিন স্যাম্পল অ্যাপ দিয়ে শুরু হয়, আর পাইথন ৩ ডেভেলপাররা মডিউল ৩-এর ক্লাউড ডেটাস্টোর স্যাম্পল দিয়ে শুরু করেন।
আপনি শিখবেন কিভাবে
- ডকার ব্যবহার করে আপনার অ্যাপকে কন্টেইনারাইজ করুন
- ক্লাউড রানে কন্টেইনার ইমেজ ডিপ্লয় করুন
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প, যার বৈশিষ্ট্যগুলো হলো:
- পাইথনের প্রাথমিক দক্ষতা
- সাধারণ লিনাক্স কমান্ড সম্পর্কে কার্যকরী জ্ঞান
- অ্যাপ ইঞ্জিন অ্যাপ তৈরি এবং স্থাপন করার প্রাথমিক জ্ঞান
- সুপারিশকৃত: মডিউল ২ কোডল্যাব অথবা মডিউল ৩ কোডল্যাব সম্পন্ন করুন।
- একটি কার্যকরী অ্যাপ ইঞ্জিন অ্যাপ যা কন্টেইনারাইজ করার জন্য প্রস্তুত।
- পাইথন ২: মডিউল ২ ক্লাউড এনডিবি নমুনা
- পাইথন ৩: মডিউল ৩ ক্লাউড ডেটাস্টোর নমুনা
জরিপ
আপনি এই কোডল্যাবটি কীভাবে ব্যবহার করবেন?
২. পটভূমি
অ্যাপ ইঞ্জিন এবং ক্লাউড ফাংশনসের মতো PaaS সিস্টেমগুলো আপনার টিম এবং অ্যাপ্লিকেশনের জন্য অনেক সুবিধা প্রদান করে। উদাহরণস্বরূপ, এই সার্ভারবিহীন প্ল্যাটফর্মগুলো সিস্টেম অ্যাডমিনিস্ট্রেটর/ডেভঅপসদের সমাধান তৈরিতে মনোযোগ দিতে সক্ষম করে। আপনার অ্যাপ প্রয়োজন অনুযায়ী স্বয়ংক্রিয়ভাবে স্কেল আপ করতে পারে, পে-পার-ইউজ বিলিং খরচ নিয়ন্ত্রণে সাহায্য করে এবং এগুলো বিভিন্ন প্রচলিত ডেভেলপমেন্ট ল্যাঙ্গুয়েজ ব্যবহার করে।
তবে, কন্টেইনারের নমনীয়তাও বেশ আকর্ষণীয়; যেকোনো ভাষা, যেকোনো লাইব্রেরি, যেকোনো বাইনারি বেছে নেওয়ার সুবিধা রয়েছে। ব্যবহারকারীদের সার্ভারলেসের সুবিধার সাথে কন্টেইনারের নমনীয়তা—এই দুইয়ের সেরাটাই দেওয়াই হলো গুগল ক্লাউড রানের মূল উদ্দেশ্য।
ক্লাউড রান কীভাবে ব্যবহার করতে হয় তা শেখা এই কোডল্যাবের আওতাভুক্ত নয়; সে বিষয়ে ক্লাউড রান ডকুমেন্টেশনে আলোচনা করা হয়েছে। এখানকার লক্ষ্য হলো, ক্লাউড রান (বা অন্যান্য পরিষেবা)-এর জন্য কীভাবে আপনার অ্যাপ ইঞ্জিন অ্যাপকে কন্টেইনারাইজ করতে হয়, তা আপনাকে শেখানো। সামনে এগোনোর আগে আপনার কয়েকটি বিষয় জেনে রাখা উচিত। প্রধানত, আপনার ইউজার এক্সপেরিয়েন্স কিছুটা ভিন্ন এবং কিছুটা লোয়ার-লেভেল হবে, কারণ আপনি আর অ্যাপ্লিকেশন কোড নিয়ে তা ডিপ্লয় করবেন না।
এর পরিবর্তে, আপনাকে কন্টেইনার সম্পর্কে কিছু শিখতে হবে, যেমন কীভাবে সেগুলি তৈরি এবং স্থাপন করতে হয়। আপনি কন্টেইনার ইমেজে কী রাখতে চান, সেই সিদ্ধান্তও নিতে পারবেন; এর মধ্যে একটি ওয়েব সার্ভারও অন্তর্ভুক্ত, কারণ আপনি আর অ্যাপ ইঞ্জিনের ওয়েব সার্ভার ব্যবহার করবেন না। আপনি যদি এই পথ অনুসরণ করতে না চান, তবে আপনার অ্যাপগুলিকে অ্যাপ ইঞ্জিনে রাখাও একটি খারাপ বিকল্প নয়।
এই টিউটোরিয়ালে আপনি শিখবেন কীভাবে আপনার অ্যাপকে কন্টেইনারাইজ করতে হয়, অ্যাপ ইঞ্জিন কনফিগ ফাইলগুলোকে কন্টেইনার কনফিগারেশন দিয়ে প্রতিস্থাপন করতে হয়, কন্টেইনারের ভেতরে কী থাকবে তা নির্ধারণ করতে হয় এবং তারপর আপনার অ্যাপটি কীভাবে চালু হবে তা নির্দিষ্ট করতে হয় — এই বিষয়গুলোর বেশিরভাগই অ্যাপ ইঞ্জিন স্বয়ংক্রিয়ভাবে সামলে নেয়।
এই মাইগ্রেশনে নিম্নলিখিত ধাপগুলো রয়েছে:
- প্রস্তুতি/পূর্বপ্রস্তুতি
- অ্যাপ্লিকেশনকে কন্টেইনারাইজ করুন
- কনফিগারেশন ফাইলগুলি প্রতিস্থাপন করুন
- অ্যাপ্লিকেশন ফাইলগুলি পরিবর্তন করুন
৩. প্রস্তুতি/পূর্বপ্রস্তুতি
টিউটোরিয়ালের মূল অংশে যাওয়ার আগে, চলুন আমাদের প্রজেক্টটি সেট আপ করি, কোডটি সংগ্রহ করি এবং তারপর বেসলাইন অ্যাপটি ডিপ্লয় করি, যাতে আমরা নিশ্চিত হতে পারি যে আমরা কার্যকরী কোড দিয়েই কাজ শুরু করেছি।
১. প্রকল্প স্থাপন করুন
আপনি যদি মডিউল ২ বা মডিউল ৩-এর কোডল্যাবগুলো সম্পন্ন করে থাকেন, তাহলে আমরা সেই একই প্রজেক্ট (এবং কোড) পুনরায় ব্যবহার করার পরামর্শ দিই। বিকল্পভাবে, আপনি একটি সম্পূর্ণ নতুন প্রজেক্ট তৈরি করতে পারেন অথবা অন্য কোনো বিদ্যমান প্রজেক্ট পুনরায় ব্যবহার করতে পারেন। নিশ্চিত করুন যে প্রজেক্টটিতে একটি সক্রিয় বিলিং অ্যাকাউন্ট এবং অ্যাপ ইঞ্জিন (অ্যাপ) সক্রিয় করা আছে।
২. বেসলাইন নমুনা অ্যাপটি নিন
এই কোডল্যাবের অন্যতম পূর্বশর্ত হলো একটি কার্যকর মডিউল ২ বা মডিউল ৩ স্যাম্পল অ্যাপ থাকা। যদি আপনার কাছে এমন কোনো অ্যাপ না থাকে, তবে এখানে এগিয়ে যাওয়ার আগে উপরের লিঙ্ক অনুযায়ী যেকোনো একটি টিউটোরিয়াল সম্পূর্ণ করুন। অন্যথায়, যদি আপনি এর বিষয়বস্তুর সাথে আগে থেকেই পরিচিত থাকেন, তবে নিচের মডিউল ২ বা ৩-এর কোডটি নিয়ে সরাসরি শুরু করতে পারেন।
আপনি আপনার নিজের বা আমাদের কোড ব্যবহার করুন না কেন, এই টিউটোরিয়ালের পাইথন ২ সংস্করণের জন্য আমরা মডিউল ২ কোড থেকে শুরু করব এবং একইভাবে, পাইথন ৩-এর জন্য মডিউল ৩ কোড থেকে। এই মডিউল ৪ কোডল্যাবটি আপনাকে প্রতিটি ধাপে ধাপে পথ দেখাবে এবং আপনার পছন্দের উপর নির্ভর করে, এটি সম্পন্ন হলে আপনার কোডটি মডিউল ৪-এর রিপো ফোল্ডারগুলোর (FINISH) একটির মতো দেখতে হবে।
- পাইথন ২ (ক্লাউড এনডিবি অ্যাপ)
- শুরু: মডিউল ২ কোড
- সমাপ্ত: মডিউল ৪ কোড
- পাইথন ৩ (ক্লাউড ডেটাস্টোর অ্যাপ)
- শুরু: মডিউল ৩ কোড
- সমাপ্ত: মডিউল ৪ কোড
- সম্পূর্ণ রিপো (ক্লোন বা জিপ ডাউনলোড করার জন্য)
পাইথন ২ মডিউল ২-এর স্টার্টিং ফাইলগুলোর ডিরেক্টরি (আপনার বা আমাদের) দেখতে এইরকম হওয়া উচিত:
$ ls
README.md appengine_config.py requirements.txt
app.yaml main.py templates
আপনি যদি আপনার নিজের মডিউল ২ (২.x) কোড ব্যবহার করেন, তাহলে আপনার একটি lib ফোল্ডারও থাকবে। পাইথন ৩-এর জন্য lib বা appengine_config.py কোনোটিই ব্যবহৃত হয় না, যেখানে মডিউল ৩ (৩.x)-এর STARTing কোডটি দেখতে এইরকম হবে:
$ ls
README.md main.py templates
app.yaml requirements.txt
৩. বেসলাইন অ্যাপ (পুনরায়) স্থাপন করুন
এখন আপনার বাকি প্রস্তুতিমূলক ধাপগুলো সম্পন্ন করতে হবে:
-
gcloudকমান্ড-লাইন টুলটির সাথে পুনরায় পরিচিত হয়ে নিন। -
gcloud app deployব্যবহার করে নমুনা অ্যাপটি পুনরায় ডিপ্লয় করুন। - অ্যাপটি অ্যাপ ইঞ্জিনে কোনো সমস্যা ছাড়াই চলে কিনা তা নিশ্চিত করুন।
একবার আপনি সফলভাবে সেই ধাপগুলো সম্পন্ন করলে, আপনি এটিকে কন্টেইনারাইজ করার জন্য প্রস্তুত।
৪. অ্যাপ্লিকেশনকে কন্টেইনারাইজ করুন
বর্তমানে ইন্ডাস্ট্রিতে ডকার হলো স্ট্যান্ডার্ড কন্টেইনারাইজেশন প্ল্যাটফর্ম। আগেই যেমন উল্লেখ করা হয়েছে, এটি ব্যবহারের একটি চ্যালেঞ্জ হলো একটি কার্যকর Dockerfile তৈরি করতে পরিশ্রম করতে হয়। এই কনফিগারেশন ফাইলটি নির্ধারণ করে আপনার কন্টেইনার ইমেজগুলো কীভাবে বিল্ড হবে। অন্যদিকে, বিল্ডপ্যাকস (Buildpacks) ব্যবহারে খুব কম পরিশ্রম লাগে, কারণ এটি আপনার অ্যাপের ডিপেন্ডেন্সিগুলো নির্ধারণ করতে ইন্ট্রোস্পেকশন ব্যবহার করে, যা আপনার অ্যাপের জন্য বিল্ডপ্যাকস কন্টেইনারটিকে যথাসম্ভব কার্যকর করে তোলে।
আপনি যদি কন্টেইনার ও ডকার সম্পর্কে আগে থেকেই জানেন এবং ক্লাউড রানের জন্য আপনার অ্যাপ ইঞ্জিন অ্যাপকে কন্টেইনারাইজ করার বিষয়ে আরও জানতে চান, তাহলে আপনি সঠিক জায়গায় এসেছেন। এরপর নির্দ্বিধায় মডিউল ৫-এর কোডল্যাবটিও (যা এটির মতোই, তবে ক্লাউড বিল্ডপ্যাকস সহ) করতে পারেন। আমাদের বেসিক স্যাম্পল অ্যাপটি এতটাই হালকা যে, এটি উপরে উল্লিখিত কিছু Dockerfile সমস্যা এড়াতে সক্ষম।
মাইগ্রেশনের ধাপগুলোর মধ্যে রয়েছে অ্যাপ ইঞ্জিন কনফিগারেশন ফাইলগুলো প্রতিস্থাপন করা এবং আপনার অ্যাপটি কীভাবে চালু হবে তা নির্দিষ্ট করা। নিচে প্রতিটি প্ল্যাটফর্ম ধরনের জন্য প্রত্যাশিত কনফিগারেশন ফাইলগুলোর একটি সারসংক্ষেপ টেবিল আকারে দেওয়া হলো। অ্যাপ ইঞ্জিন কলামের সাথে ডকার কলাম (এবং ঐচ্ছিকভাবে বিল্ডপ্যাকস) তুলনা করুন:
বর্ণনা | অ্যাপ ইঞ্জিন | ডকার | বিল্ডপ্যাক |
সাধারণ কনফিগারেশন | | | ( |
তৃতীয় পক্ষের লাইব্রেরি | | | |
তৃতীয় পক্ষের কনফিগারেশন | | (প্রযোজ্য নয়) | (প্রযোজ্য নয়) |
স্টার্টআপ | (প্রযোজ্য নয়) অথবা | | |
ফাইলগুলি উপেক্ষা করুন | | | |
আপনার অ্যাপটি কন্টেইনারাইজড হয়ে গেলে, তা ক্লাউড রান-এ ডেপ্লয় করা যাবে। গুগল ক্লাউডের অন্যান্য কন্টেইনার প্ল্যাটফর্মের বিকল্পগুলোর মধ্যে রয়েছে কম্পিউট ইঞ্জিন , জিকেই এবং অ্যান্থোস ।
সাধারণ কনফিগারেশন
অ্যাপ ইঞ্জিন থেকে মাইগ্রেট করার অর্থ হলো app.yaml একটি Dockerfile দিয়ে প্রতিস্থাপন করা, যেখানে কন্টেইনারটি কীভাবে বিল্ড এবং রান করতে হবে তার রূপরেখা দেওয়া থাকে। অ্যাপ ইঞ্জিন আপনার অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে চালু করে, কিন্তু ক্লাউড রান তা করে না। Dockerfile ENTRYPOINT এবং CMD কমান্ডগুলো এই কারণেই ব্যবহৃত হয়। এই ক্লাউড রান ডক্স পেজ থেকে Dockerfile সম্পর্কে আরও জানুন এবং gunicorn চালু করে এমন একটি উদাহরণ Dockerfile ও দেখুন।
Dockerfile এ ENTRYPOINT বা CMD ব্যবহারের একটি বিকল্প হলো Procfile ব্যবহার করা। সবশেষে, একটি .dockerignore নন-অ্যাপ ফাইলগুলোকে ফিল্টার করে আপনার কন্টেইনারের সাইজ কম রাখতে সাহায্য করে। এই বিষয়গুলো নিয়ে আরও আলোচনা আসছে!
app.yaml মুছে ফেলুন এবং Dockerfile তৈরি করুন।
কন্টেইনারে app.yaml ব্যবহৃত হয় না, তাই এখনই এটি মুছে ফেলুন । কন্টেইনার কনফিগারেশন ফাইল হলো Dockerfile , এবং আমাদের স্যাম্পল অ্যাপটির জন্য শুধুমাত্র একটি ন্যূনতম সংস্করণই যথেষ্ট। আপনার ব্যবহৃত পাইথন ভার্সনের উপর নির্ভর করে NNN জায়গায় 2 বা 3 বসিয়ে এই কন্টেন্ট দিয়ে আপনার Dockerfile তৈরি করুন:
FROM python:NNN-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]
Dockerfile এর বেশিরভাগ অংশই কন্টেইনারটি কীভাবে তৈরি করতে হবে তা নির্দিষ্ট করে, শুধুমাত্র ENTRYPOINT ছাড়া , যা কন্টেইনারটি কীভাবে চালু করতে হবে তা নির্দিষ্ট করে; এক্ষেত্রে Flask ডেভেলপমেন্ট সার্ভারটি চালু করার জন্য python main.py কল করা হয়। আপনি যদি Docker-এ নতুন হন, তাহলে FROM ডিরেক্টিভটি নির্দেশ করে কোন বেস ইমেজ থেকে কাজ শুরু করতে হবে, এবং "slim" বলতে একটি মিনিমাল পাইথন ডিস্ট্রিবিউশনকে বোঝায়। Docker Python images পেজ থেকে আরও জানুন।
মাঝের কমান্ড সেটটি ওয়ার্কিং ডিরেক্টরি ( /app ) তৈরি করে, অ্যাপ্লিকেশন ফাইলগুলো কপি করে, এবং তারপর কন্টেইনারে থার্ড-পার্টি লাইব্রেরিগুলো আনার জন্য pip install রান করে। WORKDIR হলো লিনাক্সের mkdir এবং cd কমান্ডের সমন্বয়; এ সম্পর্কে আরও জানতে WORKDIR ডকুমেন্টেশন পড়ুন। COPY এবং RUN ডিরেক্টিভগুলো স্বব্যাখ্যাত।
তৃতীয় পক্ষের লাইব্রেরি
requirements.txt ফাইলটি অপরিবর্তিত থাকতে পারে; সেখানে আপনার ডেটাস্টোর ক্লায়েন্ট লাইব্রেরির (ক্লাউড ডেটাস্টোর বা ক্লাউড এনডিবি) সাথে ফ্লাস্ক (Flask) থাকা উচিত। আপনি যদি গুনিকর্নের (Gunicorn) মতো অন্য কোনো WSGI-সম্মত HTTP সার্ভার ব্যবহার করতে চান — এই লেখাটির সময় যার বর্তমান সংস্করণ হলো 20.0.4 — তাহলে requirements.txt ফাইলে gunicorn==20.0.4 যোগ করুন।
তৃতীয় পক্ষের কনফিগারেশন
পাইথন ২ অ্যাপ ইঞ্জিন ডেভেলপাররা জানেন যে, থার্ড-পার্টি লাইব্রেরিগুলো হয় lib ফোল্ডারে কপি করা হয়, requirements.txt এ রেফারেন্স করা হয়, app.yaml এ তালিকাভুক্ত করা হয়, এবং appengine_config.py দ্বারা সাপোর্ট করা হয়। পাইথন ৩ অ্যাপ ইঞ্জিন অ্যাপের মতো কন্টেইনারগুলো শুধু requirements.txt ব্যবহার করে, তাই বাকি সবকিছু বাদ দেওয়া যেতে পারে। অর্থাৎ, আপনার যদি একটি 2.x অ্যাপ ইঞ্জিন অ্যাপ থাকে, তাহলে এখনই appengine_config.py এবং যেকোনো lib ফোল্ডার ডিলিট করে দিন ।
স্টার্টআপ
পাইথন ২ ব্যবহারকারীরা অ্যাপ ইঞ্জিনের ওয়েব সার্ভার চালু করেন না, কিন্তু কন্টেইনারে স্থানান্তরিত করার সময় আপনাকে এটি করতেই হবে। এটি করার জন্য, আপনার Dockerfile এ একটি CMD বা ENTRYPOINT ডিরেক্টিভ যোগ করতে হয়, যা আপনার অ্যাপটি কীভাবে শুরু হবে তা নির্দিষ্ট করে দেয়। নিচে পাইথন ৩ ব্যবহারকারীদের মতোই এর বর্ণনা দেওয়া হয়েছে।
পাইথন ৩ ব্যবহারকারীরা তাদের app.yaml ফাইলের handlers সেকশনে script: auto ডিরেক্টিভের পরিবর্তে entrypoint ব্যবহার করার বিকল্প পান। আপনি যদি আপনার পাইথন ৩ app.yaml এ entrypoint ব্যবহার করেন, তাহলে এটি দেখতে অনেকটা এইরকম হবে:
runtime: python38
entrypoint: python main.py
entrypoint ডিরেক্টিভটি অ্যাপ ইঞ্জিনকে বলে দেয় আপনার সার্ভার কীভাবে চালু করতে হবে। আপনি এটিকে প্রায় সরাসরি আপনার Dockerfile (অথবা আপনার অ্যাপকে কন্টেইনারাইজ করার জন্য বিল্ডপ্যাক ব্যবহার করলে Procfile [মডিউল ৫ দেখুন]) স্থানান্তর করতে পারেন। উভয় প্ল্যাটফর্মের জন্য একটি এন্ট্রি পয়েন্ট ডিরেক্টিভ কোথায় বসবে তার সারসংক্ষেপ নিচে দেওয়া হলো:
- ডকার:
Dockerfileএর লাইন:ENTRYPOINT ["python", "main.py"] - বিল্ডপ্যাকস:
Procfileএর লাইন:web: python main.py
টেস্টিংয়ের জন্য ফ্লাস্ক ডেভেলপমেন্ট সার্ভার ব্যবহার করা ঠিক আছে, কিন্তু আপনার অ্যাপ্লিকেশনের জন্য যদি gunicorn মতো কোনো প্রোডাকশন সার্ভার ব্যবহার করেন, তাহলে ক্লাউড রান কুইকস্টার্ট স্যাম্পলের মতো করে আপনার ENTRYPOINT বা CMD ডিরেক্টিভটি সেটির দিকে নির্দেশ করতে ভুলবেন না।
ফাইলগুলি উপেক্ষা করুন
আমরা আপনার কন্টেইনারের আকার কমাতে এবং এই ধরনের অপ্রয়োজনীয় ফাইল দিয়ে আপনার কন্টেইনার ইমেজকে জঞ্জালমুক্ত রাখতে একটি .dockerignore ফাইল তৈরি করার পরামর্শ দিই:
*.md
*.pyc
*.pyo
.git/
.gitignore
__pycache__
অ্যাপ্লিকেশন ফাইল
সমস্ত মডিউল ২ বা মডিউল ৩ অ্যাপ সম্পূর্ণরূপে পাইথন ২-৩ এর সাথে সামঞ্জস্যপূর্ণ, যার অর্থ main.py এর মূল উপাদানগুলিতে কোনও পরিবর্তন করতে হবে না; আমরা কেবল স্টার্টআপ কোডের কয়েকটি লাইন যোগ করব। ডেভেলপমেন্ট সার্ভার শুরু করার জন্য main.py এর শেষে দুটি লাইন যোগ করুন, কারণ Cloud Run আপনার অ্যাপকে কল করার জন্য পোর্ট ৮০৮০ খোলা থাকা প্রয়োজন:
if __name__ == '__main__':
import os
app.run(debug=True, threaded=True, host='0.0.0.0',
port=int(os.environ.get('PORT', 8080)))
৫. তৈরি এবং স্থাপন করুন
ডকার কনফিগারেশন এবং সোর্স ফাইল আপডেট সম্পন্ন হলে, আপনি এখন ক্লাউড রান-এ এটি চালু করার জন্য প্রস্তুত। তার আগে, চলুন সার্ভিসগুলো নিয়ে সংক্ষেপে আলোচনা করা যাক।
পরিষেবা বনাম অ্যাপ
যদিও অ্যাপ ইঞ্জিন প্রাথমিকভাবে অ্যাপ্লিকেশন হোস্ট করার জন্য তৈরি করা হয়েছিল, এটি ওয়েব পরিষেবা বা মাইক্রোসার্ভিসের সমষ্টি দিয়ে গঠিত অ্যাপ্লিকেশন হোস্ট করারও একটি প্ল্যাটফর্ম। ক্লাউড রানে, সবকিছুই একটি পরিষেবা, তা প্রকৃত পরিষেবা হোক বা ওয়েব ইন্টারফেস সহ একটি অ্যাপ্লিকেশন হোক, তাই এর ব্যবহারকে একটি অ্যাপ্লিকেশনের পরিবর্তে একটি পরিষেবার ডেপ্লয়মেন্ট হিসাবে বিবেচনা করুন।
আপনার অ্যাপ ইঞ্জিন অ্যাপটি যদি একাধিক সার্ভিস দিয়ে গঠিত না হতো, তাহলে অ্যাপ্লিকেশনগুলো ডেপ্লয় করার সময় সেগুলোর কোনো নামকরণের প্রয়োজন পড়ত না। ক্লাউড রানের ক্ষেত্রে বিষয়টি বদলে যায়, যেখানে আপনাকে একটি সার্ভিসের নাম ঠিক করতে হয়। অপরদিকে, একটি অ্যাপ ইঞ্জিনের appspot.com ডোমেইনে এর প্রজেক্ট আইডি, যেমন— https://PROJECT_ID.appspot.com ://PROJECT_ID.appspot.com—এবং সম্ভবত এর রিজিয়ন আইডির সংক্ষিপ্ত রূপ, যেমন— http://PROJECT_ID.REGION_ID.r.appspot.com ://PROJECT_ID.REGION_ID.r.appspot.com—থাকে।
তবে, একটি ক্লাউড রান সার্ভিসের ডোমেইনে এর সার্ভিসের নাম , রিজিয়ন আইডি-র সংক্ষিপ্ত রূপ এবং একটি হ্যাশ থাকে, কিন্তু এর প্রোজেক্ট আইডি থাকে না, যেমন, https://SVC_NAME-HASH-REG_ABBR.a.run.app । মূল কথা হলো, একটি সার্ভিসের নাম নিয়ে ভাবতে শুরু করুন!
পরিষেবা স্থাপন করুন
আপনার কন্টেইনার ইমেজ তৈরি করতে এবং ক্লাউড রান-এ ডেপ্লয় করতে নিচের কমান্ডটি চালান। অনুরোধ করা হলে, সহজ পরীক্ষার জন্য আপনার অঞ্চল নির্বাচন করুন এবং প্রমাণীকরণবিহীন সংযোগের অনুমতি দিন। যেখানে SVC_NAME হলো আপনি যে পরিষেবাটি ডেপ্লয় করছেন তার নাম, সেখানে আপনার অঞ্চলটি যথাযথভাবে নির্বাচন করুন।
$ gcloud beta run deploy SVC_NAME --source . Please choose a target platform: [1] Cloud Run (fully managed) [2] Cloud Run for Anthos deployed on Google Cloud [3] Cloud Run for Anthos deployed on VMware [4] cancel Please enter your numeric choice: 1 To specify the platform yourself, pass `--platform managed`. Or, to make this the default target platform, run `gcloud config set run/platform managed`. Please specify a region: [1] asia-east1 [2] asia-east2 [3] asia-northeast1 [4] asia-northeast2 [5] asia-northeast3 [6] asia-south1 [7] asia-southeast1 [8] asia-southeast2 [9] australia-southeast1 [10] europe-north1 [11] europe-west1 [12] europe-west2 [13] europe-west3 [14] europe-west4 [15] europe-west6 [16] northamerica-northeast1 [17] southamerica-east1 [18] us-central1 [19] us-east1 [20] us-east4 [21] us-west1 [22] us-west2 [23] us-west3 [24] us-west4 [25] cancel Please enter your numeric choice: <select your numeric region choice> To make this the default region, run `gcloud config set run/region REGION`. Allow unauthenticated invocations to [SVC_NAME] (y/N)? y Building using Dockerfile and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION] ✓ Building and deploying new service... Done. ✓ Uploading sources... ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM]. ✓ Creating Revision... Deploying Revision. ✓ Routing traffic... ✓ Setting IAM Policy... Done. Service [SVC_NAME] revision [SVC_NAME-00001-vos] has been deployed and is serving 100 percent of traffic. Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app
ডেপ্লয়মেন্ট সফল হয়েছে কিনা তা নিশ্চিত করতে আপনার ব্রাউজার দিয়ে নির্দিষ্ট URL-টি ভিজিট করুন!
gcloud কমান্ডে যেমন উল্লেখ করা আছে, ব্যবহারকারীরা উপরে দেখানো অনুযায়ী আউটপুট এবং ইন্টারঅ্যাক্টিভিটি কমানোর জন্য বিভিন্ন ডিফল্ট সেটিংস সেট করতে পারেন। উদাহরণস্বরূপ, সমস্ত ইন্টারঅ্যাকশন এড়াতে, আপনি এর পরিবর্তে নিম্নলিখিত এক-লাইনের ডিপ্লয় কমান্ডটি ব্যবহার করতে পারেন:
$ gcloud beta run deploy SVC_NAME --source . --platform managed --region REGION --allow-unauthenticated
আপনি যদি এটি ব্যবহার করেন, তবে অবশ্যই একই সার্ভিস নেম SVC_NAME এবং কাঙ্ক্ষিত REGION নেম নির্বাচন করবেন, উপরে ইন্টারেক্টিভভাবে করা ইনডেক্সড মেনু নির্বাচনটি নয়।
৬. সারসংক্ষেপ/পরিষ্কারকরণ
নিশ্চিত করুন যে অ্যাপটি ক্লাউড রান-এ ঠিক সেভাবেই কাজ করছে যেভাবে এটি অ্যাপ ইঞ্জিন-এ করত। আপনি যদি পূর্ববর্তী কোনো কোডল্যাব না করেই এই সিরিজে চলে আসেন, তাহলে অ্যাপটির নিজের কোনো পরিবর্তন হয় না; এটি মূল ওয়েব পেজে ( / ) সমস্ত ভিজিট রেজিস্টার করে এবং যথেষ্টবার সাইটটি ভিজিট করার পর এটি দেখতে এইরকম হয়ে যায়:

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