পাইথনের সাথে ক্লাউড ওয়ার্কস্টেশন ব্যবহার করে ইনারলুপ ডেভেলপমেন্ট

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

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

যা শিখবেন

এই ল্যাবে আপনি জিসিপি-তে কন্টেইনারগুলি সহ বিকাশের পদ্ধতিগুলি শিখবেন:

  • একটি নতুন পাইথন স্টার্টার অ্যাপ্লিকেশন তৈরি করা হচ্ছে
  • উন্নয়ন প্রক্রিয়ার মধ্য দিয়ে হাঁটুন
  • একটি সাধারণ CRUD বিশ্রাম পরিষেবা বিকাশ করুন
  • GKE-তে স্থাপন করা হচ্ছে
  • একটি ত্রুটি অবস্থা ডিবাগিং
  • ব্রেকপয়েন্ট/লগ ব্যবহার করা
  • GKE-এ হট ডিপ্লয়িং পরিবর্তন

58a4cdd3ed7a123a.png

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

ক্লাউডশেল এডিটর শুরু করুন

এই ল্যাবটি ডিজাইন করা হয়েছে এবং Google ক্লাউড শেল এডিটরের সাথে ব্যবহারের জন্য পরীক্ষা করা হয়েছে। সম্পাদক অ্যাক্সেস করতে,

  1. https://console.cloud.google.com- এ আপনার গুগল প্রকল্প অ্যাক্সেস করুন।
  2. উপরের ডানদিকের কোণায় ক্লাউড শেল এডিটর আইকনে ক্লিক করুন

8560cc8d45e8c112.png

  1. আপনার উইন্ডোর নীচে একটি নতুন ফলক খুলবে
  2. Open Editor বাটনে ক্লিক করুন

9e504cb98a6a8005.png

  1. সম্পাদকটি ডানদিকে একটি এক্সপ্লোরার এবং কেন্দ্রীয় অঞ্চলে সম্পাদকের সাথে খুলবে৷
  2. স্ক্রিনের নীচে একটি টার্মিনাল ফলকও পাওয়া উচিত
  3. টার্মিনাল খোলা না থাকলে একটি নতুন টার্মিনাল উইন্ডো খুলতে `ctrl+`` এর কী সমন্বয় ব্যবহার করুন

এনভায়রনমেন্ট সেটআপ

ক্লাউড শেলে, আপনার প্রকল্পের আইডি এবং আপনার প্রকল্পের জন্য প্রকল্প নম্বর সেট করুন। সেগুলিকে PROJECT_ID এবং PROJECT_ID ভেরিয়েবল হিসাবে সংরক্ষণ করুন৷

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
    --format='value(projectNumber)')

এই ল্যাবে ব্যবহৃত অবকাঠামোর ব্যবস্থা করুন

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

  1. সেটআপ স্ক্রিপ্ট ডাউনলোড করুন এবং এটি এক্সিকিউটেবল করুন।
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
  1. setup_with_cw.sh ফাইল খুলুন এবং পাসওয়ার্ডের মানগুলি সম্পাদনা করুন যা বর্তমানে CHANGEME এ সেট করা আছে
  2. একটি GKE ক্লাস্টার এবং একটি স্প্যানার ডাটাবেস দাঁড়াতে সেটআপ স্ক্রিপ্টটি চালান যা আপনি এই ল্যাবে ব্যবহার করবেন
./setup_with_cw.sh &

ক্লাউড ওয়ার্কস্টেশন ক্লাস্টার

  1. ক্লাউড কনসোলে ক্লাউড ওয়ার্কস্টেশন খুলুন। ক্লাস্টারটি READY অবস্থায় থাকার জন্য অপেক্ষা করুন৷

305e1a3d63ac7ff6.png

ওয়ার্কস্টেশন কনফিগারেশন তৈরি করুন

  1. আপনার ক্লাউড শেল সেশন সংযোগ বিচ্ছিন্ন হলে, "পুনরায় সংযোগ করুন" এ ক্লিক করুন এবং তারপরে প্রকল্প আইডি সেট করতে gcloud cli কমান্ডটি চালান। কমান্ড চালানোর আগে আপনার qwiklabs প্রকল্প আইডি দিয়ে নীচের নমুনা প্রকল্প আইডি প্রতিস্থাপন করুন।
gcloud config set project qwiklabs-gcp-project-id
  1. ক্লাউড ওয়ার্কস্টেশন কনফিগারেশন তৈরি করতে টার্মিনালে নীচের স্ক্রিপ্টটি ডাউনলোড করুন এবং চালান।
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
  1. কনফিগারেশন বিভাগের অধীনে ফলাফল যাচাই করুন। এটি প্রস্তুত স্থিতিতে রূপান্তর করতে 2 মিনিট সময় নেবে৷

2e23c2e9983d1ccf.png

  1. কনসোলে ক্লাউড ওয়ার্কস্টেশন খুলুন এবং নতুন উদাহরণ তৈরি করুন।

a53adeeac81a78c8.png

  1. my-workstation নাম পরিবর্তন করুন এবং বিদ্যমান কনফিগারেশন নির্বাচন করুন: codeoss-python

f052cd47701ec774.png

  1. ওয়ার্কস্টেশন বিভাগের অধীনে ফলাফল যাচাই করুন।

ওয়ার্কস্টেশন চালু করুন

  1. ওয়ার্কস্টেশন শুরু করুন এবং চালু করুন। ওয়ার্কস্টেশন শুরু হতে কয়েক মিনিট সময় লাগবে।

682f8a307032cba3.png

  1. ঠিকানা বারে আইকনে ক্লিক করে তৃতীয় পক্ষের কুকিজকে অনুমতি দিন। 1b8923e2943f9bc4.png

fcf9405b6957b7d7.png

  1. "সাইট কাজ করছে না?" ক্লিক করুন।

36a84c0e2e3b85b.png

  1. "কুকিজ অনুমতি দিন" ক্লিক করুন।

2259694328628fba.png

  1. ওয়ার্কস্টেশন চালু হলে আপনি কোড OSS IDE দেখতে পাবেন। ওয়ার্কস্টেশন IDE-এর প্রথম পৃষ্ঠায় "সম্পন্ন চিহ্নিত করুন"-এ ক্লিক করুন

94874fba9b74cc22.png

3. একটি নতুন পাইথন স্টার্টার অ্যাপ্লিকেশন তৈরি করুন

এই বিভাগে আপনি একটি নতুন পাইথন অ্যাপ্লিকেশন তৈরি করবেন।

  1. একটি নতুন টার্মিনাল খুলুন।

c31d48f2e4938c38.png

  1. একটি নতুন ডিরেক্টরি তৈরি করুন এবং এটি একটি ওয়ার্কস্পেস হিসাবে খুলুন
mkdir music-service && cd music-service

code-oss-cloud-workstations -r --folder-uri="$PWD"

আপনি যদি এই বার্তাটি দেখতে পান তবে অনুমতি বোতামে ক্লিক করুন, যাতে আপনি ওয়ার্কস্টেশনে কপি পেস্ট করতে পারেন।

58149777e5cc350a.png

  1. requirements.txt নামে একটি ফাইল তৈরি করুন এবং এতে নিম্নলিখিত বিষয়বস্তু অনুলিপি করুন

789e8389170bd900.png

Flask
gunicorn
google-cloud-spanner
ptvsd==4.3.2
  1. app.py নামে একটি ফাইল তৈরি করুন এবং এতে নিম্নলিখিত কোডটি পেস্ট করুন
import os
from flask import Flask, request, jsonify
from google.cloud import spanner

app = Flask(__name__)

@app.route("/")
def hello_world():
    message="Hello, World!"
    return message

if __name__ == '__main__':
    server_port = os.environ.get('PORT', '8080')
    app.run(debug=False, port=server_port, host='0.0.0.0')

  1. Dockerfile নামে একটি ফাইল তৈরি করুন এবং এতে নিম্নলিখিতটি পেস্ট করুন
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]

দ্রষ্টব্য : FLASK_DEBUG=1 আপনাকে পাইথন ফ্লাস্ক অ্যাপে কোড পরিবর্তন স্বয়ংক্রিয়ভাবে পুনরায় লোড করতে দেয়। এই ডকারফাইল আপনাকে বিল্ড আর্গুমেন্ট হিসাবে এই মানটি পাস করতে দেয়।

ম্যানিফেস্ট তৈরি করুন

আপনার টার্মিনালে একটি ডিফল্ট skaffold.yaml এবং deployment.yaml তৈরি করতে নিম্নলিখিত কমান্ডটি চালান

  1. নিম্নলিখিত কমান্ড দিয়ে Skaffold শুরু করুন
skaffold init --generate-manifests

প্রম্পট করা হলে আপনার কার্সার সরানোর জন্য তীরচিহ্ন এবং বিকল্পগুলি নির্বাচন করতে স্পেসবার ব্যবহার করুন৷

পছন্দ করা:

  • পোর্টের জন্য 8080
  • y কনফিগারেশন সংরক্ষণ করতে

স্ক্যাফোল্ড কনফিগারেশন আপডেট করুন

  • ডিফল্ট অ্যাপ্লিকেশন নাম পরিবর্তন করুন
  • skaffold.yaml খুলুন
  • বর্তমানে dockerfile-image হিসাবে সেট করা ছবির নাম নির্বাচন করুন
  • রাইট ক্লিক করুন এবং সমস্ত ঘটনা পরিবর্তন করুন নির্বাচন করুন
  • python-app হিসাবে নতুন নাম টাইপ করুন
  • বিল্ড বিভাগটি আরও সম্পাদনা করুন
  • FLASK_DEBUG=1 পাস করতে docker.buildArgs যোগ করুন
  • IDE থেকে চলমান কন্টেইনারে *.py ফাইলে যেকোনো পরিবর্তন লোড করতে সিঙ্ক সেটিংস

সম্পাদনা করার পরে, skaffold.yaml ফাইলের বিল্ড বিভাগটি নিম্নরূপ হবে:

build:
 artifacts:
 - image: python-app
   docker:
     buildArgs:
       FLASK_DEBUG: "1"
     dockerfile: Dockerfile
   sync:
     infer:
     - '**/*.py'

Kubernetes কনফিগারেশন ফাইল পরিবর্তন করুন

  1. ডিফল্ট নাম পরিবর্তন করুন
  • deployment.yaml ফাইল খুলুন
  • বর্তমানে dockerfile-image হিসাবে সেট করা ছবির নাম নির্বাচন করুন
  • রাইট ক্লিক করুন এবং সমস্ত ঘটনা পরিবর্তন করুন নির্বাচন করুন
  • python-app হিসাবে নতুন নাম টাইপ করুন

4. উন্নয়ন প্রক্রিয়ার মধ্য দিয়ে হাঁটা

ব্যবসায়িক যুক্তি যোগ করার সাথে আপনি এখন আপনার অ্যাপ্লিকেশন স্থাপন এবং পরীক্ষা করতে পারেন। নিম্নলিখিত বিভাগটি ক্লাউড কোড প্লাগইন ব্যবহার প্রদর্শন করবে। অন্যান্য জিনিসের মধ্যে, এই প্লাগইনটি আপনার উন্নয়ন প্রক্রিয়াকে স্ট্রীমলাইন করতে স্ক্যাফোল্ডের সাথে সংহত করে। আপনি যখন নিম্নলিখিত ধাপে GKE-তে স্থাপন করবেন, ক্লাউড কোড এবং Skaffold স্বয়ংক্রিয়ভাবে আপনার কন্টেইনার ইমেজ তৈরি করবে, এটি একটি কন্টেইনার রেজিস্ট্রিতে ঠেলে দেবে এবং তারপর GKE-তে your অ্যাপ্লিকেশন স্থাপন করবে। এটি বিকাশকারীর প্রবাহ থেকে বিশদ বিবরণকে বিমূর্ত করে পর্দার আড়ালে ঘটে।

গুগল ক্লাউডে সাইন ইন করুন

  1. ক্লাউড কোড আইকনে ক্লিক করুন এবং "গুগল ক্লাউডে সাইন ইন করুন" নির্বাচন করুন:

1769afd39be372ff.png

  1. "সাইন ইন করতে এগিয়ে যান" এ ক্লিক করুন।

923bb1c8f63160f9.png

  1. টার্মিনালে আউটপুট পরীক্ষা করুন এবং লিঙ্কটি খুলুন:

517fdd579c34aa21.png

  1. আপনার Qwiklabs ছাত্রদের শংসাপত্র দিয়ে লগইন করুন।

db99b345f7a8e72c.png

  1. "অনুমতি দিন" নির্বাচন করুন:

a5376553c430ac84.png

  1. যাচাইকরণ কোড কপি করুন এবং ওয়ার্কস্টেশন ট্যাবে ফিরে যান।

6719421277b92eac.png

  1. যাচাইকরণ কোড পেস্ট করুন এবং এন্টার টিপুন।

e9847cfe3fa8a2ce.png

কুবারনেটস ক্লাস্টার যোগ করুন

  1. একটি ক্লাস্টার যোগ করুন

62a3b97bdbb427e5.png

  1. Google Kubernetes ইঞ্জিন নির্বাচন করুন:

9577de423568bbaa.png

  1. প্রকল্প নির্বাচন করুন।

c5202fcbeebcd41c.png

  1. প্রাথমিক সেটআপে তৈরি করা "পাইথন-ক্লাস্টার" নির্বাচন করুন।

719c2fc0a7f9e84f.png

  1. ক্লাস্টারটি এখন ক্লাউড কোডের অধীনে কুবারনেটস ক্লাস্টার তালিকায় দেখা যাচ্ছে। নেভিগেট করুন এবং এখান থেকে ক্লাস্টারটি অন্বেষণ করুন।

7e5f50662d4eea3c.png

gcloud cli ব্যবহার করে বর্তমান প্রকল্প আইডি সেট করুন

  1. qwiklabs পৃষ্ঠা থেকে এই ল্যাবের জন্য প্রজেক্ট আইডি কপি করুন।

fcff2d10007ec5bc.png

  1. টার্মিনাল থেকে, প্রকল্প আইডি সেট করতে gcloud cli কমান্ড চালান। কমান্ড চালানোর আগে নমুনা প্রকল্প আইডি প্রতিস্থাপন করুন। নীচের কমান্ডটি চালানোর আগে প্রকল্প আইডিটি প্রতিস্থাপন করুন।
gcloud config set project qwiklabs-gcp-project-id

কুবারনেটে স্থাপন করুন

  1. ক্লাউড শেল এডিটরের নীচের প্যানে, ক্লাউড কোড  নির্বাচন করুন

d99a88992e15fea9.png

  1. শীর্ষে প্রদর্শিত প্যানেলে, কুবারনেটে চালান নির্বাচন করুন.. যদি অনুরোধ করা হয়, বর্তমান কুবারনেটস প্রসঙ্গ ব্যবহার করতে হ্যাঁ নির্বাচন করুন।

bfd65e9df6d4a6cb.png

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

  1. আপনি যখন প্রথমবার কমান্ডটি চালাবেন তখন স্ক্রিনের শীর্ষে একটি প্রম্পট উপস্থিত হবে যা জিজ্ঞাসা করবে যে আপনি বর্তমান কুবারনেট প্রসঙ্গটি চান কিনা, বর্তমান প্রসঙ্গটি গ্রহণ করতে এবং ব্যবহার করতে "হ্যাঁ" নির্বাচন করুন।
  2. পরবর্তীতে কোন কন্টেইনার রেজিস্ট্রি ব্যবহার করতে হবে তা জিজ্ঞাসা করে একটি প্রম্পট প্রদর্শিত হবে। প্রদত্ত ডিফল্ট মান গ্রহণ করতে এন্টার টিপুন
  3. অগ্রগতি এবং বিজ্ঞপ্তিগুলি দেখতে নীচের ফলকে "আউটপুট" ট্যাবটি নির্বাচন করুন৷ ড্রপডাউন ব্যবহার করে "কুবারনেটস: রান/ডিবাগ" নির্বাচন করুন

9c87ccbf5d06f50a.png

  1. কনটেইনারগুলি থেকে লাইভ স্ট্রিমিং অতিরিক্ত বিবরণ এবং লগগুলি দেখতে ডানদিকে ড্রপ ডাউন চ্যানেলে "কুবারনেটস: রান/ডিবাগ - বিস্তারিত" নির্বাচন করুন

804abc8833ffd571.png

যখন বিল্ড এবং পরীক্ষা করা হয়, আউটপুট ট্যাব লগগুলিতে URL থাকবে http://localhost:8080 "Kubernetes: Run/Debug" ভিউতে তালিকাভুক্ত।

  1. ক্লাউড কোড টার্মিনালে, আউটপুট (http://localhost:8080) এর প্রথম URL-এর উপর হোভার করুন এবং তারপরে টুল টিপে প্রদর্শিত ওয়েব প্রিভিউ নির্বাচন করুন।
  2. একটি নতুন ব্রাউজার ট্যাব খুলবে এবং Hello, World!

হট রিলোড

  1. app.py ফাইলটি খুলুন
  2. Hello from Python শুভেচ্ছা বার্তা পরিবর্তন করুন

অবিলম্বে লক্ষ্য করুন যে Output উইন্ডোতে, Kubernetes: Run/Debug ভিউ, পর্যবেক্ষক আপডেট করা ফাইলগুলি কুবারনেটসের কন্টেইনারের সাথে সিঙ্ক করে

Update initiated
Build started for artifact python-app
Build completed for artifact python-app

Deploy started
Deploy completed

Status check started
Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress
Resource deployment/python-app status updated to In Progress
Resource deployment/python-app status completed successfully
Status check succeeded
...
  1. আপনি যদি Kubernetes: Run/Debug - Detailed ভিউ, আপনি লক্ষ্য করবেন এটি ফাইলের পরিবর্তনগুলি স্বীকার করে তারপর অ্যাপটি তৈরি করে এবং পুনরায় স্থাপন করে
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
  1. আপডেট করা ফলাফল দেখতে আপনার ব্রাউজার ট্যাব রিফ্রেশ করুন যেখানে আপনি আগের ফলাফল দেখেছেন।

ডিবাগিং

  1. ডিবাগ ভিউতে যান এবং বর্তমান থ্রেড বন্ধ করুন 647213126d7a4c7b.png . যদি এটি জিজ্ঞাসা করে, আপনি প্রতিটি রানের পরে পরিষ্কার করতে বেছে নিতে পারেন।
  2. 70d6bd947d04d1e6.png
  3. নীচের মেনুতে Cloud Code ক্লিক করুন এবং debug মোডে অ্যাপ্লিকেশনটি চালানোর জন্য Debug on Kubernetes নির্বাচন করুন।
  • Kubernetes Run/Debug - Detailed Output উইন্ডোর বিশদ দৃশ্যে, লক্ষ্য করুন যে skaffold এই অ্যাপ্লিকেশনটিকে ডিবাগ মোডে স্থাপন করবে।
  1. প্রক্রিয়া সম্পন্ন হলে. আপনি একটি ডিবাগার সংযুক্ত দেখতে পাবেন এবং আউটপুট ট্যাব বলছে: Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully. , এবং URL http://localhost:8080 তালিকাভুক্ত।
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
  1. নীচের স্ট্যাটাস বারটি নীল থেকে কমলা রঙে পরিবর্তন করে যে এটি ডিবাগ মোডে রয়েছে।
  2. Kubernetes Run/Debug ভিউতে, লক্ষ্য করুন যে একটি ডিবাগযোগ্য ধারক শুরু হয়েছে
**************URLs*****************
Forwarded URL from service python-app: http://localhost:8080
Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default)
Update succeeded
***********************************

ব্রেকপয়েন্ট ব্যবহার করুন

  1. app.py ফাইলটি খুলুন
  2. বিবৃতিটি সনাক্ত করুন যা return message পড়ে
  3. লাইন নম্বরের বাম দিকের ফাঁকা জায়গায় ক্লিক করে সেই লাইনে একটি ব্রেকপয়েন্ট যোগ করুন। ব্রেকপয়েন্ট সেট করা হয়েছে লক্ষ্য করার জন্য একটি লাল সূচক দেখাবে
  4. প্রথমবার এটি চালানো হলে একটি প্রম্পট জিজ্ঞাসা করবে কন্টেইনারের ভিতরে উৎস কোথায়। এই মানটি ডকারফাইলের ডিরেক্টরিগুলির সাথে সম্পর্কিত।

ডিফল্ট গ্রহণ করতে এন্টার টিপুন

fccc866f32b5ed86.png

অ্যাপ্লিকেশনটি তৈরি এবং স্থাপন করতে কয়েক মিনিট সময় লাগবে৷

  1. আপনার ব্রাউজার পুনরায় লোড করুন এবং নোট করুন ডিবাগার ব্রেকপয়েন্টে প্রক্রিয়াটি বন্ধ করে দেয় এবং আপনাকে GKE-তে দূরবর্তীভাবে চলমান অ্যাপ্লিকেশনের ভেরিয়েবল এবং অবস্থা তদন্ত করতে দেয়
  2. ভেরিয়েবল বিভাগে নিচে ক্লিক করুন
  3. স্থানীয়দের ক্লিক করুন সেখানে আপনি "message" ভেরিয়েবলটি পাবেন।
  4. "মেসেজ" ভেরিয়েবল নামের উপর ডাবল ক্লিক করুন এবং পপআপে, "Greetings from Python" এর মত ভিন্ন কিছুতে মান পরিবর্তন করুন।
  5. ডিবাগ কন্ট্রোল প্যানেলে Continue বাটনে ক্লিক করুন 607c33934f8d6b39.png
  6. আপনার ব্রাউজারে প্রতিক্রিয়া পর্যালোচনা করুন যা এখন আপনার প্রবেশ করা আপডেট করা মান দেখায়।
  7. স্টপ বোতাম টিপে "ডিবাগ" মোড বন্ধ করুন 647213126d7a4c7b.png এবং ব্রেকপয়েন্টে আবার ক্লিক করে ব্রেকপয়েন্টটি সরিয়ে ফেলুন।

5. একটি সাধারণ CRUD বিশ্রাম পরিষেবা বিকাশ করা

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

বাকি পরিষেবা কোড করুন

নীচের কোডটি একটি সাধারণ বিশ্রাম পরিষেবা তৈরি করে যা অ্যাপ্লিকেশনটিকে সমর্থনকারী ডাটাবেস হিসাবে স্প্যানার ব্যবহার করে। আপনার অ্যাপ্লিকেশনে নিম্নলিখিত কোডটি অনুলিপি করে অ্যাপ্লিকেশনটি তৈরি করুন।

  1. নিম্নলিখিত বিষয়বস্তু দিয়ে app.py প্রতিস্থাপন করে প্রধান অ্যাপ্লিকেশন তৈরি করুন
import os
from flask import Flask, request, jsonify
from google.cloud import spanner


app = Flask(__name__)


instance_id = "music-catalog"

database_id = "musicians"

spanner_client = spanner.Client()
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)


@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"

@app.route('/singer', methods=['POST'])
def create():
    try:
        request_json = request.get_json()
        singer_id = request_json['singer_id']
        first_name = request_json['first_name']
        last_name = request_json['last_name']
        def insert_singers(transaction):
            row_ct = transaction.execute_update(
                f"INSERT Singers (SingerId, FirstName, LastName) VALUES" \
                f"({singer_id}, '{first_name}', '{last_name}')"
            )
            print("{} record(s) inserted.".format(row_ct))

        database.run_in_transaction(insert_singers)

        return {"Success": True}, 200
    except Exception as e:
        return e



@app.route('/singer', methods=['GET'])
def get_singer():

    try:
        singer_id = request.args.get('singer_id')
        def get_singer():
            first_name = ''
            last_name = ''
            with database.snapshot() as snapshot:
                results = snapshot.execute_sql(
                    f"SELECT SingerId, FirstName, LastName FROM Singers " \
                    f"where SingerId = {singer_id}",
                    )
                for row in results:
                    first_name = row[1]
                    last_name = row[2]
                return (first_name,last_name )
        first_name, last_name = get_singer()  
        return {"first_name": first_name, "last_name": last_name }, 200
    except Exception as e:
        return e


@app.route('/singer', methods=['PUT'])
def update_singer_first_name():
    try:
        singer_id = request.args.get('singer_id')
        request_json = request.get_json()
        first_name = request_json['first_name']
        
        def update_singer(transaction):
            row_ct = transaction.execute_update(
                f"UPDATE Singers SET FirstName = '{first_name}' WHERE SingerId = {singer_id}"
            )

            print("{} record(s) updated.".format(row_ct))

        database.run_in_transaction(update_singer)
        return {"Success": True}, 200
    except Exception as e:
        return e


@app.route('/singer', methods=['DELETE'])
def delete_singer():
    try:
        singer_id = request.args.get('singer')
    
        def delete_singer(transaction):
            row_ct = transaction.execute_update(
                f"DELETE FROM Singers WHERE SingerId = {singer_id}"
            )
            print("{} record(s) deleted.".format(row_ct))

        database.run_in_transaction(delete_singer)
        return {"Success": True}, 200
    except Exception as e:
        return e

port = int(os.environ.get('PORT', 8080))
if __name__ == '__main__':
    app.run(threaded=True, host='0.0.0.0', port=port)

ডাটাবেস কনফিগারেশন যোগ করুন

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

  1. deployment.yaml আপডেট করুন। ফাইলের শেষে নিম্নলিখিত কোডটি যোগ করুন (নিশ্চিত করুন যে আপনি নীচের উদাহরণে ট্যাব ইন্ডেন্টগুলি রেখেছেন)
      serviceAccountName: python-ksa
      nodeSelector:
        iam.gke.io/gke-metadata-server-enabled: "true" 

পরিবর্তনের পরে স্পেক বিভাগটি এইরকম হওয়া উচিত

   spec:
     containers:
     - name: python-app
       image: python-app
     serviceAccountName: python-ksa
     nodeSelector:
       iam.gke.io/gke-metadata-server-enabled: "true"

প্রয়োগ করুন এবং আবেদন যাচাই করুন

  1. ক্লাউড শেল এডিটরের নীচের প্যানে, Cloud Code নির্বাচন করুন তারপর পর্দার শীর্ষে Debug on Kubernetes নির্বাচন করুন।
  2. যখন বিল্ড এবং পরীক্ষা করা হয়, আউটপুট ট্যাব বলে: Resource deployment/python-app status completed successfully এবং একটি url তালিকাভুক্ত করা হয়েছে: "পরিষেবা পাইথন-অ্যাপ থেকে ফরওয়ার্ড করা URL: http://localhost:8080"
  3. এন্ট্রি একটি দম্পতি যোগ করুন.

ক্লাউডশেল টার্মিনাল থেকে, নীচের কমান্ডটি চালান

curl -X POST http://localhost:8080/singer -H 'Content-Type: application/json' -d '{"first_name":"Cat","last_name":"Meow", "singer_id": 6}'
  1. টার্মিনালে নীচের কমান্ডটি চালিয়ে GET পরীক্ষা করুন
curl -X GET http://localhost:8080/singer?singer_id=6
  1. পরীক্ষা মুছে ফেলুন: এখন নিম্নলিখিত কমান্ডটি চালিয়ে একটি এন্ট্রি মুছে ফেলার চেষ্টা করুন। প্রয়োজনে আইটেম-আইডির মান পরিবর্তন করুন।
curl -X DELETE http://localhost:8080/singer?singer_id=6
    This throws an error message
500 Internal Server Error

সমস্যাটি চিহ্নিত করুন এবং সমাধান করুন

  1. ডিবাগ মোড এবং সমস্যা খুঁজুন। এখানে কিছু টিপস আছে:
  • আমরা জানি মুছে ফেলার সাথে কিছু ভুল আছে কারণ এটি পছন্দসই ফলাফল ফিরিয়ে দিচ্ছে না। তাই আপনি delete_singer পদ্ধতিতে app.py এ ব্রেকপয়েন্ট সেট করবেন।
  • ধাপে ধাপে এক্সিকিউশন চালান এবং বাম উইন্ডোতে স্থানীয় ভেরিয়েবলের মান পর্যবেক্ষণ করতে প্রতিটি ধাপে ভেরিয়েবলগুলি দেখুন।
  • নির্দিষ্ট মান যেমন singer_id এবং request.args দেখতে দেখতে এই ভেরিয়েবলগুলিকে ওয়াচ উইন্ডোতে যুক্ত করুন।
  1. লক্ষ্য করুন যে singer_id এর জন্য নির্ধারিত মানটি None । সমস্যা সমাধানের জন্য কোড পরিবর্তন করুন।

স্থির কোড স্নিপেট এই মত হবে.

@app.route('/delete-singer', methods=['DELETE', 'GET'])
def delete_singer():
    try:
        singer_id = request.args.get('singer_id')
  1. একবার অ্যাপ্লিকেশনটি পুনরায় চালু হলে, মুছে ফেলার চেষ্টা করে আবার পরীক্ষা করুন।
  2. ডিবাগ টুলবারে লাল বর্গক্ষেত্রে ক্লিক করে ডিবাগিং সেশন বন্ধ করুন 647213126d7a4c7b.png

6. পরিষ্কার করা

অভিনন্দন! এই ল্যাবে আপনি স্ক্র্যাচ থেকে একটি নতুন পাইথন অ্যাপ্লিকেশন তৈরি করেছেন এবং কনটেইনারগুলির সাথে কার্যকরভাবে কাজ করার জন্য এটি কনফিগার করেছেন৷ তারপরে আপনি প্রথাগত অ্যাপ্লিকেশন স্ট্যাকগুলিতে পাওয়া একই বিকাশকারী প্রবাহ অনুসরণ করে একটি দূরবর্তী GKE ক্লাস্টারে আপনার অ্যাপ্লিকেশন স্থাপন এবং ডিবাগ করেছেন।

ল্যাব শেষ করার পরে পরিষ্কার করতে:

  1. ল্যাবে ব্যবহৃত ফাইলগুলি মুছুন
cd ~ && rm -rf ~/music-service
  1. সমস্ত সম্পর্কিত অবকাঠামো এবং সংস্থানগুলি সরাতে প্রকল্পটি মুছুন৷