1. 소개
Google API용 Private Service Connect (PSC)는 사용자가 VPC 내에서 비공개 IP 전역 엔드포인트를 통해 비공개 액세스를 구성할 수 있도록 지원하는 Google Cloud 네트워킹 기능입니다. VPN 또는 Interconnect를 통해 Google Cloud에 연결된 하이브리드 환경에서 코드 또는 클라이언트 측 애플리케이션을 실행하는 사용자의 경우 PSC는 해당 비공개 하이브리드 연결을 통해 Google API를 확인하는 데 사용됩니다.
Google API용 PSC는 다양한 도메인을 확인할 수 있으며 전체 목록은 여기에서 확인할 수 있습니다. 대부분의 Google API에서 사용하는 도메인은 <API>.googleapis.com입니다. 이 도메인과 함께 PSC는 사용자에게 <API>-<PSC-ENDPOINT-NAME>.**p.**googleapis.com 버전의 googleapis.com도 제공합니다. 사용자는 이 도메인을 사용하여 특정 PSC 엔드포인트를 사용하도록 애플리케이션을 구성할 수 있습니다. 가장 일반적인 사용 사례는 사용자가 PSC 엔드포인트를 사용하여 하이브리드 연결을 통해 Google API 트래픽을 라우팅하는 애플리케이션을 선택하는 동시에 다른 애플리케이션이 공개 API 엔드포인트로 트래픽을 계속 라우팅하도록 허용하는 것입니다.
Gemini는 Google Cloud의 Vertex AI 제품군에 속하며 Google API용 PSC로 확인할 수 있는 Google API 목록에 포함됩니다.
이 Codelab에서는 시뮬레이션된 하이브리드 환경을 빌드하고, 온프레미스에서 Workbench 인스턴스를 호스팅하고, Google API 엔드포인트용 PSC에 연결하여 HA VPN을 통해 비공개로 Gemini API에 액세스하는 Gemini Python 코드를 실행합니다.
학습할 내용
- NCC 허브를 만듭니다.
- NCC 허브에서 VPC 스포크를 구성합니다.
- Cloud HA VPN을 만듭니다.
- NCC 허브에서 하이브리드 스포크를 구성합니다.
- Google API 엔드포인트용 PSC를 만듭니다.
- HA-VPN을 통해 커스텀 경로를 구성합니다.
- DNS 피어링 영역을 구성합니다.
- Vertex Workbench 인스턴스 구성
- Google API API 엔드포인트에 PSC를 사용하도록 Gemini Python 코드를 구성합니다.
필요한 항목
- '소유자' 또는 전체 '편집자' 권한이 있는 Google Cloud 프로젝트
2. Codelab 토폴로지
이 Codelab에서는 Google Cloud를 사용하여 하이브리드 환경을 시뮬레이션합니다. 이 Codelab에는 Google Cloud에만 적용되는 단계가 있으며, 실제 온프렘 환경에서 구성하는 경우와는 다릅니다. 이러한 단계는 호출됩니다.
라우팅 VPC가 VPC 스포크로 있는 NCC 허브를 만듭니다. 해당 VPC에서 온프레미스 환경을 모방하는 온프레미스 VPC에 HA-VPN이 구성됩니다. HA-VPN은 NCC 허브에서 하이브리드 스포크로 구성됩니다. 온프레미스 VPC에서 Workbench 인스턴스가 호스팅될 서브넷을 만듭니다. Workbench 인스턴스에서 패키지를 다운로드하는 데 사용할 Cloud NAT도 만듭니다.
마지막으로 온프레미스 VPC의 DNS 피어링 영역을 만들어 Google API용 PSC가 자동으로 만드는 p.googleapis.com의 서비스 디렉터리 비공개 영역을 사용할 수 있습니다.
3. 설정 및 요구사항
자습형 환경 설정
- Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.
- 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
- 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로
PROJECT_ID
로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다. - 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
- 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.
Cloud Shell 시작
Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.
Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.
가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.
4. 시작하기 전에Duration: 2:00
API 사용 설정
Cloud Shell 내에서 프로젝트가 올바르게 구성되어 있는지 확인하고 환경 변수를 설정합니다.
Cloud Shell 사용
gcloud config list project gcloud config set project <project-id> export project=$(gcloud config get-value project) export region=us-central1 export zone=$region-a echo $project echo $region echo $zone
프로젝트에서 필요한 모든 Google API를 사용 설정합니다.
Cloud Shell 사용
gcloud services enable compute.googleapis.com gcloud services enable networkconnectivity.googleapis.com gcloud services enable dns.googleapis.com gcloud services enable notebooks.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable aiplatform.googleapis.com
5. VPC 및 서브넷 만들기Duration: 5:00
네트워크 만들기
Cloud Shell 사용
gcloud compute networks create routing-vpc \ --subnet-mode=custom
Cloud Shell 사용
gcloud compute networks create onprem-vpc \ --subnet-mode=custom gcloud compute networks subnets create onprem-$region-subnet \ --network=onprem-vpc \ --range=10.0.0.0/24 \ --region=$region --enable-private-ip-google-access
Cloud Router 및 Cloud NAT 만들기
routing-vpc에서 HA VPN과 함께 사용할 Cloud Router를 만듭니다.
Cloud Shell 사용
gcloud compute routers create routing-$region-cr \ --network=routing-vpc \ --region=$region \ --asn=64512
온프레미스 VPC의 HA VPN과 함께 사용할 Cloud Router를 만듭니다.
Cloud Shell 사용
gcloud compute routers create onprem-$region-cr \ --network=onprem-vpc \ --region=$region \ --asn=64513
온프레미스 VPC에서 Cloud NAT와 함께 사용할 Cloud Router를 만듭니다.
Cloud Shell 사용
gcloud compute routers create onprem-$region-cr-4nat \ --network=onprem-vpc \ --region=$region
onprem-vpc의 Cloud NAT는 나중에 구성할 Vertex AI Workbench 인스턴스로 패키지를 다운로드하는 데 사용됩니다.
Cloud Shell 사용
gcloud compute routers nats create onprem-$region-nat \ --router=onprem-$region-cr-4nat \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
6. Cloud HA VPN 만들기기간: 7:00
VPN 게이트웨이를 만듭니다.
Cloud Shell 사용
gcloud compute vpn-gateways create routing-gateway \ --network=routing-vpc \ --region=$region \ --stack-type=IPV4_ONLY
Cloud Shell 사용
gcloud compute vpn-gateways create onprem-gateway \ --network=onprem-vpc \ --region=$region \ --stack-type=IPV4_ONLY
라우팅-vpc에서 시작되는 VPN 터널을 만듭니다.
Cloud Shell 사용
gcloud compute vpn-tunnels create routing-to-onprem-tunnel0 \ --peer-gcp-gateway=onprem-gateway \ --region=$region \ --ike-version=2 \ --shared-secret=mysecret \ --router=routing-$region-cr \ --vpn-gateway=routing-gateway \ --interface=0 gcloud compute vpn-tunnels create routing-to-onprem-tunnel1 \ --peer-gcp-gateway=onprem-gateway \ --region=$region \ --ike-version=2 \ --shared-secret=mysecret \ --router=routing-$region-cr \ --vpn-gateway=routing-gateway \ --interface=1
onprem-vpc에서 시작되는 VPN 터널을 만듭니다.
Cloud Shell 사용
gcloud compute vpn-tunnels create onprem-to-routing-tunnel0 \ --peer-gcp-gateway=routing-gateway \ --region=$region \ --ike-version=2 \ --shared-secret=mysecret \ --router=onprem-$region-cr \ --vpn-gateway=onprem-gateway \ --interface=0 gcloud compute vpn-tunnels create onprem-to-routing-tunnel1 \ --peer-gcp-gateway=routing-gateway \ --region=$region \ --ike-version=2 \ --shared-secret=mysecret \ --router=onprem-$region-cr \ --vpn-gateway=onprem-gateway \ --interface=1
routing-vpc에서 시작되는 두 터널에 대해 BGP 세션을 설정합니다.
Cloud Shell 사용
gcloud compute routers add-interface routing-$region-cr \ --interface-name=routing-interface0 \ --ip-address=169.254.0.1 \ --mask-length=30 \ --vpn-tunnel=routing-to-onprem-tunnel0 \ --region=$region gcloud compute routers add-bgp-peer routing-$region-cr \ --peer-name=routingtoonprem-bgp0 \ --interface=routing-interface0 \ --peer-ip-address=169.254.0.2 \ --peer-asn=64513 \ --region=$region gcloud compute routers add-interface routing-$region-cr \ --interface-name=routing-interface1 \ --ip-address=169.254.1.1 \ --mask-length=30 \ --vpn-tunnel=routing-to-onprem-tunnel1 \ --region=$region gcloud compute routers add-bgp-peer routing-$region-cr \ --peer-name=routingtoonprem-bgp1 \ --interface=routing-interface1 \ --peer-ip-address=169.254.1.2 \ --peer-asn=64513 \ --region=$region
onprem-vpc에서 시작되는 두 터널에 대해 BGP 세션을 설정합니다.
Cloud Shell 사용
gcloud compute routers add-interface onprem-$region-cr \ --interface-name=onprem-interface0 \ --ip-address=169.254.0.2 \ --mask-length=30 \ --vpn-tunnel=onprem-to-routing-tunnel0 \ --region=$region gcloud compute routers add-bgp-peer onprem-$region-cr \ --peer-name=onpremtorouting-bgp0 \ --interface=onprem-interface0 \ --peer-ip-address=169.254.0.1 \ --peer-asn=64512 \ --region=$region gcloud compute routers add-interface onprem-$region-cr \ --interface-name=onprem-interface1 \ --ip-address=169.254.1.2 \ --mask-length=30 \ --vpn-tunnel=onprem-to-routing-tunnel1 \ --region=$region gcloud compute routers add-bgp-peer onprem-$region-cr \ --peer-name=onpremtorouting-bgp1 \ --interface=onprem-interface1 \ --peer-ip-address=169.254.1.1 \ --peer-asn=64512 \ --region=$region
콘솔에서 네트워크 연결 > VPN 페이지로 이동하여 HA-VPN 터널과 BGP 세션이 올바르게 구성되어 있는지 확인합니다.
7. NCC 허브 및 스포크 구성Duration:10:00
NCC 허브 만들기
Cloud Shell 사용
gcloud network-connectivity hubs create ncc-hub \ --project="$project" \ --preset-topology="mesh"
NCC 스포크 만들기
NCC gcloud에서는 모든 스포크가 전체 경로 이름 또는 URI로 구성되어야 합니다.
Cloud Shell 사용
gcloud compute networks describe routing-vpc
다음 명령어의 라우팅 VPC의 전체 경로 (URI)를 확인합니다.
출력 예시
autoCreateSubnetworks: false creationTimestamp: '2025-08-20T11:13:42.233-07:00' id: 'xxx' kind: compute#network name: routing-vpc networkFirewallPolicyEnforcementOrder: AFTER_CLASSIC_FIREWALL routingConfig: bgpBestPathSelectionMode: LEGACY routingMode: REGIONAL selfLink: https://www.googleapis.com/compute/v1/projects/$project/global/networks/routing-vpc selfLinkWithId: https://www.googleapis.com/compute/v1/projects/$project/global/networks/355666541188722361 x_gcloud_bgp_routing_mode: REGIONAL x_gcloud_subnet_mode: CUSTOM
라우팅 VPC 스포크 구성
Cloud Shell 사용
gcloud network-connectivity spokes linked-vpc-network create routing-vpc \ --hub=ncc-hub \ --vpc-network=projects/$project/global/networks/routing-vpc \ --global
Cloud Shell 사용
gcloud compute vpn-tunnels describe routing-to-onprem-tunnel0 --region=$region gcloud compute vpn-tunnels describe routing-to-onprem-tunnel1 --region=$region
라우팅-vpc에서 시작되는 VPN 터널의 전체 경로 (URI)를 확인합니다.
출력 예시
creationTimestamp: '2025-08-20T11:33:37.494-07:00' description: '' detailedStatus: Tunnel is up and running. id: 'xxx' ikeVersion: 2 kind: compute#vpnTunnel labelFingerprint: xxx localTrafficSelector: - 0.0.0.0/0 name: routing-to-onprem-tunnel0 peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway peerIp: 34.153.54.166 region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1 remoteTrafficSelector: - 0.0.0.0/0 router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel0 sharedSecret: '*************' sharedSecretHash: xxx status: ESTABLISHED vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway vpnGatewayInterface: 0 creationTimestamp: '2025-08-20T11:33:41.829-07:00' description: '' detailedStatus: Tunnel is up and running. id: 'xxx' ikeVersion: 2 kind: compute#vpnTunnel labelFingerprint: xxx localTrafficSelector: - 0.0.0.0/0 name: routing-to-onprem-tunnel1 peerGcpGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/onprem-gateway peerIp: 34.153.246.117 region: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1 remoteTrafficSelector: - 0.0.0.0/0 router: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/routers/routing-us-central1-cr selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnTunnels/routing-to-onprem-tunnel1 sharedSecret: '*************' sharedSecretHash: xxx status: ESTABLISHED vpnGateway: https://www.googleapis.com/compute/v1/projects/$project/regions/us-central1/vpnGateways/routing-gateway vpnGatewayInterface: 1
Cloud Shell 사용
gcloud network-connectivity spokes linked-vpn-tunnels create $region-vpn-spoke \ --hub=ncc-hub \ --vpn-tunnels=projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel0,projects/$project/regions/$region/vpnTunnels/routing-to-onprem-tunnel1 \ --region=$region
계속하기 전에 모든 스포크가 올바르게 구성되어 있는지 확인하세요.
Cloud Shell 사용
gcloud network-connectivity hubs list-spokes ncc-hub
출력 예시
NAME: routing-vpc GROUP: default PROJECT: $project LOCATION: global TYPE: VPC_NETWORK STATE: ACTIVE STATE REASON: ETAG: 2 NAME: us-central1-vpn-spoke GROUP: default PROJECT: $project LOCATION: us-central1 TYPE: VPN_TUNNEL STATE: ACTIVE STATE REASON: ETAG:
8. Google API용 Private Service Connect 설정Duration: 5:00
Google API용 PSC 엔드포인트는 리전 VPC 서브넷에 없는 전역 IP 주소에서 생성됩니다. 전역 IP 주소는 PRIVATE_SERVICE_CONNECT 목적으로 특별히 예약되어야 합니다.
Cloud Shell 사용
gcloud compute addresses create psc-ip \ --global \ --purpose=PRIVATE_SERVICE_CONNECT \ --addresses=10.100.100.0 \ --network=routing-vpc
Cloud Shell 사용
gcloud compute forwarding-rules create psc4googep \ --global \ --network=routing-vpc \ --address=psc-ip \ --target-google-apis-bundle=all-apis \ --service-directory-registration=projects/$project/locations/$region
Cloud Shell 사용
gcloud compute routers update routing-$region-cr \ --project=$project \ --region=$region \ --advertisement-mode custom \ --set-advertisement-groups=ALL_SUBNETS \ --set-advertisement-ranges=10.100.100.0/32
Cloud Shell 사용
gcloud dns managed-zones create peeringzone \ --description="dns peer onprem to routing" \ --dns-name=p.googleapis.com \ --networks=onprem-vpc \ --target-network=routing-vpc \ --target-project=$project \ --visibility=private
9. Vertex Workbench 인스턴스 설정하기Duration: 5:00
Workbench 인스턴스 ID에 사용할 서비스 계정을 만듭니다.
Cloud Shell 사용
gcloud iam service-accounts create workbench-sa \ --display-name="workbench-sa"
서비스 계정의 전체 이름을 기록하고 Vertex AI/Gemini에 대한 호출을 실행할 수 있는 aiplatform.admin 권한을 부여합니다.
Cloud Shell 사용
gcloud iam service-accounts list
출력 예시
DISPLAY NAME: Compute Engine default service account EMAIL: xxx-compute@developer.gserviceaccount.com DISABLED: False DISPLAY NAME: workbench-sa EMAIL: workbench-sa@$project.iam.gserviceaccount.com DISABLED: False
<your-project-id>를 실제 프로젝트 ID로 바꿔야 합니다. 필요한 따옴표로 인해 여기서는 $project 변수를 사용할 수 없습니다.
Cloud Shell 사용
gcloud projects add-iam-policy-binding $project --member='serviceAccount:workbench-sa@<your-project-id>.iam.gserviceaccount.com' --role='roles/aiplatform.admin' --condition=None
Cloud Shell 사용
gcloud workbench instances create workbench-$region --vm-image-project=cloud-notebooks-managed --vm-image-family=workbench-instances --location=$region-a --network=projects/$project/global/networks/onprem-vpc --subnet=projects/$project/regions/$region/subnetworks/onprem-$region-subnet --subnet-region=$region --disable-public-ip --service-account-email=workbench-sa@$project.iam.gserviceaccount.com
워크벤치 인스턴스 프로비저닝은 gcloud 명령 실행보다 오래 걸릴 수 있습니다.
10. Gemini 테스트CodeDuration: 7:00
UI에서 'JupyterLab 열기'를 클릭합니다.
JupyterLab에서 새 Python 3 노트북을 엽니다.
노트북에서 다음 코드를 실행합니다. 특정 프로젝트와 지역 정보를 포함하도록 코드를 업데이트해야 합니다.
JupyterLab 노트북에서
pip install --upgrade google-genai
노트북 커널을 다시 시작합니다.
API 엔드포인트를 확인합니다. 여기서는 API 엔드포인트 <YOUR_REGION>-aiplatform.googleapis.com을 사용합니다. 이는 Vertex AI의 표준 API 엔드포인트입니다.
JupyterLab 노트북에서
PROJECT_ID="YOUR_PROJECT_ID" # Google Cloud Project ID LOCATION_ID="YOUR_REGION" # Enter Vertex AI Gemini region such a s us-central1 API_ENDPOINT="https://<YOUR_REGION>-aiplatform.googleapis.com" # API Endpoint MODEL_ID="gemini-2.0-flash" # Gemini Model ID from google import genai from google.genai.types import ( GenerateContentConfig, HarmBlockThreshold, HarmCategory, Part, SafetySetting, )
JupyterLab 노트북에서
from google import genai client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT}) prompt = "what weighs more, 1kg of feathers or 1kg of stones" safety_settings = [ SafetySetting( category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_HARASSMENT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), ] response = client.models.generate_content( model=MODEL_ID, contents=prompt, config=GenerateContentConfig( safety_settings=safety_settings, ), ) # Response will be `None` if it is blocked. print(response.text)
샘플 응답
This is a classic trick question! They both weigh the same: 1 kilogram. The difference is in the volume they occupy and the density of the materials.
코드를 실행할 때 사용한 API 이름을 기록해 둡니다. YOUR_REGION-aiplatform.googleapis.com은 Vertex AI의 기본 API 이름입니다. API 이름을 변경하고 코드를 다시 실행해야 합니다. Workbench 인스턴스의 터미널에서 TCPdump를 실행하여 코드가 PSC 엔드포인트를 사용하고 있는지 확인할 수 있습니다.
터미널에서 TCPdump 실행
파일 > 새로 만들기 > 터미널을 클릭하여 Workbench에서 터미널을 엽니다.
터미널에 텍스트 출력이 표시되지 않는 문제가 있는 경우 터미널 테마를 업데이트해야 합니다. 설정 > 터미널 테마 > 밝게 또는 어둡게에서 설정합니다.
터미널에서
sudo tcpdump host 10.100.100.0
Gemini 코드 업데이트
노트북으로 다시 전환하여 API 엔드포인트를 업데이트하고 코드를 다시 실행합니다. API 엔드포인트가 <YOUR_REGION>-aiplatform**-psc4googep.p**.googleapis.com으로 변경되었습니다. 이는 PSC 특정 API 형식 <service>-<endpointname>.p.googleapis.com에 부합합니다.
JupyterLab 노트북에서
API_ENDPOINT="https://<YOUR_REGION>-aiplatform-psc4googep.p.googleapis.com" # API Endpoint
JupyterLab 노트북에서
from google import genai from google.genai.types import ( GenerateContentConfig, HarmBlockThreshold, HarmCategory, Part, SafetySetting, )
JupyterLab 노트북에서
from google import genai client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT}) prompt = "what weighs more, 1kg of feathers or 1kg of stones" safety_settings = [ SafetySetting( category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_HARASSMENT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), ] response = client.models.generate_content( model=MODEL_ID, contents=prompt, config=GenerateContentConfig( safety_settings=safety_settings, ), ) # Response will be `None` if it is blocked. print(response.text)
샘플 응답
They weigh the same. 1 kg is 1 kg, regardless of what it's made of.
TCPdump 확인
터미널로 다시 전환하여 PSC 엔드포인트 (10.100.100.0) 호출을 찾습니다. TCPdump 종료 (control+c)
샘플 출력
listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes 19:12:01.473886 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [S], seq 3367930834, win 65320, options [mss 1420,sackOK,TS val 2933602967 ecr 0,nop,wscale 7], length 0 19:12:01.476561 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [S.], seq 1863301110, ack 3367930835, win 65535, options [mss 1366,sackOK,TS val 3004118895 ecr 2933602967,nop,wscale 8], length 0 19:12:01.476602 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 1, win 511, options [nop,nop,TS val 2933602969 ecr 3004118895], length 0 19:12:01.477283 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1:1573, ack 1, win 511, options [nop,nop,TS val 2933602970 ecr 3004118895], length 1572 19:12:01.478836 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [.], ack 1573, win 1045, options [nop,nop,TS val 3004118898 ecr 2933602970], length 0 19:12:01.480181 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 1:6041, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 6040 19:12:01.480183 IP 10.100.100.0.https > workbench-us-central1.us-central1-a.c.xxx.internal.41886: Flags [P.], seq 6041:8378, ack 1573, win 1045, options [nop,nop,TS val 3004118899 ecr 2933602970], length 2337 19:12:01.480215 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 6041, win 485, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0 19:12:01.480225 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [.], ack 8378, win 473, options [nop,nop,TS val 2933602973 ecr 3004118899], length 0 19:12:01.482580 IP workbench-us-central1.us-central1-a.c.xxx.internal.41886 > 10.100.100.0.https: Flags [P.], seq 1573:1653, ack 8378, win 501, options [nop,nop,TS val 2933602975 ecr 3004118899], length 80
성공
11. 정리 단계
JupyterLab 노트북을 닫고 Cloud Shell로 돌아갑니다. Cloud Shell이 시간 초과되지 않았는지 확인합니다. 변수가 있는 경우 변수를 재설정합니다.
Cloud Shell 사용
gcloud config list project gcloud config set project <project-id> export project=$(gcloud config get-value project) export region=us-central1 export zone=$region-a echo $project echo $region echo $zone
모든 리소스를 삭제합니다.
Cloud Shell 사용
gcloud workbench instances delete workbench-$region --location=$zone -q gcloud iam service-accounts delete workbench-sa@$project.iam.gserviceaccount.com -q gcloud dns managed-zones delete peeringzone -q gcloud compute forwarding-rules delete psc4googep --global -q gcloud compute addresses delete psc-ip --global -q gcloud network-connectivity spokes delete $region-vpn-spoke --region=$region -q gcloud network-connectivity spokes delete routing-vpc --global -q gcloud network-connectivity hubs delete ncc-hub -q gcloud compute vpn-tunnels delete onprem-to-routing-tunnel1 --region=$region --project=$project -q gcloud compute vpn-tunnels delete onprem-to-routing-tunnel0 --region=$region --project=$project -q gcloud compute vpn-tunnels delete routing-to-onprem-tunnel1 --region=$region --project=$project -q gcloud compute vpn-tunnels delete routing-to-onprem-tunnel0 --region=$region --project=$project -q gcloud compute vpn-gateways delete onprem-gateway --region=$region --project=$project -q gcloud compute vpn-gateways delete routing-gateway --region=$region --project=$project -q gcloud compute routers nats delete onprem-$region-nat --router=onprem-$region-cr-4nat --region=$region -q gcloud compute routers delete onprem-$region-cr-4nat --region=$region -q gcloud compute routers delete onprem-$region-cr --region=$region -q gcloud compute routers delete routing-$region-cr --region=$region -q gcloud compute networks subnets delete onprem-$region-subnet --region=$region -q gcloud compute networks delete onprem-vpc -q gcloud compute networks delete routing-vpc -q
12. 축하합니다.
축하합니다. Codelab을 완료했습니다.
학습한 내용
- NCC 허브를 만듭니다.
- NCC 허브에서 VPC 스포크를 구성합니다.
- Cloud HA VPN을 만듭니다.
- NCC 허브에서 하이브리드 스포크를 구성합니다.
- Google API 엔드포인트용 PSC를 만듭니다.
- HA-VPN을 통해 커스텀 경로를 구성합니다.
- DNS 피어링 영역을 구성합니다.
- Vertex Workbench 인스턴스 구성
- Google API API 엔드포인트에 PSC를 사용하도록 Gemini Python 코드를 구성합니다.