1. ভূমিকা
ওভারভিউ
তাদের পরিষেবা এবং অ্যাপ্লিকেশনগুলির জন্য নেটওয়ার্ক ট্র্যাফিক সুরক্ষিত করতে, অনেক সংস্থা ডেটা অপসারণ রোধ করতে পরিধি নিয়ন্ত্রণ সহ Google ক্লাউডে একটি ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্ক ব্যবহার করে৷ একটি ভিপিসি নেটওয়ার্ক হল একটি ভৌত নেটওয়ার্কের একটি ভার্চুয়াল সংস্করণ যা Google এর উৎপাদন নেটওয়ার্কের ভিতরে প্রয়োগ করা হয়। একটি VPC নেটওয়ার্ক আপনার কম্পিউট ইঞ্জিন ভার্চুয়াল মেশিন (VM) দৃষ্টান্তগুলির জন্য সংযোগ প্রদান করে, অভ্যন্তরীণ অ্যাপ্লিকেশন লোড ব্যালেন্সারের জন্য নেটিভ অভ্যন্তরীণ পাসথ্রু নেটওয়ার্ক লোড ব্যালেন্সার এবং প্রক্সি সিস্টেম সরবরাহ করে, ক্লাউড ইন্টারকানেক্টের জন্য ক্লাউড VPN টানেল এবং VLAN সংযুক্তিগুলি ব্যবহার করে অন-প্রিমিসেস নেটওয়ার্কগুলির সাথে সংযোগ স্থাপন করে, এবং Google ক্লাউড এক্সটার্নাল লোড ব্যালেন্সার থেকে ব্যাকএন্ডে ট্রাফিক বিতরণ করে।
ভিএম-এর বিপরীতে, ক্লাউড রান পরিষেবাগুলি ডিফল্টরূপে কোনও নির্দিষ্ট ভিপিসি নেটওয়ার্কের সাথে যুক্ত নয়। এই কোডল্যাবটি দেখায় কিভাবে প্রবেশ (ইনবাউন্ড সংযোগ) সেটিংস পরিবর্তন করতে হয় যাতে শুধুমাত্র ভিপিসি থেকে আসা ট্রাফিক একটি ক্লাউড রান পরিষেবা (যেমন একটি ব্যাকএন্ড পরিষেবা) অ্যাক্সেস করতে পারে। উপরন্তু, এই কোডল্যাব আপনাকে দেখায় কিভাবে একটি VPC এর মাধ্যমে ব্যাকএন্ড ক্লাউড রান পরিষেবাতে দ্বিতীয় পরিষেবা (যেমন একটি ফ্রন্টএন্ড পরিষেবা) অ্যাক্সেস করতে হয়।
এই উদাহরণে, ব্যাকএন্ড ক্লাউড রান সার্ভিস হ্যালো ওয়ার্ল্ড রিটার্ন করে। ফ্রন্টএন্ড ক্লাউড রান পরিষেবা একটি URL সংগ্রহ করতে UI-তে একটি ইনপুট ক্ষেত্র সরবরাহ করে। তারপর ফ্রন্টএন্ড পরিষেবা সেই URL-এ একটি GET অনুরোধ করে (যেমন ব্যাকএন্ড পরিষেবা), তাই এটিকে একটি পরিষেবা থেকে পরিষেবা অনুরোধ করে (একটি ব্রাউজার থেকে পরিষেবা অনুরোধের পরিবর্তে)। যখন ফ্রন্টএন্ড পরিষেবা সফলভাবে ব্যাকএন্ডে পৌঁছাতে পারে, তখন ব্রাউজারে হ্যালো ওয়ার্ল্ড বার্তাটি প্রদর্শিত হয়।
আপনি কি শিখবেন
- কিভাবে একটি VPC থেকে আপনার ক্লাউড রান পরিষেবাতে শুধুমাত্র ট্র্যাফিকের অনুমতি দেওয়া যায়
- অভ্যন্তরীণ-ইনগ্রেস শুধুমাত্র ক্লাউড রান পরিষেবার সাথে যোগাযোগ করতে একটি ক্লাউড রান পরিষেবাতে কীভাবে বহির্গমন কনফিগার করবেন
2. সেটআপ এবং প্রয়োজনীয়তা
পূর্বশর্ত
- আপনি ক্লাউড কনসোলে লগ ইন করেছেন।
- আপনি পূর্বে একটি ক্লাউড রান পরিষেবা স্থাপন করেছেন৷ উদাহরণস্বরূপ, আপনি শুরু করতে সোর্স কোড কুইকস্টার্ট থেকে একটি ওয়েব পরিষেবা স্থাপন অনুসরণ করতে পারেন।
ক্লাউড শেল সক্রিয় করুন
- ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন
.
যদি এটি আপনার প্রথমবার ক্লাউড শেল শুরু হয়, তাহলে এটি কী তা বর্ণনা করে আপনাকে একটি মধ্যবর্তী স্ক্রীন উপস্থাপন করা হবে। যদি আপনি একটি মধ্যবর্তী স্ক্রীনের সাথে উপস্থাপিত হন, তবে চালিয়ে যান ক্লিক করুন।
ক্লাউড শেলের সাথে সংযোগ করতে এবং সংযোগ করতে এটির মাত্র কয়েক মুহূর্ত লাগবে৷
এই ভার্চুয়াল মেশিনটি প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জাম দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5 GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার অনেক কাজ, যদি সব না হয়, ব্রাউজার দিয়ে করা যেতে পারে।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণীকৃত হয়েছেন এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।
- আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list
কমান্ড আউটপুট
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project
কমান্ড আউটপুট
[core] project = <PROJECT_ID>
যদি এটি না হয়, আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:
gcloud config set project <PROJECT_ID>
কমান্ড আউটপুট
Updated property [core/project].
3. ক্লাউড রান পরিষেবাগুলি তৈরি করুন৷
পরিবেশ ভেরিয়েবল সেটআপ করুন
আপনি পরিবেশের ভেরিয়েবল সেট করতে পারেন যা এই কোডল্যাব জুড়ে ব্যবহার করা হবে।
REGION=<YOUR_REGION, e.g. us-central1> FRONTEND=frontend BACKEND=backend
ব্যাকএন্ড ক্লাউড রান পরিষেবা তৈরি করুন
প্রথমে, সেই ডিরেক্টরিতে সোর্স কোড এবং সিডির জন্য একটি ডিরেক্টরি তৈরি করুন।
mkdir -p internal-codelab/frontend internal-codelab/backend && cd internal-codelab/backend
তারপর, নিম্নলিখিত বিষয়বস্তু সহ একটি package.json
ফাইল তৈরি করুন:
{ "name": "backend-service", "version": "1.0.0", "description": "", "scripts": { "start": "node index.js" }, "dependencies": { "express": "^4.18.1" } }
এরপরে, নিচের বিষয়বস্তু সহ একটি index.js
সোর্স ফাইল তৈরি করুন। এই ফাইলটিতে পরিষেবাটির প্রবেশ বিন্দু রয়েছে এবং অ্যাপটির প্রধান যুক্তি রয়েছে৷
const express = require('express'); const app = express(); app.use(express.urlencoded({ extended: true })); app.get('/', function (req, res) { res.send("hello world"); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, () => { console.log(`helloworld: listening on port ${port}`); });
অবশেষে, নিম্নলিখিত কমান্ডটি চালিত ক্লাউড রান পরিষেবা স্থাপন করুন।
gcloud run deploy $BACKEND --source . --allow-unauthenticated --region $REGION
ফ্রন্টএন্ড ক্লাউড রান পরিষেবা তৈরি করুন
ফ্রন্টএন্ড ডিরেক্টরিতে নেভিগেট করুন।
cd ../frontend
তারপর, নিম্নলিখিত বিষয়বস্তু সহ একটি package.json
ফাইল তৈরি করুন:
{ "name": "frontend", "version": "1.0.0", "description": "", "scripts": { "start": "node index.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "axios": "^1.6.6", "express": "^4.18.2" } }
এরপরে, নিচের বিষয়বস্তু সহ একটি index.js
সোর্স ফাইল তৈরি করুন। এই ফাইলটিতে পরিষেবাটির প্রবেশ বিন্দু রয়েছে এবং অ্যাপটির প্রধান যুক্তি রয়েছে৷
const express = require("express"); const app = express(); const port = 8080; const path = require('path'); const axios = require('axios'); // serve static content (index.html) using // built-in middleware function in Express app.use(express.static('public')); app.use(express.urlencoded({ extended: true })); // this endpoint receives a URL in the post body // and then makes a get request to that URL // results are sent back to the caller app.post('/callService', async (req, res) => { const url = req.body.url; let message = ""; try { console.log("url: ", url); const response = await axios.get(url); message = response.data; } catch (error) { message = error.message; console.error(error.message); } res.send(` ${message} <p> </p> `); }); app.listen(port, () => { console.log(`Example app listening on port ${port}`); });
index.html ফাইলের জন্য একটি সর্বজনীন ডিরেক্টরি তৈরি করুন
mkdir public touch public/index.html
এবং নিম্নলিখিতগুলি ধারণ করতে index.html আপডেট করুন:
<html> <script src="https://unpkg.com/htmx.org@1.9.10" integrity="sha384-D1Kt99CQMDuVetoL1lrYwg5t+9QdHe7NLX/SoJYkXDFfX37iInKRy5xLSi8nO7UC" crossorigin="anonymous" ></script> <body> <div style="margin-top: 100px; margin-left: 100px"> <h1>I'm the Frontend service on the Internet</h1> <form hx-trigger="submit" hx-post="/callService" hx-target="#message"> <label for="url"> URL:</label> <input style="width: 308px" type="text" id="url" name="url" placeholder="The backend service URL" required /> <button hx-indicator="#loading" type="submit">Submit</button> <p></p> <span class="htmx-indicator" id="loading"> Loading... </span> <div id="message" style="white-space: pre-wrap"></div> <p></p> </form> </div> </body> </html>
অবশেষে, নিম্নলিখিত কমান্ডটি চালিত ক্লাউড রান পরিষেবা স্থাপন করুন।
gcloud run deploy $FRONTEND --source . --allow-unauthenticated --region $REGION
ব্যাকএন্ড সার্ভিসে কল করুন
আপনি সফলভাবে দুটি ক্লাউড রান পরিষেবা স্থাপন করেছেন তা যাচাই করুন৷
আপনার ওয়েব ব্রাউজারে ফ্রন্টএন্ড পরিষেবার URL খুলুন।
টেক্সটবক্সে, ব্যাকএন্ড পরিষেবার জন্য URL লিখুন। মনে রাখবেন যে এই অনুরোধটি আপনার ব্রাউজার থেকে রাউট করার পরিবর্তে ফ্রন্ট এন্ড ক্লাউড রান ইনস্ট্যান্স থেকে ব্যাকএন্ড ক্লাউড রান পরিষেবাতে রুট করা হয়েছে।
দেখবেন "হ্যালো ওয়ার্ল্ড"।
4. শুধুমাত্র অভ্যন্তরীণ প্রবেশের জন্য ব্যাকএন্ড পরিষেবা সেট করুন
আপনার ব্যাকএন্ড পরিষেবা অ্যাক্সেস করার জন্য শুধুমাত্র আপনার VPC নেটওয়ার্কের মধ্যে থেকে ট্রাফিকের অনুমতি দিতে নিম্নলিখিত gcloud কমান্ডটি চালান৷
gcloud run services update $BACKEND --ingress internal --region $REGION
আপনার ব্যাকএন্ড পরিষেবা শুধুমাত্র আপনার VPC থেকে ট্র্যাফিক পেতে পারে তা নিশ্চিত করতে, আপনার ফ্রন্টএন্ড পরিষেবা থেকে আপনার ব্যাকএন্ড পরিষেবাতে কল করার জন্য আবার চেষ্টা করুন৷
এবার আপনি দেখতে পাবেন "রিকোয়েস্ট ফেইল উইথ স্ট্যাটাস কোড 404"
আপনি এই ত্রুটিটি পেয়েছেন কারণ ফ্রন্টএন্ড ক্লাউড রান পরিষেবা আউটবাউন্ড অনুরোধ (অর্থাৎ প্রস্থান) প্রথমে ইন্টারনেটে যায়, তাই Google ক্লাউড অনুরোধের উত্স জানে না৷
পরবর্তী বিভাগে, আপনি ভিপিসি অ্যাক্সেস করার জন্য ফ্রন্টএন্ড পরিষেবা কনফিগার করবেন, তাই Google ক্লাউড জানতে পারবে অনুরোধটি ভিপিসি থেকে এসেছে, যা একটি অভ্যন্তরীণ উত্স হিসাবে স্বীকৃত।
5. ভিপিসি অ্যাক্সেস করতে ফ্রন্টএন্ড পরিষেবা কনফিগার করুন
এই বিভাগে, আপনি একটি VPC এর মাধ্যমে আপনার ব্যাকএন্ড পরিষেবার সাথে যোগাযোগ করতে আপনার ফ্রন্টএন্ড ক্লাউড রান পরিষেবা কনফিগার করবেন।
এটি করার জন্য, আপনাকে আপনার ফ্রন্টএন্ড ক্লাউড রান ইনস্ট্যান্সে সরাসরি ভিপিসি এগ্রেস যোগ করতে হবে যাতে আপনার পরিষেবাকে ভিপিসির মধ্যে ব্যবহার করার জন্য একটি অভ্যন্তরীণ আইপি দিতে হবে। তারপর, আপনি এগ্রেস কনফিগার করবেন যাতে ফ্রন্টএন্ড পরিষেবা থেকে সমস্ত আউটবাউন্ড সংযোগ VPC-তে চলে যায়।
প্রথমে, সরাসরি ভিপিসি এগ্রেস সক্ষম করতে এই কমান্ডটি চালান:
gcloud beta run services update $FRONTEND \ --network=default \ --subnet=default \ --vpc-egress=all-traffic \ --region=$REGION
আপনি এখন নিশ্চিত করতে পারেন যে আপনার ফ্রন্টএন্ড পরিষেবার ভিপিসিতে অ্যাক্সেস রয়েছে:
gcloud beta run services describe $FRONTEND \ --region=$REGION
আপনি অনুরূপ আউটপুট দেখতে হবে
VPC access: Network: default Subnet: default Egress: all-traffic
এখন আপনার ফ্রন্টএন্ড পরিষেবা থেকে আপনার ব্যাকএন্ড পরিষেবাতে কল করার জন্য আবার চেষ্টা করুন।
এবার দেখবেন ‘হ্যালো ওয়ার্ল্ড’।
দ্রষ্টব্য: আপনার ফ্রন্টএন্ড পরিষেবাতে ইন্টারনেট অ্যাক্সেস থাকবে না যেহেতু সমস্ত প্রস্থান VPC-তে পাঠানো হয়েছে৷ উদাহরণস্বরূপ, আপনার ফ্রন্টএন্ড পরিষেবাটি https://curlmyip.org/ অ্যাক্সেস করার চেষ্টা করলে সময় শেষ হয়ে যাবে৷
6. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন!
আমরা ক্লাউড রানের ডকুমেন্টেশন পর্যালোচনা করার পরামর্শ দিই এবং ক্লাউড রান পরিষেবার জন্য ব্যক্তিগত নেটওয়ার্কিং কীভাবে কনফিগার করতে হয় ।
আমরা কভার করেছি কি
- কিভাবে একটি VPC থেকে আপনার ক্লাউড রান পরিষেবাতে শুধুমাত্র ট্র্যাফিকের অনুমতি দেওয়া যায়
- অভ্যন্তরীণ-ইনগ্রেস শুধুমাত্র ক্লাউড রান পরিষেবার সাথে যোগাযোগ করতে একটি ক্লাউড রান পরিষেবাতে কীভাবে বহির্গমন কনফিগার করবেন
7. পরিষ্কার করুন
অসাবধানতাবশত চার্জ এড়াতে, (উদাহরণস্বরূপ, যদি ক্লাউড রান পরিষেবাগুলি আপনার মাসিক ক্লাউড রান ইনভোকমেন্ট বরাদ্দের চেয়ে বিনামূল্যের স্তরে অজান্তেই বেশি বার আহ্বান করা হয়), আপনি হয় ক্লাউড রানটি মুছে ফেলতে পারেন বা ধাপ 2 এ আপনার তৈরি করা প্রকল্পটি মুছে ফেলতে পারেন৷
ক্লাউড রান পরিষেবা মুছে ফেলতে, https://console.cloud.google.com/run-এ ক্লাউড রান ক্লাউড কনসোলে যান এবং $FRONTEND এবং $BACKEND পরিষেবাগুলি মুছুন৷
আপনি যদি সম্পূর্ণ প্রকল্প মুছে ফেলার সিদ্ধান্ত নেন, আপনি https://console.cloud.google.com/cloud-resource-manager- এ যেতে পারেন, ধাপ 2-এ আপনার তৈরি করা প্রকল্পটি নির্বাচন করুন এবং মুছুন নির্বাচন করুন৷ আপনি যদি প্রকল্পটি মুছে ফেলেন, তাহলে আপনাকে আপনার ক্লাউড SDK-এ প্রকল্পগুলি পরিবর্তন করতে হবে৷ আপনি gcloud projects list
চালিয়ে সমস্ত উপলব্ধ প্রকল্পের তালিকা দেখতে পারেন।