এজেন্ট ইঞ্জিন (ADK) PSC SWP ইন্টিগ্রেশন

১. ভূমিকা

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

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

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

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

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

  • PSC-ইন্টারফেস VPC নেটওয়ার্ক দ্বারা চিহ্নিত VPC অথবা অন-প্রেমেসিস ভিত্তিক গন্তব্যস্থলে ট্র্যাফিক রাউটিং করতে সক্ষম।
  • এজেন্ট ইঞ্জিন দ্বারা ব্যবহৃত নেটওয়ার্ক অ্যাটাচমেন্ট থেকে ভিপিসি নেটওয়ার্কে পৌঁছানোর পরিধি সীমিত করার জন্য, ইগ্রেস ফায়ারওয়াল নিয়ম প্রয়োগ করাই সর্বোত্তম পন্থা।
  • এজেন্ট ইঞ্জিনের নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট থেকে উদ্ভূত নেটওয়ার্ক বহির্গমন ট্র্যাফিকের পরিধি সীমিত করার জন্য, একটি VPC বহির্গমন ফায়ারওয়াল নিয়ম স্থাপন করা উচিত। এই নিয়মটি এজেন্ট ইঞ্জিন থেকে SWP-তে ট্র্যাফিককে স্পষ্টভাবে অনুমতি দেবে, এবং একই সাথে অন্য সমস্ত বহির্গামী ট্র্যাফিককে অস্বীকার করবে।

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

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

সুরক্ষিত ওয়েব প্রক্সি

সিকিওর ওয়েব প্রক্সি একটি পরিচালিত, ক্লাউড-নেটিভ পরিষেবা যা আপনার বহির্গামী ট্র্যাফিকের (HTTP/HTTPS) জন্য সূক্ষ্ম নিয়ন্ত্রণ এবং নিরাপত্তা প্রদান করে। এটি একটি কেন্দ্রীয় গেটওয়ে হিসেবে কাজ করে, যা আপনাকে PSC ইন্টারফেসের সাথে স্থাপন করা এজেন্ট ইঞ্জিন থেকে VPC রিসোর্স, যেমন VM, GKE, ইন্টারনেট এবং মাল্টিক্লাউড পরিবেশে শুরু হওয়া সংযোগগুলিতে নিরাপত্তা নীতি প্রয়োগ করতে দেয়।

এটি কী সমাধান করে

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

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

একটি এজেন্ট স্থাপন করুন | ভার্টেক্স এআই-তে জেনারেটিভ এআই | গুগল ক্লাউড

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

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

এই টিউটোরিয়ালে, আপনি ADK লাইব্রেরি ব্যবহার করে নিম্নলিখিত কাজগুলো সম্পাদনের জন্য SWP-এর সাথে সমন্বিত প্রাইভেট সার্ভিস কানেক্ট (PSC) ইন্টারফেসসহ একটি পূর্ণাঙ্গ এজেন্ট ইঞ্জিন তৈরি করবেন:

  • প্রক্সি কনফিগারেশনে ব্যবহৃত SWP-এর Fully Qualified Domain Name (FUND) রিজলভ করার জন্য এজেন্ট ইঞ্জিনে DNS পিয়ারিং স্থাপন করুন।
  • কনজিউমারের VPC-তে স্থাপন করা একটি RFC1918 অ্যাড্রেসযুক্ত সিকিউর ওয়েব প্রক্সির মাধ্যমে একটি পাবলিক সাইটে (https://api.frankfurter.app/) সংযোগের অনুমতি দিন।
  • নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট থেকে SWP-তে ট্র্যাফিকের অনুমতি দিন এবং অন্য সবকিছু অস্বীকার করুন।

চিত্র ১

565e9eb07ef18f44.png

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

  • কীভাবে একটি নেটওয়ার্ক সংযুক্তি তৈরি করবেন
  • একজন প্রযোজক কীভাবে নেটওয়ার্ক অ্যাটাচমেন্ট ব্যবহার করে একটি PSC ইন্টারফেস তৈরি করতে পারেন
  • ডিএনএস পিয়ারিং ব্যবহার করে প্রডিউসার থেকে কনজিউমারের কাছে কীভাবে যোগাযোগ স্থাপন করা যায়
  • ইন্টারনেট বহির্গমনের জন্য কীভাবে একটি SWP স্থাপন এবং ব্যবহার করবেন
  • এজেন্ট ইঞ্জিনের নেটওয়ার্ক রিচেবিলিটি কমাতে ইগ্রেস ফায়ারওয়াল নিয়ম কীভাবে নির্ধারণ করবেন

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

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

আইএএম অনুমতি

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

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

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

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

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 enable "networksecurity.googleapis.com"
gcloud services enable "networkservices.googleapis.com"
gcloud services enable "cloudresourcemanager.googleapis.com"

এপিআইগুলো সফলভাবে সক্রিয় করা হয়েছে কিনা তা যাচাই করুন।

gcloud services list --enabled

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

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

এই VPC-টি একটি গ্রাহক প্রকল্পে অবস্থিত। এই VPC-তে নিম্নলিখিত রিসোর্সগুলি তৈরি করা হবে।

  • ভোক্তা সাবনেট
  • নেটওয়ার্ক সংযুক্তি সাবনেট
  • শুধুমাত্র প্রক্সি সাবনেট
  • ফায়ারওয়াল নিয়ম
  • ক্লাউড ডিএনএস

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

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

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

ক্লাউড শেলের ভিতরে, SWP-এর জন্য সাবনেট তৈরি করুন:

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

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

ক্লাউড শেলের ভিতরে, PSC নেটওয়ার্ক অ্যাটাচমেন্টের জন্য সাবনেট তৈরি করুন:

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

আঞ্চলিক প্রক্সি সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, সিকিউর ওয়েব প্রক্সি এবং রিজিওনাল ইন্টারনাল/এক্সটার্নাল অ্যাপ্লিকেশন লোড ব্যালেন্সারের মতো এনভয়-ভিত্তিক প্রোডাক্টগুলোর জন্য প্রয়োজনীয় প্রক্সি-অনলি সাবনেট তৈরি করুন। –purpose ফ্ল্যাগটি অবশ্যই REGIONAL_MANAGED_PROXY-তে সেট করতে হবে:

gcloud compute networks subnets create proxy-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=consumer-vpc \
  --range=100.100.10.0/26

নোটবুক সাবনেট তৈরি করুন

ক্লাউড শেলের ভিতরে, নোটবুক ইনস্ট্যান্সের জন্য সাবনেট তৈরি করুন:

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

৪. সুরক্ষিত ওয়েব প্রক্সি তৈরি করুন

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

এই পলিসিতে সেই নিয়মাবলী থাকবে যা সেশন ম্যাচ, host() == 'api.frankfurter.app' এবং অ্যাপ্লিকেশন ম্যাচ request.method == 'GET' উপর ভিত্তি করে সিকিওর ওয়েব প্রক্সির মাধ্যমে ট্র্যাফিক নিয়ন্ত্রণ করে।

নিচের ধাপগুলোতে, YOUR-PROJECT-ID পরিবর্তন করে আপনার প্রজেক্ট আইডি দিন।

ক্লাউড শেলের ভিতরে, একটি policy.yaml ফাইল তৈরি করুন:

cat > policy.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/my-swp-policy 
description: "My basic SWP policy" 
EOF

ক্লাউড শেলের ভিতরে, পলিসিটি ইম্পোর্ট করুন:

gcloud network-security gateway-security-policies import my-swp-policy \
    --source=policy.yaml \
    --location=us-central1

নিরাপদ ওয়েব প্রক্সি নিয়ম তৈরি করুন

কোন ট্র্যাফিক অনুমোদিত বা প্রত্যাখ্যাত হবে তা নির্দিষ্ট করতে পলিসির মধ্যে নিয়ম নির্ধারণ করুন। নিয়মগুলো অগ্রাধিকারের ভিত্তিতে মূল্যায়ন করা হয়।

ক্লাউড শেলের ভিতরে, এজেন্ট ইঞ্জিন দ্বারা ব্যবহৃত ইন্টারনেট এন্ডপয়েন্ট api.frankfurter.app-এ অ্যাক্সেসের অনুমতি দেওয়ার জন্য একটি rule.yaml ফাইল তৈরি করুন:

cat > rule.yaml << EOF
name: "projects/$projectid/locations/us-central1/gatewaySecurityPolicies/my-swp-policy/rules/allow-example"
description: "Allow frankfurter API"
enabled: true
priority: 10
basicProfile: ALLOW
sessionMatcher: "host() == 'api.frankfurter.app'"
EOF

ক্লাউড শেলে, নিরাপত্তা নীতি নিয়ম তৈরি করুন:

gcloud network-security gateway-security-policies rules import allow-example \
    --source=rule.yaml \
    --location=us-central1 \
    --gateway-security-policy=my-swp-policy

নিরাপদ ওয়েব প্রক্সি নিয়ম তৈরি করুন

এক্সপ্লিসিট রাউটিং মোডে ডেপ্লয় করা SWP ইনস্ট্যান্সটি এমনভাবে তৈরি করতে হবে, যাতে এজেন্ট ইঞ্জিন গেটওয়ে YAML ফাইলে সংজ্ঞায়িত ADK প্রক্সি কনফিগারেশনের মধ্যে SWP-এর IP অ্যাড্রেস বা FQDN উল্লেখ করতে বাধ্য থাকে। এই কনফিগারেশনটি ইনস্ট্যান্সটিকে সংশ্লিষ্ট পলিসি, নেটওয়ার্ক এবং সাবনেটের সাথেও সংযুক্ত করে।

ক্লাউড শেলের ভিতরে, SWP ডেপ্লয় করার জন্য ব্যবহৃত gateway.yaml ফাইলটি তৈরি করুন।

আপনার পরিবেশের বিবরণ দিয়ে নিম্নলিখিত ভেরিয়েবলগুলো—PROJECT_ID, REGION, NETWORK_NAME, এবং PROXY_ONLY_SUBNET_NAME—আপডেট করার পর YAML ফাইলটি অবশ্যই সেভ করুন। নির্দিষ্ট করা পোর্ট 8888 হলো বাইরের টানেল পোর্ট, যা এজেন্ট ইঞ্জিনের ভেতরের প্রক্সি কনফিগারেশনের সাথে ম্যাপ করা আছে।

cat > gateway.yaml << EOF
name: "projects/$projectid/locations/us-central1/gateways/my-swp-instance"
type: SECURE_WEB_GATEWAY
ports: [8888]
addresses: ["10.10.10.5"]
gatewaySecurityPolicy: "projects/$projectid/locations/us-central1/gatewaySecurityPolicies/my-swp-policy"
network: "projects/$projectid/global/networks/consumer-vpc"
subnetwork: "projects/$projectid/regions/us-central1/subnetworks/swp-subnet"
routingMode: EXPLICIT_ROUTING_MODE
EOF

ক্লাউড শেলের ভিতরে, গেটওয়েটি ইম্পোর্ট করুন:

gcloud network-services gateways import my-swp-instance \
    --source=gateway.yaml \
    --location=us-central1

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

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

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

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

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 দেখতে, নিম্নলিখিত লিঙ্কে যান:

Network Services → Private Service Connect → Network Attachment → psc-network-attachment

15f80b46c3a0332d.png

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

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

ক্লাউড শেলের ভিতরে, 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 রেকর্ডের জন্য ব্যবহৃত SWP-এর IP Address-গুলো সংগ্রহ ও সংরক্ষণ করুন।

ক্লাউড শেলের ভিতরে, swp, my-swp-instance-টির বিরুদ্ধে একটি describe অপারেশন চালান:

gcloud network-services gateways describe my-swp-instance --location=us-central1

ক্লাউড শেলের ভিতরে, SWP (swp.demo.com)-এর জন্য রেকর্ড সেট তৈরি করুন এবং আপনার পরিবেশের আউটপুট অনুযায়ী আইপি অ্যাড্রেস আপডেট করা নিশ্চিত করুন।

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

ফায়ারওয়াল কনফিগারেশন

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

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

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

gcloud compute firewall-rules create allow-access-to-swp \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=EGRESS \
    --priority=1000 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="10.10.10.5/32" \
    --enable-logging

ক্লাউড শেলে, নেটওয়ার্ক অ্যাটাচমেন্ট থেকে আসা সমস্ত ট্র্যাফিক অস্বীকার করে একটি ইগ্রেস ফায়ারওয়াল নিয়ম তৈরি করুন:

gcloud compute firewall-rules create deny-all \
    --network=consumer-vpc \
    --action=DENY \
    --rules=ALL \
    --direction=EGRESS \
    --priority=65534 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="0.0.0.0/0" \
    --enable-logging

৭. থ্রেট ইন্টেলিজেন্স নিশ্চিত করতে ভিপিসি নেটওয়ার্কের জন্য একটি ফায়ারওয়াল পলিসি তৈরি করুন:

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

ক্লাউড শেলে, গ্লোবাল ফায়ারওয়াল পলিসি তৈরি করুন:

gcloud compute network-firewall-policies create psc-secure-policy \
    --global \
    --description="Policy to protect VPC with Threat Intelligence"

ক্লাউড শেলে, পলিসিটিকে আপনার VPC-এর সাথে সংযুক্ত করুন:

gcloud compute network-firewall-policies associations create \
    --firewall-policy=psc-secure-policy \
    --network=consumer-vpc \
    --name=psc-swp-association \
    --global-firewall-policy

ক্লাউড শেলে, থ্রেট ইন্টেলিজেন্স রুলগুলো যোগ করুন:

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

gcloud compute network-firewall-policies rules create 100 \
    --firewall-policy=psc-secure-policy \
    --action=deny \
    --direction=EGRESS \
    --dest-threat-intelligence=iplist-tor-exit-nodes \
    --layer4-configs=all \
    --enable-logging \
    --description="Block anonymous Tor traffic" \
    --global-firewall-policy
gcloud compute network-firewall-policies rules create 110 \
    --firewall-policy=psc-secure-policy \
    --action=deny \
    --direction=EGRESS \
    --dest-threat-intelligence=iplist-known-malicious-ips \
    --layer4-configs=all \
    --enable-logging \
    --description="Block known botnets and malware sources" \
    --global-firewall-policy
gcloud compute network-firewall-policies rules create 120 \
    --firewall-policy=psc-secure-policy \
    --action=deny \
    --direction=EGRESS \
    --dest-threat-intelligence=iplist-anon-proxies \
    --layer4-configs=all \
    --enable-logging \
    --description="Block Known Anonymous Proxies" \
    --global-firewall-policy
gcloud compute network-firewall-policies rules create 130 \
    --firewall-policy=psc-secure-policy \
    --action=deny \
    --direction=EGRESS \
    --dest-threat-intelligence=iplist-crypto-miners \
    --layer4-configs=all \
    --enable-logging \
    --description="Block Crypto Miners (Prevent unauthorized resource usage)" \
    --global-firewall-policy

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

নিম্নলিখিত বিভাগে একটি জুপিটার নোটবুক তৈরি করার পদ্ধতি বর্ণনা করা হয়েছে। এই নোটবুকটি ইন্টারনেট ইগ্রেসের জন্য একটি সুস্পষ্ট প্রক্সিকে লক্ষ্য করে এজেন্ট ইঞ্জিন স্থাপন করতে ব্যবহৃত হবে।

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

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

এই নোটবুক ইনস্ট্যান্স থেকে ট্র্যাফিক ফরওয়ার্ড করার জন্য বিদ্যমান সিকিওর ওয়েব প্রক্সিতে আরেকটি নিয়ম যোগ করুন:

ক্লাউড শেলে, একটি টেক্সট এডিটর ব্যবহার করে rule-notebook.yaml ফাইলটি তৈরি করুন এবং আপনার প্রজেক্ট আইডি দিয়ে YAML ফাইলটি আপডেট করতে ভুলবেন না।

cat > rule-notebook.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/my-swp-policy/rules/allow-notebook-subnet
description: Allow Internet access for notebook subnet
enabled: true
priority: 2
basicProfile: ALLOW
sessionMatcher: inIpRange(source.ip,'192.168.20.2')
EOF

ক্লাউড শেলে, নিরাপত্তা নীতি নিয়ম তৈরি করুন:

gcloud network-security gateway-security-policies rules import allow-notebook-subnet \
    --source=rule-notebook.yaml \
    --location=us-central1 \
    --gateway-security-policy=my-swp-policy

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

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

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"

১১. এজেন্ট ইঞ্জিন স্থাপন করুন

দ্রষ্টব্য: এই অংশের কাজগুলো সম্পন্ন করতে আমরা GCP কনসোল এবং JupyterLab নোটবুক ব্যবহার করব।

পরবর্তী অংশে, আপনি এমন একটি নোটবুক তৈরি করবেন যা নিম্নলিখিত কাজগুলো সম্পাদন করবে:

  • বিনিময় হারের তথ্য পেতে ফ্রাঙ্কফুর্টার এপিআই (https://api.frankfurter.app/) ব্যবহার করে।
  • FQDN swp.demo.com ব্যবহার করে কনজিউমারের vpc-তে থাকা SWP-কে টার্গেট করার জন্য একটি সুস্পষ্ট প্রক্সি (proxy_server) রেফারেন্স করা হয়েছে।
  • dnsPeeringConfigs "domain": "demo.com." সংজ্ঞায়িত করুন।

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

  • গুগল ক্লাউড কনসোলে, Vertex AI → Workbench এ যান।
  • আপনার Vertex AI Workbench ইনস্ট্যান্সের নামের (workbench-tutorial) পাশে, Open JupyterLab-এ ক্লিক করুন। আপনার Vertex AI Workbench ইনস্ট্যান্সটি JupyterLab-এ খুলে যাবে।
  • File > New > Notebook নির্বাচন করুন
  • Kernel > Python 3

প্রয়োজনীয় পাইথন লাইব্রেরি ইনস্টল করুন: এজেন্ট ইঞ্জিনের জন্য প্রয়োজনীয় লাইব্রেরিগুলো ইনস্টল করুন, যার মধ্যে রয়েছে pyyaml, google-cloud-aiplatform, cloudpickle, google-cloud-api-keys, এবং langchain-google-vertexai।

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

7b827a6a38bb5afc.png

!pip install --proxy http://10.10.10.5:8888 --upgrade google-cloud-aiplatform[agent_engines,adk]

নিম্নলিখিত কোড স্নিপেটে আপনার পরিবেশের উপর ভিত্তি করে নিম্নলিখিত ভেরিয়েবলগুলি সংজ্ঞায়িত করুন:

  • প্রজেক্ট_আইডি
  • বালতির নাম
  • এজেন্টের নাম

এই ল্যাবে, আপনি BUCKET_NAME এবং AGENT_NAME ভেরিয়েবলগুলো ব্যবহার করে আপনার গ্লোবালি উপলব্ধ স্টোরেজ বাকেটটি ইনিশিয়ালাইজ ও কনফিগার করবেন।

পরবর্তী অংশে PROXY_SERVER সংজ্ঞায়িত করা হয়েছে, যেমন swp.demo.com, যার নেম রেজোলিউশনের জন্য DNS পিয়ারিং প্রয়োজন। কনফিগারেশনে, AGENT_PEER_DOMAIN হিসেবে demo.com স্থাপন করা হয়েছে, যা AGENT_PEER_NETWORK-এর মধ্যে পূর্ববর্তী ধাপে তৈরি করা প্রাইভেট DNS জোন, consumer-vpc-এর সাথে সঙ্গতিপূর্ণ।

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

# --- Fundamental Project Configuration ---
PROJECT_ID = "YOUR_PROJECT_ID"
LOCATION = "us-central1" # e.g., "us-central1"
BUCKET_NAME = "YOUR_BUCKET_NAME" # A GCS bucket in the same location

# --- Agent Configuration ---
AGENT_NAME = "YOUR_AGENT_NAME"
MODEL = "gemini-2.5-flash" # Or another suitable model

# --- Network and Proxy Configuration ---
# The agent will call the Frankfurter API via this proxy
PROXY_SERVER = "http://swp.demo.com:8888"

# --- Deployment Configuration (PSC & DNS Peering) ---
# This should be a pre-existing Network Attachment
NETWORK_ATTACHMENT_NAME = f"projects/{PROJECT_ID}/regions/{LOCATION}/networkAttachments/psc-network-attachment"
# Optional DNS Peering config
AGENT_PEER_DOMAIN = "demo.com."
AGENT_PEER_NETWORK = "consumer-vpc"

# --- Initialize Vertex AI SDK ---
import vertexai
STAGING_BUCKET = f"gs://{BUCKET_NAME}"

vertexai.init(project=PROJECT_ID, location=LOCATION, staging_bucket=STAGING_BUCKET)

print(f"Vertex AI SDK initialized for project {PROJECT_ID} in {LOCATION}.")

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

!adk create $AGENT_NAME --model=$MODEL --project=$PROJECT_ID --region=$LOCATION

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং SWP-এর FQDN ও পোর্টের সাথে সঙ্গতিপূর্ণ প্রক্সি ভেরিয়েবলটি তৈরি করতে নিম্নলিখিত কমান্ডটি চালান।

import os
os.environ["PROXY_SERVER_URL"] = "http://swp.demo.com:8888"

নিম্নলিখিত কোড সেলটি এজেন্ট ইঞ্জিনের জন্য ইন্টারনেট এন্ডপয়েন্ট api.frankfurter.app অ্যাক্সেস করার সুস্পষ্ট প্রক্সি কনফিগারেশন প্রদর্শন করে, যেখানে SWP নির্দিষ্ট করা হয়েছে এবং PROXY_SERVER_TO_USE ব্যবহার করা হয়েছে যা os.environ["PROXY_SERVER_URL"].

import requests
# Use the globally defined proxy server URL
    proxies = {
       "http": PROXY_SERVER_TO_USE,
       "https": PROXY_SERVER_TO_USE,
    }
    try:
        response = requests.get(
            f"https://api.frankfurter.app/{currency_date}",
            params={"from": currency_from, "to": currency_to},
            proxies=proxies,
) 
response.raise_for_status() 
print(response.json()) 
except requests.exceptions.RequestException as e: print(f"An error occurred: {e}")

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং api.frankfurther.app-কে টার্গেট করে মুদ্রা বিনিময়ের টুল ইমপ্লিমেন্টেশনটি সংজ্ঞায়িত করতে নিম্নলিখিত কোডটি চালান।

%%writefile $AGENT_NAME/agent.py
from google.adk.agents.llm_agent import Agent
import os
import requests


# Get Proxy Server URL
# This is the VM's FQDN to reach the proxy vm in the consumers network
if "PROXY_SERVER_URL" not in os.environ:
    raise ValueError("Missing required environment variable: PROXY_SERVER_URL is not set.")
PROXY_SERVER_TO_USE = os.environ["PROXY_SERVER_URL"]

# Mock tool implementation
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}}
    """
    # Use the globally defined proxy server URL
    proxies = {
       "http": PROXY_SERVER_TO_USE,
       "https": PROXY_SERVER_TO_USE,
    }
    
    try:
        response = requests.get(
            f"https://api.frankfurter.app/{currency_date}",
            params={"from": currency_from, "to": currency_to},
            proxies=proxies,
        )
        response.raise_for_status()  # Raise an error for bad responses
        return response.json()
    except Exception as e:
        return f"An unexpected error occurred: {e}"

root_agent = Agent(
    model='gemini-2.5-flash',
    name='root_agent',
    description="Provides the currency exchange rates between two currencies",
    instruction="You are a helpful assistant that provides the currency exchange rates between two currencies. Use the 'get_exchange_rate' tool for this purpose.",
    tools=[get_exchange_rate],
)

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

# 1. Set your variables
CURRENCY_DATE="latest"
CURRENCY_FROM="USD"
CURRENCY_TO="EUR"
PROXY_SERVER="http://swp.demo.com:8888"

# 2. Run the curl command
!curl -x "$PROXY_SERVER" "https://api.frankfurter.app/$CURRENCY_DATE?from=$CURRENCY_FROM&to=$CURRENCY_TO"

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান, যা DNS পিয়ারিং-এর পাশাপাশি Agent Engine দ্বারা ব্যবহৃত psc ইন্টারফেস কনফিগারেশনকে আহ্বান করে।

import json
import os

CONFIG_FILE_PATH = os.path.join(AGENT_NAME, ".agent_engine_config.json")
# Create your config as a Python dictionary ---
config_data = {
    "requirements": [
        "google-cloud-aiplatform[agent_engines,adk]",
        "requests",
    ],
    "psc_interface_config": {
        "network_attachment": NETWORK_ATTACHMENT_NAME,
        "dns_peering_configs": [
            {
                "domain": AGENT_PEER_DOMAIN,
                "target_project": PROJECT_ID,
                "target_network": AGENT_PEER_NETWORK,
            },
        ],
    },
}

# Write the dictionary to a JSON file ---
os.makedirs(AGENT_NAME, exist_ok=True) # Ensure the directory exists
with open(CONFIG_FILE_PATH, 'w') as f:
    json.dump(config_data, f, indent=4)

print(f"Successfully created {CONFIG_FILE_PATH} with your variables.")

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

import json
import os

CONFIG_FILE_PATH = os.path.join(AGENT_NAME, ".agent_engine_config.json")
# Create your config as a Python dictionary ---
config_data = {

    "psc_interface_config": {
        "network_attachment": NETWORK_ATTACHMENT_NAME,
        "dns_peering_configs": [
            {
                "domain": AGENT_PEER_DOMAIN,
                "target_project": PROJECT_ID,
                "target_network": AGENT_PEER_NETWORK,
            },
        ],
    },
}

# Write the dictionary to a JSON file ---
os.makedirs(AGENT_NAME, exist_ok=True) # Ensure the directory exists
with open(CONFIG_FILE_PATH, 'w') as f:
    json.dump(config_data, f, indent=4)

print(f"Successfully created {CONFIG_FILE_PATH} with your variables.")

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

%%writefile $AGENT_NAME/.env

GOOGLE_CLOUD_PROJECT=PROJECT_ID
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_GENAI_USE_VERTEXAI=1


PROXY_SERVER_URL=http://swp.demo.com:8888

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

!adk deploy agent_engine $AGENT_NAME --staging_bucket=$STAGING_BUCKET --env_file=$AGENT_NAME/.env --agent_engine_config_file=$AGENT_NAME/.agent_engine_config.json --display_name=$AGENT_NAME

সেলটি কার্যকর করার পর একটি রিজনিং ইঞ্জিন আইডি তৈরি হবে। পরবর্তী ধাপের জন্য আপনার তৈরি হওয়া আইডিটি প্রয়োজন হবে, যা এই উদাহরণে 3235268984265768960

✅ Created agent engine: projects/9315891080/locations/us-central1/reasoningEngines/3235268984265768960

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান। পূর্ববর্তী আউটপুট থেকে আপনার প্রজেক্ট নম্বর এবং এজেন্ট ইঞ্জিন রিজনিং আইডি দিয়ে তা আপডেট করতে ভুলবেন না:

from vertexai import agent_engines
remote_app = agent_engines.get("projects/PROJECT_NUMBER/locations/us-central1/reasoningEngines/ENTER_YOUR_ID")

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

def print_event_nicely_with_thoughts(event):
    """
    Parses and prints streaming query events, including thoughts.
    """
    try:
        content = event.get('content', {})
        role = content.get('role')
        parts = content.get('parts', [{}])

        if not parts:
            print("...")
            return

        part = parts[0] # Get the first part

        # Event 1: Model is thinking (calling a tool or just text)
        if role == 'model':

            # Check for and print any explicit 'thought' text
            if 'thought' in part:
                print(f"🧠 Thought: {part['thought']}")

            # Check for a function call
            if 'function_call' in part:
                # If we haven't *already* printed an explicit thought,
                # print a generic one.
                if 'thought' not in part:
                    print("🧠 Thinking... (decided to use a tool)")

                call = part['function_call']
                print(f"   🔧 Tool Call: {call.get('name')}()")
                print(f"      Args: {call.get('args')}")

            # Check for the final text answer
            elif 'text' in part:
                text = part.get('text', '')
                print(f"\n💬 Model: {text}")

        # Event 2: The tool returns its result
        elif role == 'user' and 'function_response' in part:
            resp = part['function_response']
            print(f"⚙️ Tool Response (from {resp.get('name')}):")
            print(f"   Output: {resp.get('response')}")

        # Other event types (like progress messages)
        else:
            print("...") # Show progress for other events

    except Exception as e:
        print(f"Error processing event: {e}")
        # print(f"Raw event: {event}") # Uncomment to debug



for event in remote_app.stream_query(
    user_id="u_456",
    # session_id=remote_session["id"],
    message="Provide USD to INR conversion rate",
):
    print_event_nicely_with_thoughts(event)

USD থেকে INR রূপান্তর হারের উপর ভিত্তি করে SWP-এর মাধ্যমে পাবলিক এন্ডপয়েন্ট api.frankfurther.app-এর সাথে সংযোগ যাচাই করার একটি সফল সম্পাদনের উদাহরণ।

f9f925983ab5cc9d.png

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

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

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

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

c9c412334a7f5ad9.png

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

e94c6c03fb51f7fe.png

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

SWP দ্বারা সম্পাদিত ইন্টারনেট বহির্গমন যাচাই করতে আপনি ক্লাউড লগিং দেখতে পারেন, এর জন্য নিম্নলিখিত লিঙ্কে যান:

পর্যবেক্ষণ → লগ এক্সপ্লোরার

resource.type=" networkservices.googleapis.com/Gatewa y" এই কোয়েরিটি প্রবেশ করান, তারপর `Run Query`-তে ক্লিক করুন। নিচে একটি উদাহরণ দেওয়া হলো যা গন্তব্য এন্ডপয়েন্ট, `api.frankfurter.app`-কে নিশ্চিত করে।

f53831ef8ec663db.png

fc154a5b22da2a87.png

নিম্নলিখিত ক্লাউড লগিং উদাহরণটি নিম্নলিখিত বিষয়গুলো যাচাই করে:

গন্তব্য_পরিসর: এজেন্ট ইঞ্জিন পিএসসি ইন্টারফেস আইপি ঠিকানা

উৎস_পরিসর: শুধুমাত্র প্রক্সি সাবনেট গন্তব্য_আইপি: সুরক্ষিত ওয়েব প্রক্সি আইপি ঠিকানা

ক্লাউড লগিং কোয়েরির জন্য project_id পরিবর্তন করতে ভুলবেন না।

logName:("projects/project_id/logs/compute.googleapis.com%2Ffirewall") AND jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:allow-access-to-swp")
{
  "insertId": "1j9ym95fmu8g6o",
  "jsonPayload": {
    "vpc": {
      "project_id": "XXXXXXXXXXXXX",
      "subnetwork_name": "intf-subnet",
      "vpc_name": "consumer-vpc"
    },
    "rule_details": {
      "destination_range": [
        "10.10.10.5/32"
      ],
      "reference": "network:consumer-vpc/firewall:allow-access-to-swp",
      "priority": 1000,
      "source_range": [
        "192.168.10.0/28"
      ],
      "direction": "EGRESS",
      "ip_port_info": [
        {
          "ip_protocol": "ALL"
        }
      ],
      "action": "ALLOW"
    },
    "disposition": "ALLOWED",
    "remote_instance": {
      "region": "us-central1"
    },
    "remote_vpc": {
      "vpc_name": "consumer-vpc",
      "project_id": "XXXXXXXXXXXXXXX",
      "subnetwork_name": "swp-subnet"
    },
    "connection": {
      "src_ip": "192.168.10.2",
      "src_port": 48640,
      "dest_port": 8888,
      "dest_ip": "10.10.10.5",
      "protocol": 6
    }
  },
  "resource": {
    "type": "gce_subnetwork",
    "labels": {
      "subnetwork_id": "7147084067647653041",
      "project_id": "XXXXXXXXXXXXXX",
      "location": "us-central1",
      "subnetwork_name": "intf-subnet"
    }
  },
  "timestamp": "2025-12-30T12:51:36.628538815Z",
  "logName": "projects/dec30-run1-agent/logs/compute.googleapis.com%2Ffirewall",
  "receiveTimestamp": "2025-12-30T12:51:40.846652708Z"
}

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

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিত কমান্ডটি চালান, যা Agent Engine ডিপ্লয়মেন্টটি মুছে ফেলার প্রক্রিয়া শুরু করবে।

নিশ্চিত করুন যে আপনি "project number" এবং "reasoningEngines token" আপডেট করছেন।

import requests
token = !gcloud auth application-default print-access-token
ENDPOINT = "https://us-central1-aiplatform.googleapis.com"
response = requests.delete(
    f"{ENDPOINT}/v1beta1/projects/218166745590/locations/us-central1/reasoningEngines/3086854705725308928",
    params={"force": "true"},
    headers={
        "Content-Type": "application/json; charset=utf-8",
        "Authorization": f"Bearer {token[0]}"
    },
)
print(response.text)

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

gcloud workbench instances delete workbench-tutorial --project=$projectid --location=us-central1-a

gcloud network-security gateway-security-policies rules delete allow-notebook-subnet \
    --gateway-security-policy=my-swp-policy \
    --location=us-central1

gcloud network-security gateway-security-policies rules delete allow-example \
    --gateway-security-policy=my-swp-policy \
    --location=us-central1

gcloud network-security gateway-security-policies delete my-swp-policy \
    --location=us-central1
gcloud network-services gateways delete my-swp-instance\
    --location=us-central1

gcloud dns record-sets delete swp.demo.com --zone=private-dns-codelab  --type=A

gcloud dns managed-zones delete private-dns-codelab


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

export ROUTER_NAME=$(gcloud compute routers list --regions=us-central1 \
    --filter="name ~ swg-autogen-router" --format="value(name)")


 gcloud compute routers nats delete swg-autogen-nat --router=$ROUTER_NAME --region=us-central1 --quiet 

gcloud compute routers delete $ROUTER_NAME --region=us-central1 --quiet

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

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

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

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

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

gcloud compute networks delete consumer-vpc --quiet

১৫. অভিনন্দন

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

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

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

e6d3675ca7c6911f.jpeg

এরপর কী?

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

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