১. ভূমিকা
একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস হলো এমন একটি রিসোর্স যা একটি প্রডিউসার ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্ককে কনজিউমার VPC নেটওয়ার্কের বিভিন্ন গন্তব্যে সংযোগ স্থাপন করতে দেয়। প্রডিউসার এবং কনজিউমার নেটওয়ার্কগুলো ভিন্ন ভিন্ন প্রজেক্ট এবং প্রতিষ্ঠানে থাকতে পারে।
যদি কোনো নেটওয়ার্ক অ্যাটাচমেন্ট একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস থেকে সংযোগ গ্রহণ করে, তাহলে গুগল ক্লাউড সেই ইন্টারফেসটিকে নেটওয়ার্ক অ্যাটাচমেন্ট দ্বারা নির্দিষ্ট করা একটি কনজিউমার সাবনেট থেকে একটি আইপি অ্যাড্রেস বরাদ্দ করে। কনজিউমার এবং প্রোডিউসার নেটওয়ার্কগুলো সংযুক্ত থাকে এবং অভ্যন্তরীণ আইপি অ্যাড্রেস ব্যবহার করে একে অপরের সাথে যোগাযোগ করতে পারে।
একটি নেটওয়ার্ক অ্যাটাচমেন্ট এবং একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেসের মধ্যেকার সংযোগ, একটি প্রাইভেট সার্ভিস কানেক্ট এন্ডপয়েন্ট এবং একটি সার্ভিস অ্যাটাচমেন্টের মধ্যেকার সংযোগের অনুরূপ, কিন্তু এর দুটি প্রধান পার্থক্য রয়েছে:
- একটি নেটওয়ার্ক অ্যাটাচমেন্ট একটি প্রডিউসার নেটওয়ার্ককে কনজিউমার নেটওয়ার্কের সাথে সংযোগ স্থাপন করতে দেয় (ম্যানেজড সার্ভিস ইগ্রেস), অন্যদিকে একটি এন্ডপয়েন্ট একটি কনজিউমার নেটওয়ার্ককে প্রডিউসার নেটওয়ার্কের সাথে সংযোগ স্থাপন করতে দেয় (ম্যানেজড সার্ভিস ইনগ্রেস)।
- একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সংযোগ ট্রানজিটিভ। এর মানে হলো, একটি প্রডিউসার নেটওয়ার্ক কনজিউসার নেটওয়ার্কের সাথে সংযুক্ত অন্যান্য নেটওয়ার্কের সাথে যোগাযোগ করতে পারে।
ভার্টেক্স এআই পিএসসি-ইন্টারফেসের পৌঁছানোর যোগ্যতার বিবেচ্য বিষয়সমূহ
- PSC-ইন্টারফেস RFC1918 অ্যাড্রেস ব্লকের মধ্যে VPC অথবা অন-প্রেমেসিস ভিত্তিক গন্তব্যে ট্র্যাফিক রাউটিং করতে সক্ষম।
- নন-আরএফসি-১৯১৮ অ্যাড্রেস ব্লক টার্গেট করে এমন পিএসসি-ইন্টারফেসের জন্য কনজিউমারের ভিপিসি-তে একটি আরএফসি-১৯১৮ অ্যাড্রেসসহ সুস্পষ্ট প্রক্সি স্থাপন করা প্রয়োজন। ভার্টেক্স এআই ডেপ্লয়মেন্টের মধ্যে, টার্গেট এন্ডপয়েন্টের এফকিউডিএন-এর সাথে প্রক্সিটি অবশ্যই সংজ্ঞায়িত করতে হবে।
- যখন আপনি শুধুমাত্র একটি PSC ইন্টারফেস দিয়ে আপনার ডেপ্লয়মেন্ট কনফিগার করেন, তখন এটি তার ডিফল্ট ইন্টারনেট অ্যাক্সেস বজায় রাখে। এই আউটবাউন্ড ট্র্যাফিক সরাসরি সুরক্ষিত, গুগল-পরিচালিত টেন্যান্ট নেটওয়ার্ক থেকে নির্গত হয়।
ভার্টেক্স এআই পিএসসি-ইন্টারফেস ভিপিসি-এসসি বিবেচ্য বিষয়সমূহ
- যখন আপনার প্রজেক্ট একটি VPC সার্ভিস কন্ট্রোলস পেরিমিটারের অংশ হয়, তখন ডেটা পাচার রোধ করার জন্য পেরিমিটারটি গুগল-পরিচালিত টেন্যান্টদের ডিফল্ট ইন্টারনেট অ্যাক্সেস ব্লক করে দেয়।
- এই পরিস্থিতিতে ডেপ্লয়মেন্টটিকে পাবলিক ইন্টারনেটে অ্যাক্সেস দেওয়ার জন্য, আপনাকে অবশ্যই একটি সুরক্ষিত বহির্গমন পথ স্পষ্টভাবে কনফিগার করতে হবে যা আপনার VPC-এর মাধ্যমে ট্র্যাফিক রাউট করে।
- এটি সম্পন্ন করার প্রস্তাবিত উপায় হলো, আপনার VPC পরিধির ভিতরে একটি RFC1918 অ্যাড্রেস সহ একটি প্রক্সি সার্ভার স্থাপন করা এবং প্রক্সি VM-কে ইন্টারনেট অ্যাক্সেস করার অনুমতি দেওয়ার জন্য একটি ক্লাউড NAT গেটওয়ে তৈরি করা।
অতিরিক্ত তথ্যের জন্য, নিম্নলিখিত উৎসগুলো দেখুন:
একটি এজেন্ট স্থাপন করুন | ভার্টেক্স এআই-তে জেনারেটিভ এআই | গুগল ক্লাউড
ভার্টেক্স এআই রিসোর্সগুলির জন্য একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সেট আপ করুন | গুগল ক্লাউড
আপনি যা তৈরি করবেন
এই টিউটোরিয়ালে, আপনি প্রাইভেট সার্ভিস কানেক্ট (PSC) ইন্টারফেস সহ একটি পূর্ণাঙ্গ এজেন্ট ইঞ্জিন তৈরি করবেন, যা গ্রাহকের VPC-তে RFC1918 অ্যাড্রেস সহ ডেপ্লয় করা একটি প্রক্সি ভিএম-এর মাধ্যমে একটি পাবলিক সাইটে (https://api.frankfurter.app/) সংযোগ স্থাপন করতে দেবে। এই উদাহরণ ডেপ্লয়মেন্টটি VPC-SC সক্ষম প্রোজেক্টে অথবা সেইসব অ্যাডমিনিস্ট্রেটরদের জন্য প্রযোজ্য, যাদের টেন্যান্ট ভিপিসির পরিবর্তে গ্রাহকের নেটওয়ার্কের মাধ্যমে ইন্টারনেট নির্গমনের প্রয়োজন হয়।
চিত্র ১

আপনি কনজিউমার ভিপিসিতে (VPC) ডিএনএস পিয়ারিং (DNS peering) ব্যবহার করে একটি একক পিএসসি-নেটওয়ার্ক-অ্যাটাচমেন্ট (psc-network-attachment) তৈরি করবেন, যা এজেন্ট ইঞ্জিন (Agent Engine) হোস্টিং করা টেন্যান্ট প্রজেক্টে থাকা কনজিউমার নেটওয়ার্ক প্রক্সি-ভিএম (proxy-vm) রিজলভ (resolve) করবে এবং এর ফলে নিম্নলিখিত ব্যবহারের ক্ষেত্রগুলো (use cases) তৈরি হবে:
এজেন্ট ইঞ্জিন স্থাপন করুন এবং একটি প্রক্সি ভিএমকে এক্সপ্লিসিট প্রক্সি হিসেবে কনফিগার করুন, যাতে এটি https://api.frankfurter.app এই পাবলিক ইউআরএল-এ পৌঁছাতে পারে।
আপনি যা শিখবেন
- কীভাবে একটি নেটওয়ার্ক সংযুক্তি তৈরি করবেন
- একজন প্রযোজক কীভাবে নেটওয়ার্ক অ্যাটাচমেন্ট ব্যবহার করে একটি PSC ইন্টারফেস তৈরি করতে পারেন
- ডিএনএস পিয়ারিং ব্যবহার করে প্রডিউসার থেকে কনজিউমারের কাছে কীভাবে যোগাযোগ স্থাপন করা যায়
- ইন্টারনেট বহির্গমনের জন্য কীভাবে একটি প্রক্সি ভিএম স্থাপন এবং ব্যবহার করবেন
আপনার যা যা লাগবে
গুগল ক্লাউড প্রজেক্ট
আইএএম অনুমতি
- কম্পিউট নেটওয়ার্ক অ্যাডমিন (roles/compute.networkAdmin)
- কম্পিউট ইনস্ট্যান্স অ্যাডমিন (roles/compute.instanceAdmin)
- কম্পিউট সিকিউরিটি অ্যাডমিন (roles/compute.securityAdmin)
- ডিএনএস প্রশাসক (ভূমিকা/ডিএনএস.অ্যাডমিন)
- IAP-সুরক্ষিত টানেল ব্যবহারকারী (roles/iap.tunnelResourceAccessor)
- লগিং অ্যাডমিন (roles/logging.admin)
- নোটবুক অ্যাডমিন (roles/notebooks.admin)
- প্রজেক্ট আইএএম অ্যাডমিন (roles/resourcemanager.projectIamAdmin)
- সার্ভিস অ্যাকাউন্ট অ্যাডমিন (roles/iam.serviceAccountAdmin)
- পরিষেবা ব্যবহার প্রশাসক (roles/serviceusage.serviceUsageAdmin)
২. শুরু করার আগে
টিউটোরিয়ালটি সমর্থন করার জন্য প্রজেক্টটি আপডেট করুন।
এই টিউটোরিয়ালটিতে ক্লাউড শেলে 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 "iap.googleapis.com"
এপিআইগুলো সফলভাবে সক্রিয় করা হয়েছে কিনা তা যাচাই করুন।
gcloud services list --enabled
৩. গ্রাহক সেটআপ
কনজিউমার ভিপিসি তৈরি করুন
এই VPC-টি একটি গ্রাহক প্রকল্পে অবস্থিত। এই VPC-তে নিম্নলিখিত রিসোর্সগুলি তৈরি করা হবে।
- ভোক্তা সাবনেট
- নেটওয়ার্ক সংযুক্তি সাবনেট
- ক্লাউড রাউটার (ক্লাউড NAT-এর জন্য আবশ্যক)
- ক্লাউড ন্যাট
ক্লাউড শেলের ভিতরে, নিম্নলিখিতগুলি সম্পাদন করুন:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
কনজিউমার সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে প্রক্সি ভিএম-এর জন্য সাবনেট তৈরি করুন:
gcloud compute networks subnets create rfc1918-subnet1 --project=$projectid --range=10.10.10.0/28 --network=consumer-vpc --region=us-central1
প্রাইভেট সার্ভিস কানেক্ট নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট তৈরি করুন
ক্লাউড শেলের ভিতরে, PSC নেটওয়ার্ক অ্যাটাচমেন্টের জন্য সাবনেট তৈরি করুন:
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 গেটওয়ে তৈরি করুন। আমরা ফ্রাঙ্কফুর্টার এপিআই (https://api.frankfurter.app/)-এর পাবলিক আইপিতে অ্যাক্সেস যাচাই করার জন্য লগিং ব্যবহার করব।
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
৫. কনজিউমার ভিএম ইনস্ট্যান্স তৈরি করুন
ক্লাউড শেলের মধ্যে, প্রক্সি-ভিএম (proxy-vm) নামে কনজিউমার ভিএম ইনস্ট্যান্সটি তৈরি করুন, যা এজেন্ট ইঞ্জিনের জন্য সুস্পষ্ট প্রক্সি হিসেবে কাজ করবে। আমরা HTTP ট্র্যাফিক প্রক্সি করার জন্য অ্যাপ্লিকেশন হিসেবে টিনিপ্রক্সি (tinyproxy) ব্যবহার করব।
gcloud compute instances create proxy-vm \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--can-ip-forward \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=rfc1918-subnet1 \
--shielded-secure-boot \
--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 নেটওয়ার্ক অ্যাটাচমেন্টের নাম ( psc-network-attachment লিখে রাখুন, যা প্রডিউসার প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস তৈরি করার সময় ব্যবহার করবে।
ক্লাউড কনসোলে PSC নেটওয়ার্ক অ্যাটাচমেন্ট URL দেখতে, নিম্নলিখিত লিঙ্কে যান:
নেটওয়ার্ক পরিষেবা → ব্যক্তিগত পরিষেবা সংযোগ → নেটওয়ার্ক সংযুক্তি → পিএসসি-নেটওয়ার্ক-সংযুক্তি

৭. ব্যক্তিগত ডিএনএস জোন
আপনি demo.com এর জন্য একটি ক্লাউড ডিএনএস জোন তৈরি করবেন এবং আপনার প্রক্সি-ভিএম-এর আইপি অ্যাড্রেসগুলোকে নির্দেশ করে এমন একটি এ রেকর্ড দিয়ে তা পূরণ করবেন। পরবর্তীতে, এজেন্ট ইঞ্জিনে ডিএনএস পিয়ারিং স্থাপন করা হবে, যা কনজিউমারের ডিএনএস রেকর্ডগুলোতে অ্যাক্সেসের সুযোগ দেবে।
ক্লাউড শেলের ভিতরে, demo.com নামে একটি DNS নাম তৈরি করতে নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন।
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"
DNS A রেকর্ডের জন্য ব্যবহৃত ইনস্ট্যান্সগুলোর আইপি অ্যাড্রেস সংগ্রহ ও সংরক্ষণ করুন।
ক্লাউড শেলের ভিতরে, ভিএম ইনস্ট্যান্সগুলোর উপর একটি বর্ণনা (describe) চালান।
gcloud compute instances describe proxy-vm --zone=us-central1-a | grep networkIP:
ক্লাউড শেলের ভিতরে, proxy-vm.demo.com ভিএম-এর জন্য রেকর্ড সেট তৈরি করুন এবং আপনার এনভায়রনমেন্টের আউটপুট অনুযায়ী আইপি অ্যাড্রেস আপডেট করা নিশ্চিত করুন।
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-এর প্রক্সি-ভিএম-এ অ্যাক্সেস করার অনুমতি দেবে।
ক্লাউড শেলে ইনগ্রেস ফায়ারওয়াল নিয়মটি তৈরি করুন।
gcloud compute firewall-rules create allow-access-to-compute \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--destination-ranges="10.10.10.0/28" \
--enable-logging
৮. একটি জুপিটার নোটবুক তৈরি করুন
নিম্নলিখিত বিভাগে একটি জুপিটার নোটবুক তৈরি করার পদ্ধতি বর্ণনা করা হয়েছে। এই নোটবুকটি ইন্টারনেট ইগ্রেসের জন্য একটি সুস্পষ্ট প্রক্সিকে লক্ষ্য করে এজেন্ট ইঞ্জিন স্থাপন করতে ব্যবহৃত হবে।
একটি ব্যবহারকারী পরিচালিত পরিষেবা অ্যাকাউন্ট তৈরি করুন
পরবর্তী অংশে, আপনি একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন যা এই টিউটোরিয়ালে ব্যবহৃত 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"
৯. সুস্পষ্ট প্রক্সি আপডেট করুন
পরবর্তী অংশে, আপনাকে এক্সপ্লিসিট প্রক্সিতে 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
১০. একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স তৈরি করুন।
পরবর্তী অংশে, পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্ট, 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
ক্লাউড শেলের ভিতরে আপনার প্রজেক্ট নম্বর সেট করুন।
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"
ডিফল্ট পরিষেবা অ্যাকাউন্ট আপডেট
আপনার ডিফল্ট সার্ভিস অ্যাকাউন্টকে Vertex AI-তে অ্যাক্সেস দিন । মনে রাখবেন, অ্যাক্সেস পরিবর্তনের বিষয়টি কার্যকর হতে কিছুটা সময় লাগতে পারে।
ক্লাউড শেলের ভিতরে, ডিফল্ট সার্ভিস অ্যাকাউন্টটিকে aiplatform.user রোল দিয়ে আপডেট করুন।
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
১২. প্রক্সি ভিএম টিসিপিডাম্প
এজেন্ট ইঞ্জিন থেকে আইপি সংযোগ যাচাই করার জন্য, আমরা TCPDUMP ব্যবহার করতে পারি। এর মাধ্যমে, এজেন্ট ইঞ্জিন থেকে পাবলিক ইউআরএল-এ গেট রিকোয়েস্ট পাঠানোর সময় আমরা পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট, 192.168.10.0/28 থেকে উদ্ভূত যোগাযোগ পর্যবেক্ষণ করতে পারব।
ক্লাউড শেল থেকে প্রক্সি ভিএম-এ ssh করুন।
gcloud compute ssh --zone us-central1-a "proxy-vm" --tunnel-through-iap --project $projectid
প্রক্সি-ভিএম ওএস থেকে tcpdump চালান।
sudo tcpdump -i any net 192.168.10.0/28 -nn
১৩. এজেন্ট ইঞ্জিন স্থাপন করুন
দ্রষ্টব্য: এই অংশের কাজগুলো সম্পন্ন করতে আমরা GCP কনসোল এবং JupyterLab নোটবুক ব্যবহার করব।
পরবর্তী অংশে, আপনি এমন একটি নোটবুক তৈরি করবেন যা নিম্নলিখিত কাজগুলো সম্পাদন করবে:
- বিনিময় হারের তথ্য পেতে ফ্রাঙ্কফুর্টার এপিআই (https://api.frankfurter.app/) ব্যবহার করে।
- FQDN proxy-vm.demo.com ব্যবহার করে কনজিউমারের vpc-তে থাকা proxy-vm-কে টার্গেট করে একটি সুস্পষ্ট প্রক্সি (proxy_server)-কে রেফারেন্স করে।
- dnsPeeringConfigs "domain": "demo.com." সংজ্ঞায়িত করুন।
Vertex AI Workbench ইনস্ট্যান্সে ট্রেনিং জবটি চালান।
- গুগল ক্লাউড কনসোলে, Vertex AI → Workbench-এ যান।
- আপনার Vertex AI Workbench ইনস্ট্যান্সের নামের (workbench-tutorial) পাশে, Open JupyterLab-এ ক্লিক করুন। আপনার Vertex AI Workbench ইনস্ট্যান্সটি JupyterLab-এ খুলে যাবে।
- ফাইল > নতুন > নোটবুক নির্বাচন করুন
- কার্নেল নির্বাচন করুন > পাইথন ৩
প্রয়োজনীয় পাইথন লাইব্রেরি ইনস্টল করুন: এজেন্ট ইঞ্জিনের জন্য প্রয়োজনীয় লাইব্রেরিগুলো ইনস্টল করুন, যার মধ্যে রয়েছে pyyaml, google-cloud-aiplatform, cloudpickle, google-cloud-api-keys, এবং langchain-google-vertexai।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
!pip install pyyaml
!pip install google-cloud-aiplatform[agent_engines,langchain]==1.96.0
!pip install cloudpickle==3.1.1
!pip install google-cloud-api-keys
!pip install langchain-google-vertexai==2.0.24
জুপিটার নোটবুক কার্নেল পুনরায় চালু করুন: নিশ্চিত করুন যে নতুন ইনস্টল করা লাইব্রেরিগুলি সঠিকভাবে লোড হয়েছে।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
# Restart the notebook kernel after install, so you can run langchain successfully.
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
প্রজেক্ট ও বাকেট ভেরিয়েবল সেট করুন: আপনার গুগল ক্লাউড প্রজেক্ট আইডি, প্রজেক্ট নম্বর, সার্ভিসের নাম, জিসিএস ডিরেক্টরি, এন্ডপয়েন্ট, বাকেটের নাম এবং লোকেশন নির্ধারণ করুন।
সেলটি রান করার আগে নিম্নলিখিত ফিল্ডগুলি আপডেট করুন।
- PROJECT_ID = "আপনার প্রজেক্ট আইডি লিখুন"
- প্রজেক্ট_নম্বর = "আপনার প্রজেক্ট নম্বর লিখুন"
- BUCKET= "একটি অনন্য বালতির নাম লিখুন"
দ্রষ্টব্য: পরবর্তী ধাপে আমরা একটি ক্লাউড স্টোরেজ বাকেট তৈরি করতে BUCKET ভেরিয়েবলটি ব্যবহার করব।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন, এবং নিম্নলিখিতটি আপডেট ও রান করুন।
PROJECT_ID = "enter-your-projectid" #@param {type:"string"}
PROJECT_NUMBER = "enter-your-projectnumber" #@param {type:"string"}
SERVICE_NAME = "aiplatform" #@param ["autopush-aiplatform", "staging-aiplatform", "aiplatform"]
# @markdown Specify where your agent code should be written in GCS:
GCS_DIR = "reasoning-engine-test" #@param {type:"string"}
ENDPOINT = "https://us-central1-aiplatform.googleapis.com" # @param ["https://us-central1-aiplatform.googleapis.com", "https://us-central1-autopush-aiplatform.sandbox.googleapis.com", "https://us-central1-staging-aiplatform.sandbox.googleapis.com"]
BUCKET= "enter-a-unique-bucket-name" #@param {type:"string"}
LOCATION="us-central1" #@param {type:"string"}
একটি GCS বাকেট তৈরি করুন: এজেন্ট কোড সংরক্ষণের জন্য একটি ক্লাউড স্টোরেজ বাকেট তৈরি করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
!gcloud storage buckets create gs://{BUCKET}
নেটওয়ার্ক অ্যাটাচমেন্টের নাম নির্ধারণ করুন: আপনার প্রাইভেট সার্ভিস কানেক্ট নেটওয়ার্ক অ্যাটাচমেন্টের নাম উল্লেখ করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
NETWORK_ATTACHMENT_NAME = 'psc-network-attachment' #@param {type:"string"}
পাইথন ক্লায়েন্ট লাইব্রেরি প্রারম্ভিকীকরণ: গুগল ক্লাউড পরিষেবাগুলির জন্য প্রয়োজনীয় ক্লায়েন্ট লাইব্রেরি সেট আপ করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
import json
import pprint
import cloudpickle
from google import auth as google_auth
from google.auth.transport import requests as google_requests
from google.cloud import storage
import yaml
def get_identity_token():
"""Gets ID token for calling Cloud Run."""
credentials, _ = google_auth.default()
auth_request = google_requests.Request()
credentials.refresh(auth_request)
return credentials.id_token
if not GCS_DIR or "your_ldap" in GCS_DIR:
raise ValueError("GCS_DIR must be set or you must set your ldap.")
if not PROJECT_ID:
raise ValueError("PROJECT_ID must be set.")
client = storage.Client(project=PROJECT_ID)
bucket = client.get_bucket(BUCKET)
এজেন্ট এবং টুলস কনফিগার করুন: এক্সপ্লিসিট প্রক্সির মাধ্যমে ফ্রাঙ্কফুর্টার এপিআই ব্যবহার করে মুদ্রা বিনিময় হার সংগ্রহ করার জন্য StreamingAgent ক্লাস এবং get_exchange_rate ফাংশনটি সংজ্ঞায়িত করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিচের কনফিগারেশনটি চালান, নিম্নলিখিত গুরুত্বপূর্ণ বিষয়গুলো লক্ষ্য করুন:
- `def get_exchange_rate` ফাংশনটি বিনিময় হারের তথ্য সংগ্রহের জন্য ফ্রাঙ্কফুর্টার এপিআই (https://api.frankfurter.app/) ব্যবহার করবে।
- proxy_server = "http://proxy-vm.demo.com:8888" এই FQDN-টি কনজিউমার VPC-তে ডেপ্লয় করা প্রক্সি ভিএম-এর সাথে যুক্ত। পরবর্তী ধাপে FQDN-টি রিজলভ করার জন্য আমরা DNS পিয়ারিং ব্যবহার করছি।
from langchain_google_vertexai import ChatVertexAI
from langchain.agents import AgentExecutor
from langchain.agents.format_scratchpad.tools import format_to_tool_messages
from langchain.agents.output_parsers.tools import ToolsAgentOutputParser
from langchain.tools.base import StructuredTool
from langchain_core import prompts
from re import S
from typing import Callable, Sequence
import google.auth
import vertexai
class StreamingAgent:
def __init__(
self,
model: str,
tools: Sequence[Callable],
project_id: str,
):
self.model_name = model
self.tools = tools
self.project_id = project_id
def set_up(self):
"""All unpickle-able logic should go here.
The .set_up() method should not be called for an object that is being
prepared for deployment.
"""
creds, _ = google.auth.default(quota_project_id=self.project_id)
vertexai.init(project=self.project_id, location="us-central1", credentials=creds)
prompt = {
"input": lambda x: x["input"],
"agent_scratchpad": (
lambda x: format_to_tool_messages(x["intermediate_steps"])
),
} | prompts.ChatPromptTemplate.from_messages([
("user", "{input}"),
prompts.MessagesPlaceholder(variable_name="agent_scratchpad"),
])
llm = ChatVertexAI(model_name=self.model_name)
if self.tools:
llm = llm.bind_tools(tools=self.tools)
self.agent_executor = AgentExecutor(
agent=prompt | llm | ToolsAgentOutputParser(),
tools=[StructuredTool.from_function(tool) for tool in self.tools],
)
def query(self, input: str):
"""Query the application.
Args:
input: The user prompt.
Returns:
The output of querying the application with the given input.
"""
return self.agent_executor.invoke(input={"input": input})
def stream_query(self, input: str):
"""Query the application and stream the output.
Args:
input: The user prompt.
Yields:
Chunks of the response as they become available.
"""
for chunk in self.agent_executor.stream(input={"input": input}):
yield chunk
def get_exchange_rate(
currency_from: str = "USD",
currency_to: str = "EUR",
currency_date: str = "latest",
):
"""Retrieves the exchange rate between two currencies on a specified date.
Uses the Frankfurter API (https://api.frankfurter.app/) to obtain
exchange rate data.
Args:
currency_from: The base currency (3-letter currency code).
Defaults to "USD" (US Dollar).
currency_to: The target currency (3-letter currency code).
Defaults to "EUR" (Euro).
currency_date: The date for which to retrieve the exchange rate.
Defaults to "latest" for the most recent exchange rate data.
Can be specified in YYYY-MM-DD format for historical rates.
Returns:
dict: A dictionary containing the exchange rate information.
Example: {"amount": 1.0, "base": "USD", "date": "2023-11-24",
"rates": {"EUR": 0.95534}}
"""
import requests
proxy_server = "http://proxy-vm.demo.com:8888" # This is the VM's FQDN to reach the proxy vm in the consumers network
proxies = {
"http": proxy_server,
"https": proxy_server,
}
response = requests.get(
f"https://api.frankfurter.app/{currency_date}",
params={"from": currency_from, "to": currency_to},
proxies=proxies,
)
return response.json()
ক্লাউড স্টোরেজে এজেন্ট ফাইল আপলোড করুন: সিরিয়ালাইজড এজেন্ট এবং এর প্রয়োজনীয় ফাইলগুলো আপনার নির্ধারিত GCS বাকেটে আপলোড করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান:
# Upload files to Cloud Storage.
if not GCS_DIR:
raise ValueError("GCS_DIR must be set.")
FILE = "streaming_agent.pkl"
blob = bucket.blob(f"{GCS_DIR}/{FILE}")
with blob.open("wb") as f:
cloudpickle.dump(
StreamingAgent(
model="gemini-2.0-flash-001", # Required.
tools=[get_exchange_rate], # Optional.
project_id=PROJECT_ID
), f)
requirements = """
google-cloud-aiplatform[agent_engines,langchain]==1.96.0
cloudpickle==3.1.1
"""
blob = bucket.blob(f"{GCS_DIR}/requirements-streaming.txt")
blob.upload_from_string(requirements)
!gsutil ls gs://{BUCKET}/{GCS_DIR}
এজেন্ট ইঞ্জিন স্থাপন করুন: কনজিউমার ভিপিসি-তে প্রক্সি ভিএম-এর এফকিউডিএন (FQDN) রিজলভ করার জন্য, এজেন্ট ইঞ্জিনটিকে পিএসসি (PSC) ইন্টারফেস এবং ডিএনএস (DNS) পিয়ারিং দিয়ে কনফিগার করে স্থাপন করুন।
আপনার JupyterLab নোটবুকে, নিচের সেলটি তৈরি করে চালান এবং নিম্নলিখিত গুরুত্বপূর্ণ বিষয়গুলো লক্ষ্য করুন:
- demo.com ডোমেইন নেমটির জন্য dnsPeeringConfigs (dnsPeeringConfigs) ব্যবহার করে কনজিউমার VPC-গুলোর সাথে DNS পিয়ারিং কনফিগার করা হয়।
import requests
token = !gcloud auth application-default print-access-token
response = requests.post(
f"{ENDPOINT}/v1beta1/projects/{PROJECT_ID}/locations/{LOCATION}/reasoningEngines",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {token[0]}"
},
data=json.dumps({
"displayName": "PSC-I Explicit Proxy",
"description": "test psc-i agent + proxy vm",
"spec": {
"packageSpec": {
"pickleObjectGcsUri": f"gs://{BUCKET}/{GCS_DIR}/streaming_agent.pkl",
"requirementsGcsUri": f"gs://{BUCKET}/{GCS_DIR}/requirements-streaming.txt",
"pythonVersion": "3.10"
},
"deploymentSpec": {
"pscInterfaceConfig": {
"networkAttachment": NETWORK_ATTACHMENT_NAME,
"dnsPeeringConfigs": [
{
"domain": "demo.com.",
"targetProject": PROJECT_ID,
"targetNetwork": "consumer-vpc", #Consumer VPC
},
],
}
}
},
})
)
pprint.pprint(json.loads(response.content))
reasoning_engine_id = json.loads(response.content)["name"].split("/")[5]
pprint.pprint(reasoning_engine_id)
ডেপ্লয়মেন্টের অবস্থা নিরীক্ষণ করুন: এজেন্ট ইঞ্জিন ডেপ্লয়মেন্ট অপারেশনের অবস্থা পরীক্ষা করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
operation_id = json.loads(response.content)["name"].split("/")[7]
pprint.pprint(operation_id)
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
দ্রষ্টব্য: এই অপারেশনটি সম্পন্ন হতে প্রায় ৫ মিনিট সময় লাগতে পারে। অগ্রগতি পরীক্ষা করার জন্য সেলটি পুনরায় চালান। নিচের স্ক্রিনশটের মতো আউটপুট না দেখা পর্যন্ত অনুগ্রহ করে পরবর্তী বিভাগে যাবেন না।
# You can run this multiple times to check the status of the deployment operation, operation takes approx 5 min.
token = !gcloud auth application-default print-access-token
response = requests.get(
f"{ENDPOINT}/v1beta1/projects/{PROJECT_ID}/locations/{LOCATION}/operations/{operation_id} ",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {token[0]}"
}
)
pprint.pprint(json.loads(response.content))
একটি সফল দৌড়ের উদাহরণ:

ডেপ্লয় করা এজেন্টকে কোয়েরি করুন: ডেপ্লয় করা এজেন্ট ইঞ্জিনের কার্যকারিতা পরীক্ষা করার জন্য সেটিতে একটি কোয়েরি পাঠান।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান।
response = requests.post(
f"{ENDPOINT}/v1beta1/projects/{PROJECT_ID}/locations/{LOCATION}/reasoningEngines/{reasoning_engine_id}:query",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {token[0]}"
},
data=json.dumps({ "input": {"input": "What is the exchange rate from US dollars to Euro?"} })
)
print(response.text)
কোয়েরির ফলাফল স্ট্রিম করুন: এজেন্ট ইঞ্জিন কোয়েরি থেকে প্রাপ্ত আউটপুট স্ট্রিম করুন।
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান, যা কনজিউমারের VPC-তে থাকা এক্সপ্লিসিট প্রক্সি ব্যবহার করে পাবলিক URL-এ API কলটি ট্রিগার করবে।
token = !gcloud auth application-default print-access-token
print(f"{ENDPOINT}/v1beta1/projects/{PROJECT_ID}/locations/us-central1/reasoningEngines/{reasoning_engine_id}:streamQuery")
response = requests.post(
f"{ENDPOINT}/v1beta1/projects/{PROJECT_ID}/locations/us-central1/reasoningEngines/{reasoning_engine_id}:streamQuery",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {token[0]}"
},
data=json.dumps({ "input": {"input": "What is the exchange rate from US dollars to Euro?"} })
)
for chunk in response.iter_lines():
print(chunk.decode('utf-8'))
# pprint.pprint(json.loads(response.content))
একটি সফল দৌড়ের উদাহরণ:

১৪. Tcpdump যাচাইকরণ
অনুরোধ পোস্ট করার পর এজেন্ট ইঞ্জিন দ্বারা ব্যবহৃত পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট আইপি অ্যাড্রেস এবং প্রক্স-ভিএম-এর মধ্যেকার যোগাযোগের বিস্তারিত বিবরণ সম্বলিত tcpdump আউটপুটটি দেখুন।
user@proxy-vm:~$ sudo tcpdump -i any net 192.168.10.0/28 -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 22:17:53.983212 ens4 In IP 192.168.10.2.22261 > 10.10.10.2.8888: Flags [S], seq 3841740961, win 28800, options [mss 1440,sackOK,TS val 4245243253 ecr 0,nop,wscale 7], length 0 22:17:53.983252 ens4 Out IP 10.10.10.2.8888 > 192.168.10.2.22261: Flags [S.], seq 2232973833, ack 3841740962, win 64768, options [mss 1420,sackOK,TS val 2251247643 ecr 4245243253,nop,wscale 7], length 0 22:17:53.985167 ens4 In IP 192.168.10.2.22261 > 10.10.10.2.8888: Flags [.], ack 1, win 225, options [nop,nop,TS val 4245243256 ecr 2251247643], length 0 22:17:53.986476 ens4 In IP 192.168.10.2.22261 > 10.10.10.2.8888: Flags [P.], seq 1:45, ack 1, win 16384, options [nop,nop,TS val 4245243256 ecr 2251247643], length 44 22:17:53.986485 ens4 Out IP 10.10.10.2.8888 > 192.168.10.2.22261: Flags [.], ack 45, win 506, options [nop,nop,TS val 2251247646 ecr 4245243256], length 0 22:17:54.043347 ens4 Out IP 10.10.10.2.8888 > 192.168.10.2.22261: Flags [P.], seq 1:71, ack 45, win 506, options [nop,nop,TS val 2251247703 ecr 4245243256], length 70
১৫. পিএসসি ইন্টারফেস যাচাইকরণ
এছাড়াও, এজেন্ট ইঞ্জিন দ্বারা ব্যবহৃত নেটওয়ার্ক অ্যাটাচমেন্ট আইপিগুলো দেখতে নিম্নলিখিত লিঙ্কে যান:
নেটওয়ার্ক পরিষেবা → ব্যক্তিগত পরিষেবা সংযোগ → নেটওয়ার্ক সংযুক্তি → পিএসসি-নেটওয়ার্ক-সংযুক্তি
টেন্যান্ট প্রজেক্ট নির্বাচন করুন (প্রজেক্টের নামের শেষে -tp থাকলে)

চিহ্নিত ক্ষেত্রটি পিএসসি নেটওয়ার্ক অ্যাটাচমেন্ট থেকে এজেন্ট ইঞ্জিন দ্বারা ব্যবহৃত আইপি অ্যাড্রেস নির্দেশ করে।

১৬. ক্লাউড লগিং যাচাইকরণ
প্রক্সি-ভিএম টিসিপিডাম্প সেশন থেকে বেরিয়ে আসুন এবং সংশ্লিষ্ট পাবলিক আইপি অ্যাড্রেসটি পাওয়ার জন্য Frankfurter api.frankfurter.app-এ একটি পিং করুন।
ping -c4 api.frankfurter.app
উদাহরণে api.frankfurter.app-এর পাবলিক আইপি হিসেবে 104.26.1.198-কে চিহ্নিত করা হয়েছে।
user@proxy-vm:~$ ping -c4 api.frankfurter.app
PING api.frankfurter.app (104.26.1.198) 56(84) bytes of data.
64 bytes from 104.26.1.198 (104.26.1.198): icmp_seq=1 ttl=61 time=10.9 ms
64 bytes from 104.26.1.198 (104.26.1.198): icmp_seq=2 ttl=61 time=10.9 ms
64 bytes from 104.26.1.198 (104.26.1.198): icmp_seq=3 ttl=61 time=10.9 ms
64 bytes from 104.26.1.198 (104.26.1.198): icmp_seq=4 ttl=61 time=10.9 ms
চলুন NAT লগিং দেখে নেওয়া যাক 104.26.1.198-এর জন্য কোনো ট্র্যাফিক দেখা যাচ্ছে কিনা।
নিম্নলিখিত স্থানে যান:
পর্যবেক্ষণ → লগ এক্সপ্লোরার
নিম্নলিখিত ফিল্টারটি ব্যবহার করুন:
resource.type="nat_gateway"

সময়কাল নির্বাচন করুন, তারপর কোয়েরি চালান।

লগ এন্ট্রিটি বিস্তারিত করুন যা api.frankfurter.app-এর (গন্তব্য) পাবলিক আইপি (104.26.1.198), উৎস আইপি অ্যাড্রেস এবং প্রক্সি-ভিএম-এর নাম শনাক্ত করে, যা ইন্টারনেট বহির্গমনের জন্য সুস্পষ্ট প্রক্সির ব্যবহারকে বৈধতা দেয়।

১৭. পরিষ্কার করা
আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান, যা Agent Engine ডিপ্লয়মেন্টটি মুছে ফেলার প্রক্রিয়া শুরু করবে।
token = !gcloud auth application-default print-access-token
response = requests.delete(
f"{ENDPOINT}/v1beta1/projects/{PROJECT_ID}/locations/us-central1/reasoningEngines/{reasoning_engine_id}",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {token[0]}"
},
)
print(response.text)
ক্লাউড শেল থেকে টিউটোরিয়াল উপাদানগুলো মুছে ফেলুন।
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 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 compute networks delete consumer-vpc --quiet
১৮. অভিনন্দন
অভিনন্দন, আপনি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সহ স্থাপন করা এজেন্ট ইঞ্জিনটি সফলভাবে কনফিগার এবং যাচাই করেছেন, যেখানে একটি সুস্পষ্ট প্রক্সির মাধ্যমে ইন্টারনেট নির্গমন সম্পন্ন করা হয়েছে।
আপনি কনজিউমার ইনফ্রাস্ট্রাকচার তৈরি করেছেন এবং একটি নেটওয়ার্ক অ্যাটাচমেন্ট যুক্ত করেছেন, যা প্রডিউসারকে কনজিউমার ও প্রডিউসারের মধ্যে যোগাযোগ স্থাপন করার জন্য একটি মাল্টি-নিক ভিএম (VM) তৈরি করার সুযোগ দিয়েছে। আপনি শিখেছেন কীভাবে একটি এক্সপ্লিসিট প্রক্সি এবং ডিএনএস পিয়ারিং তৈরি করতে হয়, যা ইন্টারনেট সংযোগের সুযোগ করে দেয়।
কসমোপাপ মনে করে টিউটোরিয়ালগুলো অসাধারণ!!

এরপর কী?
আরও পড়ুন ও ভিডিও
রেফারেন্স নথি
- ভার্টেক্স এআই নেটওয়ার্কিং অ্যাক্সেসের সংক্ষিপ্ত বিবরণ | গুগল ক্লাউড
- প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেসের মাধ্যমে ভার্টেক্স এআই পরিষেবা অ্যাক্সেস করার বিষয়ে | গুগল ক্লাউড
- ভার্টেক্স এআই এজেন্ট ইঞ্জিনের সাথে প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস ব্যবহার করা
- ভার্টেক্স এআই রিসোর্সগুলির জন্য একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস সেট আপ করুন | গুগল ক্লাউড