1. Обзор
Доступ к API Vertex AI можно получить через интернет , однако в вашей организации может потребоваться доступ к API Vertex AI в частном порядке, без использования интернета. В этой лабораторной работе вы сначала это сделаете.
- Получите доступ к API Gemini 3 Pro через Vertex, используя Python SDK.
- Это будет работать на виртуальной машине.
- Подключение к общедоступному интернету будет осуществляться через Cloud NAT.
Затем вы создадите конечную точку Private Service Connect для подключения к API Google и измените поток трафика, чтобы использовать эту частную конечную точку для подключения к API чата Gemini. Конфигурации будут представлять собой комбинацию Terraform, gcloud и console.
В этой лабораторной работе вы создадите следующий узор.
Рисунок 1.

2. Цель
В этой лабораторной работе вы научитесь выполнять следующее задание:
- Настройте экземпляр виртуальной машины для использования SDK Python.
- Подключитесь к чату Gemini с помощью скрипта на Python.
- Настройте конечную точку PSC для подключения к Googleapis.
- Проверьте путь подключения к Googleais
- Настройка записей DNS вручную
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google. Вы всегда можете его изменить.
- Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта (обычно обозначается как
PROJECT_ID). Если сгенерированный идентификатор вас не устраивает, вы можете сгенерировать другой случайный идентификатор. В качестве альтернативы вы можете попробовать свой собственный и посмотреть, доступен ли он. После этого шага его нельзя изменить, и он сохраняется на протяжении всего проекта. - К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud для использования ресурсов/API Cloud. Выполнение этого практического задания не потребует больших затрат, если вообще потребует. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, вы можете удалить созданные ресурсы или удалить проект. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.
3. Задание 1. Настройка среды с помощью Terraform.
Мы создадим пользовательскую VPC с правилами брандмауэра и подсетью. Откройте консоль облака и выберите проект, который будете использовать.
- Откройте Cloud Shell, расположенный в верхней части консоли справа, убедитесь, что в Cloud Shell отображается правильный идентификатор проекта , и подтвердите все запросы на предоставление доступа.

- Создайте папку с именем terraform-build и перейдите в эту папку.
mkdir terraform-build && cd terraform-build
- Создайте файлы main.tf и variable.tf .
touch main.tf variable.tf
- Переключитесь в режим редактора Cloud Shell . Выберите редактор и убедитесь, что вы разрешили все необходимые запросы, чтобы интерфейс загрузился.
- После загрузки перейдите в меню «Файл» > «Открыть папку» и выберите папку /home/your-user-name/terraform-build , затем нажмите «ОК» , чтобы открыть папку в редакторе.

- Выберите файл variable.tf и добавьте следующее. Замените текст
your-project-id-hereна фактический идентификатор вашего проекта в кавычках.
variable "project_id" {
type = string
default = "your-project-id-here"
}
variable "network_id" {
type = string
default = "python-net"
}
- Далее откройте файл main.tf. Мы собираемся добавить в него код Terraform для выполнения различных действий, как описано ниже.
Включить API | |
Создайте VPC с именем python-net. | |
Добавить подсеть | |
Добавьте два правила брандмауэра. | |
- Скопируйте и вставьте следующий текст в основной файл .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"]
}
- Вернитесь в терминал Cloud Shell, убедитесь, что вы находитесь в каталоге terraform-build ,
cd terraform-buildи выполните следующие команды.
terraform init
Инициализирует рабочий каталог. На этом шаге загружаются поставщики, необходимые для данной конфигурации.
terraform plan
Генерирует план выполнения, показывающий, какие действия Terraform предпримет для развертывания вашей инфраструктуры.
- Теперь, чтобы создать ресурсы, выполните команду
terraform applyи введитеyesдля запуска.
4. Задание 2. Создание NAT-шлюза и виртуальных машин с помощью Terraform.
Нам необходимо разрешить исходящий внешний доступ к интернету, поэтому давайте создадим шлюз Cloud NAT и подключим его.
- Откройте Cloud Shell, перейдите в папку terraform-build и создайте следующие файлы (всего три файла). Мы отредактируем их позже.
touch nat-vm.tf psc.tf dns.tf
- Переключитесь в редактор Cloud Shell , выберите файл nat-vm.tf и добавьте следующий код Terraform. Это создаст NAT-шлюз и две виртуальные машины.
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
}
- Переключитесь на терминал Cloud Shell , убедитесь, что вы находитесь в папке terraform-build , и запустите
terraform planОна покажет, что будет добавлено 4 элемента. Затем запуститеterraform applyи введитеyesчтобы создать NAT-шлюз и виртуальную машину.
5. Задание 3. Настройка виртуальных машин и тестирование.
- Перейдите к экземплярам виртуальных машин. Выберите виртуальную машину, начинающуюся с py-vm1 . Выберите SSH .
- После подключения к py-vm1 по SSH, предоставьте права root, набрав команду
sudo -i - Активируйте свою виртуальную среду (venv):
cd py-gem-env
source env/bin/activate
- Теперь давайте проверим аутентификацию, чтобы провести тестирование позже. Выполните следующую команду в виртуальной машине и нажмите «y» , когда появится соответствующий запрос.
gcloud auth application-default login
- Далее скопируйте URL-адрес, который начинается с https://, откройте новую вкладку в окне браузера вашей лаборатории и вставьте URL-адрес. Подтвердите запросы.
- Когда вы увидите следующее поле «Выберите и скопируйте», вернитесь в сессию vm py-vm1 и в поле «Введите код авторизации» вставьте скопированный код и нажмите Enter для аутентификации.

- Теперь давайте проведём быстрый тест, чтобы проверить, можем ли мы подключиться к API Vertex. Для этого используется адрес * -aiplatform.googleapis.com , поэтому мы выполним команду
digпо этому адресу, чтобы посмотреть, как распределяется трафик.
dig *-aiplatform.googleapis.com
- Вы должны увидеть что-то похожее (адрес будет отличаться). Обратите внимание, что путь проходит через публичные IP-адреса, поскольку API является публичным API. НЕ КОПИРОВАТЬ
; <<>> 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
- Теперь давайте воспользуемся Python. Введите
ipython, чтобы активировать интерфейс IPython .
ipython

- Теперь скопируйте и вставьте следующее. В этом задании для Близнецов задаются вопросы: « Какие цвета у логотипа 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?")
- Нажмите Enter дважды, чтобы запустить программу и увидеть результат.
- Данный запрос обращался к Vertex через публичный API.
- Завершим SSH- сессию, продолжим.
6. Задание 4. Создайте конечную точку PSC для googleapis с помощью Terraform.
Для обеспечения частного подключения к нашей конечной точке API Vertex мы создадим конечную точку Private Service Connect для API Google. Это позволит нам использовать назначенный нами частный IP-адрес для маршрутизации трафика к необходимым нам API Google, в данном случае Vertex.
- Откройте Cloud Shell в режиме редактора, если он еще не открыт. Мы собираемся создать следующее:
- Создайте IP-адрес для конечной точки PSC 192.168.255.250 (
resource "google_compute_global_address" "default") - Создайте конечную точку PSC для API Google (
resource "google_compute_global_forwarding_rule" "default")
Откройте файл psc.tf в папке terraform-build . Добавьте в него следующий код.
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 = ""
}
- Переключитесь на терминал Cloud Shell , убедитесь, что вы находитесь в папке
terraform-build. Затем выполните командуterraform init, после чего выполнитеterraform planЭто покажет, что будут добавлены 2 элемента.
Затем запуститеterraform applyи введитеyes, чтобы создать конечные точки Google API для IP-адреса и PSC. - Проверьте существование конечной точки.
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global
7. Задание 5. Создание записи DNS вручную для googleapis с помощью Terraform.
Вы можете создать запись DNS вручную, указывающую на конечную точку PSC, используя частный DNS. Это повлияет на все сети, которые вы к ней назначите.
- Перейдите в раздел «Сетевые службы» и выберите «Облачный DNS».
- В разделе «Зоны» вы должны увидеть автоматически созданную зону для Private Service Connect for Google APIs с типом зоны «каталог служб». Ее можно использовать для подключения к конечной точке PSC в формате ** SERVICE-ENDPOINT **. p.googleapis.com Пример:
aiplatform-pscvertexgemini.p.googleapis.com - В данном случае нам нужно вручную создать частную DNS-запись. Конфигурация будет следующей:
- Создайте частную DNS-зону с именем "googleapis-private" для "googleapis.com" и ограничьте ее доступом только для сети "python-net".
- Добавьте запись типа A, чтобы сопоставить "googleapis.com" с IP-адресом "192.168.255.250".
- Добавьте запись CNAME для перенаправления всех поддоменов "googleapis.com" (например, www.googleapis.com) на "googleapis.com".
- Откройте Cloud Shell в режиме редактора, если он еще не открыт. Откройте файл dns.tf в папке terraform-build. Добавьте в файл следующий код.
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."]
}
- Переключитесь на терминал Cloud Shell , убедитесь, что вы находитесь в папке
terraform-build. Затем запуститеterraform plan, которая покажет вам, какие элементы будут добавлены.
Затем запуститеterraform applyи введитеyesчтобы создать частную запись DNS. - Вы должны увидеть конфигурацию с записью A и записью CNAME, примерно такую:

- Далее мы проверим подключение с помощью этих изменений в py-vm1.
8. Задание 6. Проверка подключения конечной точки по IP-адресу.
Давайте подключимся к Gemini, используя частную конечную точку.
- Перейдите в раздел VM Instance py-vm1 . Выберите SSH и подключитесь к виртуальной машине по SSH.
- Получите права root, набрав команду
sudo -i - Проверьте путь подключения к aiplatform.googleapis.com с помощью команды
ping. Эта команда отправит ping на IP-адрес в частной DNS-записи A для googleapis. Этот IP-адрес является конечной точкой PSC, и ваши ping-запросы будут неудачными.
ping -c 2 aiplatform.googleapis.com
- Проверьте путь подключения с помощью
ping, используя автоматически созданную запись DNS для API Google PSC с адресомaiplatform-pscvertexgemini.p.googleapis.com. Эта запись указывает на IP-адрес конечной точки PSC, и ваши команды ping будут неуспешными.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
- Проверьте путь подключения к aiplatform.googleapis.com с помощью команды
dig. Это должен быть IP-адрес конечной точки PSC.
dig aiplatform.googleapis.com
- Вернитесь в консоль и откройте другой экземпляр виртуальной машины py-vm1 . Выберите SSH и подключитесь к виртуальной машине по SSH.
- Получите права root, набрав команду
sudo -i - Выполните следующую команду, чтобы увидеть состояние подключения в дампе TCP.
sudo tcpdump -i any port 53 -n or host aiplatform.googleapis.com
- Теперь вернитесь к первому SSH-экземпляру виртуальной машины py-vm1.
- Активируйте среду, используя
cd py-gem-env
source env/bin/activate
- Теперь давайте протестируем Python. Введите
ipython, чтобы активировать интерфейс ipython .
ipython
- Теперь скопируйте и вставьте следующее. В этом задании для Gemini задаются вопросы: « В одном коротком предложении кратко изложите, что такое токенизатор в контексте ИИ? » и « Киты — это круто или нет? ».
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?")
- Нажмите Enter дважды, чтобы запустить программу и увидеть результат.
- Переключитесь обратно на второй экземпляр виртуальной машины py-vm1. Вы должны увидеть результат команды TCPDUMP. Вы заметите, что входящие и исходящие соединения происходят по IP-адресу виртуальной машины, который использует IP-адрес конечной точки PSC для подключения к aiplatform.googleapis.com.
Закрыть все SSH-сессии с экземпляром виртуальной машины py-vm1
9. Уборка
- Перейдите в Cloud Shell , убедитесь, что вы находитесь в каталоге terraform-build, затем
cd terraform-build - Запустите команду
terraform plan destroy, чтобы увидеть все изменения, которые будут внесены.
terraform plan -destroy
- Затем выполните команду
terraform destroy, введитеyes, и все ресурсы, созданные в вашем проекте с помощью Terraform, будут удалены.
terraform destroy
10. Поздравляем!
Поздравляем, вы успешно подключились к Vertex и использовали Gemini 3 Pro через публичный API-адрес, а также в приватном режиме с помощью Private Service Connect Endpoint для Google API. Эта функциональность позволяет расширить возможности подключения к приватным API в вашей локальной/другой облачной среде, подключенной через (межоблачное соединение, межоблачное соединение и VPC).
Следующие шаги / Узнать больше
Вы можете узнать больше о сетевых технологиях Vertex AI.
Пройдите следующую лабораторную работу.
Продолжите свое знакомство с Google Cloud и ознакомьтесь с другими лабораторными работами Google Cloud Skills Boost: