Private Service Connect 엔드포인트를 통해 Python SDK를 사용하여 Gemini 3 Pro 채팅에 액세스

1. 개요

Vertex AI API는 인터넷을 통해 액세스할 수 있지만, 엔터프라이즈에서는 인터넷을 거치지 않고 비공개로 Vertex AI API에 액세스하는 것이 좋습니다. 이 실습에서는 먼저 다음 작업을 수행합니다.

  • Python SDK를 사용하여 Vertex를 통해 Gemini 3 Pro API에 액세스
  • VM 인스턴스에서 실행됩니다.
  • 연결은 Cloud NAT를 통해 공개 인터넷으로 이루어집니다.

그런 다음 Google API에 Private Service Connect 엔드포인트를 만들고 Gemini 채팅 API에 연결하는 데 비공개 엔드포인트를 사용하도록 트래픽 흐름을 변경합니다. 구성에는 Terraform, gcloud, 콘솔이 조합됩니다.

이 실습에서는 다음 패턴을 만듭니다.

그림 1.

304c579d349aec90.png

2. 목표

이 실습에서는 다음 작업을 수행하는 방법을 알아봅니다.

  • Python SDK를 사용하도록 VM 인스턴스 설정
  • Python 스크립트를 통해 Gemini Chat에 연결
  • Googleapis에 연결하도록 PSC 엔드포인트 구성
  • Googleais 연결 경로 확인
  • 수동 DNS 항목 구성

자습형 환경 설정

  1. Google Cloud Console에 로그인하여 새 프로젝트를 만들거나 기존 프로젝트를 재사용합니다. 아직 Gmail이나 Google Workspace 계정이 없는 경우 계정을 만들어야 합니다.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • 프로젝트 이름은 이 프로젝트 참가자의 표시 이름입니다. 이는 Google API에서 사용하지 않는 문자열이며 언제든지 업데이트할 수 있습니다.
  • 프로젝트 ID는 모든 Google Cloud 프로젝트에서 고유하며, 변경할 수 없습니다(설정된 후에는 변경할 수 없음). Cloud 콘솔은 고유한 문자열을 자동으로 생성합니다. 일반적으로는 신경 쓰지 않아도 됩니다. 대부분의 Codelab에서는 프로젝트 ID (일반적으로 PROJECT_ID로 식별됨)를 참조해야 합니다. 생성된 ID가 마음에 들지 않으면 다른 임의 ID를 생성할 수 있습니다. 또는 직접 시도해 보고 사용 가능한지 확인할 수도 있습니다. 이 단계 이후에는 변경할 수 없으며 프로젝트 기간 동안 유지됩니다.
  • 참고로 세 번째 값은 일부 API에서 사용하는 프로젝트 번호입니다. 이 세 가지 값에 대한 자세한 내용은 문서를 참고하세요.
  1. 다음으로 Cloud 리소스/API를 사용하려면 Cloud 콘솔에서 결제를 사용 설정해야 합니다. 이 Codelab 실행에는 많은 비용이 들지 않습니다. 이 튜토리얼이 끝난 후에 요금이 청구되지 않도록 리소스를 종료하려면 만든 리소스 또는 프로젝트를 삭제하면 됩니다. Google Cloud 신규 사용자는 300달러(USD) 상당의 무료 체험판 프로그램에 참여할 수 있습니다.

Cloud Shell 시작

Google Cloud를 노트북에서 원격으로 실행할 수 있지만, 이 Codelab에서는 Cloud에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Google Cloud Console의 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다.

Cloud Shell 활성화

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 완료되면 다음과 같이 표시됩니다.

환경이 연결되었음을 보여주는 Google Cloud Shell 터미널 스크린샷

가상 머신에는 필요한 개발 도구가 모두 들어있습니다. 영구적인 5GB 홈 디렉터리를 제공하고 Google Cloud에서 실행되므로 네트워크 성능과 인증이 크게 개선됩니다. 이 Codelab의 모든 작업은 브라우저 내에서 수행할 수 있습니다. 아무것도 설치할 필요가 없습니다.

3. 작업 1. Terraform으로 환경 설정

방화벽 규칙과 서브넷이 있는 커스텀 VPC를 만듭니다. Cloud 콘솔을 열고 사용할 프로젝트를 선택합니다.

  1. 콘솔 오른쪽 상단에 있는 Cloud Shell을 열고 Cloud Shell에 올바른 프로젝트 ID가 표시되는지 확인하고 액세스를 허용하라는 메시지가 표시되면 확인합니다. b51b80043d3bac90.png
  2. terraform-build라는 폴더를 만들고 폴더로 이동합니다.
mkdir terraform-build  && cd terraform-build
  1. main.tfvariable.tf 파일을 만듭니다.
touch main.tf variable.tf 
  1. Cloud Shell 편집기 뷰로 전환합니다. 편집기를 선택하고 인터페이스가 로드될 수 있도록 필요한 프롬프트를 허용합니다.
  2. 로드되면 File > Open Folder로 이동하여 /home/your-user-name/terraform-build로 이동하고 Ok를 선택하여 편집기에서 폴더를 엽니다. 39b3eb9a3e077bfd.png
  3. variable.tf 파일을 선택하고 다음을 추가합니다. your-project-id-here 텍스트를 실제 프로젝트 ID(따옴표로 묶음)로 바꿉니다.
variable "project_id" {
  type = string
  default = "your-project-id-here"
}

variable "network_id" {
  type = string
  default = "python-net"
}
  1. 그런 다음 main.tf 파일을 엽니다. 아래 설명된 대로 다양한 작업을 실행하기 위해 Terraform 코드를 추가할 것입니다.

API 사용 설정

resource "google_project_service" "default"

python-net이라는 VPC 만들기

resource "google_compute_network" "default"

서브넷 추가

resource "google_compute_subnetwork" "default"

방화벽 규칙 2개 추가

resource "google_compute_firewall" "allow_icmp"resource "google_compute_firewall" "allow_ssh"

  1. 다음을 복사하여 main .tf 파일에 붙여넣습니다.
resource "google_project_service" "default" {
  project = var.project_id 
  for_each = toset([
    "dns.googleapis.com",
    "aiplatform.googleapis.com",
    "servicedirectory.googleapis.com"
  ])

  service            = each.value
  disable_on_destroy = false
}

resource "google_compute_network" "default" {
  project                 = var.project_id
  name                    = var.network_id
  auto_create_subnetworks = false
  mtu                     = 1460
  routing_mode            = "GLOBAL"
}

resource "google_compute_subnetwork" "default" {
  name          = "vm1-subnet"
  ip_cidr_range = "10.0.11.0/24"
  project       = var.project_id
  region        = "us-east1"
  stack_type    = "IPV4_ONLY"
  network       = google_compute_network.default.id
}

resource "google_compute_firewall" "allow_icmp" {
  name    = "allow-icmp-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-icmp"]
}

resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-ssh"]
}
  1. Cloud Shell 터미널로 다시 전환하고 terraform-build 디렉터리 cd terraform-build에 있는지 확인한 후 다음 명령어를 실행합니다.

terraform init

작업 디렉터리를 초기화합니다. 이 단계에서는 지정된 구성에 필요한 제공자를 다운로드합니다.

terraform plan

Terraform이 인프라를 배포하기 위해 수행할 작업을 보여주는 실행 계획을 생성합니다.

  1. 이제 리소스를 만들려면 terraform apply 명령어를 실행하고 yes을 입력하여 실행합니다.

4. 작업 2. Terraform으로 NAT 게이트웨이 및 VM 만들기

인터넷에 대한 아웃바운드 외부 액세스를 부여해야 하므로 Cloud NAT 게이트웨이를 만들어 연결하겠습니다.

  1. Cloud Shell을 열고 terraform-build 폴더로 이동하여 다음 파일을 만듭니다 (총 3개 파일). 이 부분은 나중에 수정할 예정입니다.
touch nat-vm.tf psc.tf dns.tf
  1. Cloud Shell 편집기 뷰로 전환하고 nat-vm.tf 파일을 선택한 후 다음 Terraform 코드를 추가합니다. 이렇게 하면 NAT 게이트웨이와 VM 2개가 생성됩니다.

Terraform nat-vm.tf

resource "google_compute_router" "default" {
  name    = "py-outbound-nat"
  region  = "us-east1"
  network = google_compute_network.default.id
  project = var.project_id
  

 bgp {
  asn = 64514
  }
}

resource "google_compute_router_nat" "default" {
  name                               = "py-outbound-nat-gw"
  router                             = google_compute_router.default.name
  region                             = google_compute_router.default.region
  nat_ip_allocate_option             = "AUTO_ONLY"
  project                            = var.project_id
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"

  log_config {
    enable = true
    filter = "ERRORS_ONLY"
  }
}

resource "google_compute_instance" "vm1" {
  name         = "py-vm1"
  zone         = "us-east1-b"
  machine_type = "n2-standard-2"
  project      = var.project_id

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-12"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.default.id  
    stack_type = "IPV4_ONLY"
  }

  tags = ["allow-ssh", "allow-icmp"]

  metadata_startup_script = <<-EOF
    #! /bin/bash
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv git -y
    sudo apt-get install tcpdump dnsutils -y    
    
      mkdir -p ~/py-gem-env
      cd ~/py-gem-env
      python3 -m venv env
      source env/bin/activate
      pip install --upgrade pip
      pip install ipython google-genai
    '
  EOF
}
  1. Cloud Shell 터미널로 전환하고 terraform-build 폴더에 있는지 확인한 후 terraform plan를 실행합니다. 그러면 4개의 항목이 추가되는 것을 확인할 수 있습니다. 그런 다음 terraform apply를 실행하고 yes를 입력하여 NAT 게이트웨이와 VM을 만듭니다.

5. 작업 3. VM 구성 및 테스트

  1. VM 인스턴스로 이동합니다. py-vm1로 시작하는 VM을 선택합니다. SSH를 선택합니다.
  2. py-vm1에 SSH로 연결한 후 sudo -i를 입력하여 루트를 사용 설정합니다.
  3. venv 환경을 활성화합니다.
cd py-gem-env
source env/bin/activate
  1. 이제 나중에 테스트를 할 수 있도록 인증하겠습니다. VM에서 다음 명령어를 실행하고 메시지가 표시되면 y를 누릅니다.
gcloud auth application-default login
  1. 다음으로 https://로 시작하는 URL을 복사하고 실습 브라우저 창에서 새 탭을 열어 URL을 붙여넣습니다. 프롬프트를 수락합니다.
  2. 다음이 표시되면 복사를 선택하고 VM py-vm1 세션으로 다시 전환한 다음 승인 코드 입력:에 복사한 코드를 붙여넣고 Enter 키를 눌러 인증합니다.

b703db7aa2aa286a.png

  1. 이제 Vertex API에 연결할 수 있는지 간단히 테스트해 보겠습니다. Vertex API는 *-aiplatform.googleapis.com을 사용하므로 해당 주소로 dig을 실행하여 트래픽이 어떻게 라우팅되는지 확인합니다.
dig *-aiplatform.googleapis.com
  1. 주소는 다르지만 다음과 비슷한 내용이 표시됩니다. API가 공개 API이므로 경로는 공개 IP 주소를 통해 이루어집니다. 복사 금지
; <<>> DiG 9.18.41-1~deb12u1-Debian <<>> *-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60947
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;*-aiplatform.googleapis.com.   IN      A

;; ANSWER SECTION:
*-aiplatform.googleapis.com. 300 IN     A       173.194.216.95
*-aiplatform.googleapis.com. 300 IN     A       108.177.11.95
*-aiplatform.googleapis.com. 300 IN     A       192.178.219.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.134.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.139.95
*-aiplatform.googleapis.com. 300 IN     A       108.177.12.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.210.95
*-aiplatform.googleapis.com. 300 IN     A       74.125.26.95
*-aiplatform.googleapis.com. 300 IN     A       173.194.212.95
*-aiplatform.googleapis.com. 300 IN     A       172.217.204.95
  1. 이제 Python을 사용해 보겠습니다. ipython을 입력하여 ipython 인터페이스를 활성화합니다.
ipython

845ef4291429888a.png

  1. 이제 다음을 복사하여 붙여넣습니다. 이렇게 하면 Gemini에게 'Google 로고의 모든 색상은 무엇인가요'와 '하늘의 색상은 무엇인가요'라고 묻습니다.
from google import genai
from google.genai import types
import os
import sys

LOCATION = "global"
MODEL_ID = "gemini-3-pro-preview" 

try:
    client = genai.Client(vertexai=True, location=LOCATION)
    print(f"Successfully initialized Google Gen AI Client (Vertex AI mode) in {LOCATION}")
except Exception as e:
    print(f"Error initializing client: {e}")
    print("Ensure you have installed the library: `pip install google-genai`")
    print("And authenticated: `gcloud auth application-default login`")
    sys.exit(1)

class SimpleChatSession:
    def __init__(self, model_id):
        self.model_id = model_id
        self.history = [] 

    def send_message(self, prompt, stream=True):
        user_content = types.Content(
            role="user",
            parts=[types.Part(text=prompt)]
        )
        self.history.append(user_content)

        try:
            response_stream = client.models.generate_content_stream(
                model=self.model_id,
                contents=self.history,
                config=types.GenerateContentConfig(
                    temperature=0.7 
                )
            )

            accumulated_text = ""
            
            for chunk in response_stream:
                if chunk.text:
                    yield chunk.text
                    accumulated_text += chunk.text
            
            model_content = types.Content(
                role="model",
                parts=[types.Part(text=accumulated_text)]
            )
            self.history.append(model_content)

        except Exception as e:
            print(f"\n[Error during generation: {e}]")

def get_chat_response(session: SimpleChatSession, prompt: str):
    print(f"\n--- User: {prompt} ---")
    print("--- Model: ", end="")
    
    stream_generator = session.send_message(prompt)
    
    full_text = ""
    for chunk_text in stream_generator:
        full_text += chunk_text
        print(chunk_text, end="", flush=True)

    print() 
    return full_text

if __name__ == "__main__":
    chat_session = SimpleChatSession(MODEL_ID)

    get_chat_response(chat_session, "Hello.")
    get_chat_response(chat_session, "What are all the colors of the Google logo?")
    get_chat_response(chat_session, "What color is the sky?")
  1. Enter 키를 두 번 눌러 실행하고 결과를 확인합니다.
  2. 이 요청은 공개 API를 통해 Vertex에 액세스했습니다.
  3. SSH 세션을 닫고 계속하겠습니다.

6. 작업 4. Terraform으로 googleapis에 대한 PSC 엔드포인트 만들기

Vertex API 엔드포인트에 대한 비공개 연결을 사용 설정하려면 Google API용 Private Service Connect 엔드포인트를 만듭니다. 이렇게 하면 Google에서 할당한 비공개 IP 주소를 사용하여 필요한 Google API(이 경우 Vertex)로 트래픽을 라우팅할 수 있습니다.

  1. 아직 열려 있지 않으면 편집기 뷰에서 Cloud Shell을 엽니다. 다음 항목을 만들 예정입니다.
  • PSC 엔드포인트 192.168.255.250의 IP를 만듭니다 (resource "google_compute_global_address" "default")
  • Google API에 대한 PSC 엔드포인트 만들기 (resource "google_compute_global_forwarding_rule" "default")

terraform-build 폴더에서 psc.tf 파일을 엽니다. 파일에 다음 코드를 추가합니다.

Terraform psc.tf

resource "google_compute_global_address" "default" {
  name         = "vertex-ip"
  purpose      = "PRIVATE_SERVICE_CONNECT"
  network      = google_compute_network.default.id
  address_type = "INTERNAL"
  address      = "192.168.255.250"
}

resource "google_compute_global_forwarding_rule" "default" {  
  name                  = "pscvertexgemini"
  target                = "all-apis"
  network               = google_compute_network.default.id
  ip_address            = google_compute_global_address.default.id
  load_balancing_scheme = ""
  }
  1. Cloud Shell 터미널로 전환하고 terraform-build 폴더에 있는지 확인합니다. 그런 다음 terraform init를 실행합니다. 그런 다음 terraform plan를 실행하면 항목 2개가 추가되는 것을 확인할 수 있습니다.
    그런 다음 terraform apply를 실행하고 yes를 입력하여 IP 및 PSC Google API 엔드포인트를 만듭니다.
  2. 엔드포인트 존재 확인
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

7. 작업 5. Terraform으로 googleapis에 수동 DNS 항목 만들기

비공개 DNS를 사용하여 PSC 엔드포인트를 가리키는 수동 DNS 항목을 만들 수 있습니다. 이렇게 하면 할당된 모든 네트워크에 영향을 미칩니다.

  1. 네트워크 서비스로 이동하여 Cloud DNS를 선택합니다.
  2. 영역에는 영역 유형 서비스 디렉터리가 있는 Google API용 Private Service Connect의 자동 생성 영역이 표시됩니다. 이 값은 **SERVICE-ENDPOINT.p.googleapis.com 형식으로 PSC 엔드포인트에 연결하는 데 사용할 수 있습니다. 예: aiplatform-pscvertexgemini.p.googleapis.com
  3. 이 경우 비공개 DNS 항목을 수동으로 만들려고 합니다. 구성은 다음과 같습니다.
  • 'googleapis.com'의 비공개 DNS 영역을 'googleapis-private'로 만들고 'python-net' 네트워크로 제한합니다.
  • 'googleapis.com'을 IP 주소 '192.168.255.250'에 매핑하는 A 레코드를 추가합니다.
  • 'googleapis.com'의 모든 하위 도메인(예: www.googleapis.com)을 'googleapis.com'으로 리디렉션하는 CNAME 레코드를 추가합니다.
  1. 아직 열려 있지 않으면 편집기 뷰에서 Cloud Shell을 엽니다. terraform-build 폴더에서 dns.tf 파일을 엽니다. 파일에 다음 코드를 추가합니다.

Terraform dns.tf

resource "google_dns_managed_zone" "private_zone" {
  name        = "googleapis-private"
  dns_name    = "googleapis.com."  
  visibility  = "private"
  project     = var.project_id     

  private_visibility_config {
    networks {
      network_url = google_compute_network.default.id  
    }
  }
}

resource "google_dns_record_set" "a_record" {
  name    = "googleapis.com."  
  type    = "A"
  ttl     = 300
  managed_zone = google_dns_managed_zone.private_zone.name
  project = var.project_id    

  rrdatas = ["192.168.255.250"]
}

resource "google_dns_record_set" "cname_record" {
 name    = "*.googleapis.com."
 type    = "CNAME"
 ttl     = 300
 managed_zone = google_dns_managed_zone.private_zone.name
 project = var.project_id    

 rrdatas = ["googleapis.com."]  
}
  1. Cloud Shell 터미널로 전환하고 terraform-build 폴더에 있는지 확인합니다. 그런 다음 terraform plan를 실행하면 추가될 항목이 표시됩니다.
    그런 다음 terraform apply를 실행하고 yes를 입력하여 비공개 DNS 항목을 만듭니다.
  2. A 레코드와 CNAME이 다음과 같이 설정되어야 합니다(6d2fc061460cd983.png 참고).
  3. 다음으로 py-vm1에서 이러한 변경사항을 적용한 후 연결을 확인합니다.

8. 작업 6. IP 주소를 통해 엔드포인트 연결 확인

비공개 엔드포인트를 사용하여 Gemini에 연결해 보겠습니다.

  1. VM 인스턴스 py-vm1로 이동합니다. SSH를 선택하고 SSH를 통해 VM에 연결
  2. sudo -i을 입력하여 루트 액세스 권한을 얻습니다.
  3. ping 명령어를 사용하여 aiplatform.googleapis.com의 연결 경로를 확인합니다. 이렇게 하면 googleapis의 비공개 DNS, A 레코드에 있는 IP 주소로 핑이 전송됩니다. 이 IP는 PSC 엔드포인트이므로 핑이 실패합니다.
ping -c 2 aiplatform.googleapis.com
  1. aiplatform-pscvertexgemini.p.googleapis.com을 사용하여 PSC Google API에 대해 자동으로 생성된 DNS 항목을 사용하여 ping로 연결 경로를 확인합니다. 이는 PSC 엔드포인트의 IP 주소를 가리키므로 핑이 실패합니다.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. dig 명령어를 사용하여 aiplatform.googleapis.com의 연결 경로를 확인합니다. PSC 엔드포인트의 IP 주소여야 합니다.
dig aiplatform.googleapis.com
  1. 콘솔로 돌아가 VM 인스턴스 py-vm1의 다른 인스턴스를 엽니다. SSH를 선택하고 SSH를 통해 VM에 연결합니다.
  2. sudo -i을 입력하여 루트 액세스 권한을 얻습니다.
  3. 다음 명령어를 실행하여 TCP 덤프에서 연결을 확인합니다.
sudo tcpdump -i any port 53 -n or host aiplatform.googleapis.com
  1. 이제 VM 인스턴스 py-vm1의 첫 번째 SSH 인스턴스로 다시 전환합니다.
  2. 다음을 사용하여 환경을 활성화합니다.
cd py-gem-env
source env/bin/activate
  1. 이제 Python을 테스트해 보겠습니다. ipython을 입력하여 ipython 인터페이스를 활성화합니다.
ipython
  1. 이제 다음을 복사하여 붙여넣습니다. 이렇게 하면 Gemini에게 "AI 맥락에서 토큰화란 무엇인지 짧은 문장으로 요약해 줘" 및 "고래는 멋진가요?"라고 질문합니다.
from google import genai
from google.genai import types
import os
import sys

LOCATION = "global"
MODEL_ID = "gemini-3-pro-preview" 

try:
    client = genai.Client(vertexai=True, location=LOCATION)
    print(f"Successfully initialized Google Gen AI Client (Vertex AI mode) in {LOCATION}")
except Exception as e:
    print(f"Error initializing client: {e}")
    print("Ensure you have installed the library: `pip install google-genai`")
    print("And authenticated: `gcloud auth application-default login`")
    sys.exit(1)

class SimpleChatSession:
    def __init__(self, model_id):
        self.model_id = model_id
        self.history = [] 

    def send_message(self, prompt, stream=True):
        user_content = types.Content(
            role="user",
            parts=[types.Part(text=prompt)]
        )
        self.history.append(user_content)

        try:
            response_stream = client.models.generate_content_stream(
                model=self.model_id,
                contents=self.history,
                config=types.GenerateContentConfig(
                    temperature=0.7 
                )
            )

            accumulated_text = ""
            
            for chunk in response_stream:
                if chunk.text:
                    yield chunk.text
                    accumulated_text += chunk.text
            
            model_content = types.Content(
                role="model",
                parts=[types.Part(text=accumulated_text)]
            )
            self.history.append(model_content)

        except Exception as e:
            print(f"\n[Error during generation: {e}]")

def get_chat_response(session: SimpleChatSession, prompt: str):
    print(f"\n--- User: {prompt} ---")
    print("--- Model: ", end="")
    
    stream_generator = session.send_message(prompt)
    
    full_text = ""
    for chunk_text in stream_generator:
        full_text += chunk_text
        print(chunk_text, end="", flush=True)

    print() 
    return full_text

if __name__ == "__main__":
    chat_session = SimpleChatSession(MODEL_ID)

    get_chat_response(chat_session, "Hello.")
    get_chat_response(chat_session, "In one short sentence summarize what is a tokenizer in the context of AI?")
    get_chat_response(chat_session, "Are whales awesome or not?")
  1. Enter 키를 두 번 눌러 실행하고 결과를 확인합니다.
  2. VM 인스턴스 py-vm1의 두 번째 인스턴스로 다시 전환합니다. TCPDUMP 결과가 표시됩니다. VM의 IP 주소가 PSC 엔드포인트 IP 주소를 사용하여 aiplatform.googleapis.com에 연결되는 것을 확인할 수 있습니다.

VM 인스턴스 py-vm1에 대한 모든 SSH 세션을 닫습니다.

9. 삭제

  1. Cloud Shell로 이동하여 terraform-build 디렉터리 cd terraform-build에 있는지 확인합니다.
  2. terraform plan destroy을 실행하여 적용될 모든 변경사항을 확인합니다.
terraform plan -destroy
  1. 그런 다음 terraform destroy 명령어를 실행하고 yes를 입력하면 Terraform으로 프로젝트에서 만든 모든 리소스가 삭제됩니다.
terraform destroy 

10. 축하합니다

축하합니다. 공개 API 주소를 통해 Vertex에 연결하고 Google API용 Private Service Connect 엔드포인트를 사용하여 비공개로 Gemini 3 Pro를 사용했습니다. 이 기능을 사용하면 (Interconnect, Cross-Cloud Interconnect, VPC)를 통해 연결된 온프레미스/기타 클라우드 환경으로 비공개 API 연결을 확장할 수 있습니다.

다음 단계/더 학습하기

Vertex AI 네트워킹에 대해 자세히 알아보세요.

Codelab: Private Service Connect 엔드포인트를 통해 Python SDK로 Vertex AI에서 Anthropic Claude에 액세스하기

다음 실습 참여하기

Google Cloud로 퀘스트를 계속 진행하고 다른 Google Cloud Skills Boost 실습을 확인하세요.