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

1. ভূমিকা

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

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

জেমিনি গুগল ক্লাউডের ভার্টেক্স এআই প্রোডাক্ট স্যুটের আওতাধীন এবং গুগল এপিআই-এর তালিকায় অন্তর্ভুক্ত যা পিএসসির মাধ্যমে গুগল এপিআই-এর জন্য সমাধান করা যেতে পারে।

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

তুমি কি শিখবে

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

তোমার যা লাগবে

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

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

74f1027c8c8085f6.png সম্পর্কে

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

আপনি একটি NCC হাব তৈরি করবেন যার একটি Routing-vpc থাকবে একটি VPC স্পোক হিসেবে। সেই VPC-তে, একটি HA-VPN অন-প্রেম VPC-তে কনফিগার করা হবে, যা একটি অন-প্রেম পরিবেশের অনুকরণ করে। HA-VPN NCC হাবে একটি হাইব্রিড স্পোক হিসেবে কনফিগার করা হবে। অন-প্রেম VPC-তে, আপনি একটি সাবনেট তৈরি করবেন যেখানে একটি Workbench Instance হোস্ট করা হবে। আপনি Workbench ইনস্ট্যান্সে প্যাকেজ ডাউনলোড করার জন্য একটি Cloud NATও তৈরি করবেন।

অবশেষে, আপনি অন-প্রেম VPC-এর জন্য একটি DNS পিয়ারিং জোন তৈরি করবেন যাতে তারা p.googleapis.com-এর জন্য Service Directory Private জোন ব্যবহার করতে পারে যা PSC-এর জন্য Google API-গুলি স্বয়ংক্রিয়ভাবে তৈরি করে।

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

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

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

অনুসরণ

a99b7ace416376c4.png সম্পর্কে

5e3ff691252acf41.png সম্পর্কে

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

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

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

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

55efc1aaa7a4d3ad.png সম্পর্কে

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

অনুসরণ

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

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

API গুলি সক্ষম করুন

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

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

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

প্রকল্পে সমস্ত প্রয়োজনীয় Google API সক্রিয় করুন।

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

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 তৈরি করুন

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

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

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

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

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

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

onprem-vpc-তে Cloud NAT-এর সাথে একত্রে ব্যবহার করা হবে এমন একটি ক্লাউড রাউটার তৈরি করুন।

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

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

onprem-vpc-এর ক্লাউড NAT ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্সে প্যাকেজ ডাউনলোড করার জন্য ব্যবহার করা হবে যা পরবর্তী ধাপে কনফিগার করা হবে।

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

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

onprem-vpc থেকে উৎপন্ন VPN টানেল তৈরি করুন।

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

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

onprem-vpc থেকে উৎপন্ন দুটি টানেলের জন্য BGP সেশন সেট আপ করুন।

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

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

কনসোলের নেটওয়ার্ক কানেক্টিভিটি > 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

নিম্নলিখিত কমান্ডের জন্য 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

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

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

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 এন্ডপয়েন্টগুলি গ্লোবাল IP ঠিকানা থেকে তৈরি করা হয় যা কোনও আঞ্চলিক VPC সাবনেটে থাকে না। গ্লোবাল IP ঠিকানাটি 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"

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

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

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 সম্পর্কে

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

JupyterLab নোটবুক থেকে

pip install --upgrade google-genai

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

fe7911ce8b54ff8a.png

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

JupyterLab নোটবুক থেকে

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,
)

JupyterLab নোটবুক থেকে

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

JupyterLab নোটবুক থেকে

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

JupyterLab নোটবুক থেকে

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

JupyterLab নোটবুক থেকে

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

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

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 তৈরি করুন।
  • একটি NCC হাবে হাইব্রিড স্পোক কনফিগার করুন।
  • গুগল এপিআই-এর জন্য একটি পিএসসি এন্ডপয়েন্ট তৈরি করুন।
  • HA-VPN এর মাধ্যমে একটি কাস্টম রুট কনফিগার করুন।
  • একটি DNS পিয়ারিং জোন কনফিগার করুন।
  • একটি ভার্টেক্স ওয়ার্কবেঞ্চ ইনস্ট্যান্স কনফিগার করুন
  • গুগল এপিআই এর জন্য পিএসসি ব্যবহার করার জন্য জেমিনি পাইথন কোড কনফিগার করুন। এপিআই এন্ডপয়েন্ট।