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

1. ভূমিকা

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

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

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

আপনি কি নির্মাণ করবেন

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

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

চিত্র 1

12714b6f0f8fa411.png

আপনি ভোক্তা VPC-তে একটি একক psc-নেটওয়ার্ক-সংযুক্তি তৈরি করবেন যার ফলে নিম্নলিখিত ব্যবহারের ক্ষেত্রে হবে:

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

আপনি কি শিখবেন

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

আপনি কি প্রয়োজন হবে

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

3. ভোক্তা সেটআপ

ভোক্তা ভিপিসি তৈরি করুন

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

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) নোটবুক সফ্টওয়্যার প্যাকেজ ডাউনলোডের জন্য টিউটোরিয়ালে ব্যবহার করা হয় যেহেতু নোটবুকের উদাহরণে একটি বাহ্যিক IP ঠিকানা নেই৷ ক্লাউড 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

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

ক্লাউড শেলের ভিতরে, Vertex AI পাইপলাইন দ্বারা ব্যবহৃত নেটওয়ার্ক সংযুক্তি সাবনেট তৈরি করুন।

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

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

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

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

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

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

5. ভোক্তা VM দৃষ্টান্ত তৈরি করুন

ক্লাউড শেলের ভিতরে, ভোক্তা vm উদাহরণ তৈরি করুন, 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

ক্লাউড শেলের ভিতরে, ভোক্তা vm উদাহরণ তৈরি করুন, 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

দৃষ্টান্তগুলির আইপি ঠিকানাগুলি প্রাপ্ত করুন এবং সংরক্ষণ করুন:

ক্লাউড শেলের ভিতরে, পরীক্ষার VM দৃষ্টান্তগুলির বিরুদ্ধে একটি বর্ণনা সম্পাদন করুন।

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

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

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

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

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

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

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

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

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

নিম্নলিখিত বিভাগে, আপনি একটি পরিষেবা অ্যাকাউন্ট তৈরি করবেন যা টিউটোরিয়ালে ব্যবহৃত 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 ব্যবহারকারীর ভূমিকা সহ পরিষেবা অ্যাকাউন্ট আপডেট করুন।

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"

একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ উদাহরণ তৈরি করুন

নিম্নলিখিত বিভাগে, একটি Vertex AI ওয়ার্কবেঞ্চ উদাহরণ তৈরি করুন যা পূর্বে তৈরি পরিষেবা অ্যাকাউন্ট, নোটবুক-সা অন্তর্ভুক্ত করে।

ক্লাউড শেলের ভিতরে ব্যক্তিগত-ক্লায়েন্ট উদাহরণ তৈরি করুন।

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

8. ভার্টেক্স এআই পাইপলাইন পরীক্ষা-এসভিসি-1 সংযোগ

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

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

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

Vertex AI পাইপলাইনগুলি থেকে test-svc-1-এ সংযোগের অনুমতি দিতে একটি ইনগ্রেস ফায়ারওয়াল নিয়ম তৈরি করুন যা PSC নেটওয়ার্ক সংযুক্তিকে উত্স হিসাবে নির্দিষ্ট করে (192.168.10.0/28) এবং গন্তব্য হিসাবে test-svc-1 IP ঠিকানা।

ক্লাউড শেল-এর ভিতরে, আপনার টেস্ট-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 পাইপলাইন এবং VM-এর মধ্যে যোগাযোগ যাচাই করতে ব্যবহার করা হবে।

sudo tcpdump -i any icmp -nn

9. Vertex AI পরিষেবা এজেন্ট আপডেট

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

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"

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

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"

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

নিম্নলিখিত বিভাগে, আপনি ভোক্তা পরীক্ষা-svc-1 উদাহরণের জন্য একটি সফল PING সঞ্চালনের জন্য একটি নোটবুক তৈরি করবেন।

ভার্টেক্স এআই ওয়ার্কবেঞ্চ উদাহরণে প্রশিক্ষণের কাজটি চালান।

  1. Google ক্লাউড কনসোলে, Vertex AI Workbench পৃষ্ঠার ইনস্ট্যান্স ট্যাবে যান।
  2. আপনার Vertex AI ওয়ার্কবেঞ্চ ইনস্ট্যান্সের নামের পাশে (ওয়ার্কবেঞ্চ-টিউটোরিয়াল), JupyterLab খুলুন ক্লিক করুন। আপনার ভার্টেক্স এআই ওয়ার্কবেঞ্চের উদাহরণ জুপিটারল্যাবে খোলে।
  3. ফাইল > নতুন > নোটবুক নির্বাচন করুন
  4. কার্নেল > পাইথন 3 নির্বাচন করুন
  5. একটি নতুন নোটবুক কক্ষে, আপনার কাছে পিপের সর্বশেষ সংস্করণ রয়েছে তা নিশ্চিত করতে নিম্নলিখিত কমান্ডটি চালান:
! 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. একটি নতুন নোটবুক কক্ষে একটি পরিবর্তনশীল হিসাবে একটি বিশ্বব্যাপী অনন্য বাকেটনাম সংজ্ঞায়িত করুন৷
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. একটি নতুন নোটবুক কক্ষে, TARGET_IP_ADDRESS আপডেট করুন পরীক্ষা-svc-1-এর জন্য আগের ধাপে প্রাপ্ত IP ঠিকানা প্রতিফলিত করতে এবং পাইপলাইনের কাজের অবস্থা পর্যবেক্ষণ করুন
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}")

একবার ধাপ 17 কার্যকর করা হলে, পাইপলাইনটি সম্পূর্ণ হতে ~8 মিনিট সময় লাগবে।

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

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

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

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

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

13. ভার্টেক্স এআই পাইপলাইন এআই টেস্ট-এসভিসি-2 সংযোগ

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

নোটবুক কক্ষে, পাইপলাইন কাজের স্থিতি ত্রুটি নির্দেশ করবে - পাইপলাইন ব্যর্থ হয়েছে, উপরন্তু ফায়ারওয়াল লগিং ব্যর্থ সংযোগের অন্তর্দৃষ্টি প্রদান করবে।

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

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

ক্লাউড শেলের ভিতরে, আপনার টেস্ট-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

নোটবুক সেল থেকে পাইপলাইনের কাজ সম্পাদন করুন

একটি নতুন নোটবুক কক্ষে, TARGET_IP_ADDRESS আপডেট করুন টেস্ট-svc-2-এর জন্য আগের ধাপে প্রাপ্ত IP ঠিকানা প্রতিফলিত করতে এবং পাইপলাইন কাজের স্থিতি পর্যবেক্ষণ করুন।

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}")

একবার নির্বাহ করা হলে, পাইপলাইনের কাজটি সম্পূর্ণ হতে ~8 মিনিট সময় লাগবে।

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

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

লগ এক্সপ্লোরার ব্যবহার করে আপনি Vertex AI পাইপলাইন সাবনেট (192.168.10.0/28) এবং test-svc-2 IP ঠিকানা নিয়ে গঠিত Ingress Deny নিয়মের সাথে মিলে যাওয়া ফায়ারওয়াল লগিং এন্ট্রি দেখতে পারেন।

ক্যোয়ারী দেখান নির্বাচন করুন এবং নীচের ফিল্টারটি সন্নিবেশ করুন, শেষ 15 মিনিটের পরে রান কোয়েরি।

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

20e072f26d9a113b.png

5fb3d2de0a85e3c6.png

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

903aaf2c10d07460.png

15. পরিষ্কার করুন

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

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

16. অভিনন্দন

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

আপনি ভোক্তা পরিকাঠামো তৈরি করেছেন, এবং আপনি একটি নেটওয়ার্ক সংযুক্তি যোগ করেছেন যা Vertex AI পাইপলাইন পরিষেবাকে PSC ইন্টারফেস VM তৈরি করতে ভোক্তা এবং প্রযোজক যোগাযোগ সেতু করার অনুমতি দেয়৷ আপনি ভোক্তা ভিপিসি নেটওয়ার্কে ফায়ারওয়াল নিয়ম তৈরি করতে শিখেছেন যা ভোক্তা নেটওয়ার্কের দৃষ্টান্তগুলির সাথে সংযোগের অনুমতি দেয় এবং অস্বীকার করে৷

কসমোপআপ মনে করে টিউটোরিয়ালগুলি দুর্দান্ত!!

c911c127bffdee57.jpeg

এরপর কি?

আরও পড়া এবং ভিডিও

রেফারেন্স ডক্স