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. Цель
В этой лабораторной работе вы научитесь выполнять следующую задачу:
- Настройка экземпляра виртуальной машины для использования Python SDK
- Подключитесь к чату Gemini через скрипт Python
- Настройте конечную точку PSC для подключения к GoogleAPI
- Проверьте путь подключения к Googleais
- Настройте ручные записи DNS
Настройка среды для самостоятельного обучения
- Войдите в Google Cloud Console и создайте новый проект или используйте существующий. Если у вас ещё нет учётной записи Gmail или Google Workspace, вам необходимо её создать .



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

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

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объёмом 5 ГБ и работает в облаке Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять в браузере. Вам не нужно ничего устанавливать.
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 .
- После того, как вы подключитесь по SSH к py-vm1, включите 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 authorization code: вставьте скопированный вами код и нажмите Enter для аутентификации.

- Теперь давайте проведем быстрый тест, чтобы увидеть, можем ли мы подключиться к API Vertex. Он использует * -aiplatform.googleapis.com , поэтому мы выполним
digпо этому адресу, чтобы увидеть, как маршрутизируется трафик.
dig *-aiplatform.googleapis.com
- Вы должны увидеть что-то похожее (адрес будет другим). Обратите внимание, что путь проложен через публичные IP-адреса, поскольку 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

- Теперь скопируйте и вставьте следующий текст. Этот текст спрашивает 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?")
- Нажмите Enter дважды, чтобы запустить и увидеть результат.
- Этот запрос был получен через публичный API Vertex.
- Закройте сеанс SSH и продолжим.
6. Задача 4. Создание конечной точки PSC для GoogleAPI с помощью Terraform.
Чтобы обеспечить приватное подключение к нашей конечной точке API Vertex, мы создадим приватную конечную точку подключения к сервисам для 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 . Добавьте в файл следующий код.
Терраформировать 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Это покажет, что будут добавлены два элемента.
затем запуститеterraform applyи введитеyesчтобы создать конечную точку IP и PSC Google API. - Проверить существование конечной точки
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global
7. Задача 5. Создание записи DNS вручную в GoogleAPI с помощью Terraform
Вы можете вручную создать DNS-запись, указывающую на конечную точку PSC, используя частный DNS. Это повлияет на все назначенные ей сети.
- Перейдите в раздел Сетевые службы и выберите Cloud DNS.
- В разделе «Зоны» вы увидите автоматически созданную зону для Private Service Connect для API Google с типом зоны «Каталог сервисов». Её можно использовать для подключения к конечной точке 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. Добавьте в файл следующий код.
Терраформ 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.
- Перейдите к экземпляру виртуальной машины 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-запись для PSC Google API с помощью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.
- Активируйте env с помощью
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 для API Google. Эта функция позволяет расширить возможности частного API в вашей локальной или другой облачной среде, подключенной через (Interconnect, Cross-Cloud Interconnect и VPC).
Дальнейшие шаги / Узнать больше
Подробнее о сетях Vertex AI можно прочитать здесь.
Возьмите вашу следующую лабораторную работу
Продолжайте свои исследования с Google Cloud и ознакомьтесь с другими лабораторными работами Google Cloud Skills Boost: