ভার্টেক্স এআই পাইপলাইনস পিএসসি ইন্টারফেস এসডব্লিউপি

১. ভূমিকা

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

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

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

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

d7dc28d6567e6283.png চিত্র:১

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

  • ভার্টেক্স এআই পিএসসি-ইন্টারফেস RFC1918 অ্যাড্রেস ব্লকের মধ্যে একটি ভিপিসি-তে বা অন-প্রিমিসেস গন্তব্যে ট্র্যাফিক রাউটিং করতে সক্ষম।
  • নন-RFC-1918 অ্যাড্রেস ব্লক টার্গেটকারী PSC-ইন্টারফেসের জন্য কনজিউমারের VPC-তে একটি RFC-1918 অ্যাড্রেসসহ একটি সুস্পষ্ট প্রক্সি স্থাপন করা প্রয়োজন। Vertex AI ডেপ্লয়মেন্টের মধ্যে, টার্গেট এন্ডপয়েন্টের FQDN-এর সাথে প্রক্সিটি অবশ্যই সংজ্ঞায়িত করতে হবে। চিত্র ১ দেখুন, যা কনজিউমার VPC-তে কনফিগার করা সুস্পষ্ট প্রক্সি মোডের সিকিউর ওয়েব প্রক্সি (SWP) উপস্থাপন করে, যা নিম্নলিখিত নন-RFC-1918 CIDR-গুলোতে রাউটিং সহজতর করে:
  1. ২৪০.০.০.০/৪
  2. ২০৩.০.১১৩.০/২৪
  3. 10.10.20.0/28 কোনো প্রক্সির প্রয়োজন নেই, এটি RFC-1918 পরিসরের অন্তর্ভুক্ত।
  4. ইন্টারনেট বহির্গমন

গুগল পরিচালিত টেন্যান্ট নেটওয়ার্কের জন্য ইন্টারনেট সংযোগ:

VPC-SC ছাড়া Vertex AI PSC-ইন্টারফেস

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

VPC-SC সহ Vertex AI PSC-ইন্টারফেস

  • যখন আপনার প্রজেক্ট একটি VPC সার্ভিস কন্ট্রোলস পেরিমিটারের অংশ হয়, তখন ডেটা পাচার রোধ করার জন্য পেরিমিটারটি গুগল-পরিচালিত টেন্যান্টের ডিফল্ট ইন্টারনেট অ্যাক্সেস ব্লক করে দেয়।
  • এই পরিস্থিতিতে ডেপ্লয়মেন্টটিকে পাবলিক ইন্টারনেটে অ্যাক্সেস দেওয়ার জন্য, আপনাকে অবশ্যই একটি সুরক্ষিত বহির্গমন পথ (secure egress path) স্পষ্টভাবে কনফিগার করতে হবে, যা Vertex AI-এর সাথে সংযুক্ত আপনার VPC-এর মাধ্যমে ট্র্যাফিক রাউট করবে। এটি করার একটি উপায় হলো, VPC নেটওয়ার্কের ভিতরে RFC 1918 অ্যাড্রেসসহ একটি প্রক্সি সার্ভার স্থাপন করা এবং এর সাথে একটি ক্লাউড NAT গেটওয়ে যুক্ত করা। উল্লেখ্য যে, আপনি ইন্টারনেটে ট্র্যাফিক ফরওয়ার্ড করার জন্য সিকিউর ওয়েব প্রক্সিও (Secure Web proxy) ব্যবহার করতে পারেন। সিকিউর ওয়েব প্রক্সি তৈরি করলে, স্বয়ংক্রিয়ভাবে একটি ক্লাউড NAT গেটওয়ে তৈরি হয়ে যায়।

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

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

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

এই টিউটোরিয়ালে, আপনি প্রাইভেট সার্ভিস কানেক্ট (PSC) ইন্টারফেস সহ একটি পূর্ণাঙ্গ ভার্টেক্স এআই পাইপলাইনস ডেপ্লয়মেন্ট তৈরি করবেন, যা চিত্র ১-এ প্রদর্শিত পদ্ধতি অনুযায়ী class-e-subnet নন-RFC 1918 এন্ডপয়েন্টকে টার্গেট করে প্রডিউসার থেকে কনজিউমারের কম্পিউটে কানেক্টিভিটি স্থাপন করতে সাহায্য করবে।

2d095dc2f4de6b4b.png চিত্র ২

আপনি কনজিউমার ভিপিসিতে (VPC) ডিএনএস পিয়ারিং (DNS peering) ব্যবহার করে একটিমাত্র psc-network-attachment তৈরি করবেন, যা ভার্টেক্স এআই ট্রেনিং (Vertex AI Training) হোস্টিং করা টেন্যান্ট প্রজেক্টে থাকা কনজিউমার ভিএমগুলোকে (VMs) রিজলভ (resolve) করবে এবং এর ফলে নিম্নলিখিত ব্যবহারের ক্ষেত্রগুলো (use cases) তৈরি হবে:

Vertex AI Pipelines স্থাপন করুন এবং Secure Web Proxy-কে একটি এক্সপ্লিসিট প্রক্সি মোডে কনফিগার করুন, যাতে এটি ক্লাস E সাবনেটের একটি VM-এর বিরুদ্ধে wget অপারেশন চালাতে পারে।

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

  • কীভাবে একটি নেটওয়ার্ক সংযুক্তি তৈরি করবেন
  • একজন প্রযোজক কীভাবে নেটওয়ার্ক অ্যাটাচমেন্ট ব্যবহার করে একটি PSC ইন্টারফেস তৈরি করতে পারেন
  • গুগল পরিচালিত ভিপিসি নেটওয়ার্ক থেকে কনজিউমার ভিপিসি নেটওয়ার্কে কনফিগার করা প্রাইভেট ডোমেইনগুলো রিজলভ করার জন্য কীভাবে ডিএনএস পিয়ারিং স্থাপন করবেন
  • Vertex AI PSC ইন্টারফেস থেকে Secure Web Proxy-তে ট্র্যাফিক কীভাবে ফরওয়ার্ড করবেন
  • ভার্টেক্স এআই পাইপলাইন থেকে নন-আরএফসি-১৯১৮ আইপি অ্যাড্রেস স্পেসে কীভাবে যোগাযোগ স্থাপন করা যায়

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

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

আইএএম অনুমতি

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

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

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

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

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
projectid=YOUR-PROJECT-ID
echo $projectid

এপিআই সক্ষমকরণ

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

gcloud services enable "compute.googleapis.com"
gcloud services enable "aiplatform.googleapis.com"
gcloud services enable "dns.googleapis.com"
gcloud services enable "notebooks.googleapis.com"
gcloud services enable "storage.googleapis.com"
gcloud services enable "cloudresourcemanager.googleapis.com"
gcloud services enable "artifactregistry.googleapis.com"
gcloud services enable "cloudbuild.googleapis.com"
gcloud services enable "networkservices.googleapis.com"
gcloud services enable "networksecurity.googleapis.com"
gcloud services enable "certificatemanager.googleapis.com"

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

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

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

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

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

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

gcloud compute networks subnets create class-e-subnet --project=$projectid --range=240.0.0.0/4 --network=consumer-vpc --region=us-central1

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

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

প্রক্সি-অনলি সাবনেট তৈরি করুন

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

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

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

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

ক্লাউড রাউটার এবং NAT কনফিগারেশন

গুগল ক্লাউড সিকিওর ওয়েব প্রক্সি যে অঞ্চলে স্থাপন করা হয়, সেখানে স্বয়ংক্রিয়ভাবে একটি ক্লাউড ন্যাট গেটওয়ে এবং একটি সংশ্লিষ্ট ক্লাউড রাউটার প্রস্তুত ও পরিচালনা করে।

৪. আইএপি সক্রিয় করুন

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

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

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

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

৫. কনজিউমার ভিএম ইনস্ট্যান্স তৈরি করুন

ক্লাউড শেলের ভিতরে, class-e-vm কনজিউমার ভিএম ইনস্ট্যান্সটি তৈরি করুন।

gcloud compute instances create class-e-vm \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --shielded-secure-boot \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=class-e-subnet \ 
    --private-network-ip=240.0.0.2

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

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

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

একটি ওয়েব প্রক্সি তৈরি করুন:

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

cat > policy.yaml << EOF
description: basic Secure Web Proxy policy
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
EOF

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

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

পরবর্তী অংশে, হোস্ট sessionMatcher উপর ভিত্তি করে class-e-vm এ অ্যাক্সেসের অনুমতি দেওয়ার জন্য একটি নিয়ম তৈরি করুন।

ক্লাউড শেলে, একটি টেক্সট এডিটর ব্যবহার করে rule1.yaml ফাইলটি তৈরি করুন:

cat > rule1.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1/rules/allow-nonrfc-classe
description: Allow nonrfc class-e
enabled: true
priority: 1
basicProfile: ALLOW
sessionMatcher: host() == 'class-e-vm.demo.com'
EOF

পরবর্তী অংশে, "class-e" VM-এ apache2 ইনস্টলেশনের অনুমতি দেওয়ার জন্য Jupyter নোটবুক অ্যাক্সেসের একটি নিয়ম তৈরি করুন।

ক্লাউড শেলে, একটি টেক্সট এডিটর ব্যবহার করে rule2.yaml ফাইলটি তৈরি করুন:

cat > rule2.yaml << EOF
name: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1/rules/allow-apache2
description: Allow Apache2 install on class-e VM
enabled: true
priority: 2
basicProfile: ALLOW
sessionMatcher: inIpRange(source.ip,'240.0.0.2')
EOF

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

gcloud network-security gateway-security-policies rules import allow-nonrfc-classe \
    --source=rule1.yaml \
    --location=us-central1 \
    --gateway-security-policy=policy1

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

gcloud network-security gateway-security-policies rules import allow-apache2 \
    --source=rule2.yaml \
    --location=us-central1 \
    --gateway-security-policy=policy1

Vertex AI Training সমর্থন করার জন্য, Secure Web Proxy গেটওয়েটি এই সেটিংস দিয়ে কনফিগার করুন:

  • লিসেনিং পোর্ট: Vertex AI অ্যাপ্লিকেশনের কোডের এক্সপ্লিসিট প্রক্সি সেটিংসে কনফিগার করা একই পোর্ট ব্যবহার করুন (যেমন, 8080)।
  • ঠিকানা: RFC 1918 পরিসর থেকে একটি ব্যক্তিগত আইপি ঠিকানা নির্ধারণ করুন।
  • রাউটিং মোড: এটিকে EXPLICIT_ROUTING_MODE-এ সেট করুন।

ক্লাউড শেলে, সিকিউর ওয়েব প্রক্সি গেটওয়ে নির্ধারণ করতে একটি gateway.yaml ফাইল তৈরি করুন:

cat > gateway.yaml << EOF
name: projects/$projectid/locations/us-central1/gateways/swp1
type: SECURE_WEB_GATEWAY
addresses: ["10.10.10.5"]
ports: [8080]
gatewaySecurityPolicy: projects/$projectid/locations/us-central1/gatewaySecurityPolicies/policy1
network: projects/$projectid/global/networks/consumer-vpc
subnetwork: projects/$projectid/regions/us-central1/subnetworks/rfc1918-subnet1
routingMode: EXPLICIT_ROUTING_MODE
EOF

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

gcloud network-services gateways import swp1 \
    --source=gateway.yaml \
    --location=us-central1

একটি সুরক্ষিত ওয়েব প্রক্সি স্থাপন করতে কয়েক মিনিট সময় লাগতে পারে।

e8a4cf23bfc63030.png

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

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

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

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

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_MANUAL \
    --subnets=intf-subnet

দ্রষ্টব্য: এই সংযুক্তিটিতে আপনাকে গৃহীত প্রজেক্ট আইডি স্পষ্টভাবে উল্লেখ করতে হবে না, যখন ভার্টেক্স এআই কনফিগার করা হয় তখন গুগল পরিচালিত টেন্যান্ট প্রজেক্টটি স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যাবে, ঠিক যেমনটি "স্বয়ংক্রিয়ভাবে গ্রহণ করুন" (Accept Automatically) হিসেবে কনফিগার করা থাকলে হয়।

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

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

gcloud compute network-attachments list

নেটওয়ার্ক সংযুক্তিগুলি বর্ণনা করুন

ক্লাউড শেলের ভিতরে নেটওয়ার্ক সংযুক্তিটি বর্ণনা করুন।

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

পিএসসি নেটওয়ার্ক অ্যাটাচমেন্টের নাম, psc-network-attachment , লিখে রাখুন, যা প্রডিউসার প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস তৈরি করার সময় ব্যবহার করবে।

ক্লাউড কনসোলে PSC নেটওয়ার্ক অ্যাটাচমেন্ট URL দেখতে, নিম্নলিখিত লিঙ্কে যান:

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

b969cca5242d9c8a.png

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

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

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

gcloud dns --project=$projectid managed-zones create private-dns-codelab --description="" --dns-name="demo.com." --visibility="private" --networks="https://compute.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc"

ক্লাউড শেলের ভিতরে, class-e-vm ভিএম-এর জন্য রেকর্ড সেট তৈরি করুন এবং আপনার এনভায়রনমেন্টের আউটপুট অনুযায়ী আইপি অ্যাড্রেস আপডেট করা নিশ্চিত করুন।

gcloud dns --project=$projectid record-sets create class-e-vm.demo.com. --zone="private-dns-codelab" --type="A" --ttl="300" --rrdatas="240.0.0.2"

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

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

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

পরবর্তী অংশে, এমন একটি ফায়ারওয়াল নিয়ম তৈরি করুন যা PSC নেটওয়ার্ক অ্যাটাচমেন্ট থেকে উৎপন্ন ট্র্যাফিককে কনজিউমারের VPC-তে থাকা RFC 1918 কম্পিউট রিসোর্স অ্যাক্সেস করার অনুমতি দেয়।

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

gcloud compute firewall-rules create allow-access-to-class-e \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="10.10.100.0/28" \
    --destination-ranges="240.0.0.0/4" \
    --enable-logging

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

নিম্নলিখিত বিভাগে একটি জুপিটার নোটবুক তৈরি করার পদ্ধতি বর্ণনা করা হয়েছে। এই নোটবুকটি একটি ভার্টেক্স এআই পাইপলাইনস জব ডেপ্লয় করতে ব্যবহৃত হবে, যা ভার্টেক্স এআই পাইপলাইনস থেকে টেস্ট ইনস্ট্যান্সগুলোতে একটি wget পাঠাবে। ভার্টেক্স এআই পাইপলাইনস এবং ইনস্ট্যান্সগুলো ধারণকারী কনজিউমার নেটওয়ার্কের মধ্যকার ডেটাপাথটি একটি প্রাইভেট সার্ভিস কানেক্ট ইন্টারফেস ব্যবহার করে।

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

পরবর্তী অংশে, আপনি একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন যা এই টিউটোরিয়ালে ব্যবহৃত Vertex AI Workbench ইনস্ট্যান্সটির সাথে যুক্ত থাকবে।

এই টিউটোরিয়ালে, সার্ভিস অ্যাকাউন্টে নিম্নলিখিত ভূমিকাগুলো প্রয়োগ করা হবে:

ক্লাউড শেলে লগইন করুন এবং নিম্নলিখিতগুলি সম্পাদন করুন;

সার্ভিস অ্যাকাউন্টটি তৈরি করুন।

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

সার্ভিস অ্যাকাউন্টটিকে স্টোরেজ অ্যাডমিন ভূমিকা দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

সার্ভিস অ্যাকাউন্টটিকে ‘এআই প্ল্যাটফর্ম ইউজার’ ভূমিকা দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

সার্ভিস অ্যাকাউন্টটিকে আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিন ভূমিকা দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

ক্লাউড বিল্ড এডিটর ভূমিকা সহ পরিষেবা অ্যাকাউন্টটি আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/cloudbuild.builds.editor"

নোটবুক সার্ভিস অ্যাকাউন্টকে কম্পিউট ইঞ্জিনের ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করার অনুমতি দিন।

gcloud iam service-accounts add-iam-policy-binding \
    $(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')-compute@developer.gserviceaccount.com \
    --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" \
    --role="roles/iam.serviceAccountUser"

১০. একটি ভার্টেক্স এআই ওয়ার্কবেঞ্চ ইনস্ট্যান্স তৈরি করুন।

পরবর্তী অংশে, পূর্বে তৈরি করা সার্ভিস অ্যাকাউন্ট, notebook-sa ​​অন্তর্ভুক্ত করে একটি Vertex AI Workbench ইনস্ট্যান্স তৈরি করুন।

ক্লাউড শেলের ভিতরে প্রাইভেট ক্লায়েন্ট ইনস্ট্যান্সটি তৈরি করুন।

gcloud workbench instances create workbench-tutorial --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=rfc1918-subnet1 --disable-public-ip --shielded-secure-boot=true --shielded-integrity-monitoring=true --shielded-vtpm=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com

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

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

service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com

দ্রষ্টব্য : সার্ভিস এজেন্ট পারমিশন আপডেট করার আগে, ক্লাউড কনসোলে Vertex AI-তে গিয়ে নিশ্চিত করুন যে Vertex AI API সক্রিয় আছে।

ক্লাউড শেলের ভিতরে:

আপনার প্রজেক্ট নম্বরটি সংগ্রহ করুন।

gcloud projects describe $projectid | grep projectNumber

আপনার প্রজেক্ট নম্বর সেট করুন।

projectnumber=YOUR-PROJECT-NUMBER

এআই প্ল্যাটফর্মের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করুন। আপনার প্রোজেক্টে আগে থেকেই কোনো সার্ভিস অ্যাকাউন্ট থাকলে এই ধাপটি এড়িয়ে যান।

gcloud beta services identity create --service=aiplatform.googleapis.com --project=$projectnumber

সার্ভিস এজেন্ট অ্যাকাউন্টটিকে ` compute.networkAdmin রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"

dns.peer রোল দিয়ে সার্ভিস এজেন্ট অ্যাকাউন্টটি আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/dns.peer"

ডিফল্ট পরিষেবা অ্যাকাউন্ট আপডেট

Compute Engine API সক্রিয় করুন এবং আপনার ডিফল্ট সার্ভিস অ্যাকাউন্টকে Vertex AI-তে অ্যাক্সেস দিন । মনে রাখবেন, অ্যাক্সেস পরিবর্তনটি কার্যকর হতে কিছুটা সময় লাগতে পারে।

নিম্নলিখিতভাবে ক্লাউড শেল ব্যবহার করে ডিফল্ট পরিষেবা অ্যাকাউন্টটি আপডেট করুন:

aiplatform.user রোল দিয়ে ডিফল্ট সার্ভিস অ্যাকাউন্টটি আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/aiplatform.user"

ডিফল্ট সার্ভিস অ্যাকাউন্টটিকে storage.admin রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/storage.admin"

ডিফল্ট সার্ভিস অ্যাকাউন্টটিকে artifactregistry.admin রোল দিয়ে আপডেট করুন।

gcloud projects add-iam-policy-binding $projectid \
  --member="serviceAccount:$projectnumber-compute@developer.gserviceaccount.com" \
    --role="roles/artifactregistry.admin"

১২. 'class-e-vm'-এ Apache2 ইনস্টল করুন এবং Tcpdump সক্রিয় করুন:

class-e-vm থেকে সিকিওর ওয়েব প্রক্সির মাধ্যমে অ্যাপাচি২ ইনস্টল করুন:

একটি নতুন ক্লাউড শেল ট্যাব খুলুন, আপনার প্রজেক্ট ভেরিয়েবল আপডেট করুন এবং ক্লাস-ই-ভিএম-এ ssh-এর মাধ্যমে লগইন করুন।

gcloud compute ssh --zone us-central1-a "class-e-vm" --tunnel-through-iap --project $projectid
sudo apt-get -o Acquire::http::Proxy="http://10.10.10.5:8080" update
sudo apt-get -o Acquire::http::Proxy="http://10.10.10.5:8080" install apache2 -y
sudo service apache2 restart
echo 'class-e Server !!' | sudo tee /var/www/html/index.html

সিকিউর ওয়েব প্রক্সি দ্বারা টার্গেটগুলোতে ট্র্যাফিক ফরওয়ার্ড করার জন্য ব্যবহৃত প্রক্সি-অনলি সাবনেটে tcpdump ফিল্টারিং চালান।

ক্লাস-ই-ভিএম ওএস থেকে প্রক্সি-ভিএম সাবনেটে টিসিপিডাম্প ফিল্টারিং চালান।

sudo tcpdump -i any net 10.10.100.0/24 -nn

দ্রষ্টব্য: JupyterLab সেশনটি খোলার জন্য, workbench-tutorial ইনস্ট্যান্স সাবনেটে প্রাইভেট গুগল অ্যাক্সেস চালু আছে কিনা তা নিশ্চিত করুন।

১৩. ভার্টেক্স এআই পাইপলাইন জব স্থাপন করুন

পরবর্তী অংশে, আপনি ভার্টেক্স এআই পাইপলাইনস থেকে এক্সপ্লিসিট প্রক্সিতে সফলভাবে wget অপারেশন চালানোর জন্য একটি নোটবুক তৈরি করবেন। এর মাধ্যমে আপনি নন-RFC 1918 ভিএম, যেমন class-e-vm , অ্যাক্সেস করতে পারবেন। ভার্টেক্স এআই পাইপলাইনস-এর rfc1918-vm অ্যাক্সেস করার জন্য কোনো এক্সপ্লিসিট প্রক্সির প্রয়োজন হয় না, কারণ এর টার্গেট হলো একটি RFC 1918 আইপি অ্যাড্রেস।

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

  1. Google Cloud কনসোলে, Vertex AI Workbench পেজের instances ট্যাবে যান।
  2. আপনার Vertex AI Workbench ইনস্ট্যান্সের নামের (workbench-tutorial) পাশে, Open JupyterLab-এ ক্লিক করুন। আপনার Vertex AI Workbench ইনস্ট্যান্সটি JupyterLab-এ খুলে যাবে।
  3. ফাইল > নতুন > নোটবুক নির্বাচন করুন
  4. কার্নেল নির্বাচন করুন > পাইথন ৩

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন, এবং নিম্নলিখিতটি আপডেট করে রান করুন। আপনার এনভায়রনমেন্টের বিবরণ দিয়ে PROJECT_ID আপডেট করতে ভুলবেন না।

import json
import requests
import pprint

PROJECT_ID = 'YOUR-PROJECT-ID' #Enter your project ID
PROJECT_NUMBER=!gcloud projects list --filter="project_id:$PROJECT_ID" --format="value(PROJECT_NUMBER)"
PROJECT_NUMBER=str(PROJECT_NUMBER).strip('[').strip(']').strip("'")
print(PROJECT_NUMBER)

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

# us-central1 is used for the codelab
REGION = "us-central1" #@param {type:"string"}
SERVICE_NAME = "aiplatform" #@param {type:"string"}
SERVICE ="{}.googleapis.com".format(SERVICE_NAME)
ENDPOINT="{}-{}.googleapis.com".format(REGION, SERVICE_NAME)
API_VERSION = "v1" # @param {type: "string"}

LOCATION = REGION

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিচের কনফিগারেশনটি চালান, নিম্নলিখিত গুরুত্বপূর্ণ বিষয়গুলো লক্ষ্য করুন:

  • প্রক্সি_সার্ভার = "http://explicit-swp.demo.com:8080"
  • কনজিউমার ভিপিসিতে ডেপ্লয় করা প্রক্সি ভিএম-এর সাথে একটি FQDN যুক্ত থাকে। আমরা পরবর্তী ধাপে FQDN-টি রিজলভ করার জন্য ডিএনএস পিয়ারিং ব্যবহার করছি।
%%writefile main.py

import logging
import socket
import sys
import os

def make_api_request(url: str, proxy_vm_ip: str, proxy_vm_port: str):
    """
    Makes a GET request to a nonRFC-1918 API and saves the response.

    Args:
        url: The URL of the API to send the request to.
    """
    import requests

    try:
        # response = requests.get(url)
        proxy_server = f"http://explicit-swp.demo.com:8080" # replace it with your Secure Web proxy Ip-address and the port.

        proxies = {
          "http": proxy_server,
          "https": proxy_server,
        }

        response = requests.get(url, proxies=proxies)
        logging.info(response.text)

        response.raise_for_status()  # Raise an exception for bad status codes
        logging.info(f"Successfully fetched data from {url}")
    except requests.exceptions.RequestException as e:
        logging.error(f"An error occurred: {e}")
        raise e

if __name__ == '__main__':
  # Configure logging to print clearly to the console
  logging.basicConfig(
      level=logging.INFO,
      format='%(levelname)s: %(message)s',
      stream=sys.stdout
  )
  url_to_test = os.environ['NONRFC_URL']
  proxy_vm_ip = os.environ['PROXY_VM_IP']
  proxy_vm_port = os.environ['PROXY_VM_PORT']

  logging.info(f"url_to_test: {url_to_test}")
  logging.info(f"proxy_vm_ip: {proxy_vm_ip}")
  logging.info(f"proxy_vm_port: {proxy_vm_port}")
  make_api_request(url_to_test, proxy_vm_ip, proxy_vm_port)

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

%%writefile Dockerfile
FROM python:3.9-slim

RUN apt-get update && \
  apt-get install -y iputils-ping && \
  apt-get install -y wget

RUN pip install cloudml-hypertune requests kfp

COPY main.py /main.py

ENTRYPOINT ["python3", "/main.py"]

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

!gcloud artifacts repositories create pipelines-test-repo-psc --repository-format=docker --location=us-central1

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

IMAGE_PROJECT = PROJECT_ID
IMAGE_REPO = 'pipelines-test-repo-psc' 
IMAGE_NAME = 'nonrfc-ip-call'
TAG = 'v1'

IMAGE_URI= f'us-central1-docker.pkg.dev/{IMAGE_PROJECT}/{IMAGE_REPO}/{IMAGE_NAME}:{TAG}'
IMAGE_URI

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

!gcloud auth configure-docker us-docker.pkg.dev --quiet

আপনার JupyterLab নোটবুকে একটি নতুন সেল তৈরি করুন এবং নিম্নলিখিতটি চালান। কোনো ত্রুটি (gcloud.builds.submit) থাকলে তা উপেক্ষা করুন।

!gcloud builds submit --tag {IMAGE_URI} --region=us-central1

আপনার JupyterLab নোটবুকে, নিচের সেলটি তৈরি করে চালান এবং নিম্নলিখিত গুরুত্বপূর্ণ বিষয়গুলো লক্ষ্য করুন:

  • demo.com ডোমেইন নেমটির জন্য dnsPeeringConfigs (dnsPeeringConfigs) ব্যবহার করে কনজিউমার VPC-গুলোর সাথে DNS পিয়ারিং কনফিগার করা হয়।
  • এখানে এক্সপ্লিসিট রাউটিং মোড ওয়েব প্রক্সিটি হলো explicit-swp.demo.com। কনজিউমারের VPC-এর মধ্যে DNS পিয়ারিং-এর মাধ্যমে রেজোলিউশন পরিচালিত হয়।
  • পোর্ট ৮০৮০ হলো সিকিউর ওয়েব প্রক্সিতে কনফিগার করা ডিফল্ট লিসেনিং পোর্ট।
  • class-e-vm-demo.com-এ wget DNS peering-এর মাধ্যমে সমাধান করা হয়।
  • কোডটি Vertex-এর জন্য "psc-network-attachment" নির্দিষ্ট করে, যা এটিকে দুটি PSC ইন্টারফেস ইনস্ট্যান্স স্থাপন করার জন্য নেটওয়ার্ক অ্যাটাচমেন্ট সাবনেট ব্যবহার করতে সক্ষম করে।
import json
from datetime import datetime


JOB_ID_PREFIX='test_psci-nonRFC' #@param {type:"string"}
JOB_ID = '{}_{}'.format(JOB_ID_PREFIX, datetime.now().strftime("%Y%m%d%H%M%S"))

# PSC-I configs

PRODUCER_PROJECT_ID = PROJECT_ID
DNS_DOMAIN = 'class-e-vm.demo.com' #@param {type:"string"}
NON_RFC_URL = f"http://{DNS_DOMAIN}"

PROXY_VM_IP = "explicit-swp.demo.com" #@param {type:"string"}
PROXY_VM_PORT = "8080" #@param {type:"string"}

CUSTOM_JOB = {
  "display_name": JOB_ID,
  "job_spec": {
      "worker_pool_specs": [
          {
           "machine_spec": {
             "machine_type": "n1-standard-4",
           },
           "replica_count": 1,
           "container_spec": {
             "image_uri": IMAGE_URI,
             "env": [{
               "name": "NONRFC_URL",
               "value": NON_RFC_URL
             },
             {
               "name": "PROXY_VM_IP",
               "value": PROXY_VM_IP
             },
             {
               "name": "PROXY_VM_PORT",
               "value": PROXY_VM_PORT
             }]
           },
         },
      ],
      "enable_web_access": True,
      "psc_interface_config": {
        "network_attachment": "psc-network-attachment",
        "dns_peering_configs": [
          {
            "domain": "demo.com.",
            "target_project": PROJECT_ID,
            "target_network": "consumer-vpc"
          },
        ]
      },
  }
}

print(json.dumps(CUSTOM_JOB, indent=2))

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

import requests
bearer_token = !gcloud auth application-default print-access-token
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {}'.format(bearer_token[0]),
}

request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/customJobs/"

print("request_uri: ", request_uri)

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

response_autopush = requests.post(request_uri, json=CUSTOM_JOB, headers=headers)
response = response_autopush
print("response:", response)
if response.reason == 'OK':
  job_name = response.json()['name']
  job_id = job_name.split('/')[-1]
  print("Created Job: ", response.json()['name'])
else:
  print(response.text)

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

# Print KFP SDK version (should be >= 1.6)
! python3 -c "import kfp; print('KFP SDK version: {}'.format(kfp.__version__))"

# Print AI Platform version
! python3 -c "from google.cloud import aiplatform; print('AI Platform version: {}'.format(aiplatform.__version__))"

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

BUCKET_URI = "your-unique-bucket" # Provide a globally unique bucket name

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

!gcloud storage buckets create gs://{BUCKET_URI}

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

# pipeline parameters
CACHE_PIPELINE = False # @param {type: "string"}
_DEFAULT_IMAGE = IMAGE_URI
BUCKET_URI = "gs://{BUCKET_URI}"  # @param {type: "string"}
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/intro"
PIPELINE_DISPLAY_NAME = "pipeline_nonRFCIP" # @param {type: "string"}

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

from re import S
import kfp
from kfp import dsl
from kfp.dsl import container_component, ContainerSpec
from kfp import compiler
from google.cloud import aiplatform


# ==== Component with env variable ====

@container_component
def dns_peering_test_op(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
    return ContainerSpec(
        image=_DEFAULT_IMAGE,
        command=["bash", "-c"],
        args=[
            """
            apt-get update && apt-get install inetutils-traceroute inetutils-ping netcat-openbsd curl -y

            echo "Local IP(s): $(hostname -I)"

            echo "Attempting to trace route to %s"
            traceroute -w 1 -m 7 "%s"

            echo "Sending curl requests to http://%s via proxy %s:%s and recording trace..."
            if curl -L -v --trace-ascii /dev/stdout -x http://%s:%s "http://%s"; then
                echo "Curl request succeeded!"
            else
                echo "Curl request failed!"
                exit 1
            fi
            """ % (dns_domain, dns_domain, dns_domain, proxy_vm_ip, proxy_vm_port, proxy_vm_ip, proxy_vm_port, dns_domain)

        ]
    )

# ==== Pipeline ====
@dsl.pipeline(
    name="dns-peering-test-pipeline",
    description="Test DNS Peering using env variable",
    pipeline_root=PIPELINE_ROOT,
)
def dns_peering_test_pipeline(dns_domain: str, proxy_vm_ip:str, proxy_vm_port:str):
    dns_test_task = dns_peering_test_op(dns_domain=dns_domain, proxy_vm_ip=proxy_vm_ip, proxy_vm_port=proxy_vm_port)
    dns_test_task.set_caching_options(enable_caching=CACHE_PIPELINE)

# ==== Compile pipeline ====
if __name__ == "__main__":
    aiplatform.init(project=PROJECT_ID, location=LOCATION)

    compiler.Compiler().compile(
        pipeline_func=dns_peering_test_pipeline,
        package_path="dns_peering_test_pipeline.yaml",
    )
    print("✅ Pipeline compiled to dns_peering_test_pipeline.yaml")

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

# Define the PipelineJob body; see API Reference https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.pipelineJobs/create

import requests, json
import datetime

bearer_token = !gcloud auth application-default print-access-token
headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer {}'.format(bearer_token[0]),
}

request_uri = f"https://{REGION}-aiplatform.googleapis.com/{API_VERSION}/projects/{PROJECT_NUMBER}/locations/{REGION}/pipelineJobs/"

print("request_uri: ", request_uri)

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

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

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

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

a2e0b6d6243f26f1.png

হাইলাইট করা ফিল্ডটি PSC নেটওয়ার্ক অ্যাটাচমেন্ট থেকে Vertex AI Pipelines দ্বারা ব্যবহৃত IP অ্যাড্রেস নির্দেশ করে।

11e411ea919d3bad.png

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

Vertex AI Pipelines জবটি প্রথমবার চলতে প্রায় ১৪ মিনিট সময় নেবে, পরবর্তী রানগুলো অনেক কম সময়ে সম্পন্ন হয়। সফল ফলাফল যাচাই করতে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:

Vertex AI → Training → Custom jobs-এ যান

সম্পাদিত কাস্টম কাজটি নির্বাচন করুন

2f467254aa0c2e3a.png

লগ দেখুন নির্বাচন করুন

8d525d3b152bcc61.png

ক্লাউড লগিং উপলব্ধ হলে, 'রান কোয়েরি' (Run Query) নির্বাচন করুন যা নীচে হাইলাইট করা অংশটি তৈরি করে, যা Vertex AI Pipelines থেকে class-e-vm এ একটি সফল wget নিশ্চিত করে।

a4f9e9167f4ce1ae.png

38972f834aa2bd1d.png

১৬. টিসিপিডাম্প যাচাইকরণ

চলুন TCPDUMP আউটপুটটি পর্যালোচনা করা যাক, যা কম্পিউট ইনস্ট্যান্সগুলোর সাথে সংযোগকে আরও যাচাই করে:

class-e-vm থেকে HTTP GET এবং 200 OK পর্যবেক্ষণ করুন।

XXXXXXXXX@class-e-vm:~$ sudo tcpdump -i any net 10.10.100.0/28 -nn
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
05:51:14.173641 ens4  In  IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [S], seq 1747181041, win 65535, options [mss 1420,sackOK,TS val 3942828403 ecr 0,nop,wscale 8], length 0
05:51:14.173668 ens4  Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [S.], seq 3013226100, ack 1747181042, win 64768, options [mss 1420,sackOK,TS val 1886125065 ecr 3942828403,nop,wscale 7], length 0
05:51:14.174977 ens4  In  IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [.], ack 1, win 1054, options [nop,nop,TS val 3942828405 ecr 1886125065], length 0
05:51:14.175066 ens4  In  IP 10.10.100.8.55306 > 240.0.0.2.80: Flags [P.], seq 1:223, ack 1, win 1054, options [nop,nop,TS val 3942828405 ecr 1886125065], length 222: HTTP: GET / HTTP/1.1
05:51:14.175096 ens4  Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [.], ack 223, win 505, options [nop,nop,TS val 1886125066 ecr 3942828405], length 0
05:51:14.239042 ens4  Out IP 240.0.0.2.80 > 10.10.100.8.55306: Flags [P.], seq 1:246, ack 223, win 505, options [nop,nop,TS val 1886125130 ecr 3942828405], length 245: HTTP: HTTP/1.1 200 OK

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

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

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

gcloud network-security gateway-security-policies rules delete allow-nonrfc-classe \
    --gateway-security-policy=policy1 \
    --location=us-central1

gcloud network-security gateway-security-policies rules delete allow-apache2 \
    --gateway-security-policy=policy1 \
    --location=us-central1

gcloud network-security gateway-security-policies delete policy1 \
    --location=us-central1
gcloud network-services gateways delete swp1 \
    --location=us-central1

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

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

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

gcloud dns managed-zones delete private-dns-codelab

gcloud computeinstances delete class-e-vm --project=$projectid --zone=us-central1-a --quiet
gcloud compute networks delete consumer-vpc --quiet

১৮. অভিনন্দন

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

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

678ba30d64a76795.png

এরপর কী?

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

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