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

১. ভূমিকা

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

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

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

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

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

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

চিত্র ১

12714b6f0f8fa411.png

আপনি কনজিউমার VPC-তে একটিমাত্র psc-network-attachment তৈরি করবেন, যার ফলে নিম্নলিখিত ব্যবহারের ক্ষেত্রগুলো তৈরি হবে:

  1. কনজিউমার-ভিপিসিতে একটি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করুন যা ভার্টেক্স এআই পাইপলাইন সাবনেটকে (192.168.10.0/28) test-svc-1-এ প্রবেশের অনুমতি দেবে। TCPDUMP ব্যবহার করে পাইপলাইন জব থেকে test-svc-1-এ সফল পিং নিশ্চিত করুন।
  2. কনজিউমার-ভিপিসিতে একটি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করুন যা ভার্টেক্স এআই পাইপলাইন সাবনেটকে (192.168.10.0/28) test-svc-2-এর জন্য অ্যাক্সেস করতে বাধা দেবে। লগ এক্সপ্লোরার দ্বারা তৈরি ফায়ারওয়াল লগের উপর ভিত্তি করে পিং ব্যর্থতা নিশ্চিত করুন।

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

  • কীভাবে একটি নেটওয়ার্ক সংযুক্তি তৈরি করবেন
  • কীভাবে ভার্টেক্স এআই পাইপলাইনগুলি একটি নেটওয়ার্ক অ্যাটাচমেন্ট ব্যবহার করে একটি পিএসসি ইন্টারফেস তৈরি করতে পারে
  • উৎপাদক থেকে ভোক্তার কাছে কীভাবে যোগাযোগ স্থাপন করা যায়
  • Verex AI Pipelines থেকে কনজিউমার ভিএম, test-svc-1-এ কীভাবে অ্যাক্সেস দেওয়া যায়
  • ক্লাউড ফায়ারওয়াল ব্যবহার করে Verex AI Pipelines থেকে কনজিউমার ভিএম, test-svc-2-তে অ্যাক্সেস কীভাবে অস্বীকার করবেন

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

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

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

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

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

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

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

gcloud services enable notebooks.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

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

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

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

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

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

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

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

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

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

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

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1 --enable-private-ip-google-access

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

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

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

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

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

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

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

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

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

৪. আইডেন্টিফাই অ্যাওয়্যার প্রক্সি (IAP) সক্রিয় করুন

আপনার 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

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

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

gcloud compute instances create test-svc-1 \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=test-subnet-1 \
    --shielded-secure-boot

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

gcloud compute instances create test-svc-2 \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=test-subnet-2 \
    --shielded-secure-boot

ইনস্ট্যান্সগুলোর আইপি অ্যাড্রেসগুলো সংগ্রহ ও সংরক্ষণ করুন:

ক্লাউড শেলের ভিতরে, টেস্ট ভিএম ইনস্ট্যান্সগুলোর বিরুদ্ধে একটি ডেসক্রাইব অপারেশন চালান।

gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep  networkIP:

উদাহরণ:

user@cloudshell(psc-vertex)$ gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep  networkIP:
  networkIP: 192.168.20.2
  networkIP: 192.168.30.2

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

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

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

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

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

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

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

gcloud compute network-attachments list

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

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

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

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

নীচের উদাহরণে psc নেটওয়ার্ক অ্যাটাচমেন্ট URI হল নিম্নরূপ:

projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment

user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2025-01-21T12:25:25.385-08:00'
fingerprint: m9bHc9qnosY=
id: '56224423547354202'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/psc-vertex/global/networks/consumer-vpc
region: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/subnetworks/intf-subnet

৭. ভার্টেক্স এআই ওয়ার্কবেঞ্চ সেটআপ

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

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

পরবর্তী অংশে, আপনি একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন যা এই টিউটোরিয়ালে ব্যবহৃত 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 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=deeplearning-platform-release --vm-image-family=common-cpu-notebooks --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=workbench-subnet --disable-public-ip --shielded-secure-boot=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com

৮. ভার্টেক্স এআই পাইপলাইন ব্যবহার করে svc-1 এর সংযোগ পরীক্ষা করা।

একটি নতুন ক্লাউড শেল ট্যাব খুলুন এবং আপনার প্রোজেক্ট সেটিংস আপডেট করুন।

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

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

Vertex AI Pipelines থেকে test-svc-1-এ কানেক্টিভিটি অনুমোদনের জন্য, একটি ইনগ্রেস ফায়ারওয়াল রুল তৈরি করুন যেখানে সোর্স হিসেবে PSC নেটওয়ার্ক অ্যাটাচমেন্ট (192.168.10.0/28) এবং ডেস্টিনেশন হিসেবে test-svc-1 আইপি অ্যাড্রেস উল্লেখ থাকবে।

ক্লাউড শেলের ভিতরে, আপনার test-svc-1 আইপি অ্যাড্রেসের সাথে মিলিয়ে ডেস্টিনেশন-রেঞ্জ আপডেট করুন।

gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW  --source-ranges=192.168.10.0/28 --destination-ranges=<your-test-svc-1-vm-ip> --rules=icmp

উদাহরণ:

gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW  --source-ranges=192.168.10.0/28 --destination-ranges=192.168.20.2 --rules=icmp

ক্লাউড শেলে IAP ব্যবহার করে test-svc-1 ইনস্ট্যান্সে লগ ইন করুন।

gcloud compute ssh test-svc-1 --project=$projectid --zone=us-central1-a --tunnel-through-iap

অপারেটিং সিস্টেমে (OS) যেকোনো icmp ট্র্যাফিক ক্যাপচার করার জন্য tcpdump চালান। এই OS সেশনটি Vertex AI Pipeline এবং VM-এর মধ্যেকার যোগাযোগ যাচাই করতে ব্যবহৃত হবে।

sudo tcpdump -i any icmp -nn

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

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

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

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

gcloud projects describe $projectid | grep projectNumber

উদাহরণ:

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

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

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

উদাহরণ:

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

১০. ডিফল্ট সার্ভিস অ্যাকাউন্ট আপডেট

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

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

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

উদাহরণ:

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

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

পরবর্তী অংশে, আপনি test-svc-1 কনজিউমার ইনস্ট্যান্সটিতে সফলভাবে পিং (PING) করার জন্য একটি নোটবুক তৈরি করবেন।

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

  1. Google Cloud কনসোলে, Vertex AI Workbench পেজের instances ট্যাবে যান।
  2. আপনার Vertex AI Workbench ইনস্ট্যান্সের নামের (workbench-tutorial) পাশে, Open JupyterLab-এ ক্লিক করুন। আপনার Vertex AI Workbench ইনস্ট্যান্সটি JupyterLab-এ খুলে যাবে।
  3. ফাইল > নতুন > নোটবুক নির্বাচন করুন
  4. কার্নেল নির্বাচন করুন > পাইথন ৩
  5. একটি নতুন নোটবুক সেলে, আপনার কাছে pip-এর সর্বশেষ সংস্করণ আছে কিনা তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান:
! pip3 install --upgrade --quiet google-cloud-aiplatform \
  kfp \
  google-cloud-pipeline-components
  1. নতুন নোটবুক সেলে আপনার প্রোজেক্ট ভেরিয়েবলগুলো সেট করুন।
PROJECT_ID = "<your-projectid>" 
REGION = "<your-region>"  
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"

উদাহরণ:

PROJECT_ID = "psc-vertex" 
REGION = "us-central1"  
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
  1. একটি নতুন নোটবুক সেলে একটি ভেরিয়েবল হিসেবে বিশ্বব্যাপী অনন্য একটি বাকেটনেম (bucketname) সংজ্ঞায়িত করুন।
BUCKET_URI = f"gs://<your-bucket-name>"

উদাহরণ:

BUCKET_URI = f"gs://psc-vertex-bucket"
  1. একটি নতুন নোটবুক সেলে বাকেটটি তৈরি করুন।
! gsutil mb -l {REGION} -p {PROJECT_ID} {BUCKET_URI}

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

shell_output = ! gcloud projects describe $PROJECT_ID
PROJECT_NUMBER = shell_output[-1].split(":")[1].strip().replace("'", "")
SERVICE_ACCOUNT = f"{PROJECT_NUMBER}-compute@developer.gserviceaccount.com"

print(f"Project Number: {PROJECT_NUMBER}")
print(f"Service Account: {SERVICE_ACCOUNT}")

সফলভাবে সম্পাদন নিশ্চিত করার জন্য, আপনার সার্ভিস অ্যাকাউন্ট এবং প্রজেক্ট নম্বর প্রিন্ট করা হয়।

  1. একটি নতুন নোটবুক সেলে, পূর্ববর্তী ধাপে তৈরি করা বাকেটে থাকা পাইপলাইন আর্টিফ্যাক্টগুলো পড়া ও লেখার জন্য আপনার সার্ভিস অ্যাকাউন্টকে অনুমতি দিন।
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator {BUCKET_URI}

! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer {BUCKET_URI}
  1. একটি নতুন নোটবুক সেলে পাইপলাইন প্যারামিটারগুলো নির্ধারণ করুন। উল্লেখ্য, NETWORK_ATTACHMENT_NAME হলো PSC নেটওয়ার্ক অ্যাটাচমেন্ট, তাই এটি অবশ্যই মিলতে হবে।
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/psc_test"
NETWORK_ATTACHMENT_URI = f"projects/{PROJECT_NUMBER}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}"
  1. একটি নতুন নোটবুক সেলে, Vertex AI SDK চালু করুন।
from kfp import dsl
from google.cloud import aiplatform, aiplatform_v1beta1
import time
from google.cloud.aiplatform_v1.types import pipeline_state
import yaml
from datetime import datetime
import logging
aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)

# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
  1. একটি নতুন নোটবুক সেলে, পরীক্ষার উপাদানটি সংজ্ঞায়িত করুন।
@dsl.container_component
def ping_check(network_address: str):
    """Pings a network address

    Args:
        network_address: The IP address to ping
    """

    return dsl.ContainerSpec(
        image="ubuntu:22.04",
        command=["sh", "-c"],
        args=[
            f"""
            
            # Use sed for regex replacement, cleaner than bash parameter expansion for this
            cleaned_address=$(echo "{network_address}" | sed 's/[^0-9.]//g')
            apt-get update && apt-get install inetutils-traceroute inetutils-ping -y
            
            echo "Will ping $cleaned_address"
            if ! ping -c 3 $cleaned_address; then
                echo "Ping failed"
                traceroute -w 1 -m 7 $cleaned_address
                exit 1
            fi
            """
        ],
    )
  1. একটি নতুন নোটবুক সেলে পাইপলাইনটি সংজ্ঞায়িত করুন।
@dsl.pipeline(name="check-connectivity")
def pipeline(ip_address: str):
    """Pings an IP address. Facilitated by a Private Service Connect Interface

    Args:
        ip_address: The IP address to ping
    """
    ping_check(network_address=ip_address).set_caching_options(False)
    return
  1. একটি নতুন নোটবুক সেলে ইউটিলিটি ফাংশনটি চালান এবং পাইপলাইনটি শেষ হওয়া পর্যন্ত অপেক্ষা করুন।
def wait_for_pipeline(
    project_id: str,
    region: str,
    pipeline_job_resource_name: str,
    timeout: int = 20 * 60,  # Default timeout of 20 minutes (in seconds)
) -> bool:
    """
    Waits for a Vertex AI pipeline to finish, with a timeout.

    Args:
        project_id (str): The Google Cloud project ID.
        region (str): The region where the pipeline is running.
        pipeline_job_resource_name (str): The resource name of the pipeline job.
        timeout (int): The maximum time to wait for the pipeline to finish, in seconds.
                       Defaults to 20 minutes (1200 seconds).

    Returns:
        bool: True if the pipeline succeeded, False otherwise.

    Raises:
        TimeoutError: If the pipeline does not finish within the specified timeout.
    """

    # Initialize the AIPlatform client
    aiplatform.init(project=project_id, location=region)

    # Get the pipeline job
    pipeline_job = aiplatform.PipelineJob.get(resource_name=pipeline_job_resource_name)
    logging.info(
        f"Vertex AI Console Link: https://console.cloud.google.com/vertex-ai/pipelines/locations/{region}/runs/{pipeline_job.resource_name.split('/')[-1]}?project={project_id}"
    )

    start_time = time.time()
    while True:
        status = pipeline_job.state
        logging.info(f"Pipeline Job status: {status.name}")

        if status in [
            pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED,
            pipeline_state.PipelineState.PIPELINE_STATE_FAILED,
            pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED,
        ]:
            break  # Exit the loop if the job is finished

        if time.time() - start_time > timeout:
            logging.error(f"Pipeline timed out after {timeout} seconds.")
            raise TimeoutError(f"Pipeline timed out after {timeout} seconds.")
        
        # Wait for a short time before checking again
        time.sleep(10)  # Adjust the wait time as needed

    # Do something based on the final status
    if status == pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED:
        logging.info("Pipeline succeeded")
        return True
    elif status == pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED:
        logging.error("Pipeline cancelled")
        raise Exception("Pipeline cancelled")
    elif status == pipeline_state.PipelineState.PIPELINE_STATE_FAILED:
        logging.error("Pipeline failed")
        raise Exception("Pipeline failed")
  1. একটি নতুন নোটবুক সেলে, পাইপলাইনটি চালানোর জন্য ইউটিলিটি ফাংশনটি এক্সিকিউট করুন।
def run_job_with_psc_interface_config(
    project_id: str,
    region: str,
    pipeline_root: str,
    network_attachment_name: str,
    ip_address: str,
    local_pipeline_file: str = "pipeline.yaml",
):
    """
    Compiles, submits, and monitors a Vertex AI pipeline.
    """

    parameter_values = {"ip_address": ip_address}
    pipeline_root = f"{pipeline_root}/{datetime.now().strftime('%Y%m%d%H%M%S')}"
    logging.info("Compiling pipeline")

    try:
        with open(local_pipeline_file, "r") as stream:
            pipeline_spec = yaml.safe_load(stream)
            logging.info(f"Pipeline Spec: {pipeline_spec}")
    except yaml.YAMLError as exc:
        logging.error(f"Error loading pipeline yaml file: {exc}")
        raise
    
    logging.info(f"Will use pipeline root: {pipeline_root}")
    # Initialize the Vertex SDK using PROJECT_ID and LOCATION
    aiplatform.init(project=project_id, location=region)

    # Create the API endpoint
    client_options = {"api_endpoint": f"{region}-aiplatform.googleapis.com"}

    # Initialize the PipelineServiceClient
    client = aiplatform_v1beta1.PipelineServiceClient(client_options=client_options)

    # Construct the request
    request = aiplatform_v1beta1.CreatePipelineJobRequest(
        parent=f"projects/{project_id}/locations/{region}",
        pipeline_job=aiplatform_v1beta1.PipelineJob(
            display_name="pipeline-with-psc-interface-config",
            pipeline_spec=pipeline_spec,
            runtime_config=aiplatform_v1beta1.PipelineJob.RuntimeConfig(
                gcs_output_directory=pipeline_root, parameter_values=parameter_values
            ),
            psc_interface_config=aiplatform_v1beta1.PscInterfaceConfig(
                network_attachment=network_attachment_name
            ),
        ),
    )

    # Make the API call
    response = client.create_pipeline_job(request=request)

    # Print the response
    logging.info(f"Pipeline job created: {response.name}")

    return response.name
  1. একটি নতুন নোটবুক সেলে পাইপলাইনটি কম্পাইল করুন।
from kfp import compiler
compiler.Compiler().compile(pipeline_func=pipeline, package_path='pipeline.yaml')
  1. একটি নতুন নোটবুক সেলে, test-svc-1-এর জন্য পূর্ববর্তী ধাপে প্রাপ্ত আইপি অ্যাড্রেসটি দিয়ে TARGET_IP_ADDRESS আপডেট করুন এবং পাইপলাইন জবের স্ট্যাটাস পর্যবেক্ষণ করুন।
TARGET_IP_ADDRESS = "<your-test-svc-1-ip>"
try:
    job_name = run_job_with_psc_interface_config(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_root=PIPELINE_ROOT,
        network_attachment_name=NETWORK_ATTACHMENT_URI,
        ip_address=TARGET_IP_ADDRESS,
    )
    wait_for_pipeline(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_job_resource_name=job_name,
    )
except Exception as e:
    logging.error(f"An error occurred: {e}")

উদাহরণ:

TARGET_IP_ADDRESS = "192.168.20.2"
try:
    job_name = run_job_with_psc_interface_config(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_root=PIPELINE_ROOT,
        network_attachment_name=NETWORK_ATTACHMENT_URI,
        ip_address=TARGET_IP_ADDRESS,
    )
    wait_for_pipeline(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_job_resource_name=job_name,
    )
except Exception as e:
    logging.error(f"An error occurred: {e}")

ধাপ ১৭ সম্পন্ন হলে, পাইপলাইনটি সম্পূর্ণ হতে প্রায় ৮ মিনিট সময় লাগবে।

১২. test-svc-1 এর সাথে সংযোগ যাচাই করুন।

ধাপ ১৭ সম্পাদনের জন্য ব্যবহৃত সেলে, পাইপলাইন জব স্ট্যাটাসের PIPELINE_STATE_PENDING থেকে PIPELINE_STATE_RUNNING এবং অবশেষে PIPELINE_STATE_SUCCEEDED-এ পরিবর্তনটি লক্ষ্য করুন, যা Vertex AI Pipelines থেকে একটি সফল পিং এবং test-svc-1 থেকে একটি প্রতিক্রিয়া নির্দেশ করে।

Vertex AI Pipeline এবং test-svc-1-এর মধ্যে ICMP ট্র্যাফিক যাচাই করতে, test-svc-1 OS-এ পূর্বে তৈরি করা tcpdump সেশনটি দেখুন, যা দ্বিমুখী ট্র্যাফিক নির্দেশকারী লগ সরবরাহ করে।

tcpdump উদাহরণে, Vertex AI Pipelines 192.168.10.0/28 সাবনেট থেকে 192.168.10.3 আইপি অ্যাড্রেসটি সংগ্রহ করেছে, যেখানে 192.168.20.2 হলো test-svc-1-এর আইপি অ্যাড্রেস। উল্লেখ্য, আপনার পরিবেশে আইপি অ্যাড্রেসগুলো ভিন্ন হতে পারে।

user@test-svc-1:~$ sudo tcpdump -i any icmp -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
18:57:54.737490 ens4  In  IP 192.168.10.3 > 192.168.20.2: ICMP echo request, id 257, seq 0, length 64
18:57:54.737523 ens4  Out IP 192.168.20.2 > 192.168.10.3: ICMP echo reply, id 257, seq 0, length 64

১৩. ভার্টেক্স এআই পাইপলাইন এসভিসি-২ সংযোগ পরীক্ষা করার জন্য এআই ব্যবহার করে

পরবর্তী অংশে, আপনি Vertex AI Pipelines সাবনেট (192.168.10.0/28) থেকে test-svc-2-তে ট্র্যাফিক প্রবেশে বাধা দেওয়ার জন্য একটি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করবেন, এরপর test-svc-2-এর আইপি অ্যাড্রেসটি প্রতিফলিত করার জন্য নোটবুকটি আপডেট করবেন এবং সবশেষে Pipelines Jobs রানটি সম্পাদন করবেন।

নোটবুক সেলে, পাইপলাইন জব স্ট্যাটাস 'এরর - পাইপলাইন ফেইলড' দেখাবে এবং এর পাশাপাশি ফায়ারওয়াল লগিং ব্যর্থ সংযোগটি সম্পর্কে বিস্তারিত তথ্য দেবে।

একটি ইনগ্রেস ডিনাই ফায়ারওয়াল নিয়ম তৈরি করুন

Vertex AI Pipelines থেকে test-svc-2-তে সংযোগ বিচ্ছিন্ন করতে, একটি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করুন যেখানে উৎস হিসেবে PSC নেটওয়ার্ক অ্যাটাচমেন্ট (192.168.10.0/28) এবং গন্তব্য হিসেবে test-svc-2 আইপি অ্যাড্রেস উল্লেখ থাকবে।

ক্লাউড শেলের ভিতরে, আপনার test-svc-2 আইপি অ্যাড্রেসের সাথে মিলিয়ে ডেস্টিনেশন-রেঞ্জ আপডেট করুন।

gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY  --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=<your-test-svc-2-vm-ip> --rules=icmp --enable-logging

উদাহরণ:

gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY  --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=192.168.30.2 --enable-logging

নোটবুক সেল থেকে পাইপলাইন জব চালান

একটি নতুন নোটবুক সেলে, test-svc-2 এর জন্য পূর্ববর্তী ধাপে প্রাপ্ত আইপি অ্যাড্রেসটি দিয়ে TARGET_IP_ADDRESS আপডেট করুন এবং Pipelines Job Status পর্যবেক্ষণ করুন।

TARGET_IP_ADDRESS = "<your-test-svc-2-ip>"
try:
    job_name = run_job_with_psc_interface_config(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_root=PIPELINE_ROOT,
        network_attachment_name=NETWORK_ATTACHMENT_URI,
        ip_address=TARGET_IP_ADDRESS,
    )
    wait_for_pipeline(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_job_resource_name=job_name,
    )
except Exception as e:
    logging.error(f"An error occurred: {e}")

উদাহরণ:

TARGET_IP_ADDRESS = "192.168.30.2"
try:
    job_name = run_job_with_psc_interface_config(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_root=PIPELINE_ROOT,
        network_attachment_name=NETWORK_ATTACHMENT_URI,
        ip_address=TARGET_IP_ADDRESS,
    )
    wait_for_pipeline(
        project_id=PROJECT_ID,
        region=REGION,
        pipeline_job_resource_name=job_name,
    )
except Exception as e:
    logging.error(f"An error occurred: {e}")

একবার চালু হলে, পাইপলাইন কাজটি সম্পন্ন হতে প্রায় ৮ মিনিট সময় লাগবে।

১৪. test-svc-2 এর সাথে ব্যর্থ সংযোগ যাচাই করুন

পাইপলাইন জবটি কার্যকর করতে ব্যবহৃত সেলটিতে, PIPELINE_STATE_PENDING থেকে PIPELINE_STATE_FAILED-এ স্ট্যাটাস পরিবর্তনটি লক্ষ্য করুন, যা Vertex AI Pipelines থেকে একটি অসফল পিং এবং test-svc-2 থেকে একটি অসফল প্রতিক্রিয়া নির্দেশ করে।

লগ এক্সপ্লোরার ব্যবহার করে আপনি ভার্টেক্স এআই পাইপলাইনস সাবনেট (192.168.10.0/28) এবং test-svc-2 আইপি অ্যাড্রেস সমন্বিত ইনগ্রেস ডিনাই রুলের সাথে মিলে যাওয়া ফায়ারওয়াল লগিং এন্ট্রিগুলো দেখতে পারেন।

‘Show Query’ নির্বাচন করুন এবং নিচের ফিল্টারটি প্রবেশ করান, শেষ ১৫ মিনিটের ডেটা দিয়ে শুরু করে ‘Run Query’ নির্বাচন করুন।

jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:deny-icmp-vertex-pipelines-to-test-svc2-vm")

20e072f26d9a113b.png

5fb3d2de0a85e3c6.png

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

903aaf2c10d07460.png

১৫. পরিষ্কার করুন

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

gcloud compute instances delete test-svc-1 test-svc-2 --zone=us-central1-a --quiet

gcloud workbench instances delete workbench-tutorial --location=us-central1-a --quiet

gcloud compute firewall-rules delete deny-icmp-vertex-pipelines-to-test-svc2-vm allow-icmp-vertex-pipelines-to-test-svc1-vm ssh-iap-consumer --quiet

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

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

১৬. অভিনন্দন

অভিনন্দন, আপনি ইনগ্রেস অ্যালাউ এবং ডিনাই ফায়ারওয়াল প্রয়োগের মাধ্যমে একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস এবং কনজিউমার ও প্রডিউসার কানেক্টিভিটি সফলভাবে কনফিগার এবং ভ্যালিডেট করেছেন।

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

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

c911c127bffdee57.jpeg

এরপর কী?

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

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