Auf den Gemini-Chat mit dem Python SDK über den Private Service Connect-Endpunkt zugreifen

1. Übersicht

Der Zugriff auf die Vertex AI API ist über das Internet möglich. In Ihrem Unternehmen möchten Sie jedoch möglicherweise privat und ohne das Internet auf die Vertex AI API zugreifen. In diesem Lab greifen Sie zuerst über das öffentliche Internet über das Python SDK auf einer VM-Instanz auf die Vertex Gemini Chat API zu.

Anschließend erstellen Sie einen Private Service Connect-Endpunkt zu Google APIs und ändern den Trafficfluss, sodass der private Endpunkt für die Verbindung mit der Gemini Chat API verwendet wird. Die Konfigurationen bestehen aus einer Kombination aus Terraform, gcloud und der Console.

In diesem Lab erstellen Sie das folgende Muster.

Abbildung 1.

8b283cc5684283c2.png

2. Ziel

In diesem Lab lernen Sie, wie Sie folgende Aufgaben ausführen:

  • VM-Instanz für die Verwendung des Python SDK einrichten
  • Über ein Python-Script eine Verbindung zu Gemini Chat herstellen
  • PSC-Endpunkt für die Verbindung mit Googleapis konfigurieren
  • Verbindungspfad zu Googleais prüfen
  • Manuelle DNS-Einträge konfigurieren

Einrichtung der Umgebung im eigenen Tempo

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können ihn jederzeit aktualisieren.
  • Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. In der Cloud Console wird automatisch ein eindeutiger String generiert. In der Regel spielt es keine Rolle, wie er lautet. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (normalerweise als PROJECT_ID gekennzeichnet). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige generieren. Alternativ können Sie Ihr eigenes Konto ausprobieren und prüfen, ob es verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen.
  • Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Die Durchführung dieses Codelabs ist kostenlos oder kostet nur sehr wenig. Wenn Sie die Ressourcen deaktivieren möchten, um Kosten nach Abschluss dieser Anleitung zu vermeiden, können Sie die von Ihnen erstellten Ressourcen oder das Projekt löschen. Neuen Google Cloud-Nutzern steht das kostenlose Testprogramm mit einem Guthaben von 300 $ zur Verfügung.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der Google Cloud Console rechts oben in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung sollte nur wenige Minuten dauern. Wenn der Vorgang abgeschlossen ist, sollte in etwa Folgendes angezeigt werden:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Sie bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud. Dadurch werden Netzwerkleistung und Authentifizierung erheblich verbessert. Alle Arbeiten in diesem Codelab können in einem Browser erledigt werden. Sie müssen nichts installieren.

3. Aufgabe 1: Umgebung mit Terraform einrichten

Wir erstellen eine benutzerdefinierte VPC mit Firewallregeln und Subnetz. Öffnen Sie die Cloud Console und wählen Sie das Projekt aus, das Sie verwenden möchten.

  1. Öffnen Sie Cloud Shell rechts oben in der Konsole. Prüfen Sie, ob in Cloud Shell die richtige Projekt-ID angezeigt wird. Bestätigen Sie alle Aufforderungen, um den Zugriff zu erlauben. 4261e776f64ea978.png
  2. Erstellen Sie einen Ordner namens terraform-build und verschieben Sie ihn in den Ordner
mkdir terraform-build  && cd terraform-build
  1. Erstellen Sie die Dateien main.tf und variable.tf.
touch main.tf variable.tf 
  1. Wechseln Sie zur Ansicht Cloud Shell-Editor. Wählen Sie editor aus und erlauben Sie alle erforderlichen Aufforderungen, damit die Benutzeroberfläche geladen werden kann.
  2. Klicken Sie nach dem Laden auf Datei > Ordner öffnen und gehen Sie zu /home/your-user-name/terraform-build. Wählen Sie dann Ok aus, um den Ordner im Editor zu öffnen. 78f5eb9f2f82f1b0.png
  3. Wählen Sie die Datei variable.tf aus und fügen Sie Folgendes hinzu. Ersetzen Sie den Text your-project-id-here durch Ihre tatsächliche Projekt-ID in Anführungszeichen.
variable "project_id" {
  type = string
  default = "your-project-id-here"
}

variable "network_id" {
  type = string
  default = "python-net"
}
  1. Öffnen Sie als Nächstes die Datei main.tf. Wir fügen nun Terraform-Code hinzu, um wie unten beschrieben verschiedene Aktionen auszuführen.

APIs aktivieren

resource "google_project_service" "default"

VPC mit dem Namen „python-net“ erstellen

resource "google_compute_network" "default"

Subnetz hinzufügen

resource "google_compute_subnetwork" "default"

Zwei Firewallregeln hinzufügen

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

  1. Kopieren Sie den folgenden Code und fügen Sie ihn in die .tf-Hauptdatei ein.
resource "google_project_service" "default" {
  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"
  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. Wechseln Sie zurück zum Cloud Shell-Terminal, prüfen Sie, ob Sie sich im Verzeichnis terraform-build cd terraform-build befinden, und führen Sie die folgenden Befehle aus:

terraform init

Initialisiert das Arbeitsverzeichnis. In diesem Schritt werden die für die jeweilige Konfiguration erforderlichen Anbieter heruntergeladen.

terraform plan

Es wird ein Ausführungsplan erstellt, aus dem hervorgeht, welche Aktionen Terraform zum Bereitstellen Ihrer Infrastruktur ausführt.

  1. Führen Sie nun den Befehl terraform apply aus und geben Sie yes ein, um die Ressourcen zu erstellen.

4. Aufgabe 2: NAT-Gateway und VMs mit Terraform erstellen

Wir müssen ausgehenden externen Zugriff auf das Internet gewähren, also lassen Sie uns ein Cloud NAT-Gateway erstellen und anhängen.

  1. Öffnen Sie Cloud Shell, gehen Sie zum Ordner „terraform-build“ und erstellen Sie die folgenden Dateien (insgesamt drei Dateien). Diese können wir später bearbeiten.
touch nat-vm.tf psc.tf dns.tf
  1. Wechseln Sie zum Cloud Shell-Editor, wählen Sie die Datei nat-vm.tf aus und fügen Sie den folgenden Terraform-Code hinzu. Dadurch werden ein NAT-Gateway und zwei VMs erstellt.

Terraform nat-vm.tf

resource "google_compute_router" "default" {
  name    = "py-outbound-nat"
  region  = "us-east1"
  network = google_compute_network.default.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"
  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"

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

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

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

  metadata_startup_script = <<-EOF
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv -y
    sudo apt-get install tcpdump dnsutils -y
    sudo -i
    sudo mkdir -p ~/py-gem-env
    cd ~/py-gem-env
    python3 -m venv env
    source env/bin/activate
    pip install ipython google-cloud-aiplatform
  EOF
}

resource "google_compute_instance" "vm2" {
  name         = "py-vm2"
  zone         = "us-east1-b"
  machine_type = "n2-standard-2"

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

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

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

  metadata_startup_script = <<-EOF
    sudo apt-get update
    sudo apt-get install python3 python3-dev python3-venv -y
    sudo apt-get install tcpdump dnsutils -y
    sudo -i
    sudo mkdir -p ~/py-gem-env
    cd ~/py-gem-env
    python3 -m venv env
    source env/bin/activate
    pip install ipython google-cloud-aiplatform
  EOF
}
  1. Wechseln Sie zum Cloud Shell-Terminal, vergewissern Sie sich, dass Sie sich im Ordner terraform-build befinden, und führen Sie terraform plan aus. Daraufhin werden vier Elemente hinzugefügt. Führen Sie dann terraform apply aus und geben Sie yes ein, um das NAT-Gateway und die zwei VMs zu erstellen.

5. Aufgabe 3: VMs konfigurieren und testen

  1. Rufen Sie „VM-Instanzen“ auf. Wählen Sie die VM aus, die mit py-vm1 beginnt. Wählen Sie SSH aus.
  2. Sobald Sie eine SSH-Verbindung zu py-vm1 hergestellt haben,aktivieren Sie Root durch Eingabe von sudo -i
  3. Aktivieren Sie Ihre venv-Umgebung:
cd py-gem-env
source env/bin/activate
  1. Authentifizieren wir dies, um später einige Tests durchzuführen. Führen Sie den folgenden Befehl in der VM aus und drücken Sie auf y, wenn Sie dazu aufgefordert werden.
gcloud auth application-default login
  1. Kopieren Sie als Nächstes die URL, die mit https:// beginnt. Öffnen Sie einen neuen Tab in Ihrem Lab-Browserfenster und fügen Sie die URL ein. Akzeptieren Sie die Aufforderungen.
  2. Wenn Sie die folgende Auswahl sehen, wechseln Sie zurück zur VM-Sitzung py-vm1 und fügen Sie unter Autorisierungscode eingeben den kopierten Code ein. Drücken Sie dann die Eingabetaste, um sich zu authentifizieren.

c29615cdf9324209.png

  1. Lassen Sie uns jetzt kurz testen, ob wir eine Verbindung zur Vertex Gemini API herstellen können. Dazu wird us-central1-aiplatform.googleapis.com verwendet. Wir führen also ein dig für diese Adresse aus, um zu sehen, wie der Traffic verläuft.
dig us-central1-aiplatform.googleapis.com
  1. Sie sollten etwas Ähnliches sehen (die Adresse wird anders lauten). Hinweis: Der Pfad verläuft über öffentliche IP-Adressen, da es sich um eine öffentliche API handelt. NICHT KOPIEREN
; <<>> DiG 9.16.48-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 9117
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

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

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.210.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.211.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.212.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.213.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.215.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.216.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.12.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.13.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.26.95
  1. Verwenden wir jetzt Python. Geben Sie ipython ein, um die ipython-Oberfläche zu aktivieren.
ipython

4685b31f13df54e1.png

  1. Kopieren Sie jetzt den folgenden Code und fügen Sie ihn ein. Dadurch wird Gemini gefragt: „Welche Farben hat das Google-Logo?“ und „Was ist die Farbe des Himmels?“ . Ersetzen Sie enter-your-project-id-here durch Ihre Projekt-ID in Anführungszeichen.
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "What color is the sky?"
print(get_chat_response(chat_session, prompt))
  1. Drücken Sie die Eingabetaste, um auszuführen und das Ergebnis zu sehen.
  2. Diese Anfrage hat über die öffentliche API auf Vertex zugegriffen.
  3. Schließen Sie die SSH-Sitzung. Fahren wir fort.

Jetzt py-vm2 mit denselben Konfigurationen konfigurieren

  1. Rufen Sie „VM-Instanzen“ auf. Wählen Sie die VM aus, die mit py-vm2 beginnt. Wählen Sie SSH aus.
  2. Nachdem Sie eine SSH-Verbindung zu py-vm2 hergestellt haben, aktivieren Sie Root, indem Sie **sudo -i** eingeben.
  3. Aktivieren Sie Ihre venv-Umgebung:
cd py-gem-env
source env/bin/activate
  1. Authentifizieren wir das jetzt, damit wir später einige Tests durchführen können. Führen Sie in der VM den folgenden Befehl aus:
gcloud auth application-default login
  1. Kopieren Sie dann die URL, die mit https:// beginnt. Öffnen Sie einen neuen Tab im Lab-Browserfenster und fügen Sie die URL ein. Akzeptieren Sie die Aufforderungen.
  2. Wenn Sie die folgende Auswahl sehen, wechseln Sie zurück zur VM-Sitzung py-vm2 und fügen Sie unter Autorisierungscode eingeben den kopierten Code ein. Drücken Sie dann die Eingabetaste, um sich zu authentifizieren.

c29615cdf9324209.png

  1. Führen wir jetzt einen kurzen Test durch, um zu sehen, ob wir eine Verbindung zur Vertex Gemini API herstellen können. Dieser Befehl verwendet vier Pings an us-central1-aiplatform.googleapis.com, sodass wir eine Antwort von der öffentlichen Adresse der API erhalten.
ping -c 4 us-central1-aiplatform.googleapis.com
  1. Wir werden diese VM später testen. Schließen Sie die SSH-Sitzung und fahren Sie fort.

6. Aufgabe 4: PSC-Endpunkt zu googleapis mit Terraform erstellen

Um eine private Verbindung zu unserem Vertex API-Endpunkt zu ermöglichen, erstellen wir einen Private Service Connect-Endpunkt für Google APIs. So können wir eine von uns zugewiesene private IP-Adresse verwenden, um Traffic an die benötigten Google APIs weiterzuleiten, in diesem Fall Vertex.

  1. Öffnen Sie Cloud Shell in der Editoransicht, falls noch nicht geschehen. Wir erstellen Folgendes:
  • Erstellen Sie eine IP-Adresse für den PSC-Endpunkt 192.168.255.250 (resource "google_compute_global_address" "default")
  • PSC-Endpunkt für Google APIs erstellen (resource "google_compute_global_forwarding_rule" "default"))

Öffnen Sie im Ordner terraform-build die Datei psc.tf. Fügen Sie der Datei den folgenden Code hinzu.

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. Wechseln Sie zum Cloud Shell-Terminal und prüfen Sie, ob Sie sich im Ordner terraform-build befinden. Führen Sie dann terraform init und terraform plan aus. Sie sehen, dass zwei Elemente hinzugefügt werden.
    Führen Sie dann terraform apply und yes aus, um den IP- und PSC-Google APIs-Endpunkt zu erstellen.
  2. Prüfen, ob Endpunkt vorhanden ist
gcloud compute addresses list --filter="name=( 'vertex-ip' ...)"
gcloud compute forwarding-rules describe pscvertexgemini --global

7. Aufgabe 5: Endpunktverbindung über IP-Adresse prüfen

Stellen wir eine Verbindung über den privaten Endpunkt mit Gemini her.

  1. Rufen Sie die VM-Instanz py-vm1 auf. Wählen Sie SSH aus und stellen Sie eine SSH-Verbindung zur VM her.
  2. Root-Zugriff erhalten, indem Sie sudo -i eingeben
  3. Wir verwenden diese einzelne Instanz nur zum Testen des PSC-Endpunkts. Daher ändern wir die Hostdatei mit dem folgenden Eintrag:
echo 192.168.255.250 us-central1-aiplatform.googleapis.com >> /etc/hosts

cat /etc/hosts
  1. Prüfen Sie den Konnektivitätspfad zu us-central1-aiplatform.googleapis.com mit dem Befehl ping. Dadurch wird die IP-Adresse angepingt, die Sie in den Hostdateien eingegeben haben. Dies ist ein PSC-Endpunkt und Ihre Pings sind nicht erfolgreich.
ping -c 2 us-central1-aiplatform.googleapis.com
  1. Kehren Sie zur Console zurück und öffnen Sie eine weitere Instanz der VM-Instanz py-vm1. Wählen Sie SSH aus und stellen Sie eine SSH-Verbindung zur VM her.
  2. Root-Zugriff durch Eingabe von sudo -i
  3. Führen Sie den folgenden Befehl aus, um die Verbindung in einem TCP-Dump zu sehen.
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. Kehren Sie jetzt zur ersten SSH-Instanz der VM-Instanz py-vm1 zurück.
  2. Aktivieren Sie die Umgebung mit
cd py-gem-env
source env/bin/activate
  1. Jetzt testen wir Python. Geben Sie ipython ein, um die iPython-Schnittstelle zu aktivieren. Diesmal fließt der Traffic über den PSC-Endpunkt.
ipython
  1. Kopieren Sie nun den folgenden Befehl und fügen Sie ihn ein. Diese Frage Gemini: „Welche Farben hat das Google-Logo?“ und „Beschreibe die Niagarafälle. Ersetzen Sie enter-your-project-id-here in den Anführungszeichen durch Ihre Projekt-ID.
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  # Corrected line

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "Describe Niagara Falls"
print(get_chat_response(chat_session, prompt))
  1. Drücken Sie die Eingabetaste, um das Script auszuführen und das Ergebnis zu sehen.
  2. Wechseln Sie zurück zur zweiten Instanz der VM-Instanz py-vm1. Sie sollten das Ergebnis von TCPDUMP sehen. Sie sehen „In“ und „Out“ mit den IP-Adressen der VM und der IP-Adresse des PSC-Endpunkts, um eine Verbindung zu us-central1-aiplatform.googleapis.com herzustellen.
22:21:55.032433 ens4  Out IP 10.0.11.18.57114 > 192.168.255.250.443: Flags [.], ack 8606, win 501, options [nop,nop,TS val 1797790182 ecr 2593039209], length 0
22:21:55.468285 ens4  In  IP 192.168.255.250.443 > 10.0.11.18.57114: Flags [P.], seq 8606:8991, ack 5785, win 296, options [nop,nop,TS val 2593039645 ecr 1797790182], length 385
22:21:55.468320 ens4  Out IP 10.0.11.18.57114 > 192.168.255.250.443: Flags [.], ack 8991, win 501, options [nop,nop,TS val 1797790618 ecr 2593039645], length 0
  1. Schließen Sie alle SSH-Sitzungen zur VM-Instanz py-vm1.

8. Aufgabe 6: Manuellen DNS-Eintrag in googleapis mit Terraform erstellen (optional)

Sie können einen manuellen DNS-Eintrag erstellen, um mit einem privaten DNS auf den PSC-Endpunkt zu verweisen. Dies wirkt sich auf alle Netzwerke aus, die Sie ihm zuweisen.

  1. Gehen Sie zu „Netzwerkdienste“ und wählen Sie „Cloud DNS“ aus.
  2. Unter „Zonen“ sollte eine automatisch erstellte Zone für Private Service Connect für Google APIs mit dem Zonentyp „Service Directory“ angezeigt werden. Damit kann eine Verbindung zum PSC-Endpunkt im Format **SERVICE-ENDPOINT.p.googleapis.com hergestellt werden. Beispiel: aiplatform-pscvertexgemini.p.googleapis.com
  3. In diesem Fall möchten wir einen privaten DNS-Eintrag manuell erstellen. Die Konfiguration sieht so aus:
  • Erstellen Sie eine private DNS-Zone mit dem Namen „googleapis-private“ für „googleapis.com“ und beschränken Sie sie auf das Netzwerk „python-net“.
  • Fügen Sie einen A-Eintrag hinzu, um „googleapis.com“ der IP-Adresse „192.168.255.250“ zuzuordnen.
  • Fügen Sie einen CNAME-Eintrag hinzu, um alle Subdomains von „googleapis.com“ (z. B. www.googleapis.com) auf „googleapis.com“ weiterzuleiten.
  1. Öffnen Sie Cloud Shell in der Editoransicht, falls noch nicht geschehen. Öffnen Sie im Ordner „terraform-build“ die Datei dns.tf. Fügen Sie den folgenden Code in die Datei ein.

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. Wechseln Sie zum Cloud Shell-Terminal und prüfen Sie, ob Sie sich im Ordner terraform-build befinden. Führen Sie dann terraform plan aus. Daraufhin sehen Sie, welche Elemente hinzugefügt werden.
    Führen Sie dann terraform apply aus und geben Sie yes ein, um den privaten DNS-Eintrag zu erstellen.
  2. Sie sollten eine Einrichtung mit einem A-Eintrag und einem CNAME wie dieser sehen, siehe b7f122f0d1fd2850.png.
  3. Als Nächstes prüfen wir die Konnektivität mit diesen Änderungen auf py-vm2

9. Aufgabe 7: Endpunktverbindung über IP-Adresse prüfen (optional)

Stellen wir über den privaten Endpunkt eine Verbindung zu Gemini her.

  1. Rufen Sie die VM-Instanz py-vm2 auf. Wählen Sie SSH aus und stellen Sie eine SSH-Verbindung zur VM her.
  2. Root-Zugriff erhalten, indem Sie sudo -i eingeben
  3. Prüfen Sie den Konnektivitätspfad zu us-central1-aiplatform.googleapis.com mit dem Befehl ping. Dadurch wird die IP-Adresse im privaten DNS (A-Eintrag für googleapis) angepingt. Diese IP ist ein PSC-Endpunkt und Ihre Pings schlagen fehl.
ping -c 2 us-central1-aiplatform.googleapis.com
  1. Prüfen Sie den Verbindungspfad mit einem ping. Verwenden Sie dazu den automatisch erstellten DNS-Eintrag für PSC Google APIs mit aiplatform-pscvertexgemini.p.googleapis.com. Dies verweist auf die IP-Adresse des PSC-Endpunkts und Ihre Pings sind nicht erfolgreich.
ping -c 2 aiplatform-pscvertexgemini.p.googleapis.com
  1. Prüfen Sie den Konnektivitätspfad zu us-central1-aiplatform.googleapis.com mit dem Befehl dig. Dies sollte die IP-Adresse des PSC-Endpunkts sein.
dig us-central1-aiplatform.googleapis.com
  1. Gehen Sie zurück zur Konsole und öffnen Sie eine weitere Instanz der VM-Instanz py-vm2. Wählen Sie SSH aus und stellen Sie eine SSH-Verbindung zur VM her.
  2. Root-Zugriff erhalten, indem Sie sudo -i eingeben
  3. Führen Sie den folgenden Befehl aus, um die Verbindung in einem TCP-Dump zu sehen
sudo tcpdump -i any port 53 -n or host us-central1-aiplatform.googleapis.com
  1. Kehren Sie jetzt zur ersten SSH-Instanz der VM-Instanz py-vm2 zurück.
  2. Aktivieren Sie die Umgebung mit
cd py-gem-env
source env/bin/activate
  1. Jetzt testen wir Python. Geben Sie ipython ein, um die iPython-Schnittstelle zu aktivieren.
ipython
  1. Kopieren Sie nun den folgenden Befehl und fügen Sie ihn ein. Diese Frage zu Gemini: „Welche Farben hat das Google-Logo?“ und Welche zwei Funktionen hat Gemini Pro?. Ersetzen Sie enter-your-project-id-here in den Anführungszeichen durch Ihre Projekt-ID.
import vertexai
from vertexai.generative_models import GenerativeModel, ChatSession

project_id = "enter-your-project-id-here" 
location = "us-central1" 

vertexai.init(project=project_id, location=location)
model = GenerativeModel("gemini-1.5-pro")
chat_session = model.start_chat()  # Corrected line

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat_session, prompt)) 

prompt = "What are all the colors of the Google logo?"
print(get_chat_response(chat_session, prompt)) 

prompt = "What are two features of Gemini pro"
print(get_chat_response(chat_session, prompt))
  1. Drücken Sie die Eingabetaste, um das Script auszuführen und das Ergebnis zu sehen.
  2. Kehren Sie zur zweiten Instanz der VM-Instanz py-vm2 zurück. Sie sollten das Ergebnis des TCPDUMP sehen. Sie werden feststellen, dass die IP-Adresse der VM die IP-Adresse des PSC-Endpunkts verwendet, um eine Verbindung zu us-central1-aiplatform.googleapis.com herzustellen.

Schließen Sie alle SSH-Sitzungen zur VM-Instanz py-vm2.

10. Bereinigen

  1. Rufen Sie Cloud Shell auf. Achten Sie darauf, dass Sie sich im Verzeichnis terraform-build cd terraform-build befinden, führen Sie den folgenden Befehl terraform destroy aus und geben Sie yes ein. Alle Ressourcen, die Sie in Ihrem Projekt mit Terraform erstellt haben, werden entfernt.

11. Glückwunsch

Herzlichen Glückwunsch. Sie haben sowohl über eine öffentliche API-Adresse als auch privat mit dem Private Service Connect Endpoint für Google APIs eine Verbindung zum Vertex Gemini-Chat hergestellt. Diese Funktion kann private API-Verbindungen auf Ihre lokale oder andere Cloud-Umgebung ausdehnen, die über Interconnect, Cross-Cloud Interconnect und VPC verbunden sind.

Weitere Informationen

Weitere Informationen zum Networking in Vertex AI

Codelab: Zugriff auf Anthropic Claude in Vertex AI mit dem Python SDK über den Private Service Connect-Endpunkt

Nächstes Lab absolvieren

Setzen Sie Ihre Aufgabenreihe mit Google Cloud fort und sehen Sie sich die folgenden Google Cloud Skills Boost-Labs an: