ভার্টেক্স এআই পাইপলাইন পিএসসি ইন্টারফেস স্পষ্ট প্রক্সি

১. ভূমিকা

একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস হলো এমন একটি রিসোর্স যা একটি প্রডিউসার ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্ককে কনজিউমার VPC নেটওয়ার্কের বিভিন্ন গন্তব্যে সংযোগ স্থাপন করতে দেয়। প্রডিউসার এবং কনজিউমার নেটওয়ার্কগুলো ভিন্ন ভিন্ন প্রজেক্ট এবং প্রতিষ্ঠানে থাকতে পারে।

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

একটি নেটওয়ার্ক অ্যাটাচমেন্ট এবং একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেসের মধ্যেকার সংযোগ, একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট এবং একটি সার্ভিস অ্যাটাচমেন্টের মধ্যেকার সংযোগের অনুরূপ, কিন্তু এর দুটি প্রধান পার্থক্য রয়েছে:

  • একটি নেটওয়ার্ক অ্যাটাচমেন্ট একটি প্রডিউসার নেটওয়ার্ককে কনজিউমার নেটওয়ার্কের সাথে সংযোগ স্থাপন করতে দেয় (ম্যানেজড সার্ভিস ইগ্রেস), অন্যদিকে একটি এন্ডপয়েন্ট একটি কনজিউমার নেটওয়ার্ককে প্রডিউসার নেটওয়ার্কের সাথে সংযোগ স্থাপন করতে দেয় (ম্যানেজড সার্ভিস ইনগ্রেস)।
  • একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সংযোগ ট্রানজিটিভ। এর মানে হলো, একটি প্রডিউসার নেটওয়ার্ক কনজিউমার নেটওয়ার্কের সাথে সংযুক্ত অন্যান্য নেটওয়ার্কের সাথে যোগাযোগ করতে পারে।

ভার্টেক্স এআই পিএসসি-ইন্টারফেসের পৌঁছানোর যোগ্যতার বিবেচ্য বিষয়সমূহ

  • PSC-ইন্টারফেস RFC1918 অ্যাড্রেস ব্লকের মধ্যে VPC অথবা অন-প্রেমেসিস ভিত্তিক গন্তব্যে ট্র্যাফিক রাউটিং করতে সক্ষম।
  • নন-আরএফসি-১৯১৮ অ্যাড্রেস ব্লক টার্গেটকারী পিএসসি-ইন্টারফেসের জন্য গ্রাহকের ভিপিসিতে একটি আরএফসি-১৯১৮ অ্যাড্রেসসহ একটি সুস্পষ্ট প্রক্সি স্থাপন করা প্রয়োজন। ভার্টেক্স এআই ডেপ্লয়মেন্টের মধ্যে, টার্গেট এন্ডপয়েন্টের একটি এফকিউডিএন-এর সাথে প্রক্সিটি অবশ্যই সংজ্ঞায়িত করতে হবে। চিত্র ১ দেখুন, যা গ্রাহকদের ভিপিসিতে নিম্নলিখিত নন-আরএফসি-১৯১৮ সিআইডিআর-গুলোতে রাউটিং সহজতর করার জন্য কনফিগার করা সুস্পষ্ট প্রক্সিটি উপস্থাপন করে:

[1] 240.0.0.0/4

[2] 203.0.113.0/2

[3]10.10.20.0/28 কোন প্রক্সির প্রয়োজন নেই, rfc1918 পরিসরের অন্তর্গত।

  • যখন আপনি শুধুমাত্র একটি PSC ইন্টারফেস দিয়ে আপনার ডেপ্লয়মেন্ট কনফিগার করেন, তখন এটি তার ডিফল্ট ইন্টারনেট অ্যাক্সেস বজায় রাখে। এই আউটবাউন্ড ট্র্যাফিক সরাসরি সুরক্ষিত, গুগল-পরিচালিত টেন্যান্ট নেটওয়ার্ক থেকে নির্গত হয়।

476f87a96f153b95.png

ভার্টেক্স এআই পিএসসি-ইন্টারফেস ভিপিসি-এসসি বিবেচ্য বিষয়সমূহ

  • যখন আপনার প্রজেক্ট একটি VPC সার্ভিস কন্ট্রোলস পেরিমিটারের অংশ হয়, তখন ডেটা পাচার রোধ করার জন্য পেরিমিটারটি গুগল-পরিচালিত টেন্যান্টদের ডিফল্ট ইন্টারনেট অ্যাক্সেস ব্লক করে দেয়।
  • এই পরিস্থিতিতে ডেপ্লয়মেন্টটিকে পাবলিক ইন্টারনেটে অ্যাক্সেস দেওয়ার জন্য, আপনাকে অবশ্যই একটি সুরক্ষিত বহির্গমন পথ (secure egress path) স্পষ্টভাবে কনফিগার করতে হবে যা আপনার VPC-এর মাধ্যমে ট্র্যাফিক রাউট করবে। এটি করার জন্য প্রস্তাবিত উপায় হলো, আপনার VPC পরিধির ভিতরে একটি RFC1918 অ্যাড্রেস সহ একটি প্রক্সি সার্ভার সেট আপ করা এবং প্রক্সি ভিএম-কে ইন্টারনেট অ্যাক্সেস করার অনুমতি দেওয়ার জন্য একটি ক্লাউড ন্যাট গেটওয়ে (Cloud NAT gateway) তৈরি করা।

অতিরিক্ত তথ্যের জন্য, নিম্নলিখিত উৎসগুলো দেখুন:

ভার্টেক্স এআই রিসোর্সগুলির জন্য একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সেট আপ করুন | গুগল ক্লাউড

আপনি যা তৈরি করবেন

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

চিত্র ২

782ba8f1f3c3f522.png

আপনি কনজিউমার ভিপিসিতে (VPC) ডিএনএস পিয়ারিং (DNS peering) ব্যবহার করে একটিমাত্র পিএসসি-নেটওয়ার্ক-অ্যাটাচমেন্ট (psc-network-attachment) তৈরি করবেন, যা ভার্টেক্স এআই ট্রেনিং (Vertex AI Training) হোস্টিং করা টেন্যান্ট প্রজেক্টে থাকা কনজিউমার ভিএমগুলোকে (VMs) রিজলভ (resolve) করবে এবং এর ফলে নিম্নলিখিত ব্যবহারের ক্ষেত্রগুলো (use cases) তৈরি হবে:

  1. Vertex AI Pipelines স্থাপন করুন এবং একটি প্রক্সি ভিএম-কে এক্সপ্লিসিট প্রক্সি হিসেবে কনফিগার করুন, যা এটিকে ক্লাস E সাবনেটের একটি ভিএম-এর বিরুদ্ধে wget অপারেশন চালানোর অনুমতি দেবে।

আপনি যা শিখবেন

  • কীভাবে একটি নেটওয়ার্ক সংযুক্তি তৈরি করবেন
  • একজন প্রযোজক কীভাবে নেটওয়ার্ক অ্যাটাচমেন্ট ব্যবহার করে একটি PSC ইন্টারফেস তৈরি করতে পারেন
  • DNS Peering ব্যবহার করে প্রডিউসার থেকে কনজিউমারের কাছে কীভাবে যোগাযোগ স্থাপন করা যায়
  • ভার্টেক্স এআই পাইপলাইন থেকে নন-আরএফসি১৯১৮ আইপি অ্যাড্রেস স্পেসে কীভাবে যোগাযোগ স্থাপন করা যায়

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

গুগল ক্লাউড প্রজেক্ট

আইএএম অনুমতি

২. শুরু করার আগে

টিউটোরিয়ালটি সমর্থন করার জন্য প্রজেক্টটি আপডেট করুন।

এই টিউটোরিয়ালটিতে ক্লাউড শেলে gcloud কনফিগারেশন বাস্তবায়নে সাহায্য করার জন্য $variables ব্যবহার করা হয়েছে।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

এপিআই সক্ষমকরণ

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "dns.googleapis.com"
gcloud services enable "notebooks.googleapis.com"
gcloud services enable "storage.googleapis.com"
gcloud services enable "cloudresourcemanager.googleapis.com"
gcloud services enable "artifactregistry.googleapis.com"
gcloud services enable "cloudbuild.googleapis.com"

৩. গ্রাহক সেটআপ

কনজিউমার ভিপিসি তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom

কনজিউমার সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks subnets create class-e-subnet --project=$projectid --range=240.0.0.0/4 --network=consumer-vpc --region=us-central1

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks subnets create rfc1918-subnet1 --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=us-central1

প্রাইভেট সার্ভিস কানেক্ট নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1

ক্লাউড রাউটার এবং NAT কনফিগারেশন

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

ক্লাউড শেলের ভিতরে ক্লাউড রাউটারটি তৈরি করুন।

gcloud compute routers create cloud-router-for-nat --network consumer-vpc --region us-central1

ক্লাউড শেলের ভিতরে NAT গেটওয়ে তৈরি করুন।

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1 --enable-logging --log-filter=ALL

৪. আইএপি সক্রিয় করুন

আপনার VM ইনস্ট্যান্সগুলিতে IAP-কে সংযোগ করার অনুমতি দিতে, এমন একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা:

  • এটি সেই সমস্ত VM ইনস্ট্যান্সের ক্ষেত্রে প্রযোজ্য, যেগুলোকে আপনি IAP ব্যবহার করে অ্যাক্সেসযোগ্য করতে চান।
  • 35.235.240.0/20 আইপি রেঞ্জ থেকে ইনগ্রেস ট্র্যাফিকের অনুমতি দেয়। এই রেঞ্জে সেই সমস্ত আইপি অ্যাড্রেস রয়েছে যা IAP টিসিপি ফরওয়ার্ডিংয়ের জন্য ব্যবহার করে।

ক্লাউড শেলের ভিতরে IAP ফায়ারওয়াল নিয়মটি তৈরি করুন।

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

৫. কনজিউমার ভিএম ইনস্ট্যান্স তৈরি করুন

ক্লাউড শেলের ভিতরে, class-e-vm নামে কনজিউমার ভিএম ইনস্ট্যান্সটি তৈরি করুন।

gcloud compute instances create class-e-vm \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --shielded-secure-boot \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=class-e-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Class-e server !!' | tee /var/www/html/index.html
      EOF"

ক্লাউড শেলের মধ্যে, প্রক্সি-ভিএম (proxy-vm) নামে কনজিউমার ভিএম ইনস্ট্যান্সটি তৈরি করুন, যা ভার্টেক্স এআই পাইপলাইনস (Vertex AI Pipelines)-এর জন্য সুস্পষ্ট প্রক্সি হিসেবে কাজ করবে। আমরা HTTP ট্র্যাফিক প্রক্সি করার জন্য অ্যাপ্লিকেশন হিসেবে টাইনিপ্রক্সি (tinyproxy) ব্যবহার করব, যদিও HTTPS-ও সমর্থিত।

gcloud compute instances create proxy-vm \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --can-ip-forward \
    --shielded-secure-boot \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=rfc1918-subnet1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install tinyproxy -y
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'proxy server !!' | tee /var/www/html/index.html
      EOF"

৬. ব্যক্তিগত সার্ভিস কানেক্ট নেটওয়ার্ক সংযুক্তি

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

নেটওয়ার্ক সংযুক্তি তৈরি করুন

ক্লাউড শেলের ভিতরে নেটওয়ার্ক অ্যাটাচমেন্টটি তৈরি করুন।

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_AUTOMATIC \
    --subnets=intf-subnet

নেটওয়ার্ক সংযুক্তিগুলির তালিকা করুন

ক্লাউড শেলের ভিতরে নেটওয়ার্ক অ্যাটাচমেন্টটি তালিকাভুক্ত করুন।

gcloud compute network-attachments list

নেটওয়ার্ক সংযুক্তিগুলি বর্ণনা করুন

ক্লাউড শেলের ভিতরে নেটওয়ার্ক সংযুক্তিটি বর্ণনা করুন।

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

psc-network-attachment নামটি নোট করে রাখুন, যা প্রডিউসার প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস তৈরি করার সময় ব্যবহার করবে।

ক্লাউড কনসোলে PSC নেটওয়ার্ক অ্যাটাচমেন্ট URL দেখতে, নিম্নলিখিত লিঙ্কে যান:

নেটওয়ার্ক পরিষেবা → ব্যক্তিগত পরিষেবা সংযোগ → নেটওয়ার্ক সংযুক্তি → পিএসসি-নেটওয়ার্ক-সংযুক্তি

e191e54a103d2222.png

৭. ব্যক্তিগত ডিএনএস জোন

আপনি demo.com-এর জন্য একটি ক্লাউড ডিএনএস জোন তৈরি করবেন এবং আপনার ভিএম-গুলোর আইপি অ্যাড্রেস নির্দেশকারী এ রেকর্ড দিয়ে তা পূরণ করবেন। পরবর্তীতে, ভার্টেক্স এআই পাইপলাইনস জবে ডিএনএস পিয়ারিং স্থাপন করা হবে, যা এটিকে কনজিউমারের ডিএনএস রেকর্ডগুলো অ্যাক্সেস করার সুযোগ দেবে।

ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:

gcloud dns --project=$projectid managed-zones create private-dns-codelab --description="" --dns-name="demo.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc"

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

gcloud compute instances describe class-e-vm --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe proxy-vm --zone=us-central1-a | grep  networkIP:

ক্লাউড শেলের ভিতরে, ক্লাস-ই-ভিএম (class-e-vm) ভিএম-এর জন্য রেকর্ড সেট তৈরি করুন এবং আপনার এনভায়রনমেন্টের আউটপুট অনুযায়ী আইপি অ্যাড্রেস আপডেট করা নিশ্চিত করুন।

gcloud dns --project=$projectid record-sets create class-e-vm.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="240.0.0.2"

ক্লাউড শেলের ভিতরে, VM ও proxy-vm-এর জন্য রেকর্ড সেট তৈরি করুন এবং আপনার এনভায়রনমেন্টের আউটপুট অনুযায়ী আইপি অ্যাড্রেস আপডেট করা নিশ্চিত করুন।

gcloud dns --project=$projectid record-sets create proxy-vm.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="10.10.10.2"

PSC ইন্টারফেস থেকে অ্যাক্সেসের অনুমতি দেওয়ার জন্য একটি ক্লাউড ফায়ারওয়াল নিয়ম তৈরি করুন।

পরবর্তী অংশে, এমন একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা PSC নেটওয়ার্ক অ্যাটাচমেন্ট থেকে উৎপন্ন ট্র্যাফিককে কনজিউমারের VPC-তে থাকা RFC1918 কম্পিউট রিসোর্স অ্যাক্সেস করার অনুমতি দেয়।

ক্লাউড শেলে, এমন একটি ইনগ্রেস ফায়ারওয়াল রুল তৈরি করুন যা পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট থেকে প্রক্সি-ভিএম-এ অ্যাক্সেসের অনুমতি দেয়।

gcloud compute firewall-rules create allow-access-to-proxy \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="10.10.0.0/19" \
    --enable-logging

ক্লাউড শেলে এমন একটি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করুন যা প্রক্সি-ভিএম সাবনেট থেকে ক্লাস-ই সাবনেটে অ্যাক্সেসের অনুমতি দেয়।

gcloud compute firewall-rules create allow-access-to-class-e \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="10.10.10.0/28" \
    --destination-ranges="240.0.0.0/4" \
    --enable-logging

৮. সুস্পষ্ট প্রক্সি আপডেট করুন

পরবর্তী অংশে, আপনাকে এক্সপ্লিসিট প্রক্সিতে ssh করে tinyproxy.conf কনফিগারেশন ফাইলটি আপডেট করতে হবে এবং তারপরে একটি রিসেট করতে হবে।

ক্লাউড শেল থেকে

gcloud compute ssh --zone us-central1-a "proxy-vm" --tunnel-through-iap --project $projectid

tinyproxy কনফিগারেশন ফাইলটি খুলুন এবং আপনার পছন্দের কোনো এডিটর ব্যবহার করে এটি আপডেট করুন। নিচে VIM ব্যবহার করে একটি উদাহরণ দেওয়া হলো।

sudo vim /etc/tinyproxy/tinyproxy.conf

# Locate the "Listen" configuration line to restrict listening to only its private IP address of the Proxy-VM, rather than all interfaces. 

Listen 10.10.10.2

# Locate the "Allow" configuration line to allow requests ONLY from the PSC Network Attachment Subnet

Allow 192.168.10.0/24

Save the configs by the following steps:
1. Press the `ESC` key to enter Command Mode.
2. Type `:wq` to save (w) and quit (q).
3. Press `Enter`

Restart the tinyproxy service to apply the changes:
sudo systemctl restart tinyproxy

Validate the tinyproxy service is running:
sudo systemctl status tinyproxy

Perform an exit returning to cloud shell
exit

৯. একটি জুপিটার নোটবুক তৈরি করুন

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

একটি ব্যবহারকারী পরিচালিত পরিষেবা অ্যাকাউন্ট তৈরি করুন

পরবর্তী অংশে, আপনি একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন যা এই টিউটোরিয়ালে ব্যবহৃত Vertex AI Workbench ইনস্ট্যান্সটির সাথে যুক্ত থাকবে।

এই টিউটোরিয়ালে, সার্ভিস অ্যাকাউন্টে নিম্নলিখিত ভূমিকাগুলো প্রয়োগ করা হবে:

ক্লাউড শেলের ভিতরে সার্ভিস অ্যাকাউন্টটি তৈরি করুন।

gcloud iam service-accounts create notebook-sa \
    --display-name="notebook-sa"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটিকে স্টোরেজ অ্যাডমিন রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটিকে 'Vertex AI User' রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

ক্লাউড শেলের ভিতরে, সার্ভিস অ্যাকাউন্টটিকে আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিন রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

ক্লাউড শেলের ভিতরে, ক্লাউড বিল্ড এডিটর রোল দিয়ে সার্ভিস অ্যাকাউন্টটি আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/cloudbuild.builds.editor"

ক্লাউড শেলের ভিতরে, নোটবুক সার্ভিস অ্যাকাউন্টকে কম্পিউট ইঞ্জিনের ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করার অনুমতি দিন।

gcloud iam service-accounts add-iam-policy-binding \
    $(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')-compute@developer.gserviceaccount.com \
    --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" \
    --role="roles/iam.serviceAccountUser"

১০. একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স তৈরি করুন।

পরবর্তী অংশে, পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্ট, notebook-sa-কে অন্তর্ভুক্ত করে একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করুন।

ক্লাউড শেলের ভিতরে প্রাইভেট-ক্লায়েন্ট ইনস্ট্যান্সটি তৈরি করুন।

gcloud workbench instances create workbench-tutorial --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=rfc1918-subnet1 --disable-public-ip --shielded-secure-boot=true --shielded-integrity-monitoring=true --shielded-vtpm=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com

১১. ভার্টেক্স এআই সার্ভিস এজেন্ট আপডেট

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

service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com

ক্লাউড শেলের ভিতরে আপনার প্রজেক্ট নম্বরটি সংগ্রহ করুন।

gcloud projects describe $projectid | grep projectNumber

ক্লাউড শেলের ভিতরে আপনার প্রজেক্ট নম্বরটি সংগ্রহ করুন।

gcloud projects describe $projectid | grep projectNumber
projectNumber: '234086459238'

ক্লাউড শেলের ভিতরে আপনার প্রজেক্ট নম্বরটি সেট করুন।

projectnumber=YOUR-PROJECT-Number

ক্লাউড শেলের ভিতরে, এআই প্ল্যাটফর্মের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন। আপনার প্রোজেক্টে আগে থেকেই কোনো সার্ভিস অ্যাকাউন্ট থাকলে এই ধাপটি এড়িয়ে যান।

gcloud beta services identity create --service=aiplatform.googleapis.com --project=$projectnumber

ক্লাউড শেলের ভিতরে, সার্ভিস এজেন্ট অ্যাকাউন্টটিকে compute.networkAdmin রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"

ক্লাউড শেলের ভিতরে, dns.peer রোল দিয়ে সার্ভিস এজেন্ট অ্যাকাউন্টটি আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/dns.peer"

ডিফল্ট পরিষেবা অ্যাকাউন্ট আপডেট

Compute Engine API সক্রিয় করুন এবং আপনার ডিফল্ট সার্ভিস অ্যাকাউন্টকে Vertex AI-তে অ্যাক্সেস দিন । মনে রাখবেন, অ্যাক্সেস পরিবর্তনটি কার্যকর হতে কিছুটা সময় লাগতে পারে।

ক্লাউড শেলের ভিতরে, ডিফল্ট সার্ভিস অ্যাকাউন্টটিকে aiplatform.user রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/aiplatform.user"

ক্লাউড শেলের ভিতরে, ডিফল্ট সার্ভিস অ্যাকাউন্টটিকে storage.admin রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/storage.admin"

ক্লাউড শেলের ভিতরে, ডিফল্ট সার্ভিস অ্যাকাউন্টটিকে storage.admin রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/artifactregistry.admin"

১২. Tcpdump সক্রিয় করুন

Vertex AI Pipelines থেকে IP সংযোগ যাচাই করার জন্য, আমরা TCPDUMP ব্যবহার করতে পারি। এর মাধ্যমে, Vertex AI Pipelines থেকে vm, class-e-vm.demo.com (240.0.0.0/4)-এ get রিকোয়েস্ট পাঠানোর সময় PSC নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট, 192.168.10.0/28 থেকে উদ্ভূত যোগাযোগ পর্যবেক্ষণ করা যাবে।

ক্লাউড শেল থেকে প্রক্সি ভিএম-এ ssh করুন।

gcloud compute ssh --zone us-central1-a "proxy-vm" --tunnel-through-iap --project $projectid

প্রক্সি-ভিএম ওএস থেকে ক্লাস-ই-ভিএম এবং পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেটে টিসিপিডাম্প ফিল্টারিং চালান।

sudo tcpdump -i any net 240.0.0.0/4 or 192.168.10.0/28 -nn

একটি নতুন ক্লাউড শেল ট্যাব খুলুন, আপনার প্রজেক্ট ভেরিয়েবল আপডেট করুন এবং ক্লাস-ই-ভিএম-এ ssh-এর মাধ্যমে লগইন করুন।

gcloud compute ssh --zone us-central1-a "class-e-vm" --tunnel-through-iap --project $projectid

ক্লাস-ই-ভিএম ওএস থেকে প্রক্সি-ভিএম সাবনেটে টিসিপিডাম্প ফিল্টারিং চালান।

sudo tcpdump -i any net 10.10.10.0/28 -nn

১৩. ভার্টেক্স এআই পাইপলাইন জব স্থাপন করুন

পরবর্তী অংশে, আপনি ভার্টেক্স এআই পাইপলাইনস থেকে এক্সপ্লিসিট প্রক্সিতে সফলভাবে wget অপারেশন চালানোর জন্য একটি নোটবুক তৈরি করবেন। এর মাধ্যমে আপনি নন-RFC 1918 ভিএম, যেমন ক্লাস-ই-ভিএম, অ্যাক্সেস করতে পারবেন। ভার্টেক্স এআই পাইপলাইনস থেকে rfc1918-vm অ্যাক্সেস করার জন্য কোনো এক্সপ্লিসিট প্রক্সির প্রয়োজন হয় না, কারণ এর টার্গেট হলো একটি RFC 1918 আইপি অ্যাড্রেস।

Vertex AI Workbench ইনস্ট্যান্সে ট্রেনিং জবটি চালান।

  1. Google Cloud কনসোলে, Vertex AI Workbench পেজের instances ট্যাবে যান।
  2. আপনার Vertex AI Workbench ইনস্ট্যান্সের নামের (workbench-tutorial) পাশে, Open JupyterLab-এ ক্লিক করুন। আপনার Vertex AI Workbench ইনস্ট্যান্সটি JupyterLab-এ খুলে যাবে।
  3. ফাইল > নতুন > নোটবুক নির্বাচন করুন
  4. কার্নেল নির্বাচন করুন > পাইথন ৩

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

# Install gcloud
!pip install google-cloud

# Install the pipeline required packages
!pip install --upgrade google-cloud-aiplatform \
                         google-cloud-storage \
                         kfp \
                         google-cloud-pipeline-components

# Import libraries
from time import gmtime, strftime
import json
import requests

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন, এবং নিম্নলিখিতটি আপডেট করে রান করুন। আপনার এনভায়রনমেন্টের বিবরণ দিয়ে PROJECT_ID আপডেট করতে ভুলবেন না।

import json
import requests
import pprint

PROJECT_ID = 'YOUR-PROJECT-ID' #Enter your project ID
PROJECT_NUMBER=!gcloud projects list --filter="project_id:$PROJECT_ID" --format="value(PROJECT_NUMBER)"
PROJECT_NUMBER=str(PROJECT_NUMBER).strip('[').strip(']').strip("'")
print(PROJECT_NUMBER)

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

# us-central1 is used for the codelab
REGION = "us-central1" #@param {type:"string"}
SERVICE_NAME = "aiplatform" #@param {type:"string"}
SERVICE ="{}.googleapis.com".format(SERVICE_NAME)
ENDPOINT="{}-{}.googleapis.com".format(REGION, SERVICE_NAME)
API_VERSION = "v1" # @param {type: "string"}

LOCATION = REGION

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিচের কনফিগারেশনটি চালান, নিম্নলিখিত গুরুত্বপূর্ণ বিষয়গুলো লক্ষ্য করুন:

  • proxy_server = "http://proxy-vm.demo.com:8888" এই FQDN-টি কনজিউমার VPC-তে ডেপ্লয় করা প্রক্সি ভিএম-এর সাথে যুক্ত। পরবর্তী ধাপে FQDN-টি রিজলভ করার জন্য আমরা DNS পিয়ারিং ব্যবহার করছি।
%%writefile main.py

import logging
import socket
import sys
import os

def make_api_request(url: str, proxy_vm_ip: str, proxy_vm_port: str):
    """
    Makes a GET request to a non-rfc1918 API and saves the response.

    Args:
        url: The URL of the API to send the request to.
    """
    import requests

    try:
        # response = requests.get(url)
        proxy_server = f"http://proxy-vm.demo.com:8888" # replace with you VM's IP and proxy port.

        proxies = {
          "http": proxy_server,
          "https": proxy_server,
        }

        response = requests.get(url, proxies=proxies)
        logging.info(response.text)

        response.raise_for_status()  # Raise an exception for bad status codes
        logging.info(f"Successfully fetched data from {url}")
    except requests.exceptions.RequestException as e:
        logging.error(f"An error occurred: {e}")
        raise e

if __name__ == '__main__':
  # Configure logging to print clearly to the console
  logging.basicConfig(
      level=logging.INFO,
      format='%(levelname)s: %(message)s',
      stream=sys.stdout
  )
  url_to_test = os.environ['NONRFC_URL']
  proxy_vm_ip = os.environ['PROXY_VM_IP']
  proxy_vm_port = os.environ['PROXY_VM_PORT']

  logging.info(f"url_to_test: {url_to_test}")
  logging.info(f"proxy_vm_ip: {proxy_vm_ip}")
  logging.info(f"proxy_vm_port: {proxy_vm_port}")
  make_api_request(url_to_test, proxy_vm_ip, proxy_vm_port)

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

%%writefile Dockerfile
FROM python:3.9-slim

RUN apt-get update && \
  apt-get install -y iputils-ping && \
  apt-get install -y wget

RUN pip install cloudml-hypertune requests kfp

COPY main.py /main.py

ENTRYPOINT ["python3", "/main.py"]

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

!gcloud artifacts repositories create pipelines-test-repo-psc --repository-format=docker --location=us-central1

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

IMAGE_PROJECT = PROJECT_ID
IMAGE_REPO = 'pipelines-test-repo-psc' 
IMAGE_NAME = 'nonrfc-ip-call'
TAG = 'v1'

IMAGE_URI= f'us-central1-docker.pkg.dev/{IMAGE_PROJECT}/{IMAGE_REPO}/{IMAGE_NAME}:{TAG}'
IMAGE_URI

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

!gcloud auth configure-docker us-docker.pkg.dev --quiet

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিতটি চালান। কোনো ত্রুটি (gcloud.builds.submit) থাকলে তা উপেক্ষা করুন।

!gcloud builds submit --tag {IMAGE_URI} --region=us-central1

আপনার JupyterLab নোটবুকে, নিচের সেলটি তৈরি করে চালান এবং নিম্নলিখিত গুরুত্বপূর্ণ বিষয়গুলো লক্ষ্য করুন:

  • demo.com ডোমেইন নেমটির জন্য dnsPeeringConfigs (dnsPeeringConfigs) ব্যবহার করে কনজিউমার VPC-গুলোর সাথে DNS পিয়ারিং কনফিগার করা হয়।
  • PROXY_VM_IP ভেরিয়েবল দ্বারা সংজ্ঞায়িত সুস্পষ্ট প্রক্সিটি হলো proxy-vm.demo.com। কনজিউমারের VPC-এর মধ্যে DNS পিয়ারিং-এর মাধ্যমে রেজোলিউশন সম্পন্ন করা হয়।
  • পোর্ট 8888 হলো tinyproxy-তে কনফিগার করা ডিফল্ট লিসেনিং পোর্ট।
  • class-e-vm-demo.com-এ Wget অনুরোধটি DNS peering-এর মাধ্যমে সমাধান করা হয়।
  • কোডটি Vertex-এর জন্য "psc-network-attachment" নির্দিষ্ট করে, যা এটিকে দুটি PSC ইন্টারফেস ইনস্ট্যান্স স্থাপন করার জন্য নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট ব্যবহার করতে সক্ষম করে।
import json
from datetime import datetime


JOB_ID_PREFIX='test_psci-nonRFC' #@param {type:"string"}
JOB_ID = '{}_{}'.format(JOB_ID_PREFIX, datetime.now().strftime("%Y%m%d%H%M%S"))

# PSC-I configs

PRODUCER_PROJECT_ID = PROJECT_ID
DNS_DOMAIN = 'class-e-vm.demo.com' #@param {type:"string"}
NON_RFC_URL = f"http://{DNS_DOMAIN}"

PROXY_VM_IP = "proxy-vm.demo.com" #@param {type:"string"}
PROXY_VM_PORT = "8888" #@param {type:"string"}

CUSTOM_JOB = {
  "display_name": JOB_ID,
  "job_spec": {
      "worker_pool_specs": [
          {
           "machine_spec": {
             "machine_type": "n1-standard-4",
           },
           "replica_count": 1,
           "container_spec": {
             "image_uri": IMAGE_URI,
             "env": [{
               "name": "NONRFC_URL",
               "value": NON_RFC_URL
             },
             {
               "name": "PROXY_VM_IP",
               "value": PROXY_VM_IP
             },
             {
               "name": "PROXY_VM_PORT",
               "value": PROXY_VM_PORT
             }]
           },
         },
      ],
      "enable_web_access": True,
      "psc_interface_config": {
        "network_attachment": "psc-network-attachment",
        "dns_peering_configs": [
          {
            "domain": "demo.com.",
            "target_project": PROJECT_ID,
            "target_network": "consumer-vpc"
          },
        ]
      },
  }
}

print(json.dumps(CUSTOM_JOB, indent=2))

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

import requests
bearer_token = !gcloud auth application-default print-access-token
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {}'.format(bearer_token[0]),
}

request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/customJobs/"

print("request_uri: ", request_uri)

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

response_autopush = requests.post(request_uri, json=CUSTOM_JOB, headers=headers)
response = response_autopush
print("response:", response)
if response.reason == 'OK':
  job_name = response.json()['name']
  job_id = job_name.split('/')[-1]
  print("Created Job: ", response.json()['name'])
else:
  print(response.text)

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

# Print KFP SDK version (should be >= 1.6)
! python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"

# Print AI Platform version
! python3 -c "from google.cloud import aiplatform; print('AI Platform version: {}'.format(aiplatform.__version__))"

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

BUCKET_URI = "your-unique-bucket" # Provide a globally unique bucket name

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

!gcloud storage buckets create gs://{BUCKET_URI}

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

# pipeline parameters
CACHE_PIPELINE = False # @param {type: "string"}
_DEFAULT_IMAGE = IMAGE_URI
BUCKET_URI = "gs://{BUCKET_URI}"  # @param {type: "string"}
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/intro"
PIPELINE_DISPLAY_NAME = "pipeline_nonRFCIP" # @param {type: "string"}

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

from re import S
import kfp
from kfp import dsl
from kfp.dsl import container_component, ContainerSpec
from kfp import compiler
from google.cloud import aiplatform


# ==== Component with env variable ====

@container_component
def dns_peering_test_op(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
    return ContainerSpec(
        image=_DEFAULT_IMAGE,
        command=["bash", "-c"],
        args=[
            ""&&;"
            apt-get update  apt-get install inetutils-traceroute inetutils-ping netcat-openbsd curl -y

            echo "Local IP(s): $(hostname -I)"

            echo "Attempting to trace route to %s"
            traceroute -w 1 -m 7 "%s"

            echo "Sending curl requests to http://%s via proxy %s:%s and recording trace..."
            if curl -L -v --trace-ascii /dev/stdout -x http://%s:%s "http://%s"; then
                echo "Curl request succeeded!"
            else
                echo "Curl request failed!"
                exit 1
            fi
            """ % (dns_domain, dns_domain, dns_domain, proxy_vm_ip, proxy_vm_port, proxy_vm_ip, proxy_vm_port, dns_domain)

        ]
    )

# ==== Pipeline ====
@dsl.pipeline(
    name="dns-peering-test-pipeline",
    description="Test DNS Peering using env variable",
    pipeline_root=PIPELINE_ROOT,
)
def dns_peering_test_pipeline(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
    dns_test_task = dns_peering_test_op(dns_domain=dns_domain, proxy_vm_ip=proxy_vm_ip, proxy_vm_port=proxy_vm_port)
    dns_test_task.set_caching_options(enable_caching=CACHE_PIPELINE)

# ==== Compile pipeline ====
if __name__ == "__main__":
    aiplatform.init(project=PROJECT_ID, location=LOCATION)

    compiler.Compiler().compile(
        pipeline_func=dns_peering_test_pipeline,
        package_path="dns_peering_test_pipeline.yaml",
    )
    print("✅ Pipeline compiled to dns_peering_test_pipeline.yaml")

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।

# Define the PipelineJob body; see API Reference https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.pipelineJobs/create

import requests, json
import datetime

bearer_token = !gcloud auth application-default print-access-token
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {}'.format(bearer_token[0]),
}

request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/pipelineJobs/"

print("request_uri: ", request_uri)

১৪. পিএসসি ইন্টারফেস যাচাইকরণ

এছাড়াও, আপনি নিম্নলিখিত লিঙ্কে গিয়ে Vertax AI Pipelines দ্বারা ব্যবহৃত নেটওয়ার্ক অ্যাটাচমেন্ট আইপিগুলো দেখতে পারেন:

নেটওয়ার্ক পরিষেবা → ব্যক্তিগত পরিষেবা সংযোগ → নেটওয়ার্ক সংযুক্তি → পিএসসি-নেটওয়ার্ক-সংযুক্তি

টেন্যান্ট প্রজেক্ট নির্বাচন করুন (প্রজেক্টের নামের শেষে -tp থাকলে)

f47150235fedb8ce.png

হাইলাইট করা ফিল্ডটি PSC নেটওয়ার্ক অ্যাটাচমেন্ট থেকে Vertex AI Pipelines দ্বারা ব্যবহৃত IP অ্যাড্রেস নির্দেশ করে।

39e7b251aeb4f191.png

১৫. ক্লাউড লগিং যাচাইকরণ

Vertex AI Pipelines জবটি প্রথমবার চলতে প্রায় ১৪ মিনিট সময় নেবে, পরবর্তী রানগুলো অনেক কম সময়ে সম্পন্ন হয়। সফল ফলাফল যাচাই করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:

Vertex AI → Training → Custom jobs-এ যান

সম্পাদিত কাস্টম কাজটি নির্বাচন করুন

a9be0395c842aa6f.png

লগ দেখুন নির্বাচন করুন

53e30765ba5827f3.png

ক্লাউড লগিং উপলব্ধ হলে, রান কোয়েরি (Run Query) নির্বাচন করুন যা নীচে হাইলাইট করা অংশটি তৈরি করে, যা ভার্টেক্স এআই পাইপলাইনস (Vertex AI Pipelines) থেকে ক্লাস-ই-ভিএম (class-e-vm)-এ একটি সফল wget নিশ্চিত করে।

f2c5d9fdf5cc8bed.png

3b3788603bb433ee.png

১৬. টিসিপিডাম্প যাচাইকরণ

চলুন TCPDUMP আউটপুটটি পর্যালোচনা করা যাক, যা কম্পিউট ইনস্ট্যান্সগুলোর সাথে সংযোগকে আরও যাচাই করে:

প্রক্সি-ভিএম থেকে HTTP GET এবং 200 OK পর্যবেক্ষণ করুন।

03:05:34.778574 ens4  Out IP 10.10.10.2.40326 > 240.0.0.2.80: Flags [P.], seq 1:63, ack 1, win 511, options [nop,nop,TS val 1435446009 ecr 2475360885], length 62: HTTP: GET / HTTP/1.0
03:05:34.778946 ens4  In  IP 240.0.0.2.80 > 10.10.10.2.40326: Flags [.], ack 63, win 506, options [nop,nop,TS val 2475360889 ecr 1435446009], length 0
03:05:34.778974 ens4  Out IP 10.10.10.2.40326 > 240.0.0.2.80: Flags [P.], seq 63:185, ack 1, win 511, options [nop,nop,TS val 1435446010 ecr 2475360889], length 122: HTTP
03:05:34.781999 ens4  In  IP 240.0.0.2.80 > 10.10.10.2.40326: Flags [.], ack 185, win 506, options [nop,nop,TS val 2475360892 ecr 1435446010], length 0
03:05:34.906678 ens4  In  IP 240.0.0.2.80 > 10.10.10.2.40326: Flags [P.], seq 1:265, ack 185, win 506, options [nop,nop,TS val 2475361016 ecr 1435446010], length 264: HTTP: HTTP/1.1 200 OK

class-e-vm থেকে HTTP GET এবং 200 OK পর্যবেক্ষণ করুন।

03:05:34.778768 ens4  In  IP 10.10.10.2.40326 > 240.0.0.2.80: Flags [P.], seq 1:63, ack 1, win 511, options [nop,nop,TS val 1435446009 ecr 2475360885], length 62: HTTP: GET / HTTP/1.0
03:05:34.778819 ens4  Out IP 240.0.0.2.80 > 10.10.10.2.40326: Flags [.], ack 63, win 506, options [nop,nop,TS val 2475360889 ecr 1435446009], length 0
03:05:34.781815 ens4  In  IP 10.10.10.2.40326 > 240.0.0.2.80: Flags [P.], seq 63:185, ack 1, win 511, options [nop,nop,TS val 1435446010 ecr 2475360889], length 122: HTTP
03:05:34.781856 ens4  Out IP 240.0.0.2.80 > 10.10.10.2.40326: Flags [.], ack 185, win 506, options [nop,nop,TS val 2475360892 ecr 1435446010], length 0
03:05:34.906503 ens4  Out IP 240.0.0.2.80 > 10.10.10.2.40326: Flags [P.], seq 1:265, ack 185, win 506, options [nop,nop,TS val 2475361016 ecr 1435446010], length 264: HTTP: HTTP/1.1 200 OK

১৭. পরিষ্কার করা

ক্লাউড শেল থেকে টিউটোরিয়াল উপাদানগুলো মুছে ফেলুন।

gcloud compute instances delete proxy-vm --zone=us-central1-a --quiet

gcloud compute instances delete workbench-tutorial --zone=us-central1-a --quiet

gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet

gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet

gcloud compute networks subnets delete intf-subnet rfc1918-subnet1 --region=us-central1 --quiet

gcloud dns record-sets delete class-e-vm.demo.com --zone=private-dns-codelab  --type=A
gcloud dns record-sets delete proxy-vm.demo.com --zone=private-dns-codelab  --type=A

gcloud dns managed-zones delete private-dns-codelab
gcloud compute networks delete consumer-vpc --quiet

১৮. অভিনন্দন

অভিনন্দন, আপনি Vertex AI Pipelines-এর সাথে একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সফলভাবে কনফিগার এবং ভ্যালিডেট করেছেন।

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

কসমোপাপ মনে করে টিউটোরিয়ালগুলো অসাধারণ!!

c911c127bffdee57.jpeg

এরপর কী?

আরও পড়ুন ও ভিডিও

রেফারেন্স নথি