1. مقدمه
رابط Private Service Connect منبعی است که به یک شبکه Virtual Private Cloud (VPC) تولید کننده اجازه می دهد تا اتصالات را به مقاصد مختلف در یک شبکه مصرف کننده آغاز کند. شبکه های تولید کننده و مصرف کننده می توانند در پروژه ها و سازمان های مختلف باشند.
اتصال بین یک پیوست شبکه و یک رابط Private Service Connect مشابه اتصال بین یک نقطه پایانی Private Service Connect و یک پیوست سرویس است، اما دو تفاوت اساسی دارد:
- یک پیوست شبکه به یک شبکه تولید کننده اجازه می دهد تا اتصالات را به یک شبکه مصرف کننده آغاز کند (خروج سرویس مدیریت شده)، در حالی که یک نقطه پایانی به یک شبکه مصرف کننده اجازه می دهد تا اتصال به یک شبکه تولید کننده را آغاز کند (ورود سرویس مدیریت شده).
- اتصال رابط Private Service Connect انتقالی است. این بدان معناست که یک شبکه تولید کننده می تواند با شبکه های دیگری که به شبکه مصرف کننده متصل هستند ارتباط برقرار کند.
چیزی که خواهی ساخت
Vertex AI Pipelines که در یک پروژه مستاجر مدیریت شده توسط گوگل مستقر شده است، از پیوست شبکه PSC برای ایجاد یک نمونه چندنیک بین شبکه تولید کننده و مصرف کننده استفاده می کند. از آنجایی که پیوست شبکه PSC با یک مولتی نیک از شبکه مصرف کننده مستقر می شود، Pipelines Vertex AI می تواند به مسیرهای موجود از شبکه مصرف کنندگان برسد.
در این آموزش، شما قصد دارید یک معماری رابط جامع Private Service Connect (PSC) برای Vertex AI Pipelines بسازید که از قوانین Cloud Firewall برای اجازه یا رد کردن اتصال از تولید کننده به نمونه های آزمایشی مصرف کننده همانطور که در شکل 1 نشان داده شده است، استفاده می کند.
شکل 1
شما یک پیوست شبکه psc را در VPC مصرف کننده ایجاد خواهید کرد که منجر به موارد استفاده زیر می شود:
- یک قانون Ingress Firewall در consumer-vpc ایجاد کنید که به زیرشبکه خط لوله Vertex AI (192.168.10.0/28) اجازه می دهد تا test-svc-1 را انجام دهد. PING موفقیت آمیز تولید شده از Pipeline Job به test-svc-1 را با استفاده از TCPDUMP تأیید کنید
- یک قانون Ingress Firewall در زیرشبکه Consumer-vpc ایجاد کنید که Vertex AI Pipeline (192.168.10.0/28) را برای test-svc-2 رد می کند. بر اساس گزارشهای فایروال ایجاد شده توسط Log Explorer، شکست PING را تأیید کنید.
چیزی که یاد خواهید گرفت
- نحوه ایجاد پیوست شبکه
- چگونه Vertex AI Pipelines می تواند از یک پیوست شبکه برای ایجاد یک رابط PSC استفاده کند
- نحوه برقراری ارتباط از تولید کننده با مصرف کننده
- نحوه اجازه دسترسی از Verex AI Pipelines به VM مصرف کننده، test-svc-1
- نحوه انکار دسترسی از خطوط انتقال هوش مصنوعی Verex به VM مصرف کننده، test-svc-2 با استفاده از فایروال ابری
آنچه شما نیاز دارید
- پروژه Google Cloud
- مجوزهای IAM
- Compute Instance Admin (roles/compute.instanceAdmin)
- مدیر شبکه محاسبه (roles/compute.networkAdmin)
- مدیریت امنیت محاسبه (roles/compute.securityAdmin)
- کاربر تونل امن با IAP (roles/iap.tunnelResourceAccessor)
- مدیر ورود به سیستم ( roles/logging.admin)
- مدیر نوت بوک (roles/notebooks.admin)
- Project IAM Admin (roles/resourcemanager.projectIamAdmin)
- Quota Admin (roles/servicemanagement.quotaAdmin)
- سرپرست حساب سرویس (roles/iam.serviceAccountAdmin)
- کاربر حساب سرویس (roles/iam.serviceAccountUser)
- مدیر هوش مصنوعی Vertex (roles/aiplatform.admin)
2. قبل از شروع
این آموزش از $variables برای کمک به پیاده سازی پیکربندی gcloud در Cloud Shell استفاده می کند.
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
برای پشتیبانی از آموزش، پروژه را به روز کنید
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud services enable notebooks.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable compute.googleapis.com
gcloud services enable cloudresourcemanager.googleapis.com
3. راه اندازی مصرف کننده
VPC مصرف کننده را ایجاد کنید
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
زیرشبکه های مصرف کننده ایجاد کنید
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud compute networks subnets create test-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud compute networks subnets create test-subnet-2 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud compute networks subnets create workbench-subnet --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1 --enable-private-ip-google-access
روتر ابری و پیکربندی NAT
ترجمه آدرس شبکه ابری (NAT) در آموزش برای دانلود بسته نرم افزار نوت بوک استفاده می شود زیرا نمونه نوت بوک آدرس IP خارجی ندارد. Cloud NAT قابلیتهای egress NAT را ارائه میدهد، به این معنی که میزبانهای اینترنتی مجاز به برقراری ارتباط با یک نوتبوک مدیریتشده توسط کاربر نیستند، و امنیت آن را بیشتر میکند.
در داخل Cloud Shell، روتر ابر منطقه ای ایجاد کنید.
gcloud compute routers create cloud-router-us-central1 --network consumer-vpc --region us-central1
در داخل Cloud Shell، دروازه منطقه ای ابر nat را ایجاد کنید.
gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
زیرشبکه Private Service Connect Network Attachment را ایجاد کنید
در داخل Cloud Shell، زیرشبکه Network Attachment را ایجاد کنید که توسط Vertex AI Pipelines استفاده می شود.
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
4. Identify Aware Proxy (IAP) را فعال کنید
برای اینکه به IAP اجازه دهید به نمونه های VM شما متصل شود، یک قانون فایروال ایجاد کنید که:
- برای تمام نمونه های VM که می خواهید با استفاده از IAP در دسترس باشند، اعمال می شود.
- به ترافیک ورودی از محدوده IP 35.235.240.0/20 اجازه می دهد. این محدوده شامل تمام آدرس های IP است که IAP برای ارسال TCP استفاده می کند.
در داخل Cloud Shell، قانون فایروال IAP را ایجاد کنید.
gcloud compute firewall-rules create ssh-iap-consumer \
--network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20
5. نمونه های VM مصرف کننده ایجاد کنید
در داخل Cloud Shell، نمونه مصرف کننده vm، test-svc-1 را ایجاد کنید.
gcloud compute instances create test-svc-1 \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=test-subnet-1 \
--shielded-secure-boot
در داخل Cloud Shell، نمونه مصرف کننده vm، test-svc-2 را ایجاد کنید.
gcloud compute instances create test-svc-2 \
--project=$projectid \
--machine-type=e2-micro \
--image-family debian-11 \
--no-address \
--image-project debian-cloud \
--zone us-central1-a \
--subnet=test-subnet-2 \
--shielded-secure-boot
آدرس های IP نمونه ها را دریافت و ذخیره کنید:
در داخل Cloud Shell، یک توصیف در برابر نمونه های آزمایشی VM انجام دهید.
gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep networkIP:
gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep networkIP:
مثال:
user@cloudshell(psc-vertex)$ gcloud compute instances describe test-svc-1 --zone=us-central1-a | grep networkIP:
gcloud compute instances describe test-svc-2 --zone=us-central1-a | grep networkIP:
networkIP: 192.168.20.2
networkIP: 192.168.30.2
6. پیوست شبکه Private Service Connect
پیوست های شبکه منابع منطقه ای هستند که نمایانگر سمت مصرف کننده رابط Private Service Connect هستند. شما یک زیرشبکه واحد را با یک پیوست شبکه مرتبط میکنید و سازنده (خطلاطهای Vertex AI) IPها را به رابط Private Service Connect اختصاص میدهد.
پیوست شبکه را ایجاد کنید
در داخل Cloud Shell، پیوست شبکه را ایجاد کنید.
gcloud compute network-attachments create psc-network-attachment \
--region=us-central1 \
--connection-preference=ACCEPT_MANUAL \
--subnets=intf-subnet
پیوست های شبکه را فهرست کنید
در داخل Cloud Shell، پیوست شبکه را فهرست کنید.
gcloud compute network-attachments list
پیوست های شبکه را شرح دهید
در داخل Cloud Shell، پیوست شبکه را شرح دهید.
gcloud compute network-attachments describe psc-network-attachment --region=us-central1
URI پیوست شبکه psc را که توسط سازنده هنگام ایجاد رابط اتصال سرویس خصوصی استفاده می شود، یادداشت کنید.
در مثال زیر URI پیوست شبکه psc به شرح زیر است:
projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2025-01-21T12:25:25.385-08:00'
fingerprint: m9bHc9qnosY=
id: '56224423547354202'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/psc-vertex/global/networks/consumer-vpc
region: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/psc-vertex/regions/us-central1/subnetworks/intf-subnet
7. Vertex AI Workbench Setup
بخش زیر شما را از طریق ایجاد یک نوت بوک Jupyter راهنمایی می کند. این نوت بوک برای استقرار Pipelines Job استفاده می شود که یک PING از Vertex AI Pipelines به نمونه های آزمایشی ارسال می کند. مسیر داده بین Pipelines Vertex AI و شبکه مصرف کننده حاوی نمونه ها از یک رابط شبکه اتصال سرویس خصوصی استفاده می کند.
یک حساب کاربری سرویس مدیریت شده ایجاد کنید
در بخش زیر، یک حساب کاربری ایجاد خواهید کرد که با نمونه Vertex AI Workbench استفاده شده در آموزش مرتبط خواهد بود.
در آموزش، حساب سرویس دارای نقش های زیر خواهد بود:
در داخل Cloud Shell، حساب سرویس را ایجاد کنید.
gcloud iam service-accounts create notebook-sa \
--display-name="notebook-sa"
در داخل Cloud Shell، حساب سرویس را با نقش Storage Admin بهروزرسانی کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"
در داخل Cloud Shell، حساب سرویس را با نقش Vertex AI User به روز کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
در داخل Cloud Shell، حساب سرویس را با نقش Artifact Registry Admin بهروزرسانی کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"
در داخل Cloud Shell، به حساب سرویس نوت بوک اجازه دهید از حساب خدمات پیشفرض Compute Engine برای نمونهسازی Pipeline Job استفاده کند.
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"
یک نمونه Vertex AI Workbench ایجاد کنید
در بخش زیر، یک نمونه Vertex AI Workbench ایجاد کنید که حساب سرویس قبلاً ایجاد شده، notebook-sa را در خود جای دهد.
Inside Cloud Shell نمونه خصوصی مشتری را ایجاد کنید.
gcloud workbench instances create workbench-tutorial --vm-image-project=deeplearning-platform-release --vm-image-family=common-cpu-notebooks --machine-type=n1-standard-4 --location=us-central1-a --subnet-region=us-central1 --subnet=workbench-subnet --disable-public-ip --shielded-secure-boot=true --service-account-email=notebook-sa@$projectid.iam.gserviceaccount.com
8. Pipelines Vertex AI برای تست اتصال-svc-1
یک تب جدید Cloud Shell باز کنید و تنظیمات پروژه خود را به روز کنید.
در داخل Cloud Shell موارد زیر را انجام دهید:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
برای اجازه دادن به اتصال از Vertex AI Pipelines به test-svc-1 یک قوانین فایروال ورودی ایجاد کنید که پیوست شبکه PSC را به عنوان منبع (192.168.10.0/28) و آدرس IP test-svc-1 را به عنوان مقصد مشخص می کند.
در داخل Cloud Shell، محدوده مقصد را برای مطابقت با آدرس IP test-svc-1 خود بهروزرسانی کنید.
gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW --source-ranges=192.168.10.0/28 --destination-ranges=<your-test-svc-1-vm-ip> --rules=icmp
مثال:
gcloud compute --project=$projectid firewall-rules create allow-icmp-vertex-pipelines-to-test-svc1-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=ALLOW --source-ranges=192.168.10.0/28 --destination-ranges=192.168.20.2 --rules=icmp
با استفاده از IAP در Cloud Shell وارد نمونه test-svc-1 شوید.
gcloud compute ssh test-svc-1 --project=$projectid --zone=us-central1-a --tunnel-through-iap
در سیستم عامل، tcpdump را اجرا کنید تا ترافیک icmp را ضبط کنید. این جلسه سیستم عامل برای تأیید ارتباط بین Vertex AI Pipeline و VM استفاده خواهد شد.
sudo tcpdump -i any icmp -nn
9. Vertex AI Service Agent Update
Vertex AI Pipelines از طرف شما برای انجام عملیاتی مانند دریافت آدرس IP از زیر شبکه PSC Network Attachment که برای ایجاد رابط PSC استفاده می شود، عمل می کند. برای انجام این کار، Vertex AI Pipelines از یک عامل سرویس (ذکر شده در زیر) استفاده می کند که به مجوز Network Admin نیاز دارد.
service-$projectnumber@gcp-sa-aiplatform.iam.gserviceaccount.com
در داخل Cloud Shell، شماره پروژه خود را بدست آورید.
gcloud projects describe $projectid | grep projectNumber
مثال:
gcloud projects describe $projectid | grep projectNumber:
projectNumber: '795057945528'
در داخل Cloud Shell، حساب عامل سرویس را با نقش compute.networkAdmin بهروزرسانی کنید.
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-<your-projectnumber>@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
مثال:
gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:service-795057945528@gcp-sa-aiplatform.iam.gserviceaccount.com" --role="roles/compute.networkAdmin"
10. به روز رسانی حساب پیش فرض سرویس
Compute Engine API را فعال کنید و به حساب سرویس پیش فرض خود دسترسی به Vertex AI بدهید . توجه داشته باشید که ممکن است مدتی طول بکشد تا تغییر دسترسی منتشر شود.
در داخل Cloud Shell، حساب سرویس پیش فرض را با role aiplatform.user به روز کنید
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:<your-projectnumber>-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
مثال:
gcloud projects add-iam-policy-binding $projectid \
--member="serviceAccount:795057945528-compute@developer.gserviceaccount.com" \
--role="roles/aiplatform.user"
11. استقرار Vertex AI Pipelines Job
در بخش بعدی، یک نوت بوک برای انجام یک PING موفقیت آمیز به نمونه test-svc-1 مصرف کننده ایجاد خواهید کرد.
کار آموزشی را در نمونه Vertex AI Workbench اجرا کنید.
- در کنسول Google Cloud، به تب instances در صفحه Vertex AI Workbench بروید.
- در کنار نام نمونه Vertex AI Workbench خود (workbench-tutorial)، روی Open JupyterLab کلیک کنید. نمونه Vertex AI Workbench شما در JupyterLab باز می شود.
- File > New > Notebook را انتخاب کنید
- هسته > پایتون 3 را انتخاب کنید
- در یک سلول نوت بوک جدید، دستور زیر را اجرا کنید تا مطمئن شوید که آخرین نسخه pip را دارید:
! pip3 install --upgrade --quiet google-cloud-aiplatform \
kfp \
google-cloud-pipeline-components
- متغیرهای پروژه خود را در سلول نوت بوک جدید تنظیم کنید
PROJECT_ID = "<your-projectid>"
REGION = "<your-region>"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
مثال:
PROJECT_ID = "psc-vertex"
REGION = "us-central1"
NETWORK_ATTACHMENT_NAME = "psc-network-attachment"
- یک سطل نام منحصر به فرد جهانی را به عنوان یک متغیر در یک سلول نوت بوک جدید تعریف کنید
BUCKET_URI = f"gs://<your-bucket-name>"
مثال:
BUCKET_URI = f"gs://psc-vertex-bucket"
- در یک سلول نوت بوک جدید، سطل را ایجاد کنید
! gsutil mb -l {REGION} -p {PROJECT_ID} {BUCKET_URI}
در بخش زیر، حساب پیشفرض خدمات موتور محاسباتی مورد استفاده برای اجرای خط لوله را تعیین میکنید و همچنین مجوزهای مناسب را به آن اعطا میکنید.
shell_output = ! gcloud projects describe $PROJECT_ID
PROJECT_NUMBER = shell_output[-1].split(":")[1].strip().replace("'", "")
SERVICE_ACCOUNT = f"{PROJECT_NUMBER}-compute@developer.gserviceaccount.com"
print(f"Project Number: {PROJECT_NUMBER}")
print(f"Service Account: {SERVICE_ACCOUNT}")
برای تأیید اجرای موفقیت آمیز، حساب سرویس و شماره پروژه شما چاپ می شود
- در یک سلول نوت بوک جدید، به حساب سرویس خود اجازه خواندن و نوشتن مصنوعات خط لوله در سطل ایجاد شده در مرحله قبل را بدهید.
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectCreator {BUCKET_URI}
! gsutil iam ch serviceAccount:{SERVICE_ACCOUNT}:roles/storage.objectViewer {BUCKET_URI}
- در یک سلول نوت بوک جدید، پارامترهای خط لوله را تعریف کنید. توجه داشته باشید، NETWORK_ATTACHMENT_NAME پیوست شبکه PSC است، بنابراین باید مطابقت داشته باشد.
PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/psc_test"
NETWORK_ATTACHMENT_URI = f"projects/{PROJECT_NUMBER}/regions/{REGION}/networkAttachments/{NETWORK_ATTACHMENT_NAME}"
- در یک سلول نوت بوک جدید، Vertex AI SDK را مقداردهی اولیه کنید
from kfp import dsl
from google.cloud import aiplatform, aiplatform_v1beta1
import time
from google.cloud.aiplatform_v1.types import pipeline_state
import yaml
from datetime import datetime
import logging
aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
- در یک سلول نوت بوک جدید، جزء تست را تعریف کنید
@dsl.container_component
def ping_check(network_address: str):
"""Pings a network address
Args:
network_address: The IP address to ping
"""
return dsl.ContainerSpec(
image="ubuntu:22.04",
command=["sh", "-c"],
args=[
f"""
# Use sed for regex replacement, cleaner than bash parameter expansion for this
cleaned_address=$(echo "{network_address}" | sed 's/[^0-9.]//g')
apt-get update && apt-get install inetutils-traceroute inetutils-ping -y
echo "Will ping $cleaned_address"
if ! ping -c 3 $cleaned_address; then
echo "Ping failed"
traceroute -w 1 -m 7 $cleaned_address
exit 1
fi
"""
],
)
- در یک سلول نوت بوک جدید، خط لوله را تعریف کنید
@dsl.pipeline(name="check-connectivity")
def pipeline(ip_address: str):
"""Pings an IP address. Facilitated by a Private Service Connect Interface
Args:
ip_address: The IP address to ping
"""
ping_check(network_address=ip_address).set_caching_options(False)
return
- در یک سلول نوت بوک جدید، تابع ابزار را اجرا کنید، منتظر بمانید تا خط لوله به پایان برسد
def wait_for_pipeline(
project_id: str,
region: str,
pipeline_job_resource_name: str,
timeout: int = 20 * 60, # Default timeout of 20 minutes (in seconds)
) -> bool:
"""
Waits for a Vertex AI pipeline to finish, with a timeout.
Args:
project_id (str): The Google Cloud project ID.
region (str): The region where the pipeline is running.
pipeline_job_resource_name (str): The resource name of the pipeline job.
timeout (int): The maximum time to wait for the pipeline to finish, in seconds.
Defaults to 20 minutes (1200 seconds).
Returns:
bool: True if the pipeline succeeded, False otherwise.
Raises:
TimeoutError: If the pipeline does not finish within the specified timeout.
"""
# Initialize the AIPlatform client
aiplatform.init(project=project_id, location=region)
# Get the pipeline job
pipeline_job = aiplatform.PipelineJob.get(resource_name=pipeline_job_resource_name)
logging.info(
f"Vertex AI Console Link: https://console.cloud.google.com/vertex-ai/pipelines/locations/{region}/runs/{pipeline_job.resource_name.split('/')[-1]}?project={project_id}"
)
start_time = time.time()
while True:
status = pipeline_job.state
logging.info(f"Pipeline Job status: {status.name}")
if status in [
pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED,
pipeline_state.PipelineState.PIPELINE_STATE_FAILED,
pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED,
]:
break # Exit the loop if the job is finished
if time.time() - start_time > timeout:
logging.error(f"Pipeline timed out after {timeout} seconds.")
raise TimeoutError(f"Pipeline timed out after {timeout} seconds.")
# Wait for a short time before checking again
time.sleep(10) # Adjust the wait time as needed
# Do something based on the final status
if status == pipeline_state.PipelineState.PIPELINE_STATE_SUCCEEDED:
logging.info("Pipeline succeeded")
return True
elif status == pipeline_state.PipelineState.PIPELINE_STATE_CANCELLED:
logging.error("Pipeline cancelled")
raise Exception("Pipeline cancelled")
elif status == pipeline_state.PipelineState.PIPELINE_STATE_FAILED:
logging.error("Pipeline failed")
raise Exception("Pipeline failed")
- در یک سلول نوت بوک جدید، تابع ابزار را برای اجرای خط لوله اجرا کنید
def run_job_with_psc_interface_config(
project_id: str,
region: str,
pipeline_root: str,
network_attachment_name: str,
ip_address: str,
local_pipeline_file: str = "pipeline.yaml",
):
"""
Compiles, submits, and monitors a Vertex AI pipeline.
"""
parameter_values = {"ip_address": ip_address}
pipeline_root = f"{pipeline_root}/{datetime.now().strftime('%Y%m%d%H%M%S')}"
logging.info("Compiling pipeline")
try:
with open(local_pipeline_file, "r") as stream:
pipeline_spec = yaml.safe_load(stream)
logging.info(f"Pipeline Spec: {pipeline_spec}")
except yaml.YAMLError as exc:
logging.error(f"Error loading pipeline yaml file: {exc}")
raise
logging.info(f"Will use pipeline root: {pipeline_root}")
# Initialize the Vertex SDK using PROJECT_ID and LOCATION
aiplatform.init(project=project_id, location=region)
# Create the API endpoint
client_options = {"api_endpoint": f"{region}-aiplatform.googleapis.com"}
# Initialize the PipelineServiceClient
client = aiplatform_v1beta1.PipelineServiceClient(client_options=client_options)
# Construct the request
request = aiplatform_v1beta1.CreatePipelineJobRequest(
parent=f"projects/{project_id}/locations/{region}",
pipeline_job=aiplatform_v1beta1.PipelineJob(
display_name="pipeline-with-psc-interface-config",
pipeline_spec=pipeline_spec,
runtime_config=aiplatform_v1beta1.PipelineJob.RuntimeConfig(
gcs_output_directory=pipeline_root, parameter_values=parameter_values
),
psc_interface_config=aiplatform_v1beta1.PscInterfaceConfig(
network_attachment=network_attachment_name
),
),
)
# Make the API call
response = client.create_pipeline_job(request=request)
# Print the response
logging.info(f"Pipeline job created: {response.name}")
return response.name
- در یک سلول نوت بوک جدید، خط لوله را کامپایل کنید
from kfp import compiler
compiler.Compiler().compile(pipeline_func=pipeline, package_path='pipeline.yaml')
- در یک سلول نوت بوک جدید، TARGET_IP_ADDRESS را به روز کنید تا آدرس IP بدست آمده در مرحله قبلی برای test-svc-1 را منعکس کند و وضعیت خط لوله را مشاهده کنید.
TARGET_IP_ADDRESS = "<your-test-svc-1-ip>"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
مثال:
TARGET_IP_ADDRESS = "192.168.20.2"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
پس از اجرای مرحله 17، تکمیل خط لوله 8 دقیقه طول می کشد.
12. اعتبارسنجی اتصال به test-svc-1
در سلول مورد استفاده برای اجرای مرحله 17، انتقال وضعیت شغلی Pipeline را از PIPELINE_STATE_PENDING به PIPELINE_STATE_RUNNING و در نهایت PIPELINE_STATE_SUCCEEDED مشاهده کنید که نشاندهنده یک پینگ موفق از Vertex AI Pipelines و پاسخ از test-svc-1 است.
برای اعتبارسنجی ترافیک ICMP بین Vertex AI Pipeline و test-svc-1، جلسه tcpdump ایجاد شده قبلی را که در سیستم عامل test-svc-1 اجرا شده است مشاهده کنید که گزارش هایی را ارائه می دهد که ترافیک دو طرفه را نشان می دهد.
در مثال tcpdump، Vertex AI Pipelines آدرس IP 192.168.10.3 را از زیرشبکه 192.168.10.0/28 تهیه کرد، 192.168.20.2 آدرس IP test-svc-1 است. توجه داشته باشید، در محیط شما، آدرس های IP ممکن است متفاوت باشد.
user@test-svc-1:~$ sudo tcpdump -i any icmp -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
18:57:54.737490 ens4 In IP 192.168.10.3 > 192.168.20.2: ICMP echo request, id 257, seq 0, length 64
18:57:54.737523 ens4 Out IP 192.168.20.2 > 192.168.10.3: ICMP echo reply, id 257, seq 0, length 64
13. Vertex AI Pipelines AI برای تست اتصال-svc-2
در بخش بعدی، یک قانون فایروال ورودی برای رد ترافیک از زیرشبکه Vertex AI Pilelines (192.168.10.0/28) به test-svc-2 ایجاد می کنید و سپس نوت بوک را برای منعکس کردن آدرس IP test-svc-2 و در نهایت اجرای Pipelines Jobs اجرا می کنید.
در سلول Notebook، وضعیت Pipeline Job Status Error - Pipeline Failed را نشان میدهد، علاوه بر این، گزارشهای فایروال اطلاعاتی درباره اتصال ناموفق ارائه میدهند.
یک قانون دیوار آتش رد ورود ایجاد کنید
برای رد اتصال از Vertex AI Pipelines به test-svc-2 یک قوانین فایروال ورودی ایجاد کنید که پیوست شبکه PSC را به عنوان منبع (192.168.10.0/28) و آدرس IP test-svc-2 را به عنوان مقصد مشخص می کند.
در داخل Cloud Shell، محدوده مقصد را برای مطابقت با آدرس IP test-svc-2 خود به روز کنید.
gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=<your-test-svc-2-vm-ip> --rules=icmp --enable-logging
مثال:
gcloud compute --project=$projectid firewall-rules create deny-icmp-vertex-pipelines-to-test-svc2-vm --direction=INGRESS --priority=1000 --network=consumer-vpc --action=DENY --source-ranges=192.168.10.0/28 --rules=ALL --destination-ranges=192.168.30.2 --enable-logging
کار خط لوله را از Notebook Cell اجرا کنید
در یک سلول نوت بوک جدید، TARGET_IP_ADDRESS را به روز کنید تا نشانی IP بدست آمده در مرحله قبلی برای test-svc-2 را منعکس کند و وضعیت شغلی Pipelines را مشاهده کنید.
TARGET_IP_ADDRESS = "<your-test-svc-2-ip>"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
مثال:
TARGET_IP_ADDRESS = "192.168.30.2"
try:
job_name = run_job_with_psc_interface_config(
project_id=PROJECT_ID,
region=REGION,
pipeline_root=PIPELINE_ROOT,
network_attachment_name=NETWORK_ATTACHMENT_URI,
ip_address=TARGET_IP_ADDRESS,
)
wait_for_pipeline(
project_id=PROJECT_ID,
region=REGION,
pipeline_job_resource_name=job_name,
)
except Exception as e:
logging.error(f"An error occurred: {e}")
پس از اجرا، کار خط لوله 8 دقیقه طول خواهد کشید.
14. تأیید اعتبار اتصال ناموفق به test-svc-2
در سلولی که برای اجرای Pipelines Job استفاده می شود، به تغییر وضعیت از PIPELINE_STATE_PENDING به PIPELINE_STATE_FAILED توجه کنید که نشان دهنده پینگ ناموفق از Vertex AI Pipelines و پاسخ از test-svc-2 است.
با استفاده از Log Explorer میتوانید ورودیهای Logging فایروال مطابق با قانون Ingress Deny متشکل از زیرشبکه Vertex AI Pipelines (192.168.10.0/28) و آدرس IP test-svc-2 را مشاهده کنید.
Show Query را انتخاب کنید و فیلتر زیر را وارد کنید، 15 دقیقه گذشته و سپس Run Query را اجرا کنید.
jsonPayload.rule_details.reference:("network:consumer-vpc/firewall:deny-icmp-vertex-pipelines-to-test-svc2-vm")
یک ورودی گزارش را انتخاب کنید و سپس فیلدهای تودرتو را گسترش دهید تا عناصر اطلاعاتی متشکل از Pipelines Vertex AI و آدرس IP test-svc-2 که قانون دیوار آتش ورودی رد شده را تأیید می کند، آشکار شود.
15. پاکسازی کنید
از Cloud Shell، اجزای آموزشی را حذف کنید.
gcloud compute instances delete test-svc-1 test-svc-2 --zone=us-central1-a --quiet
gcloud workbench instances delete workbench-tutorial --location=us-central1-a --quiet
gcloud compute firewall-rules delete deny-icmp-vertex-pipelines-to-test-svc2-vm allow-icmp-vertex-pipelines-to-test-svc1-vm ssh-iap-consumer --quiet
gcloud compute routers nats delete cloud-nat-us-central1 --router=cloud-router-us-central1 --region us-central1 --quiet
gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
16. تبریک می گویم
تبریک میگوییم، شما با پیادهسازی فایروال اجازه و رد کردن Ingress، یک رابط اتصال سرویس خصوصی و اتصال مصرفکننده و تولیدکننده را با موفقیت پیکربندی و تأیید کردید.
شما زیرساخت مصرف کننده را ایجاد کردید و یک پیوست شبکه اضافه کردید که به سرویس Vertex AI Pipelines اجازه می داد PSC Interface VM ایجاد کند تا ارتباط بین مصرف کننده و تولید کننده را ایجاد کند. شما یاد گرفتید که چگونه قوانین فایروال را در شبکه VPC مصرف کننده ایجاد کنید که اتصال به نمونه های موجود در شبکه مصرف کننده را مجاز و رد می کند.
Cosmopup فکر می کند آموزش ها عالی هستند!!