1. উদ্দেশ্য
এই কর্মশালার উদ্দেশ্য ব্যবহারকারী এবং অনুশীলনকারীদের হাতে-কলমে ডুয়েট এআই শিক্ষা প্রদান করা।
এই কোডল্যাবে, আপনি নিম্নলিখিতগুলি শিখবেন:
- আপনার GCP প্রকল্পে Duet AI সক্রিয় করুন এবং এটি একটি IDE এবং ক্লাউড কনসোলে ব্যবহারের জন্য কনফিগার করুন।
- কোড তৈরি, সমাপ্তি এবং ব্যাখ্যার জন্য ডুয়েট এআই ব্যবহার করুন।
- একটি অ্যাপ্লিকেশন সমস্যা ব্যাখ্যা এবং সমস্যা সমাধানের জন্য Duet AI ব্যবহার করুন।
- ডুয়েট AI বৈশিষ্ট্য যেমন IDE চ্যাট এবং মাল্টি-টার্ন চ্যাট, চ্যাট বনাম ইনলাইন কোড জেনারেশন, স্মার্ট অ্যাকশন যেমন কোড ব্যাখ্যা এবং আবৃত্তি স্বীকৃতি এবং আরও অনেক কিছু।
আখ্যান
ডেভেলপারদের জন্য ডুয়েট এআই কীভাবে প্রামাণিকভাবে দৈনন্দিন উন্নয়নে ব্যবহার করা হয় তা দেখানোর জন্য, এই কর্মশালার কার্যক্রম একটি বর্ণনামূলক প্রেক্ষাপটে সঞ্চালিত হয়।
একজন নতুন বিকাশকারী একটি ইকমার্স কোম্পানিতে যোগদান করেন। তাদের বিদ্যমান ইকমার্স অ্যাপ্লিকেশনে একটি নতুন পরিষেবা যোগ করার দায়িত্ব দেওয়া হয়েছে (যা একাধিক পরিষেবার সমন্বয়ে গঠিত)। নতুন পরিষেবা পণ্য ক্যাটালগে পণ্য সম্পর্কে অতিরিক্ত তথ্য (মাত্রা, ওজন ইত্যাদি) প্রদান করে। এই পরিষেবাটি পণ্যের মাত্রা এবং ওজনের উপর ভিত্তি করে আরও ভাল/সস্তা শিপিং খরচের অনুমতি দেবে।
যেহেতু বিকাশকারী কোম্পানিতে নতুন, তারা কোড তৈরি, ব্যাখ্যা এবং ডকুমেন্টেশনের জন্য ডুয়েট এআই ব্যবহার করবে।
পরিষেবাটি কোড করার পরে, একটি প্ল্যাটফর্ম অ্যাডমিনিস্ট্রেটর আর্টিফ্যাক্ট (ডকার কন্টেইনার) তৈরি করতে সাহায্য করার জন্য ডুয়েট এআই (চ্যাট) এবং জিসিপিতে আর্টিফ্যাক্ট স্থাপন করার জন্য প্রয়োজনীয় সংস্থানগুলি ব্যবহার করবে (উদাহরণস্বরূপ আর্টিফ্যাক্ট রেজিস্ট্রি, আইএএম অনুমতি, একটি কোড সংগ্রহস্থল, গণনা অবকাঠামো যেমন GKE বা CloudRun ইত্যাদি)
একবার অ্যাপ্লিকেশনটি GCP-তে স্থাপন করা হলে, একটি অ্যাপ্লিকেশন অপারেটর/SRE নতুন পরিষেবাতে একটি ত্রুটির সমস্যা সমাধানে সাহায্য করতে ডুয়েট এআই (এবং ক্লাউড অপস) ব্যবহার করবে।
ব্যক্তিত্ব
কর্মশালা নিম্নলিখিত ব্যক্তিত্ব কভার করে:
- অ্যাপ্লিকেশন বিকাশকারী - প্রোগ্রামিং এবং সফ্টওয়্যার বিকাশের কিছু জ্ঞান প্রয়োজন।
ডুয়েট এআই ওয়ার্কশপের এই বৈচিত্রটি শুধুমাত্র ডেভেলপারদের জন্য। GCP ক্লাউড সংস্থান সম্পর্কে কোন জ্ঞানের প্রয়োজন নেই। এই অ্যাপ্লিকেশনটি চালানোর জন্য প্রয়োজনীয় GCP সংস্থানগুলি কীভাবে তৈরি করা যায় তার স্ক্রিপ্টগুলি এখানে পাওয়া যাবে। প্রয়োজনীয় GCP সংস্থানগুলি স্থাপন করতে আপনি এই গাইডের নির্দেশাবলী অনুসরণ করতে পারেন।
2. পরিবেশ প্রস্তুত করা
ডুয়েট এআই সক্রিয় করা হচ্ছে
আপনি API (gcloud বা Terraform এর মত IaC টুল) বা ক্লাউড কনসোল UI এর মাধ্যমে একটি GCP প্রকল্পে Duet AI সক্রিয় করতে পারেন।
Google ক্লাউড প্রজেক্টে Duet AI সক্রিয় করতে, আপনি Cloud AI Companion API সক্ষম করুন এবং ক্লাউড AI কম্প্যানিয়ন ব্যবহারকারী এবং ব্যবহারকারীদের পরিষেবা ব্যবহার ভিউয়ার আইডেন্টিটি অ্যান্ড অ্যাক্সেস ম্যানেজমেন্ট (IAM) ভূমিকা প্রদান করুন।
জিক্লাউডের মাধ্যমে
ক্লাউড শেল সক্রিয় করুন:
আপনার PROJECT_ID
, USER
কনফিগার করুন এবং Cloud AI Companion API সক্ষম করুন৷
export PROJECT_ID=<YOUR PROJECT ID> export USER=<YOUR USERNAME> # Use your full LDAP, e.g. name@example.com gcloud config set project ${PROJECT_ID} gcloud services enable cloudaicompanion.googleapis.com --project ${PROJECT_ID}
আউটপুট নিম্নলিখিত মত:
Updated property [core/project]. Operation "operations/acat.p2-60565640195-f37dc7fe-b093-4451-9b12-934649e2a435" finished successfully.
ক্লাউড এআই কম্প্যানিয়ন ব্যবহারকারী এবং সার্ভিস ইউসেজ ভিউয়ার আইডেন্টিটি অ্যান্ড অ্যাকসেস ম্যানেজমেন্ট (IAM) ভূমিকা USER অ্যাকাউন্টে মঞ্জুর করুন৷ ক্লাউড কম্প্যানিয়ন এপিআই আইডিই এবং কনসোল উভয়ের বৈশিষ্ট্যগুলির পিছনে রয়েছে যা আমরা ব্যবহার করব। কনসোলে UI সক্ষম করার আগে পরিষেবা ব্যবহার দর্শকের অনুমতিটি একটি দ্রুত পরীক্ষা হিসাবে ব্যবহার করা হয় (যাতে ডুয়েট UI শুধুমাত্র সেই প্রকল্পগুলিতে প্রদর্শিত হয় যেখানে API সক্ষম করা আছে)।
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=user:${USER} --role=roles/cloudaicompanion.user gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member=user:${USER} --role=roles/serviceusage.serviceUsageViewer
আউটপুট নিম্নলিখিত মত:
... - members: - user:<YOUR USER ACCOUNT> role: roles/cloudaicompanion.user ... - members: - user:<YOUR USER ACCOUNT> role: roles/serviceusage.serviceUsageViewer
ক্লাউড কনসোলের মাধ্যমে
API সক্ষম করতে, Google ক্লাউড কনসোলে Cloud AI Companion API পৃষ্ঠাতে যান।
প্রজেক্ট সিলেক্টরে, একটি প্রোজেক্ট সিলেক্ট করুন।
সক্ষম করুন ক্লিক করুন।
পৃষ্ঠাটি আপডেট করে এবং সক্রিয় এর একটি স্থিতি দেখায়। Duet AI এখন নির্বাচিত Google ক্লাউড প্রকল্পে প্রয়োজনীয় IAM ভূমিকা আছে এমন সমস্ত ব্যবহারকারীদের কাছে উপলব্ধ।
Duet AI ব্যবহার করার জন্য প্রয়োজনীয় IAM ভূমিকাগুলি মঞ্জুর করতে, IAM পৃষ্ঠাতে যান৷
প্রিন্সিপাল কলামে, আপনার ব্যবহারকারীকে খুঁজুন যার জন্য আপনি Duet AI-তে অ্যাক্সেস সক্ষম করতে চান, এবং তারপর পেন্সিল আইকনে ক্লিক করুন ✏️ সেই সারিতে প্রিন্সিপাল সম্পাদনা করুন ।
সম্পাদনা অ্যাক্সেস প্যানে, আরেকটি ভূমিকা যোগ করুন এ ক্লিক করুন।
একটি ভূমিকা নির্বাচন করুন-এ, ক্লাউড এআই কম্প্যানিয়ন ব্যবহারকারী নির্বাচন করুন।
অন্য ভূমিকা যোগ করুন ক্লিক করুন এবং পরিষেবা ব্যবহার ভিউয়ার নির্বাচন করুন।
Save এ ক্লিক করুন।
IDE সেট আপ করা হচ্ছে
ডেভেলপাররা বিভিন্ন ধরনের IDE থেকে বেছে নিতে পারেন যা তাদের চাহিদা অনুযায়ী সবচেয়ে ভালো। ডুয়েট এআই কোড সহায়তা একাধিক IDE-তে পাওয়া যায় যেমন ভিজ্যুয়াল স্টুডিও কোড , জেটব্রেন আইডিই (IntelliJ, PyCharm, GoLand, WebStorm এবং আরও অনেক কিছু), ক্লাউড ওয়ার্কস্টেশন , ক্লাউড শেল এডিটর ।
এই ল্যাবে, আপনি ক্লাউড ওয়ার্কস্টেশন বা ক্লাউড শেল এডিটর ব্যবহার করতে পারেন।
এই কর্মশালা ক্লাউড শেল সম্পাদক ব্যবহার করে।
মনে রাখবেন ক্লাউড ওয়ার্কস্টেশন সেট আপ হতে 20-30 মিনিট সময় নিতে পারে।
অবিলম্বে ব্যবহার করতে, Cloud Shell Editor ব্যবহার করুন।
আপনার ক্লাউড শেল-এর উপরের মেনু বারে পেন্সিল আইকনে ✏️ ক্লিক করে ক্লাউড শেল এডিটর খুলুন।
ক্লাউড শেল এডিটরের একটি খুব অনুরূপ UI এবং UX থেকে VSCode আছে।
সেটিংস প্যানে প্রবেশ করতে CTRL (উইন্ডোজে)/CMD (ম্যাকে) + , (কমা) ক্লিক করুন।
অনুসন্ধান বারে, "duet ai" টাইপ করুন।
ক্লাউডকোড নিশ্চিত করুন বা সক্ষম করুন › ডুয়েট এআই: সক্ষম করুন এবং ক্লাউডকোড › ডুয়েট এআই › ইনলাইন পরামর্শ: অটো সক্ষম করুন
নীচের স্ট্যাটাস বারে, ক্লাউড কোডে ক্লিক করুন - সাইন ইন করুন এবং সাইন ইন ওয়ার্কফ্লো অনুসরণ করুন।
আপনি যদি ইতিমধ্যে সাইন ইন করে থাকেন, স্ট্যাটাস বার দেখায় ক্লাউড কোড - কোন প্রজেক্ট নেই ।
ক্লাউড কোডে ক্লিক করুন - কোনও প্রকল্প নেই এবং উপরে একটি অ্যাকশন ড্রপডাউন ফলক প্রদর্শিত হবে। একটি Google ক্লাউড প্রকল্প নির্বাচন করুন এ ক্লিক করুন।
আপনার প্রকল্প আইডি টাইপ করা শুরু করুন এবং আপনার প্রকল্পটি তালিকায় উপস্থিত হওয়া উচিত।
প্রকল্পের তালিকা থেকে আপনার PROJECT_ID নির্বাচন করুন।
নিচের স্ট্যাটাস বার আপডেট করে আপনার প্রোজেক্ট আইডি দেখাতে। যদি এটি না হয়, তাহলে আপনাকে আপনার ক্লাউড শেল এডিটর ট্যাবটি রিফ্রেশ করতে হতে পারে।
ডুয়েট এআই আইকনে ক্লিক করুন বাম হাতের মেনু বারে এবং ডুয়েট এআই চ্যাট উইন্ডো প্রদর্শিত হবে। আপনি যদি জিসিপি প্রকল্প নির্বাচন করুন বলে একটি বার্তা পান। ক্লিক করুন এবং প্রকল্পটি পুনরায় নির্বাচন করুন।
আপনি এখন ডুয়েট এআই চ্যাট উইন্ডোটি দেখতে পাচ্ছেন
3. অবকাঠামো সেট আপ করা
GCP-তে নতুন শিপিং পরিষেবা চালানোর জন্য, আপনার নিম্নলিখিত GCP সংস্থানগুলির প্রয়োজন:
- একটি ডাটাবেস সহ একটি ক্লাউড এসকিউএল ইনস্ট্যান্স।
- কনটেইনারাইজড পরিষেবা চালানোর জন্য একটি GKE ক্লাস্টার।
- ডকার ইমেজ সংরক্ষণ করার জন্য একটি আর্টিফ্যাক্ট রেজিস্ট্রি।
- কোডের জন্য একটি ক্লাউড সোর্স রিপোজিটরি।
ক্লাউড শেল টার্মিনালে, নিম্নলিখিত রেপো ক্লোন করুন এবং আপনার GCP প্রকল্পে অবকাঠামো সেট আপ করতে নিম্নলিখিত কমান্ডগুলি চালান।
# Set your project export PROJECT_ID=<INSERT_YOUR_PROJECT_ID> gcloud config set core/project ${PROJECT_ID} # Enable Cloudbuild and grant Cloudbuild SA owner role export PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format 'value(projectNumber)') gcloud services enable cloudbuild.googleapis.com gcloud projects add-iam-policy-binding ${PROJECT_ID} --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com --role roles/owner # Clone the repo git clone https://github.com/duetailabs/dev.git ~/duetaidev cd ~/duetaidev # Run Cloudbuild to create the necessary resources gcloud builds submit --substitutions=_PROJECT_ID=${PROJECT_ID} # To destroy all GCP resources, run the following # gcloud builds submit --substitutions=_PROJECT_ID=${PROJECT_ID} --config=cloudbuild_destroy.yaml
4. একটি পাইথন ফ্লাস্ক পরিষেবা তৈরি করা
আমরা যে পরিষেবাটি তৈরি করব তা শেষ পর্যন্ত নিম্নলিখিত ফাইলগুলি নিয়ে গঠিত হবে। আপনাকে এখন এই ফাইলগুলি তৈরি করতে হবে না এবং নীচের নির্দেশাবলী অনুসরণ করে একবারে এইগুলি তৈরি করবে:
-
package-service.yaml
- প্যাকেজ পরিষেবার জন্য একটি ওপেন API স্পেক যাতে ডেটা যেমন উচ্চতা, প্রস্থ, ওজন এবং বিশেষ পরিচালনা নির্দেশাবলী রয়েছে। -
data_model.py
- প্যাকেজ-পরিষেবা API স্পেকের জন্য ডেটা মডেল। এছাড়াও product_details DB-তেpackages
টেবিল তৈরি করে। -
connect_connector.py
- CloudSQL সংযোগ (ইঞ্জিন, সেশন এবং বেস ORM সংজ্ঞায়িত করে) -
db_init.py
-packages
টেবিলে নমুনা ডেটা তৈরি করে। -
main.py
- product_id এর উপর ভিত্তি করেpackages
ডেটা থেকে প্যাকেজ বিশদ পুনরুদ্ধার করতে একটিGET
এন্ডপয়েন্ট সহ একটি পাইথন ফ্লাস্ক পরিষেবা। -
test.py
- ইউনিট পরীক্ষা -
requirement.txt
- পাইথনের প্রয়োজনীয়তা -
Dockerfile
- এই অ্যাপ্লিকেশনটিকে কন্টেইনারাইজ করতে
অনুশীলনের সময় আপনি যদি কোনও স্টিকি সমস্যায় পড়েন, চূড়ান্ত ফাইলগুলি রেফারেন্সের জন্য এই কোডল্যাবের পরিশিষ্টে অবস্থিত।
আগের ধাপে, আপনি একটি ক্লাউড সোর্স রিপোজিটরি তৈরি করেছেন। সংগ্রহস্থল ক্লোন করুন। আপনি ক্লোন করা রিপোজিটরি ফোল্ডারে অ্যাপ্লিকেশন ফাইলগুলি তৈরি করবেন।
ক্লাউড শেল টার্মিনালে, সংগ্রহস্থল ক্লোন করতে নিম্নলিখিত কমান্ডটি চালান।
cd ~ gcloud source repos clone shipping shipping cd ~/shipping
ক্লাউড শেল এডিটর বাম হাতের মেনু থেকে ডুয়েট এআই চ্যাট সাইডবার খুলুন। আইকন এর মত দেখাচ্ছে . আপনি এখন কোড সহায়তার জন্য Duet AI ব্যবহার করতে পারেন।
package-service.yaml
কোনো ফাইল খোলা ছাড়াই, ডুয়েটকে শিপিং পরিষেবার জন্য একটি Open API স্পেক তৈরি করতে বলুন।
প্রম্পট 1: একটি পরিষেবার জন্য একটি OpenAPI yaml স্পেসিফিকেশন তৈরি করুন যা একটি সংখ্যাসূচক পণ্য আইডি দেওয়া শিপিং এবং প্যাকেজ তথ্য প্রদান করে। পরিষেবাটিতে প্যাকেজের উচ্চতা, প্রস্থ, গভীরতা, ওজন এবং কোনও বিশেষ পরিচালনার নির্দেশাবলী সম্পর্কে তথ্য অন্তর্ভুক্ত করা উচিত।
জেনারেটেড কোড উইন্ডোর উপরের ডানদিকে তালিকাভুক্ত তিনটি বিকল্প রয়েছে।
আপনি হয় COPY
করতে পারেন কোডটি এবং একটি ফাইলে পেস্ট করুন।
আপনি ADD
করতে পারেন সম্পাদকে বর্তমানে খোলা ফাইলের কোড।
অথবা আপনি OPEN
পারেন একটি নতুন ফাইলে কোড।
OPEN
এ ক্লিক করুন একটি নতুন ফাইলে কোড।
ফাইলটি সংরক্ষণ করতে CTRL/CMD + s
ক্লিক করুন, এবং package-service.yaml
নামক ফাইলের নাম দিয়ে ফাইলটিকে অ্যাপ্লিকেশন ফোল্ডারে সংরক্ষণ করুন। ওকে ক্লিক করুন।
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
আপনি Duet AI এর প্রতিক্রিয়া দেখতে বিভিন্ন প্রম্পট চেষ্টা করতে পারেন।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
data_model.py
এরপরে, আপনি OpenAPI স্পেকের উপর ভিত্তি করে পরিষেবাটির জন্য ডেটা মডেল পাইথন ফাইল তৈরি করুন।
package-service.yaml
ফাইল খোলার সাথে, নিম্নলিখিত প্রম্পট লিখুন।
প্রম্পট 1: python sqlalchemy ORM ব্যবহার করে, এই API পরিষেবার জন্য একটি ডেটা মডেল তৈরি করুন। এছাড়াও একটি পৃথক ফাংশন এবং একটি প্রধান এন্ট্রিপয়েন্ট অন্তর্ভুক্ত করুন যা ডাটাবেস টেবিল তৈরি করে।
চলুন উত্পন্ন হয়েছে যে প্রতিটি অংশ তাকান. ডুয়েট এআই এখনও একজন সহকারী, এবং যদিও এটি দ্রুত কোড লিখতে সাহায্য করতে পারে, আপনার এখনও জেনারেট করা বিষয়বস্তু পর্যালোচনা করা উচিত এবং আপনি যাওয়ার সাথে সাথে এটি বোঝা উচিত।
প্রথমত, Package
অফ কাইন্ড Base
নামে একটি ক্লাস রয়েছে যা packages
ডাটাবেসের জন্য ডেটা মডেলকে নিম্নোক্ত মত সংজ্ঞায়িত করে:
class Package(Base):
__tablename__ = 'packages'
id = Column(Integer, primary_key=True)
product_id = Column(String(255))
height = Column(Float)
width = Column(Float)
depth = Column(Float)
weight = Column(Float)
special_handling_instructions = Column(String(255))
এর পরে, আপনার একটি ফাংশন দরকার যা ডাটাবেসে টেবিল তৈরি করে যেমন:
def create_tables(engine):
Base.metadata.create_all(engine)
অবশেষে, আপনার একটি প্রধান ফাংশন দরকার যা ক্লাউডএসকিউএল ডাটাবেসে টেবিলটি তৈরি করার জন্য create_tables
ফাংশন চালায়, যেমন:
if __name__ == '__main__':
from sqlalchemy import create_engine
engine = create_engine('sqlite:///shipping.db')
create_tables(engine)
print('Tables created successfully.')
মনে রাখবেন যে main
ফাংশন একটি স্থানীয় sqlite
ডাটাবেস ব্যবহার করে একটি ইঞ্জিন তৈরি করছে। CloudSQL ব্যবহার করার জন্য, আপনাকে এটি পরিবর্তন করতে হবে। তুমি সেটা একটু পরে করো।
OPEN
ব্যবহার করে আগের মতো একটি নতুন ফাইল ওয়ার্কফ্লোতে কোড। কোডটি
data_model.py
নামক একটি ফাইলে সংরক্ষণ করুন (নামে আন্ডারস্কোরটি নোট করুন এবং ড্যাশ নয়)।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
connect-connector.py
CloudSQL সংযোগকারী তৈরি করুন।
data_model.py
ফাইলটি খোলার সাথে, নিম্নলিখিত প্রম্পটগুলি লিখুন৷
প্রম্পট 1: Cloud-sql-python-connector লাইব্রেরি ব্যবহার করে, একটি ফাংশন তৈরি করুন যা Postgres-এর একটি ক্লাউড SQL উদাহরণের জন্য একটি সংযোগ পুল শুরু করে।
মনে রাখবেন প্রতিক্রিয়াটি cloud-sql-python-connector
লাইব্রেরি ব্যবহার করে না। আপনি একই চ্যাট থ্রেডে সুনির্দিষ্ট তথ্য যোগ করে ডুয়েটকে কিছুটা নজ দেওয়ার জন্য প্রম্পটগুলিকে পরিমার্জন করতে পারেন।
এর অন্য প্রম্পট ব্যবহার করা যাক.
প্রম্পট 2: ক্লাউড-এসকিউএল-পাইথন-সংযোগকারী লাইব্রেরি ব্যবহার করতে হবে।
নিশ্চিত করুন যে এটি cloud-sql-python-connector
লাইব্রেরি ব্যবহার করে।
OPEN
ব্যবহার করে আগের মতো একটি নতুন ফাইল ওয়ার্কফ্লোতে কোড।
connect_conector.py
নামে একটি ফাইলে কোডটি সংরক্ষণ করুন। আপনাকে ম্যানুয়ালি pg8000
লাইব্রেরি আমদানি করতে হতে পারে, অনুগ্রহ করে নীচের ফাইলটি দেখুন৷
Duet AI চ্যাট ইতিহাস সাফ করুন, এবং connect_connector.py
ফাইলটি খোলার সাথে, অ্যাপ্লিকেশনটিতে ব্যবহার করার জন্য DB engine
, sessionmaker
এবং base
ORM তৈরি করুন৷
প্রম্পট 1: connect_with_connector পদ্ধতি ব্যবহার করে একটি ইঞ্জিন, সেশনমেকার ক্লাস এবং বেস ORM তৈরি করুন
প্রতিক্রিয়াটি connect_connector.py
ফাইলে engine
, Session
এবং Base
যুক্ত করতে পারে।
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
আপনি সম্ভাব্য ভিন্নতা ডুয়েট এআই এর প্রতিক্রিয়া দেখতে বিভিন্ন প্রম্পট চেষ্টা করতে পারেন।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
data_model.py আপডেট করা হচ্ছে
CloudSQL ডাটাবেসে একটি টেবিল তৈরি করার জন্য আপনাকে পূর্ববর্তী ধাপে ( connect_connector.py
ফাইলে) তৈরি করা ইঞ্জিন ব্যবহার করতে হবে।
ডুয়েট এআই চ্যাটের ইতিহাস সাফ করুন। data_model.py
ফাইলটি খুলুন। নিম্নলিখিত প্রম্পট চেষ্টা করুন.
প্রম্পট 1: প্রধান ফাংশনে, connect_connector.py থেকে ইঞ্জিন আমদানি করুন এবং ব্যবহার করুন
আপনি connect_connector
(CloudSQL-এর জন্য) থেকে প্রতিক্রিয়া আমদানি engine
দেখতে পাবেন। create_table
সেই ইঞ্জিনটি ব্যবহার করে (ডিফল্ট sqlite
স্থানীয় DB এর পরিবর্তে)।
data_model.py
ফাইল আপডেট করুন।
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
আপনি বিভিন্ন ডুয়েট এআই এর প্রতিক্রিয়া দেখতে বিভিন্ন প্রম্পট চেষ্টা করতে পারেন।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
requirements.txt
অ্যাপ্লিকেশনের জন্য একটি requirements.txt
ফাইল তৈরি করুন।
connect_connector.py
এবং data_model.py
ফাইল উভয়ই খুলুন এবং নিম্নলিখিত প্রম্পটটি লিখুন।
প্রম্পট 1: এই ডেটা মডেল এবং পরিষেবার জন্য একটি পিপ প্রয়োজনীয়তা ফাইল তৈরি করুন
প্রম্পট 2: সর্বশেষ সংস্করণ ব্যবহার করে এই ডেটা মডেল এবং পরিষেবার জন্য একটি পিপ প্রয়োজনীয়তা ফাইল তৈরি করুন
যাচাই করুন নাম এবং সংস্করণ সঠিক. উদাহরণস্বরূপ, উপরের প্রতিক্রিয়াতে, google-cloud-sql-connecter
নাম এবং সংস্করণ দুটিই ভুল। ম্যানুয়ালি সংস্করণগুলি ঠিক করুন এবং একটি requirements.txt
ফাইল তৈরি করুন যা দেখতে এইরকম:
cloud-sql-python-connector==1.2.4
sqlalchemy==1.4.36
pg8000==1.22.0
কমান্ড টার্মিনালে নিম্নলিখিত চালান:
pip3 install -r requirements.txt
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
CloudSQL এ প্যাকেজ টেবিল তৈরি করা হচ্ছে
CloudSQL ডাটাবেস সংযোগকারীর জন্য পরিবেশ ভেরিয়েবল সেট করুন।
export INSTANCE_NAME=$(gcloud sql instances list --format='value(name)') export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe ${INSTANCE_NAME} --format="value(connectionName)") export DB_USER=evolution export DB_PASS=evolution export DB_NAME=product_details
এখন data_model.py চালান।
python data_model.py
আউটপুট নিম্নলিখিত অনুরূপ (আসলে কি প্রত্যাশিত দেখতে কোড পরীক্ষা করুন):
Tables created successfully.
CloudSQL ইনস্ট্যান্সের সাথে সংযোগ করুন এবং ডাটাবেস তৈরি করা হয়েছে তা পরীক্ষা করুন।
gcloud sql connect ${INSTANCE_NAME} --user=evolution --database=product_details
পাসওয়ার্ড প্রবেশ করার পরে (এছাড়াও বিবর্তন ), টেবিলগুলি পান।
product_details=> \dt
আউটপুট নিম্নলিখিত অনুরূপ:
List of relations Schema | Name | Type | Owner --------+----------+-------+----------- public | packages | table | evolution (1 row)
আপনি ডেটা মডেল এবং টেবিলের বিবরণও পরীক্ষা করতে পারেন।
product_details=> \d+ packages
আউটপুট নিম্নলিখিত অনুরূপ:
Table "public.packages" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description -------------------------------+-------------------+-----------+----------+--------------------------------------+----------+-------------+--------------+------------- id | integer | | not null | nextval('packages_id_seq'::regclass) | plain | | | product_id | integer | | not null | | plain | | | height | double precision | | not null | | plain | | | width | double precision | | not null | | plain | | | depth | double precision | | not null | | plain | | | weight | double precision | | not null | | plain | | | special_handling_instructions | character varying | | | | extended | | | Indexes: "packages_pkey" PRIMARY KEY, btree (id) Access method: heap
ক্লাউডএসকিউএল থেকে প্রস্থান করতে \q
টাইপ করুন।
db_init.py
এর পরে, packages
টেবিলে কিছু নমুনা ডেটা যোগ করা যাক।
ডুয়েট এআই চ্যাটের ইতিহাস সাফ করুন। data_model.py
ফাইলটি খোলার সাথে, নিম্নলিখিত প্রম্পটগুলি চেষ্টা করুন৷
প্রম্পট 1: একটি ফাংশন তৈরি করুন যা 10টি নমুনা প্যাকেজ সারি তৈরি করে এবং সেগুলিকে প্যাকেজ টেবিলে কমিট করে
প্রম্পট 2: connect_connector থেকে সেশন ব্যবহার করে, একটি ফাংশন তৈরি করুন যা 10টি নমুনা প্যাকেজ সারি তৈরি করে এবং প্যাকেজ টেবিলে সেগুলিকে কমিট করে
OPEN
ব্যবহার করে আগের মতো একটি নতুন ফাইল ওয়ার্কফ্লোতে কোড। কোডটি
db_init.py
নামক একটি ফাইলে সংরক্ষণ করুন।
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
আপনি বিভিন্ন ডুয়েট এআই এর প্রতিক্রিয়া দেখতে বিভিন্ন প্রম্পট চেষ্টা করতে পারেন।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
নমুনা প্যাকেজ ডেটা তৈরি করা হচ্ছে
কমান্ড লাইন থেকে db_init.py
চালান।
python db_init.py
আউটপুট নিম্নলিখিত অনুরূপ:
Packages created successfully.
ক্লাউডএসকিউএল ইনস্ট্যান্সের সাথে আবার সংযোগ করুন এবং প্যাকেজ টেবিলে নমুনা ডেটা যোগ করা হয়েছে তা যাচাই করুন।
CloudSQL ইনস্ট্যান্সের সাথে সংযোগ করুন এবং ডাটাবেস তৈরি করা হয়েছে তা পরীক্ষা করুন।
gcloud sql connect ${INSTANCE_NAME} --user=evolution --database=product_details
পাসওয়ার্ড প্রবেশ করার পরে (এছাড়াও বিবর্তন ), প্যাকেজ টেবিল থেকে সমস্ত ডেটা পান।
product_details=> SELECT * FROM packages;
আউটপুট নিম্নলিখিত অনুরূপ:
id | product_id | height | width | depth | weight | special_handling_instructions ----+------------+--------+-------+-------+--------+----------------------------------- 1 | 0 | 10 | 10 | 10 | 10 | No special handling instructions. 2 | 1 | 10 | 10 | 10 | 10 | No special handling instructions. 3 | 2 | 10 | 10 | 10 | 10 | No special handling instructions. 4 | 3 | 10 | 10 | 10 | 10 | No special handling instructions. 5 | 4 | 10 | 10 | 10 | 10 | No special handling instructions. 6 | 5 | 10 | 10 | 10 | 10 | No special handling instructions. 7 | 6 | 10 | 10 | 10 | 10 | No special handling instructions. 8 | 7 | 10 | 10 | 10 | 10 | No special handling instructions. 9 | 8 | 10 | 10 | 10 | 10 | No special handling instructions. 10 | 9 | 10 | 10 | 10 | 10 | No special handling instructions. (10 rows)
ক্লাউডএসকিউএল থেকে প্রস্থান করতে \q
টাইপ করুন।
main.py
data_model.py
, package-service.yaml
, এবং connect_connector.py
ফাইল খোলার সাথে, অ্যাপ্লিকেশনটির জন্য একটি main.py
তৈরি করুন।
প্রম্পট 1: পাইথন ফ্লাস্ক লাইব্রেরি ব্যবহার করে - একটি বাস্তবায়ন তৈরি করুন যা এই পরিষেবার জন্য http বিশ্রামের শেষ পয়েন্ট ব্যবহার করে
প্রম্পট 2: পাইথন ফ্লাস্ক লাইব্রেরি ব্যবহার করে - একটি বাস্তবায়ন তৈরি করুন যা এই পরিষেবার জন্য http বিশ্রামের শেষ পয়েন্ট ব্যবহার করে। প্যাকেজ ডেটার জন্য connect_conector.py থেকে SessionMaker আমদানি করুন এবং ব্যবহার করুন।
প্রম্পট 3: পাইথন ফ্লাস্ক লাইব্রেরি ব্যবহার করে - একটি বাস্তবায়ন তৈরি করুন যা এই পরিষেবার জন্য http বিশ্রামের শেষ পয়েন্ট ব্যবহার করে। প্যাকেজ ডেটার জন্য data_model.py এবং connect_conector.py থেকে SessionMaker থেকে প্যাকেজ আমদানি এবং ব্যবহার করুন।
প্রম্পট 4: পাইথন ফ্লাস্ক লাইব্রেরি ব্যবহার করে - একটি বাস্তবায়ন তৈরি করুন যা এই পরিষেবার জন্য HTTP বাকি শেষ পয়েন্ট ব্যবহার করে। প্যাকেজ ডেটার জন্য data_model.py এবং connect_conector.py থেকে SessionMaker থেকে প্যাকেজ আমদানি এবং ব্যবহার করুন। app.run এর জন্য হোস্ট আইপি 0.0.0.0 ব্যবহার করুন
main.py
এর জন্য প্রয়োজনীয়তা আপডেট করুন।
প্রম্পট: main.py এর জন্য প্রয়োজনীয় ফাইল তৈরি করুন
requirements.txt
ফাইলে এটি যুক্ত করুন। ফ্লাস্ক সংস্করণ 3.0.0 ব্যবহার করা নিশ্চিত করুন।
OPEN
ব্যবহার করে আগের মতো একটি নতুন ফাইল ওয়ার্কফ্লোতে কোড। কোডটি
main.py
নামে একটি ফাইলে সংরক্ষণ করুন।
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
5. পরীক্ষা এবং অ্যাপ্লিকেশন চালানো
প্রয়োজনীয়তা ইনস্টল করুন.
pip3 install -r requirements.txt
main.py
চালান।
python main.py
আউটপুট নিম্নলিখিত অনুরূপ:
* Serving Flask app 'main' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 * Running on http://10.88.0.3:5000 Press CTRL+C to quit
একটি দ্বিতীয় টার্মিনাল থেকে, /packages/<product_id>
এন্ডপয়েন্ট পরীক্ষা করুন।
curl localhost:5000/packages/1
আউটপুট নিম্নলিখিত অনুরূপ:
{"depth":10.0,"height":10.0,"special_handling_instructions":"No special handling instructions.","weight":10.0,"width":10.0}
আপনি আপনার নমুনা ডেটাতে অন্য কোনো পণ্য আইডি পরীক্ষা করতে পারেন।
টার্মিনালে চলমান ডকার কন্টেইনার থেকে প্রস্থান করতে CTRL_C
লিখুন।
ইউনিট পরীক্ষা তৈরি করা হচ্ছে
main.py
ফাইল খোলার সাথে, ইউনিট পরীক্ষা তৈরি করুন।
প্রম্পট 1: ইউনিট পরীক্ষা তৈরি করুন।
OPEN
ব্যবহার করে আগের মতো একটি নতুন ফাইল ওয়ার্কফ্লোতে কোড।
test.py
নামে একটি ফাইলে কোডটি সংরক্ষণ করুন।
test_get_package
ফাংশনে, একটি product_id
অবশ্যই সংজ্ঞায়িত করতে হবে। আপনি ম্যানুয়ালি এটি যোগ করতে পারেন.
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
ট্র্যাশ আইকনে ক্লিক করে ডুয়েট এআই চ্যাট ইতিহাস রিসেট করুন ডুয়েট এআই সাইডবারের উপরে।
ইউনিট পরীক্ষা চলমান
ইউনিট পরীক্ষা চালান।
python test.py
আউটপুট নিম্নলিখিত অনুরূপ:
. ---------------------------------------------------------------------- Ran 1 test in 1.061s OK
ক্লাউড শেল এডিটরে সমস্ত ফাইল বন্ধ করুন এবং ট্র্যাশ আইকনে ক্লিক করে চ্যাট ইতিহাস সাফ করুন শীর্ষ স্ট্যাটাস বারে।
ডকারফাইল
এই অ্যাপ্লিকেশনের জন্য একটি Dockerfile
তৈরি করুন।
main.py
খুলুন এবং নিম্নলিখিত প্রম্পট চেষ্টা করুন।
প্রম্পট 1: এই অ্যাপ্লিকেশনের জন্য একটি ডকারফাইল তৈরি করুন।
প্রম্পট 2: এই অ্যাপ্লিকেশনের জন্য একটি ডকারফাইল তৈরি করুন। কন্টেইনারে সমস্ত ফাইল কপি করুন।
এছাড়াও আপনাকে INSTANCE_CONNECTION_NAME
, DB_USER
, DB_PASS
, এবং DB_NAME
এর জন্য ENVARS
সেট করতে হবে। আপনি ম্যানুয়ালি এটি করতে পারেন. আপনার ডকারফাইল নিম্নলিখিত মত হওয়া উচিত:
FROM python:3.10-slim
WORKDIR /app
COPY . ./
RUN pip install -r requirements.txt
# Add these manually for your project
ENV INSTANCE_CONNECTION_NAME=YOUR_INSTANCE_CONNECTION_NAME
ENV DB_USER=evolution
ENV DB_PASS=evolution
ENV DB_NAME=product_details
CMD ["python", "main.py"]
OPEN
ব্যবহার করে আগের মতো একটি নতুন ফাইল ওয়ার্কফ্লোতে কোড। কোডটি ডকারফাইল নামে একটি ফাইলে সংরক্ষণ করুন।
চূড়ান্ত ফাইলটি এই কোডল্যাবের পরিশিষ্ট বিভাগে রয়েছে। যদি তা না হয়, ম্যানুয়ালি যথাযথ পরিবর্তন করুন।
স্থানীয়ভাবে অ্যাপ্লিকেশন চলমান
Dockerfile
খোলার সাথে, নিম্নলিখিত প্রম্পটটি চেষ্টা করুন।
প্রম্পট 1: আমি কীভাবে স্থানীয়ভাবে এই ডকারফাইলটি ব্যবহার করে একটি ধারক চালাব
নির্দেশাবলী অনুসরণ করুন.
# Build docker build -t shipping . # And run docker run -p 5000:5000 -it shipping
আউটপুট নিম্নলিখিত অনুরূপ:
* Serving Flask app 'main' * Debug mode: off WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on all addresses (0.0.0.0) * Running on http://127.0.0.1:5000 * Running on http://172.17.0.2:5000 Press CTRL+C to quit
একটি দ্বিতীয় টার্মিনাল উইন্ডো থেকে, ধারক অ্যাক্সেস করুন.
curl localhost:5000/packages/1
আউটপুট নিম্নলিখিত অনুরূপ:
{"depth":10.0,"height":10.0,"special_handling_instructions":"No special handling instructions.","weight":10.0,"width":10.0}
কন্টেইনারাইজড অ্যাপ্লিকেশন কাজ করছে।
টার্মিনালে চলমান ডকার কন্টেইনার থেকে প্রস্থান করতে CTRL_C
লিখুন।
আর্টিফ্যাক্ট রেজিস্ট্রিতে কন্টেইনার ইমেজ তৈরি করা
কন্টেইনার ইমেজ তৈরি করুন এবং আর্টিফ্যাক্ট রেজিস্ট্রিতে পুশ করুন।
cd ~/shipping gcloud auth configure-docker us-central1-docker.pkg.dev docker build -t us-central1-docker.pkg.dev/${PROJECT_ID}/shipping/shipping . docker push us-central1-docker.pkg.dev/${PROJECT_ID}/shipping/shipping
অ্যাপ্লিকেশন কন্টেইনারটি এখন us-central1-docker.pkg.dev/${PROJECT_ID}/shipping/shipping
এ অবস্থিত যা GKE-তে স্থাপন করা যেতে পারে।
6. GKE ক্লাস্টারে অ্যাপ্লিকেশন স্থাপন করা হচ্ছে
আপনি যখন এই ওয়ার্কশপের জন্য GCP সংস্থান তৈরি করেছিলেন তখন একটি GKE অটোপাইলট ক্লাস্টার তৈরি হয়েছিল৷ GKE ক্লাস্টারে সংযোগ করুন।
gcloud container clusters get-credentials gke1 \ --region=us-central1
Google পরিষেবা অ্যাকাউন্টের সাথে Kubernetes ডিফল্ট পরিষেবা অ্যাকাউন্টটি টীকা করুন।
kubectl annotate serviceaccount default iam.gke.io/gcp-service-account=cloudsqlsa@${PROJECT_ID}.iam.gserviceaccount.com
আউটপুট নিম্নলিখিত অনুরূপ:
serviceaccount/default annotated
k8s.yaml ফাইলটি প্রস্তুত করুন এবং প্রয়োগ করুন।
cp ~/duetaidev/k8s.yaml_tmpl ~/shipping/. export INSTANCE_NAME=$(gcloud sql instances list --format='value(name)') export INSTANCE_CONNECTION_NAME=$(gcloud sql instances describe ${INSTANCE_NAME} --format="value(connectionName)") export IMAGE_REPO=us-central1-docker.pkg.dev/${PROJECT_ID}/shipping/shipping envsubst < ~/shipping/k8s.yaml_tmpl > k8s.yaml kubectl apply -f k8s.yaml
আউটপুট নিম্নলিখিত অনুরূপ:
deployment.apps/shipping created service/shipping created
পড চালু না হওয়া পর্যন্ত অপেক্ষা করুন এবং পরিষেবাটিতে একটি বহিরাগত লোড ব্যালেন্সার আইপি ঠিকানা বরাদ্দ করা আছে।
kubectl get pods kubectl get service shipping
আউটপুট নিম্নলিখিত অনুরূপ:
# kubectl get pods NAME READY STATUS RESTARTS AGE shipping-f5d6f8d5-56cvk 1/1 Running 0 4m47s shipping-f5d6f8d5-cj4vv 1/1 Running 0 4m48s shipping-f5d6f8d5-rrdj2 1/1 Running 0 4m47s # kubectl get service shipping NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE shipping LoadBalancer 34.118.225.125 34.16.39.182 80:30076/TCP 5m41s
GKE অটোপাইলট ক্লাস্টারগুলির জন্য, সংস্থানগুলি প্রস্তুত না হওয়া পর্যন্ত কয়েক মুহূর্ত অপেক্ষা করুন৷
EXTERNAL-IP
ঠিকানার মাধ্যমে পরিষেবাটি অ্যাক্সেস করুন৷
export EXTERNAL_IP=$(kubectl get svc shipping --output jsonpath='{.status.loadBalancer.ingress[0].ip}') curl http://${EXTERNAL_IP}/packages/1
আউটপুট নিম্নলিখিত অনুরূপ:
{"depth":10.0,"height":10.0,"special_handling_instructions":"No special handling instructions.","weight":10.0,"width":10.0}
7. অতিরিক্ত ক্রেডিট: আবেদনের সমস্যা সমাধান করা
cloudsqlsa
পরিষেবা অ্যাকাউন্ট থেকে CloudSQL ক্লায়েন্ট IAM ভূমিকা সরান। এটি CloudSQL ডাটাবেসের সাথে সংযোগ করার সময় একটি ত্রুটি সৃষ্টি করে।
gcloud projects remove-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:cloudsqlsa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
শিপিং পড পুনরায় আরম্ভ করুন.
kubectl rollout restart deployment shipping
পড পুনরায় চালু হওয়ার পরে, shipping
পরিষেবাটি আবার অ্যাক্সেস করার চেষ্টা করুন।
export EXTERNAL_IP=$(kubectl get svc shipping --output jsonpath='{.status.loadBalancer.ingress[0].ip}') curl http://${EXTERNAL_IP}/packages/1
আউটপুট নিম্নলিখিত অনুরূপ:
... <title>500 Internal Server Error</title> <h1>Internal Server Error</h1> <p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
Kubernetes Engine > Workloads- এ নেভিগেট করে লগগুলি পরিদর্শন করুন
shipping
স্থাপনায় ক্লিক করুন এবং তারপর লগ ট্যাবে।
ভিউ ইন লগ এক্সপ্লোরার এ ক্লিক করুন স্ট্যাটাস বারের ডানদিকে আইকন। এটি একটি নতুন লগ এক্সপ্লোরার উইন্ডো খোলে।
Traceback
ত্রুটি এন্ট্রিগুলির একটিতে ক্লিক করুন এবং তারপরে এই লগ এন্ট্রি ব্যাখ্যা করুন ক্লিক করুন।
আপনি ত্রুটির ব্যাখ্যা পড়তে পারেন.
এর পরে, ত্রুটির সমস্যা সমাধানে সহায়তা করার জন্য ডুয়েট এআই পান।
নিম্নলিখিত প্রম্পট চেষ্টা করুন.
প্রম্পট 1: এই ত্রুটির সমস্যা সমাধানে আমাকে সাহায্য করুন
প্রম্পটে ত্রুটি বার্তা লিখুন।
প্রম্পট 2: নিষিদ্ধ: প্রমাণীকৃত IAM প্রিন্সিপাল API অনুরোধ করার জন্য অনুমোদিত বলে মনে হচ্ছে না। আপনার GCP প্রোজেক্টের মধ্যে 'ক্লাউড এসকিউএল অ্যাডমিন এপিআই' চালু আছে এবং 'ক্লাউড এসকিউএল ক্লায়েন্ট' ভূমিকা আইএএম প্রিন্সিপালকে দেওয়া হয়েছে তা যাচাই করুন
এবং তারপর.
প্রম্পট 3: আমি কিভাবে ক্লাউড এসকিউএল ক্লায়েন্ট ভূমিকা একটি গুগল পরিষেবা অ্যাকাউন্টে gcloud ব্যবহার করে বরাদ্দ করব?
ক্লাউড এসকিউএল ক্লায়েন্টের ভূমিকা cloudsqlsa
বরাদ্দ করুন।
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:cloudsqlsa@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
কয়েক মুহূর্ত অপেক্ষা করুন এবং আবার অ্যাপ্লিকেশন অ্যাক্সেস করার চেষ্টা করুন।
export EXTERNAL_IP=$(kubectl get svc shipping --output jsonpath='{.status.loadBalancer.ingress[0].ip}') curl http://${EXTERNAL_IP}/packages/1
আউটপুট নিম্নলিখিত অনুরূপ:
{"depth":10.0,"height":10.0,"special_handling_instructions":"No special handling instructions.","weight":10.0,"width":10.0}
সমস্যাটির সমাধান করতে আপনি সফলভাবে ক্লাউড লগিং , লগ এক্সপ্লোরার এবং লগ এক্সপ্লেনার বৈশিষ্ট্যে ডুয়েট এআই ব্যবহার করেছেন।
8. উপসংহার
অভিনন্দন! আপনি এই কোডল্যাবটি সফলভাবে সম্পন্ন করেছেন।
এই কোডল্যাবে, আপনি নিম্নলিখিতগুলি শিখেছেন:
- আপনার GCP প্রকল্পে Duet AI সক্রিয় করুন এবং এটি একটি IDE এবং ক্লাউড কনসোলে ব্যবহারের জন্য কনফিগার করুন।
- কোড তৈরি, সমাপ্তি এবং ব্যাখ্যার জন্য ডুয়েট এআই ব্যবহার করুন।
- একটি অ্যাপ্লিকেশন সমস্যা ব্যাখ্যা এবং সমস্যা সমাধানের জন্য Duet AI ব্যবহার করুন।
- ডুয়েট AI বৈশিষ্ট্য যেমন IDE চ্যাট এবং মাল্টি-টার্ন চ্যাট, চ্যাট বনাম ইনলাইন কোড জেনারেশন, স্মার্ট অ্যাকশন যেমন কোড ব্যাখ্যা এবং আবৃত্তি স্বীকৃতি এবং আরও অনেক কিছু।
9. পরিশিষ্ট
package-service.yaml
swagger: "2.0"
info:
title: Shipping and Package Information API
description: This API provides information about shipping and packages.
version: 1.0.0
host: shipping.googleapis.com
schemes:
- https
produces:
- application/json
paths:
/packages/{product_id}:
get:
summary: Get information about a package
description: This method returns information about a package, including its height, width, depth, weight, and any special handling instructions.
parameters:
- name: product_id
in: path
required: true
type: integer
format: int64
responses:
"200":
description: A successful response
schema:
type: object
properties:
height:
type: integer
format: int64
width:
type: integer
format: int64
depth:
type: integer
format: int64
weight:
type: integer
format: int64
special_handling_instructions:
type: string
"404":
description: The product_id was not found
data_model.py
from sqlalchemy import Column, Integer, String, Float
from sqlalchemy.ext.declarative import declarative_base
from connect_connector import engine
Base = declarative_base()
class Package(Base):
__tablename__ = 'packages'
id = Column(Integer, primary_key=True)
product_id = Column(Integer, nullable=False)
height = Column(Float, nullable=False)
width = Column(Float, nullable=False)
depth = Column(Float, nullable=False)
weight = Column(Float, nullable=False)
special_handling_instructions = Column(String, nullable=True)
def create_tables():
Base.metadata.create_all(engine)
if __name__ == '__main__':
create_tables()
print('Tables created successfully.')
connect_connector.py
import os
from google.cloud.sql.connector import Connector, IPTypes
import sqlalchemy
# You may need to manually import pg8000 and Base as follows
import pg8000
from sqlalchemy.ext.declarative import declarative_base
def connect_with_connector() -> sqlalchemy.engine.base.Engine:
"""Initializes a connection pool for a Cloud SQL instance of Postgres."""
# Note: Saving credentials in environment variables is convenient, but not
# secure - consider a more secure solution such as
# Cloud Secret Manager (https://cloud.google.com/secret-manager) to help
# keep secrets safe.
instance_connection_name = os.environ[
"INSTANCE_CONNECTION_NAME"
] # e.g. 'project:region:instance'
db_user = os.environ["DB_USER"] # e.g. 'my-database-user'
db_pass = os.environ["DB_PASS"] # e.g. 'my-database-password'
db_name = os.environ["DB_NAME"] # e.g. 'my-database'
ip_type = IPTypes.PRIVATE if os.environ.get("PRIVATE_IP") else IPTypes.PUBLIC
connector = Connector()
def getconn() -> sqlalchemy.engine.base.Engine:
conn: sqlalchemy.engine.base.Engine = connector.connect(
instance_connection_name,
"pg8000",
user=db_user,
password=db_pass,
db=db_name,
ip_type=ip_type,
)
return conn
pool = sqlalchemy.create_engine(
"postgresql+pg8000://",
creator=getconn,
# ...
)
return pool
# Create a connection pool
engine = connect_with_connector()
# Create a sessionmaker class to create new sessions
SessionMaker = sqlalchemy.orm.sessionmaker(bind=engine)
# Create a Base class for ORM
# You may need to manually fix the following
Base = declarative_base()
db_init.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from connect_connector import engine
from data_model import Package
def create_packages():
# Create a session
session = sessionmaker(bind=engine)()
# Create 10 sample packages
for i in range(10):
package = Package(
product_id=i,
height=10.0,
width=10.0,
depth=10.0,
weight=10.0,
special_handling_instructions="No special handling instructions."
)
# Add the package to the session
session.add(package)
# Commit the changes
session.commit()
if __name__ == '__main__':
create_packages()
print('Packages created successfully.')
main.py
from flask import Flask, request, jsonify
from data_model import Package
from connect_connector import SessionMaker
app = Flask(__name__)
session_maker = SessionMaker()
@app.route("/packages/<int:product_id>", methods=["GET"])
def get_package(product_id):
"""Get information about a package."""
session = session_maker
package = session.query(Package).filter(Package.product_id == product_id).first()
if package is None:
return jsonify({"message": "Package not found."}), 404
return jsonify(
{
"height": package.height,
"width": package.width,
"depth": package.depth,
"weight": package.weight,
"special_handling_instructions": package.special_handling_instructions,
}
), 200
if __name__ == "__main__":
app.run(host="0.0.0.0")
test.py
import unittest
from data_model import Package
from connect_connector import SessionMaker
from main import app
class TestPackage(unittest.TestCase):
def setUp(self):
self.session_maker = SessionMaker()
def tearDown(self):
self.session_maker.close()
def test_get_package(self):
"""Test the `get_package()` function."""
package = Package(
product_id=11, # Ensure that the product_id different from the sample data
height=10,
width=10,
depth=10,
weight=10,
special_handling_instructions="Fragile",
)
session = self.session_maker
session.add(package)
session.commit()
response = app.test_client().get("/packages/11")
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.json,
{
"height": 10,
"width": 10,
"depth": 10,
"weight": 10,
"special_handling_instructions": "Fragile",
},
)
if __name__ == "__main__":
unittest.main()
requirements.txt
cloud-sql-python-connector==1.2.4
sqlalchemy==1.4.36
pg8000==1.22.0
Flask==3.0.0
gunicorn==20.1.0
psycopg2-binary==2.9.3
ডকারফাইল
FROM python:3.10-slim
WORKDIR /app
COPY . ./
RUN pip install -r requirements.txt
# Add these manually for your project
ENV INSTANCE_CONNECTION_NAME=YOUR_INSTANCE_CONNECTION_NAME
ENV DB_USER=evolution
ENV DB_PASS=evolution
ENV DB_NAME=product_details
CMD ["python", "main.py"]