একটি হাইব্রিড সংযোগের মাধ্যমে জেমিনি অ্যাক্সেস করতে Google API-এর জন্য ব্যক্তিগত পরিষেবা সংযোগ ব্যবহার করে৷

১. ভূমিকা

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

Google API-এর জন্য PSC বিভিন্ন ডোমেইন রিজলভ করতে পারে, যার সম্পূর্ণ তালিকা এখানে পাওয়া যাবে। বেশিরভাগ Google API যে ডোমেইনটি ব্যবহার করে তা হলো <API>.googleapis.com। এই ডোমেইনের পাশাপাশি, PSC ব্যবহারকারীদের googleapis.com-এর একটি সংস্করণও প্রদান করে, যা হলো <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com। এই ডোমেইন ব্যবহার করে, ব্যবহারকারীরা নির্দিষ্ট PSC এন্ডপয়েন্ট ব্যবহার করার জন্য অ্যাপ্লিকেশন কনফিগার করতে পারেন। এর সবচেয়ে সাধারণ ব্যবহার হলো, ব্যবহারকারীরা বেছে নিতে পারেন কোন অ্যাপ্লিকেশনগুলো হাইব্রিড সংযোগের মাধ্যমে Google API ট্র্যাফিক রাউট করার জন্য PSC এন্ডপয়েন্ট ব্যবহার করবে, এবং একই সাথে অন্যান্য অ্যাপ্লিকেশনগুলোকে পাবলিক API এন্ডপয়েন্টে ট্র্যাফিক রাউট করা চালিয়ে যাওয়ার অনুমতি দেওয়া।

জেমিনি গুগল ক্লাউডের ভার্টেক্স এআই প্রোডাক্ট স্যুটের অন্তর্ভুক্ত এবং এটি সেইসব গুগল এপিআই-এর তালিকায় রয়েছে যা পিএসসি ফর গুগল এপিআই (PSC for Google APIs) ব্যবহার করে সমাধান করা যায়।

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

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

  • একটি এনসিসি হাব তৈরি করুন।
  • একটি NCC হাবে VPC স্পোক কনফিগার করুন।
  • একটি ক্লাউড HA VPN তৈরি করুন।
  • একটি এনসিসি হাবে হাইব্রিড স্পোক কনফিগার করুন।
  • গুগল এপিআই এন্ডপয়েন্টের জন্য একটি পিএসসি তৈরি করুন।
  • HA-VPN-এর মাধ্যমে একটি কাস্টম রুট কনফিগার করুন।
  • একটি ডিএনএস পিয়ারিং জোন কনফিগার করুন।
  • একটি ভার্টেক্স ওয়ার্কবেঞ্চ ইনস্ট্যান্স কনফিগার করুন
  • Google APIs API Endpoint-এর জন্য PSC ব্যবহার করতে Gemini Python কোড কনফিগার করুন।

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

  • "মালিক" বা সম্পূর্ণ "সম্পাদক" অনুমতিসহ একটি গুগল ক্লাউড প্রজেক্ট।

২. কোডল্যাব টপোলজি

74f1027c8c8085f6.png

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

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

অবশেষে, আপনি অন-প্রেম ভিপিসি-র জন্য একটি ডিএনএস পিয়ারিং জোন তৈরি করবেন, যাতে পিএসসি ফর গুগল এপিআইস দ্বারা স্বয়ংক্রিয়ভাবে তৈরি করা সার্ভিস ডিরেক্টরি প্রাইভেট জোনটি p.googleapis.com-এর জন্য ব্যবহার করা যায়।

৩. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর দরকার নেই। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রজেক্ট আইডি উল্লেখ করতে হবে (যা সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি আপনার নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে।
  • আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নম্বর , এবং কিছু এপিআই এটি ব্যবহার করে থাকে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
  1. এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হবে না, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর বিলিং এড়াতে রিসোর্সগুলো বন্ধ করার জন্য, আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা প্রজেক্টটি ডিলিট করে দিতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল শুরু করুন

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

গুগল ক্লাউড কনসোল থেকে, উপরের ডানদিকের টুলবারে থাকা ক্লাউড শেল আইকনটিতে ক্লিক করুন:

55efc1aaa7a4d3ad.png

পরিবেশটি প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে। এটি শেষ হলে, আপনি এইরকম কিছু দেখতে পাবেন:

7ffe5cbb04455448.png

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

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

এপিআই সক্ষম করুন

ক্লাউড শেলের ভিতরে, আপনার প্রজেক্টটি সঠিকভাবে কনফিগার করা আছে কিনা তা নিশ্চিত করুন এবং আপনার এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করুন।

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

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

প্রজেক্টে প্রয়োজনীয় সকল গুগল এপিআই সক্রিয় করুন।

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

gcloud services enable compute.googleapis.com
gcloud services enable networkconnectivity.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable notebooks.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable aiplatform.googleapis.com

৫. ভিপিসি এবং সাবনেট তৈরি করুন

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

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

gcloud compute networks create routing-vpc \
    --subnet-mode=custom

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

gcloud compute networks create onprem-vpc \
    --subnet-mode=custom

gcloud compute networks subnets create onprem-$region-subnet \
    --network=onprem-vpc \
    --range=10.0.0.0/24 \
    --region=$region
    --enable-private-ip-google-access

ক্লাউড রাউটার এবং ক্লাউড NAT তৈরি করুন

রাউটিং-ভিপিসি-তে একটি ক্লাউড রাউটার তৈরি করুন যা HA VPN-এর সাথে একত্রে ব্যবহৃত হবে।

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

gcloud compute routers create routing-$region-cr \
    --network=routing-vpc \
    --region=$region \
    --asn=64512

একটি ক্লাউড রাউটার তৈরি করুন যা অনপ্রেম-ভিপিসি-তে HA VPN-এর সাথে একত্রে ব্যবহৃত হবে।

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

gcloud compute routers create onprem-$region-cr \
    --network=onprem-vpc \
    --region=$region \
    --asn=64513

একটি ক্লাউড রাউটার তৈরি করুন যা অনপ্রেম-ভিপিসিতে ক্লাউড ন্যাটের সাথে একত্রে ব্যবহৃত হবে।

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

gcloud compute routers create onprem-$region-cr-4nat \
    --network=onprem-vpc \
    --region=$region

অনপ্রেম-ভিপিসি-তে থাকা ক্লাউড ন্যাট (Cloud NAT) পরবর্তী ধাপে কনফিগার করা ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স (Vertex AI Workbench Instance)-এ প্যাকেজ ডাউনলোড করার জন্য ব্যবহৃত হবে।

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

gcloud compute routers nats create onprem-$region-nat \
    --router=onprem-$region-cr-4nat \
    --region=$region \
    --nat-all-subnet-ip-ranges \
    --auto-allocate-nat-external-ips

৬. ক্লাউড HA-VPN তৈরি করুন

ভিপিএন গেটওয়েগুলো তৈরি করুন।

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

gcloud compute vpn-gateways create routing-gateway \
   --network=routing-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

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

gcloud compute vpn-gateways create onprem-gateway \
   --network=onprem-vpc \
   --region=$region \
   --stack-type=IPV4_ONLY

রাউটিং-ভিপিসি থেকে ভিপিএন টানেলগুলো তৈরি করুন।

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

gcloud compute vpn-tunnels create routing-to-onprem-tunnel0 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=0

gcloud compute vpn-tunnels create routing-to-onprem-tunnel1 \
    --peer-gcp-gateway=onprem-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=routing-$region-cr \
    --vpn-gateway=routing-gateway \
    --interface=1

অনপ্রেম-ভিপিসি থেকে ভিপিএন টানেলগুলো তৈরি করুন।

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

gcloud compute vpn-tunnels create onprem-to-routing-tunnel0 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=0

    gcloud compute vpn-tunnels create onprem-to-routing-tunnel1 \
    --peer-gcp-gateway=routing-gateway \
    --region=$region \
    --ike-version=2 \
    --shared-secret=mysecret \
    --router=onprem-$region-cr \
    --vpn-gateway=onprem-gateway \
    --interface=1

রাউটিং-ভিপিসি থেকে উদ্ভূত দুটি টানেলের জন্য বিজিপি সেশন সেট আপ করুন।

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

gcloud compute routers add-interface routing-$region-cr \
    --interface-name=routing-interface0 \
    --ip-address=169.254.0.1 \
    --mask-length=30 \
    --vpn-tunnel=routing-to-onprem-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp0 \
    --interface=routing-interface0 \
    --peer-ip-address=169.254.0.2 \
    --peer-asn=64513 \
    --region=$region

gcloud compute routers add-interface routing-$region-cr \
  --interface-name=routing-interface1 \
  --ip-address=169.254.1.1 \
  --mask-length=30 \
  --vpn-tunnel=routing-to-onprem-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer routing-$region-cr \
    --peer-name=routingtoonprem-bgp1 \
    --interface=routing-interface1 \
    --peer-ip-address=169.254.1.2 \
    --peer-asn=64513 \
    --region=$region

অনপ্রেম-ভিপিসি থেকে উদ্ভূত দুটি টানেলের জন্য বিজিপি সেশন সেট আপ করুন।

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

gcloud compute routers add-interface onprem-$region-cr \
    --interface-name=onprem-interface0 \
    --ip-address=169.254.0.2 \
    --mask-length=30 \
    --vpn-tunnel=onprem-to-routing-tunnel0 \
    --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp0 \
    --interface=onprem-interface0 \
    --peer-ip-address=169.254.0.1 \
    --peer-asn=64512 \
    --region=$region

gcloud compute routers add-interface onprem-$region-cr \
  --interface-name=onprem-interface1 \
  --ip-address=169.254.1.2 \
  --mask-length=30 \
  --vpn-tunnel=onprem-to-routing-tunnel1 \
  --region=$region

gcloud compute routers add-bgp-peer onprem-$region-cr \
    --peer-name=onpremtorouting-bgp1 \
    --interface=onprem-interface1 \
    --peer-ip-address=169.254.1.1 \
    --peer-asn=64512 \
    --region=$region

কনসোলের Network Connectivity > VPN পেজে যান এবং নিশ্চিত করুন যে আপনার HA-VPN টানেল ও BGP সেশনগুলো সঠিকভাবে কনফিগার করা আছে।

৭. এনসিসি হাব ও স্পোক কনফিগার করুন

এনসিসি হাব তৈরি করুন

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

gcloud network-connectivity hubs create ncc-hub \
    --project="$project" \
    --preset-topology="mesh"

এনসিসি মুখপাত্র তৈরি করুন

NCC gcloud-এর নিয়ম অনুযায়ী, সমস্ত স্পোককে সম্পূর্ণ পাথ নেম বা URI দিয়ে কনফিগার করতে হবে।

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

gcloud compute networks describe routing-vpc

নিম্নলিখিত কমান্ডের জন্য রাউটিং-ভিপিসি-এর সম্পূর্ণ পাথ (URI) নোট করুন।

উদাহরণ আউটপুট

autoCreateSubnetworks: false
creationTimestamp: '2025-08-20T11:13:42.233-07:00'
id: 'xxx'
kind: compute#network
name: routing-vpc
networkFirewallPolicyEnforcementOrder: AFTER_CLASSIC_FIREWALL
routingConfig:
  bgpBestPathSelectionMode: LEGACY
  routingMode: REGIONAL
selfLink: https://www.googleapis.com/compute/v1/projects/$project/global/networks/routing-vpc
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/$project/global/networks/355666541188722361
x_gcloud_bgp_routing_mode: REGIONAL
x_gcloud_subnet_mode: CUSTOM

রাউটিং ভিপিসি স্পোক কনফিগার করুন

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

gcloud network-connectivity spokes linked-vpc-network create routing-vpc \
    --hub=ncc-hub \
    --vpc-network=projects/$project/global/networks/routing-vpc \
    --global

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

gcloud compute vpn-tunnels describe routing-to-onprem-tunnel0 --region=$region
gcloud compute vpn-tunnels describe routing-to-onprem-tunnel1 --region=$region

রাউটিং-ভিপিসি থেকে উদ্ভূত ভিপিএন টানেলগুলোর সম্পূর্ণ পাথ (ইউআরআই) নোট করুন।

উদাহরণ আউটপুট

creationTimestamp: '2025-08-20T11:33:37.494-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel0
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.54.166
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel0
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway

vpnGatewayInterface: 0
creationTimestamp: '2025-08-20T11:33:41.829-07:00'
description: ''
detailedStatus: Tunnel is up and running.
id: 'xxx'
ikeVersion: 2
kind: compute#vpnTunnel
labelFingerprint: xxx
localTrafficSelector:
- 0.0.0.0/0
name: routing-to-onprem-tunnel1
peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway
peerIp: 34.153.246.117
region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1
remoteTrafficSelector:
- 0.0.0.0/0
router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel1
sharedSecret: '*************'
sharedSecretHash: xxx
status: ESTABLISHED
vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway
vpnGatewayInterface: 1

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

gcloud network-connectivity spokes linked-vpn-tunnels create $region-vpn-spoke \
    --hub=ncc-hub \
  --vpn-tunnels=projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel0,projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel1 \
    --region=$region 

এগিয়ে যাওয়ার আগে আপনার সমস্ত স্পোক সঠিকভাবে কনফিগার করা আছে কিনা তা পরীক্ষা করে নিন।

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

gcloud network-connectivity hubs list-spokes ncc-hub

উদাহরণ আউটপুট

NAME: routing-vpc
GROUP: default
PROJECT: $project
LOCATION: global
TYPE: VPC_NETWORK
STATE: ACTIVE
STATE REASON: 
ETAG: 2

NAME: us-central1-vpn-spoke
GROUP: default
PROJECT: $project
LOCATION: us-central1
TYPE: VPN_TUNNEL
STATE: ACTIVE
STATE REASON: 
ETAG: 

৮. গুগল এপিআই-এর জন্য প্রাইভেট সার্ভিস কানেক্ট সেট আপ করুন

Google API এন্ডপয়েন্টগুলির জন্য PSC এমন গ্লোবাল আইপি অ্যাড্রেস থেকে তৈরি করা হয় যা কোনো আঞ্চলিক VPC সাবনেটে অবস্থিত নয়। গ্লোবাল আইপি অ্যাড্রেসটি অবশ্যই PRIVATE_SERVICE_CONNECT-এর উদ্দেশ্যে বিশেষভাবে সংরক্ষিত থাকতে হবে।

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

gcloud compute addresses create psc-ip \
  --global \
  --purpose=PRIVATE_SERVICE_CONNECT \
  --addresses=10.100.100.0 \
  --network=routing-vpc

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

gcloud compute forwarding-rules create psc4googep \
  --global \
  --network=routing-vpc \
  --address=psc-ip \
  --target-google-apis-bundle=all-apis \
  --service-directory-registration=projects/$project/locations/$region

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

gcloud compute routers update routing-$region-cr \
   --project=$project \
   --region=$region \
   --advertisement-mode custom \
   --set-advertisement-groups=ALL_SUBNETS \
   --set-advertisement-ranges=10.100.100.0/32

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

gcloud dns managed-zones create peeringzone \
    --description="dns peer onprem to routing" \
    --dns-name=p.googleapis.com \
    --networks=onprem-vpc \
    --target-network=routing-vpc \
    --target-project=$project \
    --visibility=private

৯. ভার্টেক্স ওয়ার্কবেঞ্চ ইনস্ট্যান্স সেট আপ করুন

ওয়ার্কবেঞ্চ ইনস্ট্যান্স আইডেন্টিটির জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন।

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

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

আপনার সার্ভিস অ্যাকাউন্টের পুরো নামটি নোট করুন এবং Vertex AI/Gemini-তে কল চালানোর জন্য এটিকে aiplatform.admin অনুমতি দিন।

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

gcloud iam service-accounts list

উদাহরণ আউটপুট

DISPLAY NAME: Compute Engine default service account
EMAIL: xxx-compute@developer.gserviceaccount.com
DISABLED: False

DISPLAY NAME: workbench-sa
EMAIL: workbench-sa@$project.iam.gserviceaccount.com
DISABLED: False

নিশ্চিত করুন যে আপনি <your-project-id> এর জায়গায় আপনার আসল প্রজেক্ট আইডি বসিয়েছেন। প্রয়োজনীয় কোটেশনের কারণে আমরা এখানে $project ভেরিয়েবলটি ব্যবহার করতে পারব না।

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

gcloud projects add-iam-policy-binding $project --member='serviceAccount:workbench-sa@<your-project-id>.iam.gserviceaccount.com' --role='roles/aiplatform.admin' --condition=None

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

gcloud workbench instances create workbench-$region --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --location=$region-a --network=projects/$project/global/networks/onprem-vpc --subnet=projects/$project/regions/$region/subnetworks/onprem-$region-subnet --subnet-region=$region --disable-public-ip --service-account-email=workbench-sa@$project.iam.gserviceaccount.com

ওয়ার্কবেঞ্চ ইনস্ট্যান্সটি প্রস্তুত হতে gcloud কমান্ডটি চলার সময়ের চেয়ে বেশি সময় লাগতে পারে।

১০. জেমিনি কোড পরীক্ষা করুন

UI-তে, "Open JupyterLab"-এ ক্লিক করুন।

1b7ff959f1072aaa.png

JupyterLab-এ প্রবেশ করার পর, একটি নতুন Python 3 নোটবুক খুলুন।

18c26d06183faca1.png

নোটবুকে নিম্নলিখিত কোডটি চালান। আপনার নির্দিষ্ট প্রজেক্ট এবং অঞ্চলের তথ্য অন্তর্ভুক্ত করার জন্য কোডটি আপডেট করতে ভুলবেন না।

জুপিটারল্যাব নোটবুক থেকে

pip install --upgrade google-genai

নোটবুক কার্নেলটি পুনরায় চালু করুন।

fe7911ce8b54ff8a.png

এপিআই এন্ডপয়েন্টটি লক্ষ্য করুন। এখানে আমরা <YOUR_REGION>-aiplatform.googleapis.com এপিআই এন্ডপয়েন্টটি ব্যবহার করছি। এটি ভার্টেক্স এআই-এর স্ট্যান্ডার্ড এপিআই এন্ডপয়েন্ট।

জুপিটারল্যাব নোটবুক থেকে

PROJECT_ID="YOUR_PROJECT_ID" # Google Cloud Project ID
LOCATION_ID="YOUR_REGION" # Enter Vertex AI Gemini region such a s us-central1
API_ENDPOINT="https://<YOUR_REGION>-aiplatform.googleapis.com" # API Endpoint
MODEL_ID="gemini-2.0-flash" # Gemini Model ID

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

জুপিটারল্যাব নোটবুক থেকে

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

নমুনা প্রতিক্রিয়া

This is a classic trick question! They both weigh the same: 1 kilogram. The difference is in the volume they occupy and the density of the materials.

কোডটি চালানোর সময় আপনি যে API নামটি ব্যবহার করেছিলেন তা নোট করুন। YOUR_REGION-aiplatform.googleapis.com হলো Vertex AI-এর ডিফল্ট API নাম। আমাদের API নামটি পরিবর্তন করে কোডটি আবার চালাতে হবে। Workbench Instance-এর একটি টার্মিনালে TCPdump চালিয়ে আমরা নিশ্চিত করতে পারি যে কোডটি PSC Endpoint ব্যবহার করছে।

টার্মিনালে একটি TCPdump চালান

ফাইল > নতুন > টার্মিনাল-এ ক্লিক করে ওয়ার্কবেঞ্চে একটি টার্মিনাল খুলুন।

2cc405367de1f4c2.png

টার্মিনালে টেক্সট আউটপুট দেখতে সমস্যা হলে, আপনাকে আপনার টার্মিনাল থিম আপডেট করতে হবে। এটি করার জন্য সেটিংস > টার্মিনাল থিম > লাইট অথবা ডার্ক-এ যান।

টার্মিনাল থেকে

sudo tcpdump host 10.100.100.0

জেমিনি কোড আপডেট করুন

নোটবুকে ফিরে যান, API এন্ডপয়েন্টটি আপডেট করুন এবং কোডটি আবার চালান। লক্ষ্য করুন যে আমরা API এন্ডপয়েন্টটি পরিবর্তন করে <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com করেছি। এটি PSC-এর নির্দিষ্ট API ফরম্যাট <service>-<endpointname>.p.googleapis.com-এর সাথে সামঞ্জস্যপূর্ণ।

জুপিটারল্যাব নোটবুক থেকে

API_ENDPOINT="https://<YOUR_REGION>-aiplatform-psc4googep.p.googleapis.com" # API Endpoint

জুপিটারল্যাব নোটবুক থেকে

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    Part,
    SafetySetting,
)

জুপিটারল্যাব নোটবুক থেকে

from google import genai

client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})

prompt = "what weighs more, 1kg of feathers or 1kg of stones"

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model=MODEL_ID,
    contents=prompt,
    config=GenerateContentConfig(
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)

নমুনা প্রতিক্রিয়া

They weigh the same. 1 kg is 1 kg, regardless of what it's made of.

TCPdump পরীক্ষা করুন

টার্মিনালে ফিরে যান এবং PSC এন্ডপয়েন্টে (10.100.100.0) করা কলগুলো খুঁজুন। TCPdump বন্ধ করুন (control+c)।

নমুনা আউটপুট

listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes
19:12:01.473886 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [S], seq 3367930834, win 65320, options [mss 1420,sackOK,TS val 2933602967 ecr 0,nop,wscale 7], length 0
19:12:01.476561 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [S.], seq 1863301110, ack 3367930835, win 65535, options [mss 1366,sackOK,TS val 3004118895 ecr 2933602967,nop,wscale 8], length 0
19:12:01.476602 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 1, win 511, options [nop,nop,TS val 2933602969 ecr 3004118895], length 0
19:12:01.477283 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1:1573, ack 1, win 511, options [nop,nop,TS val 2933602970 ecr 3004118895], length 1572
19:12:01.478836 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [.], ack 1573, win 1045, options [nop,nop,TS val 3004118898 ecr 2933602970], length 0
19:12:01.480181 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 1:6041, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 6040
19:12:01.480183 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 6041:8378, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 2337
19:12:01.480215 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 6041, win 485, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.480225 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 8378, win 473, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0
19:12:01.482580 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1573:1653, ack 8378, win 501, options [nop,nop,TS val 2933602975 ecr 3004118899], length 80

সফল!

১১. পরিষ্কার করার পদক্ষেপ

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

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

gcloud config list project
gcloud config set project <project-id>
export project=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project
echo $region
echo $zone

সমস্ত রিসোর্স মুছে ফেলুন।

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

gcloud workbench instances delete workbench-$region --location=$zone -q

gcloud iam service-accounts delete workbench-sa@$project.iam.gserviceaccount.com -q

gcloud dns managed-zones delete peeringzone -q

gcloud compute forwarding-rules delete psc4googep --global -q

gcloud compute addresses delete psc-ip --global -q

gcloud network-connectivity spokes delete $region-vpn-spoke --region=$region -q

gcloud network-connectivity spokes delete routing-vpc --global -q

gcloud network-connectivity hubs delete ncc-hub -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete onprem-to-routing-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel1 --region=$region --project=$project -q

gcloud compute vpn-tunnels delete routing-to-onprem-tunnel0 --region=$region --project=$project -q

gcloud compute vpn-gateways delete onprem-gateway --region=$region --project=$project -q

gcloud compute vpn-gateways delete routing-gateway --region=$region --project=$project -q

gcloud compute routers nats delete onprem-$region-nat --router=onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr-4nat --region=$region -q

gcloud compute routers delete onprem-$region-cr --region=$region -q

gcloud compute routers delete routing-$region-cr --region=$region -q

gcloud compute networks subnets delete onprem-$region-subnet --region=$region -q

gcloud compute networks delete onprem-vpc -q

gcloud compute networks delete routing-vpc -q

১২. অভিনন্দন!

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন।

আমরা যা আলোচনা করেছি

  • একটি এনসিসি হাব তৈরি করুন।
  • একটি NCC হাবে VPC স্পোক কনফিগার করুন।
  • একটি ক্লাউড HA VPN তৈরি করুন।
  • একটি এনসিসি হাবে হাইব্রিড স্পোক কনফিগার করুন।
  • গুগল এপিআই এন্ডপয়েন্টের জন্য একটি পিএসসি তৈরি করুন।
  • HA-VPN-এর মাধ্যমে একটি কাস্টম রুট কনফিগার করুন।
  • একটি ডিএনএস পিয়ারিং জোন কনফিগার করুন।
  • একটি ভার্টেক্স ওয়ার্কবেঞ্চ ইনস্ট্যান্স কনফিগার করুন
  • Google APIs API Endpoint-এর জন্য PSC ব্যবহার করতে Gemini Python কোড কনফিগার করুন।