প্রাইভেট সার্ভিস কানেক্ট: ক্লাউড রানের সাহায্যে পরিষেবা প্রকাশ এবং ব্যবহার করতে প্রাইভেট সার্ভিস কানেক্ট ব্যবহার করা

১. ভূমিকা

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

ক্লাউড রান হলো একটি পরিচালিত কম্পিউট প্ল্যাটফর্ম যা আপনাকে গুগলের পরিবর্ধনযোগ্য অবকাঠামোর উপরে সরাসরি কন্টেইনার চালানোর সুযোগ দেয়।

ক্লাউড রানকে দুটি ভিন্ন উপায়ে পিএসসি পরিষেবা হিসেবে ব্যবহার করা যায়।

  1. Cloud Run-এর দেওয়া run.app URL ব্যবহার করে Cloud Run-কে কল করার মাধ্যমে PSC for Google APIs।
  2. একটি কাস্টম PSC প্রডিউসার সার্ভিসের মাধ্যমে, যেখানে ক্লাউড রান একটি সার্ভারলেস NEG সহ ইন্টারনাল অ্যাপ্লিকেশন লোড ব্যালান্সারের মাধ্যমে সার্ভিস অ্যাটাচমেন্ট দ্বারা উন্মুক্ত করা হয়।

এই কোডল্যাবে আলোচনা করা হবে কিভাবে এই উভয় পরিস্থিতির জন্য PSC-এর সাথে Cloud Run সেট আপ করতে হয়।

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

  • ক্লাউড রানে বেসিক অ্যাপ স্থাপন করা
  • ক্লাউড রান প্রবেশ এবং প্রস্থান নিয়ন্ত্রণ
  • একটি সার্ভারলেস NEG সহ অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সারের মাধ্যমে ক্লাউড রান স্থাপন করা
  • সার্ভিস অ্যাটাচমেন্টের মাধ্যমে একটি পিএসসি প্রোডিউসার সার্ভিস স্থাপন করা
  • পিএসসি এন্ডপয়েন্ট স্থাপন করা

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

  • মালিকের অনুমতি সহ গুগল ক্লাউড প্রজেক্ট

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

455a040761a8fab9.png

এই কোডল্যাবে, আপনি দুটি ক্লাউড রান সার্ভিস ডেপ্লয় করবেন যা PSC-এর মাধ্যমে অ্যাক্সেসযোগ্য হবে — প্রথমটি PSC সহ একটি কাস্টম পাবলিশড সার্ভিস হিসেবে, এবং দ্বিতীয়টি Google API-এর জন্য PSC হিসেবে। আপনি দুটি VPC তৈরি করবেন, একটি কনজিউমার-ভিপিসি এবং একটি প্রোডিউসার-ভিপিসি। আপনি প্রথমে 'হ্যালো ওয়ার্ল্ড' ক্লাউড রান সার্ভিসটি ডেপ্লয় করবেন এবং এটিকে প্রোডিউসার-ভিপিসিতে একটি রিজিওনাল ইন্টারনাল অ্যাপ্লিকেশন লোড ব্যালেন্সার এবং সার্ভারলেস NEG-এর মাধ্যমে অ্যাক্সেসযোগ্য করে তুলবেন। একটি সার্ভিস অ্যাটাচমেন্টের মাধ্যমে ক্লাউড রান সার্ভিসটিকে PSC প্রোডিউসার সার্ভিস হিসেবে অ্যাক্সেসযোগ্য করার জন্য সেট আপ করার আগে, আপনি প্রোডিউসার-ক্লায়েন্টের মাধ্যমে লোড ব্যালেন্সারে সার্ভিসটি ঠিকমতো কাজ করছে কিনা তা যাচাই করবেন।

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

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

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

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

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

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

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

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

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

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

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

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

gcloud auth login
gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
export projectid=[YOUR-PROJECT-ID]
export projectnum=[YOUR-PROJECT-NUM]
export region=us-central1
export zone=us-central1-a
echo $projectid
echo $projectnum
echo $region
echo $zone

সমস্ত প্রয়োজনীয় পরিষেবা সক্রিয় করুন

gcloud services enable compute.googleapis.com
gcloud services enable run.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudbuild.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com

৫. প্রোডিউসার ভিপিসি নেটওয়ার্ক তৈরি করুন

ভিপিসি নেটওয়ার্ক

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

gcloud compute networks create producer-vpc --subnet-mode custom

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

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

gcloud compute networks subnets create producer-subnet \
    --network=producer-vpc \
    --range=10.0.0.0/28 \
    --region=$region

gcloud compute networks subnets create lb-proxy-subnet \
    --network=producer-vpc \
    --range=10.100.100.0/24 \
    --region=$region \
    --purpose=REGIONAL_MANAGED_PROXY \
    --role=ACTIVE

gcloud compute networks subnets create psc-nat-subnet \
    --network=producer-vpc \
    --region=$region \
    --range=10.100.101.0/24 \
    --purpose=PRIVATE_SERVICE_CONNECT

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

প্রযোজক নেটওয়ার্ক ফায়ারওয়াল নীতি এবং ফায়ারওয়াল নিয়ম তৈরি করুন

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

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create \
    --firewall-policy producer-vpc-policy \
    --network producer-vpc \
    --name network-producer-vpc \
    --global-firewall-policy

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

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

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

gcloud compute network-firewall-policies rules create 1000 \
    --action ALLOW \
    --firewall-policy producer-vpc-policy \
    --description "SSH with IAP" \
    --direction INGRESS \
    --src-ip-ranges 35.235.240.0/20 \
    --layer4-configs tcp:22  \
    --global-firewall-policy

৬. হ্যালো ওয়ার্ল্ড ক্লাউড রান তৈরি করুন

পাইথনে একটি নমুনা অ্যাপ্লিকেশন লেখার জন্য এখানের নির্দেশাবলী অনুসরণ করুন। ক্লাউড শেলে এই কমান্ডগুলো চালান। 'নমুনা অ্যাপ্লিকেশন লিখুন' অংশের ৩ নং ধাপ শেষ করার পর এই কোডল্যাবে ফিরে আসুন এবং সোর্স থেকে ক্লাউড রানে ডিপ্লয় করার জন্য নিচের নির্দেশাবলী অনুসরণ করুন।

আপনার ক্লাউড রান পরিষেবা স্থাপন করার আগে, নিম্নলিখিত কমান্ডটি চালিয়ে নিশ্চিত করুন যে আপনার ডিফল্ট কম্পিউট পরিষেবা অ্যাকাউন্টের যথাযথ অনুমতি রয়েছে।

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

gcloud projects add-iam-policy-binding $projectid --member=serviceAccount:$projectnum-compute@developer.gserviceaccount.com --role=roles/run.builder

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

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

gcloud beta run deploy helloworld \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated \
    --no-default-url \
    --region=$region

--no-default-url ফ্ল্যাগটি ব্যবহার করলে আপনার ক্লাউড রান সার্ভিসটি প্রদত্ত run.app URL ছাড়াই ডেপ্লয় হবে। আমরা এই সার্ভিসের জন্য URL-টি ব্যবহার করব না। এই কোডল্যাবটি প্রকাশের সময় পর্যন্ত, এই ফিচারটি এখনও প্রিভিউ পর্যায়ে রয়েছে।

সামনে এগোনোর আগে, আপনার ক্লাউড শেলের মূল ডিরেক্টরিতে ফিরে যান।

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

cd ..

৭. একটি অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালান্সারের মাধ্যমে হ্যালো ওয়ার্ল্ড ক্লাউড রান চালু করুন।

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

ক্লাউড শেলে

gcloud compute addresses create cloudrun-ip \
 --region=$region \
 --subnet=producer-subnet

gcloud compute addresses describe cloudrun-ip --region=$region

নমুনা আউটপুট

address: 10.0.1.31
addressType: INTERNAL
creationTimestamp: '2025-03-17T09:04:06.620-07:00'
description: ''
id: 'xxxx'
kind: compute#address
labelFingerprint: xxxx
name: cloudrun-ip
networkTier: PREMIUM
purpose: GCE_ENDPOINT
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/addresses/cloudrun-ip
status: RESERVED
subnetwork: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/producer-subnet

আপনি এইমাত্র যে আইপি অ্যাড্রেসটি তৈরি করেছেন, সেটি লিখে রাখুন।

আঞ্চলিক অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সার তৈরি করুন

ক্লাউড শেলে

gcloud compute network-endpoint-groups create cloudrun-producer-neg \
    --region=$region \
    --network-endpoint-type=serverless \
    --cloud-run-service=helloworld

gcloud compute backend-services create cloudrun-producer-bes \
    --load-balancing-scheme=INTERNAL_MANAGED \
    --protocol=HTTP \
    --region=$region

gcloud compute backend-services add-backend cloudrun-producer-bes \
        --region=$region \
        --network-endpoint-group=cloudrun-producer-neg \
        --network-endpoint-group-region=$region

gcloud compute url-maps create producer-urlmap \
        --default-service=cloudrun-producer-bes \
        --region=$region

gcloud compute target-http-proxies create producer-http-proxy \
        --url-map=producer-urlmap \
        --region=$region

ক্লাউড শেলে

gcloud compute forwarding-rules create cloudrun-fr \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=producer-vpc \
        --subnet=producer-subnet \
        --address=cloudrun-ip \
        --target-http-proxy=producer-http-proxy \
        --target-http-proxy-region=$region \
        --region=$region \
        --ports=80 \
        --allow-global-access

৮. লোড ব্যালান্সারের মাধ্যমে এক্সপোজ করা হ্যালো ওয়ার্ল্ড ক্লাউড রান পরীক্ষা করুন

টেস্ট ভিএম তৈরি করুন

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

gcloud compute instances create producer-client \
    --zone=$zone \
    --subnet=producer-subnet \
    --no-address \
    --scopes=cloud-platform

ক্লাউড শেলে

gcloud compute ssh \
    --zone "$zone" "producer-client" \
    --tunnel-through-iap \
    --project $projectid

<loadbalancer-ip> এর জায়গায় আপনার পূর্বে তৈরি করা আইপি অ্যাড্রেসটি বসান (উদাহরণস্বরূপ 10.0.0.2)।

টেস্ট হ্যালো ওয়ার্ল্ড

প্রযোজক-ভিএম-এ

curl <loadbalancer-ip>

প্রত্যাশিত আউটপুট

Hello World!

ভিএম থেকে প্রস্থান করুন।

প্রযোজক-ভিএম-এ

exit

৯. সার্ভিস অ্যাটাচমেন্ট তৈরি করুন

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

gcloud compute service-attachments create cloudrun-attachment \
    --region=$region \
    --producer-forwarding-rule=cloudrun-fr \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=$projectid=5 \
    --nat-subnets=psc-nat-subnet

এরপরে, কনজিউমার এনভায়রনমেন্টে PSC এন্ডপয়েন্ট কনফিগার করার জন্য সার্ভিস অ্যাটাচমেন্ট URI-টি সংগ্রহ করে নোট করুন।

ক্লাউড শেলে

gcloud compute service-attachments describe cloudrun-attachment --region=$region

উদাহরণ প্রত্যাশিত আউটপুট

connectionPreference: ACCEPT_MANUAL
consumerAcceptLists:
- connectionLimit: 5
  projectIdOrNum: $projectid
creationTimestamp: '2025-03-10T08:49:08.134-07:00'
description: ''
enableProxyProtocol: false
fingerprint: -F0Kpe3Fi8o=
id: '2679595584727463707'
kind: compute#serviceAttachment
name: cloudrun-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: 'xxxxx'
  low: 'xxxx'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$projectid/regions/$projectid/forwardingRules/cloudrun-fr

১০. কনজিউমার ভিপিসি নেটওয়ার্ক তৈরি করুন

ভিপিসি নেটওয়ার্ক

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

gcloud compute networks create consumer-vpc --subnet-mode custom

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

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

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

gcloud compute networks subnets create cloudrun-egress \
    --network=consumer-vpc \
    --range=10.0.1.0/24 \
    --region=$region \
    --enable-private-ip-google-access

ক্লাউড NAT তৈরি করুন

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

gcloud compute routers create central-cr \
    --network=consumer-vpc \
    --region=$region

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

গ্রাহক নেটওয়ার্ক ফায়ারওয়াল পলিসি এবং ফায়ারওয়াল নিয়ম তৈরি করুন

আমরা কনজিউমার-ভিপিসি-র জন্য আরেকটি নেটওয়ার্ক ফায়ারওয়াল পলিসি তৈরি করব।

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

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

১১. হ্যালো ওয়ার্ল্ড ক্লাউড রান সার্ভিসের জন্য পিএসসি এন্ডপয়েন্ট তৈরি করুন

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

পিএসসি এন্ডপয়েন্ট তৈরি করুন

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

gcloud compute addresses create cloudrun-service-ip --region=$region --subnet=consumer-subnet --ip-version=IPV4


gcloud compute forwarding-rules create cloudrun-ep --region=$region --network=consumer-vpc --address=cloudrun-service-ip --target-service-attachment=projects/$projectid/regions/$region/serviceAttachments/cloudrun-attachment

আপনার এইমাত্র তৈরি করা PSC এন্ডপয়েন্টটির IP অ্যাড্রেসটি নিন। পরবর্তী ধাপে এন্ডপয়েন্টটি পরীক্ষা করার জন্য আপনি এই IP অ্যাড্রেসটি ব্যবহার করবেন।

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

gcloud compute addresses list --filter="name=cloudrun-service-ip"

উদাহরণ প্রত্যাশিত আউটপুট

NAME: cloudrun-service-ip
ADDRESS/RANGE: 10.0.0.2
TYPE: INTERNAL
PURPOSE: GCE_ENDPOINT
NETWORK: 
REGION: us-central1
SUBNET: consumer-subnet
STATUS: IN_USE

১২. কনজিউমার-ক্লায়েন্ট ভিএম তৈরি করুন এবং এন্ডপয়েন্টের সাথে সংযোগ পরীক্ষা করুন।

কনজিউমার-ক্লায়েন্ট ভিএম তৈরি করুন

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

gcloud compute instances create consumer-client \
    --zone=$zone \
    --subnet=consumer-subnet \
    --no-address \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y'

সংযোগ পরীক্ষা করুন

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

<cloudrun-service-ip> এর জায়গায় প্রকৃত আইপি অ্যাড্রেসটি বসান।

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

curl <cloudrun-service-ip>

প্রত্যাশিত আউটপুট

Hello World!

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

exit

১৩. ক্লাউড রান লুপ সার্ভিস তৈরি করুন

এরপরে আমরা একটি ক্লাউড রান সার্ভিস তৈরি করব যা কনজিউমার-ভিপিসিতে একটি প্রাইভেট কল ব্যাক করে পূর্ববর্তী ক্লাউড রান হ্যালোওয়ার্ল্ড সার্ভিসটিকে কল করবে, যেটিকে আমরা পিএসসি-এর মাধ্যমে এক্সপোজ করেছিলাম।

PHP-তে একটি লুপ অ্যাপ্লিকেশন লেখার জন্য এখানে দেওয়া "নমুনা অ্যাপ্লিকেশনটি লিখুন" নির্দেশাবলী অনুসরণ করুন। helloworld-php-এর পরিবর্তে আপনার ডিরেক্টরির নাম cloudrun-loop দিন। ক্লাউড শেলে এই কমান্ডগুলো চালান। দ্বিতীয় ধাপে, আপনার index.php ফাইলে নিচের PHP কোডটি ব্যবহার করুন। ক্লাউড রানে ডেপ্লয় করার জন্য প্রস্তুত হলে কোডল্যাবে ফিরে আসুন। এই ধাপের জন্য ডকুমেন্টেশনের নির্দেশাবলী অনুসরণ করবেন না।

আপনার index.php ফাইলের জন্য এই কোডটি ব্যবহার করুন। <cloudrun-service-ip> এর জায়গায় আপনার PSC এন্ডপয়েন্টের IP অ্যাড্রেসটি বসান, যা আপনি আগের ধাপে পরীক্ষা করেছিলেন।

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

<?php 

if(!function_exists('curl_init')) {
    die('cURL not available!');
}

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://<cloudrun-service-ip>/');
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$output = curl_exec($curl);
if ($output === FALSE) {
    echo 'An error has occurred: ' . curl_error($curl) . PHP_EOL;
}
else {
    echo $output;
}
?>

এই ক্লাউড রান ডেপ্লয়মেন্টে আমরা একটি নেটওয়ার্ক এবং সাবনেট নির্দিষ্ট করে দিচ্ছি, কারণ PSC এন্ডপয়েন্ট অ্যাক্সেস করার জন্য ক্লাউড রান ট্র্যাফিককে VPC-তে ফিরে যেতে হয়। আমরা ডাইরেক্ট VPC ইগ্রেস-এর জন্য ক্লাউড রানকে cloudrun-egress সাবনেটটি ব্যবহার করার নির্দেশ দিচ্ছি। আমরা সমস্ত ট্র্যাফিককে ডাইরেক্ট VPC ইগ্রেস সাবনেটের মাধ্যমে VPC-তে ফিরে যাওয়ার জন্য নির্দেশ দিচ্ছি।

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

gcloud run deploy cloudrun-loop \
    --source . \
    --platform=managed \
    --ingress=internal \
    --allow-unauthenticated  \
    --vpc-egress=all-traffic \
    --network=consumer-vpc \
    --subnet=cloudrun-egress \
    --region=$region

ক্লাউড রান সার্ভিসটি ডেপ্লয় করা শেষ হলে এটি https://cloudrun-loop-<projectnum>.<region>.run.app ফরম্যাটে একটি সার্ভিস ইউআরএল (Service URL) দেবে। এই ইউআরএলটিও নোট করে রাখুন, পরবর্তী ধাপে এটি পরীক্ষা করা হবে।

১৪. ক্লাউড রান ইউআরএল-এর মাধ্যমে ক্লাউডরান-লুপ-এর সাথে সংযোগ পরীক্ষা করুন

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

<Cloud-Run-ServiceURL> এর জায়গায় পূর্ববর্তী ধাপে আপনার টুকে রাখা সার্ভিস URL-টি বসান।

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

curl <Cloud-Run-ServiceURL>

প্রত্যাশিত আউটপুট

Hello World!

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

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

dig <Cloud-Run-ServiceURL>

নমুনা আউটপুট

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1938
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.38.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.36.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.32.53
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 216.239.34.53

;; Query time: 4 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 19:05:36 UTC 2025
;; MSG SIZE  rcvd: 147

ট্র্যাফিককে পাবলিক ইন্টারনেট থেকে দূরে রাখতে, আমরা গুগল এপিআই এন্ডপয়েন্টের জন্য একটি পিএসসি (PSC) তৈরি করে এই রেজোলিউশনটিকে প্রাইভেট-এ পরিবর্তন করতে পারি।

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

exit

১৫. গুগল এপিআই এন্ডপয়েন্টের জন্য পিএসসি তৈরি করুন

এই PSC এন্ডপয়েন্টটি আমাদের পূর্বে তৈরি করা এন্ডপয়েন্ট থেকে ভিন্ন। Google API-এর জন্য PSC, Google API-এর একটি বান্ডেলকে নির্দেশ করে (হয় সমস্ত API, অথবা VPC-SC সামঞ্জস্যপূর্ণ API)। IP অ্যাড্রেসটি কোনো আঞ্চলিক সাবনেট থেকে নেওয়া হয় না, বরং এটিকে একটি একক /32 IP অ্যাড্রেস হিসেবে তৈরি করা হয় যা গ্লোবাল এবং কোনো বিদ্যমান VPC সাবনেট, পিয়ার্ড VPC সাবনেট বা হাইব্রিড রুটের সাথে ওভারল্যাপ করতে পারে না।

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

export pscgoogip=100.100.100.100

echo $pscgoogip

gcloud compute addresses create psc-goog-ep-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=$pscgoogip \
    --network=consumer-vpc

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

gcloud compute forwarding-rules create psc4googapi \
    --global \
    --network=consumer-vpc \
    --address=psc-goog-ep-ip \
    --target-google-apis-bundle=all-apis

১৬. run.app-এর জন্য ক্লাউড ডিএনএস প্রাইভেট জোন তৈরি করুন।

যখন Google APIs এন্ডপয়েন্টের জন্য একটি PSC তৈরি করা হয়, তখন googleapis.com ডোমেনের অধীনে থাকা সমস্ত API-এর জন্য একটি Cloud Run প্রাইভেট DNS জোন তৈরি করা হবে। যেহেতু Cloud Run, run.app ব্যবহার করে, তাই আমাদের Google APIs এন্ডপয়েন্টের জন্য PSC-তে run.app-কে ম্যাপ করতে আরেকটি প্রাইভেট জোন তৈরি করতে হবে।

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

gcloud dns managed-zones create "cloudrun" \
    --dns-name=run.app \
    --description="run.app psc resolution" \
    --visibility=private \
    --networks=consumer-vpc

gcloud dns record-sets transaction start \
   --zone="cloudrun"

gcloud dns record-sets transaction add $pscgoogip \
   --name=*.run.app \
   --ttl=300 \
   --type=A \
   --zone="cloudrun"

gcloud dns record-sets transaction execute \
   --zone="cloudrun"

১৭. ব্যক্তিগত ডিএনএস রেজোলিউশন পরীক্ষা করুন

আমরা আমাদের কনজিউমার-ক্লায়েন্ট ভিএম-এ আবার লগ ইন করে dig কমান্ডটি পুনরায় চালাব, এবং তখন আমরা দেখতে পাব যে আমাদের Cloud Run URL-টি Google APIs এন্ডপয়েন্টের জন্য আমাদের PSC-তে রিজলভ হবে।

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

gcloud compute ssh \
    --zone "$zone" "consumer-client" \
    --tunnel-through-iap \
    --project $projectid

প্রথমে আমরা DNS ক্যাশে পরিষ্কার করব। <Cloud-Run-ServiceURL> এর জায়গায় আপনার পূর্বে লিখে রাখা সার্ভিস URL-টি বসান।

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

sudo resolvectl flush-caches

curl <CloudRun-Loop-ServiceURL>

কার্লটি আগের মতোই কাজ করা উচিত।

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

curl <CloudRun-Loop-ServiceURL>

প্রত্যাশিত আউটপুট

Hello World!

কনজিউমার-ক্লায়েন্ট ভিএম থেকে

dig <CloudRun-Loop-ServiceURL>

dig কমান্ডে দেখা যাবে যে আমাদের Cloud Run Loop সার্ভিসটি এখন আমাদের PSC for Google APIs এন্ডপয়েন্টে রিজলভ হচ্ছে।

নমুনা আউটপুট

; <<>> DiG 9.18.33-1~deb12u2-Debian <<>> https://cloudrun-loop-<projectnum>.<region>.run.app
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30179
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;https://cloudrun-loop-<projectnum>.<region>.run.app.        IN A

;; ANSWER SECTION:
https://cloudrun-loop-<projectnum>.<region>.run.app. 300 IN A 100.100.100.100

;; Query time: 8 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Mar 11 20:04:05 UTC 2025
;; MSG SIZE  rcvd: 99

সফল!

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

ভিএম ইনস্ট্যান্স থেকে প্রস্থান করুন

exit

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

gcloud dns record-sets delete *.run.app --zone="cloudrun" --type=A -q

gcloud dns managed-zones delete "cloudrun" -q

gcloud compute instances delete consumer-client --zone=$zone --project=$projectid -q

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

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

gcloud run services delete cloudrun-loop --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/cloudrun-loop -q

gcloud compute forwarding-rules delete cloudrun-ep --region=$region -q

gcloud compute addresses delete cloudrun-service-ip --region=$region -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

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

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

gcloud compute networks subnets delete consumer-subnet --region $region -q

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

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

gcloud compute networks subnets delete cloudrun-egress --region $region -q

gcloud compute networks delete consumer-vpc -q

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

gcloud compute service-attachments delete cloudrun-attachment --region=$region -q

gcloud compute instances delete producer-client --zone=$zone --project=$projectid -q

gcloud compute forwarding-rules delete cloudrun-fr --region=$region -q

gcloud compute target-http-proxies delete producer-http-proxy --region=$region -q

gcloud compute url-maps delete producer-urlmap --region=$region -q

gcloud compute backend-services delete cloudrun-producer-bes --region=$region -q

gcloud compute network-endpoint-groups delete cloudrun-producer-neg --region=$region -q

gcloud compute addresses delete cloudrun-ip --region=$region -q

gcloud run services delete helloworld --region=$region -q 

gcloud artifacts docker images delete $region-docker.pkg.dev/$projectid/cloud-run-source-deploy/helloworld -q

gcloud artifacts repositories delete cloud-run-source-deploy --location=$region -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute networks subnets delete lb-proxy-subnet --region $region -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

gcloud compute networks subnets delete producer-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

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

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

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

  • ক্লাউড রানে বেসিক অ্যাপ স্থাপন করা
  • ক্লাউড রান প্রবেশ এবং প্রস্থান নিয়ন্ত্রণ
  • একটি সার্ভারলেস NEG সহ অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সারের মাধ্যমে ক্লাউড রান স্থাপন করা
  • সার্ভিস অ্যাটাচমেন্টের মাধ্যমে একটি পিএসসি প্রোডিউসার সার্ভিস স্থাপন করা
  • পিএসসি এন্ডপয়েন্ট স্থাপন করা