1. Übersicht
Das erste Mal eine Webanwendung bereitzustellen, kann beängstigend sein. Selbst nach der ersten Bereitstellung kann es sein, dass Sie die Bereitstellung neuer Versionen Ihrer Anwendung vermeiden, wenn der Prozess zu viel Arbeit macht. Mit Continuous Deployment können Sie Änderungen an Ihrer Anwendung ganz einfach automatisch bereitstellen.
In diesem Lab schreiben Sie eine Webanwendung und konfigurieren Cloud Run so, dass Ihre Anwendung automatisch bereitgestellt wird, wenn eine Änderung am Quellcode Ihrer Anwendung vorgenommen wird. Anschließend ändern Sie die Anwendung und stellen sie noch einmal bereit.
Lerninhalte
- Webanwendung mit dem Cloud Shell-Editor schreiben
- Anwendungscode in GitHub speichern
- Anwendung automatisch in Cloud Run bereitstellen
- Mit Vertex AI generative KI zu Ihrer Anwendung hinzufügen
2. Vorbereitung
- Wenn Sie noch kein Google-Konto haben, müssen Sie ein Google-Konto erstellen.
- Sie verwenden ein privates Konto anstelle eines Arbeits- oder Schulkontos. Für geschäftliche und schulische Konten gelten möglicherweise Einschränkungen, die Sie daran hindern, die für dieses Lab erforderlichen APIs zu aktivieren.
- Wenn Sie noch kein GitHub-Konto haben, müssen Sie ein GitHub-Konto erstellen.
- Verwenden Sie ein vorhandenes GitHub-Konto, falls Sie eines haben. GitHub blockiert ein neues Konto mit höherer Wahrscheinlichkeit als Spam.
- Richten Sie die 2-Faktor-Authentifizierung in Ihrem GitHub-Konto ein, um das Risiko zu verringern, dass Ihr Konto als Spam markiert wird.
3. Projekt einrichten
- Melden Sie sich in der Google Cloud Console an.
- Aktivieren Sie die Abrechnung in der Cloud Console.
- Die Kosten für die Durchführung dieses Labs sollten unter 1 $liegen.
- Sie können die Schritte am Ende dieses Labs ausführen, um Ressourcen zu löschen und weitere Kosten zu vermeiden.
- Neue Nutzer können das kostenlose Testabo mit einem Guthaben von 300$ nutzen.
- Nehmen Sie an einer Veranstaltung zu generativer KI für Entwickler teil? Möglicherweise erhalten Sie ein Guthaben in Höhe von 1$.
- Erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes.
4. Cloud Shell-Editor öffnen
- Rufen Sie den Cloud Shell-Editor auf.
- Wenn das Terminal nicht unten auf dem Bildschirm angezeigt wird, öffnen Sie es:
- Klicke auf das Dreistrich-Menü .
- Klicken Sie auf Terminal.
- Klicken Sie auf Neues Terminal.
- Legen Sie das Projekt im Terminal mit diesem Befehl fest:
- Format:
gcloud config set project [PROJECT_ID]
- Beispiel:
gcloud config set project lab-project-id-example
- Wenn Sie sich Ihre Projekt-ID nicht merken können:
- So listen Sie alle Ihre Projekt-IDs auf:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- So listen Sie alle Ihre Projekt-IDs auf:
- Format:
- Wenn Sie dazu aufgefordert werden, klicken Sie auf Autorisieren, um fortzufahren.
- Es sollte folgende Meldung angezeigt werden:
Wenn SieUpdated property [core/project].
WARNING
sehen undDo you want to continue (Y/N)?
gefragt werden, haben Sie wahrscheinlich die Projekt-ID falsch eingegeben. Drücken SieN
,Enter
und versuchen Sie noch einmal, den Befehlgcloud config set project
auszuführen.
5. APIs aktivieren
Aktivieren Sie im Terminal die APIs:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
Die Verarbeitung dieses Befehls kann einige Minuten dauern. Sie sollten aber schließlich eine Meldung ähnlich der folgenden erhalten:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Git konfigurieren
- Legen Sie die E-Mail-Adresse des globalen Git-Nutzers fest:
git config --global user.email "you@example.com"
- Legen Sie Ihren globalen Git-Nutzernamen fest:
git config --global user.name "Your Name"
- Legen Sie den globalen Git-Standardzweig auf
main
fest:git config --global init.defaultBranch main
7. Code schreiben
So schreiben Sie eine Anwendung in Go:
- Rufen Sie das Basisverzeichnis auf:
cd ~
- Erstellen Sie das Verzeichnis
codelab-genai
:mkdir codelab-genai
- Rufen Sie das Verzeichnis
codelab-genai
auf:cd codelab-genai
- Initialisieren Sie eine go.mod-Datei, um unser Modul zu deklarieren:
go mod init codelab-genai
main.go
-Datei erstellen:touch main.go
- Öffnen Sie die Datei
main.go
im Cloud Shell-Editor: Oben auf dem Bildschirm sollte jetzt eine leere Datei angezeigt werden. Hier können Sie die Dateicloudshell edit main.go
main.go
bearbeiten. - Bearbeiten Sie
main.go
und fügen Sie den folgenden Code ein: Nach einigen Sekunden wird der Code im Cloud Shell-Editor automatisch gespeichert. Dieser Code antwortet auf HTTP-Anfragen mit der Begrüßung „Hello World“.package main import ( "fmt" "log" "net/http" "os" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, world!") }) port := os.Getenv("PORT") if port == "" { port = "8080" } if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } }
Der erste Code für Ihre Anwendung ist fertig und kann in der Versionskontrolle gespeichert werden.
8. Repository erstellen
- Kehren Sie unten auf dem Bildschirm zum Cloud Shell-Terminal zurück.
- Prüfen Sie, ob Sie sich noch im richtigen Verzeichnis befinden:
cd ~/codelab-genai
- Git-Repository initialisieren
git init -b main
- In der GitHub-Befehlszeile anmelden
Drücken Sie diegh auth login
Enter
, um die Standardoptionen zu akzeptieren, und folgen Sie der Anleitung im GitHub-Befehlszeilentool. Dazu gehören:- In welchem Konto möchtest du dich anmelden?
GitHub.com
- Welches Protokoll verwenden Sie bevorzugt für Git-Vorgänge auf diesem Host?
HTTPS
- Möchten Sie Git mit Ihren GitHub-Anmeldedaten authentifizieren?
Y
(Überspringen, wenn diese Option nicht angezeigt wird.) - Wie möchten Sie die GitHub-Befehlszeile authentifizieren?
Login with a web browser
- Einmalcode kopieren
- Öffnen Sie https://github.com/login/device.
- Einmaligen Code einfügen
- Klicken Sie auf GitHub autorisieren.
- Anmeldung abschließen
- In welchem Konto möchtest du dich anmelden?
- Prüfen Sie, ob Sie angemeldet sind:
Wenn Sie sich erfolgreich angemeldet haben, sollte hier Ihr GitHub-Nutzername ausgegeben werden.gh api user -q ".login"
GITHUB_USERNAME
-Variable erstellenGITHUB_USERNAME=$(gh api user -q ".login")
- Prüfen Sie, ob Sie die Umgebungsvariable erstellt haben:
Wenn Sie die Variable erfolgreich erstellt haben, sollte hier Ihr GitHub-Nutzername ausgegeben werden.echo ${GITHUB_USERNAME}
- Erstellen Sie ein leeres GitHub-Repository mit dem Namen
codelab-genai
: Wenn folgende Fehlermeldung angezeigt wird:gh repo create codelab-genai --private
Dann haben Sie bereits ein Repository mit dem NamenGraphQL: Name already exists on this account (createRepository)
codelab-genai
. Sie haben zwei Möglichkeiten, diese Anleitung fortzusetzen:- Vorhandenes GitHub-Repository löschen
- Erstellen Sie ein Repository mit einem anderen Namen und ändern Sie ihn in den folgenden Befehlen.
- Fügen Sie das
codelab-genai
-Repository als Remote-Repositoryorigin
hinzu:git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
9. Code teilen
- Prüfen Sie, ob Sie sich im richtigen Verzeichnis befinden:
cd ~/codelab-genai
- Fügen Sie diesem Commit alle Dateien im aktuellen Verzeichnis hinzu:
git add .
- Erstellen Sie den ersten Commit:
git commit -m "add http server"
- Übertragen Sie den Commit per Push in den
main
-Branch desorigin
-Repositorys:git push -u origin main
Sie können diesen Befehl ausführen und die resultierende URL aufrufen, um den Anwendungscode auf GitHub aufzurufen:
echo -e "\n\nTo see your code, visit this URL:\n \
https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/main.go \n\n"
10. Automatische Bereitstellungen einrichten
- Lassen Sie den Tab „Cloud Shell-Editor“ geöffnet. Wir kommen später noch einmal auf diesen Tab zurück.
- Rufen Sie in einem neuen Tab die Cloud Run-Seite auf.
- Wählen Sie in der Console das richtige Google Cloud-Projekt aus .
- Klicken Sie auf REPO VERBINDEN.
- Klicken Sie auf MIT CLOUD BUILD EINRICHTEN.
- Wählen Sie GitHub als Repository-Anbieter aus.
- Wenn Sie nicht im Browser in Ihrem GitHub-Konto angemeldet sind, melden Sie sich mit Ihren Anmeldedaten an.
- Klicken Sie auf Authentifizieren und dann auf Weiter.
- Nach der Anmeldung wird auf der Cloud Run-Seite die Meldung Die GitHub-App ist in keinem Ihrer Repositories installiert angezeigt.
- Klicken Sie auf die Schaltfläche GOOGLE CLOUD BUILD INSTALLIEREN.
- Wählen Sie auf der Seite „Installationseinrichtung“ die Option Nur ausgewählte Repositories und dann das Repository codelab-genai aus, das Sie über die Befehlszeile erstellt haben.
- Klicke auf Installieren.
- Hinweis: Wenn Sie viele GitHub-Repositories haben, kann das Laden einige Minuten dauern.
- Wählen Sie
your-user-name/codelab-genai
als Repository- aus.
- Wenn das Repository nicht vorhanden ist, klicken Sie auf den Link Verbundene Repositories verwalten.
- Behalten Sie für Branch den Wert
^main$
bei. - Klicken Sie auf Go, Node.js, Python, Java, .NET Core, Ruby oder PHP über Buildpacks von Google Cloud
- .
- Lassen Sie die anderen Felder (
Build context directory
,Entrypoint
undFunction target
) unverändert.
- Lassen Sie die anderen Felder (
- Klicken Sie auf Speichern.
- Wählen Sie GitHub als Repository-Anbieter aus.
- Scrollen Sie nach unten zu Authentifizierung.
- Klicken Sie auf Nicht authentifizierte Aufrufe zulassen.
- Klicke auf ERSTELLEN.
Sobald der Build abgeschlossen ist (was einige Minuten dauern kann), führen Sie diesen Befehl aus und rufen Sie die resultierende URL auf, um die laufende Anwendung aufzurufen:
echo -e "\n\nOnce the build finishes, visit your live application:\n \
"$( \
gcloud run services list | \
grep codelab-genai | \
awk '/URL/{print $2}' | \
head -1 \
)" \n\n"
11. Code ändern
- Kehren Sie unten auf dem Bildschirm zum Cloud Shell-Terminal zurück.
- Prüfen Sie, ob Sie sich noch im richtigen Verzeichnis befinden:
cd ~/codelab-genai
main.go
im Cloud Shell-Editor wieder öffnencloudshell edit main.go
- So installieren Sie das Vertex AI SDK for Go:
go get cloud.google.com/go/vertexai/genai
- Installieren Sie die Metadatenbibliothek für Go, um die aktuelle Projekt-ID abzurufen:
go get cloud.google.com/go/compute/metadata
- Ersetzen Sie den Code in Ihrer
main.go
-Datei durch Folgendes:package main import ( "context" "fmt" "log" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" ) func main() { ctx := context.Background() var projectId string var err error projectId = os.Getenv("GOOGLE_CLOUD_PROJECT") if projectId == "" { projectId, err = metadata.ProjectIDWithContext(ctx) if err != nil { return } } var client *genai.Client client, err = genai.NewClient(ctx, projectId, "us-central1") if err != nil { return } defer client.Close() model := client.GenerativeModel("gemini-1.5-flash-001") http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { animal := r.URL.Query().Get("animal") if animal == "" { animal = "dog" } resp, err := model.GenerateContent( ctx, genai.Text( fmt.Sprintf("Give me 10 fun facts about %s. Return the results as HTML without markdown backticks.", animal)), ) if err != nil { w.WriteHeader(http.StatusServiceUnavailable) return } if len(resp.Candidates) > 0 && len(resp.Candidates[0].Content.Parts) > 0 { htmlContent := resp.Candidates[0].Content.Parts[0] w.Header().Set("Content-Type", "text/html; charset=utf-8") fmt.Fprint(w, htmlContent) } }) port := os.Getenv("PORT") if port == "" { port = "8080" } if err := http.ListenAndServe(":"+port, nil); err != nil { log.Fatal(err) } }
12. Noch einmal bereitstellen
- Prüfen Sie, ob Sie sich noch im richtigen Verzeichnis in Cloud Shell befinden:
cd ~/codelab-genai
- Führen Sie die folgenden Befehle aus, um eine neue Version Ihrer Anwendung in Ihr lokales Git-Repository zu committen:
git add . git commit -m "add latest changes"
- Übertragen Sie die Änderungen per Push an GitHub:
git push
- Führen Sie nach Abschluss des Builds diesen Befehl aus und rufen Sie die bereitgestellte Anwendung auf:
echo -e "\n\nOnce the build finishes, visit your live application:\n \ "$( \ gcloud run services list | \ grep codelab-genai | \ awk '/URL/{print $2}' | \ head -1 \ )" \n\n"
Es kann einige Minuten dauern, bis der Build abgeschlossen ist und Sie Ihre Änderungen sehen können.
Den Verlauf aller Versionen finden Sie hier: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions
13. Optional: Nutzung von Vertex AI prüfen
Wie bei anderen Google Cloud-Diensten können Sie auch Vertex AI-Vorgänge prüfen. Anhand von Audit-Logs können Sie herausfinden, wer was wo und wann getan hat. Administrator-Audit-Logs für Vertex AI sind standardmäßig aktiviert. Wenn Sie Anfragen zum Generieren von Inhalten prüfen möchten, müssen Sie Audit-Logs zum Datenzugriff aktivieren:
- Rufen Sie in der Google Cloud Console die Seite Audit-Logs auf:
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift IAM und Verwaltung ist. - Achten Sie darauf, dass Sie Ihre Cloud Run-Anwendung in dem vorhandenen Google Cloud-Projekt erstellen.
- Wählen Sie in der Tabelle Konfiguration für Audit-Logs zum Datenzugriff in der Spalte „Dienst“ die Option
Vertex AI API
aus. - Wählen Sie auf dem Tab Logtypen die Audit-Logtypen für den Datenzugriff
Admin read
undData read
aus. - Klicken Sie auf Speichern.
Nach der Aktivierung können Sie Audit-Logs für jede Aufrufe der Anwendung sehen. So rufen Sie die Audit-Logs mit Aufrufdetails auf:
- Kehren Sie zur bereitgestellten Anwendung zurück und aktualisieren Sie die Seite, um das Protokoll auszulösen.
- Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf:
- Geben Sie im Abfragefenster Folgendes ein:
LOG_ID("cloudaudit.googleapis.com%2Fdata_access") protoPayload.serviceName="aiplatform.googleapis.com"
- Klicken Sie auf Abfrage ausführen.
In Audit-Protokollen wird die Verwendung der Vertex AI API erfasst, Sie können jedoch keine arbeitslastbezogenen Daten wie Prompts oder Antwortdetails beobachten.
14. (Optional) Beobachtbarkeit Ihrer KI-Arbeitslast erhöhen
Audit-Logs enthalten keine arbeitslastbezogenen Informationen. Um die Beobachtbarkeit Ihrer Arbeitslasten zu verbessern, müssen Sie diese Informationen explizit protokollieren. Sie können dazu Ihr bevorzugtes Logging-Framework verwenden. In den folgenden Schritten wird eine Möglichkeit mit der strukturierten Logging-Bibliothek von Go veranschaulicht.
main.go
im Cloud Shell-Editor wieder öffnencloudshell edit ~/codelab-genai/main.go
- Fügen Sie Ihrem Importblock die strukturierten Logging- und JSON-Bibliotheken von Go hinzu:
import ( "context" "encoding/json" "fmt" "log" "log/slog" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" )
- Nachdem Sie Ihren Vertex-Client initialisiert haben (Zeile 33), fügen Sie die folgenden Zeilen hinzu, um einen strukturierten Logger zu initialisieren, der die richtigen Felder für Google Cloud Logging verwendet:
opts := &slog.HandlerOptions{ Level: slog.LevelDebug, ReplaceAttr: func(group []string, a slog.Attr) slog.Attr { if a.Key == slog.LevelKey { return slog.Attr{Key: "severity", Value: a.Value} } if a.Key == slog.MessageKey { return slog.Attr{Key: "message", Value: a.Value} } return slog.Attr{Key: a.Key, Value: a.Value} }, } jsonHandler := slog.NewJSONHandler(os.Stdout, opts) slog.SetDefault(slog.New(jsonHandler))
- Nachdem du nach einer Antwort auf
GenerateContent
(Zeile 69) gesucht hast, füge die folgenden Zeilen in den If-Block ein: Mit diesem Code werden Informationen zu generierten Inhalten im Strukturierten Logging-Format injsonBytes, err := json.Marshal(resp) if err != nil { slog.Error("Failed to marshal response to JSON", "error", err) } else { jsonString := string(jsonBytes) slog.Debug("Complete response content", "json_response", jsonString) }
stdout
geschrieben. Ein Logging-Agent in Cloud Run erfasst die Ausgabe, die aufstdout
gedruckt wird, und schreibt sie in diesem Format in Cloud Logging. - Öffnen Sie Cloud Shell noch einmal und geben Sie den folgenden Befehl ein, um sicherzustellen, dass Sie sich im richtigen Verzeichnis befinden:
cd ~/codelab-genai
- Führen Sie zum Übernehmen der Änderungen ein Commit durch:
git commit -am "Observe generated content"
- Übertragen Sie die Änderungen per Push auf GitHub, um die Neubereitstellung der geänderten Version auszulösen:
git push
Nach der Bereitstellung der neuen Version können Sie die Debug-Informationen zu Aufrufen von Vertex AI beobachten.
So rufen Sie Ihre Anwendungsprotokolle auf:
- Rufen Sie in der Google Cloud Console die Seite Log-Explorer auf:
- Geben Sie im Abfragefenster Folgendes ein:
LOG_ID("run.googleapis.com%2Fstdout") severity=DEBUG
- Klicken Sie auf Abfrage ausführen.
Das Ergebnis der Abfrage enthält Protokolle mit Prompt und Vertex AI-Antwort, einschließlich „Sicherheitsbewertungen“, die zum Überwachen von Sicherheitspraktiken verwendet werden können.
15. (Optional) Bereinigen
Für Cloud Run fallen keine Kosten an, wenn der Dienst nicht verwendet wird. Allerdings können für das Speichern des Container-Images in Artifact Registry Gebühren berechnet werden. Sie können Ihr Cloud-Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Wenn Sie Ihr Cloud-Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.
Sie können das Projekt löschen:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Sie können auch unnötige Ressourcen von Ihrem CloudShell-Laufwerk löschen. Sie haben folgende Möglichkeiten:
- Löschen Sie das Codelab-Projektverzeichnis:
rm -rf ~/codelab-genai
- Bereinigen Sie alle Go-Pakete, die Sie möglicherweise nicht mehr benötigen:
cd ~ go clean -modcache
- Warnung! Diese Aktion kann nicht rückgängig gemacht werden. Wenn Sie alles in Cloud Shell löschen möchten, um Speicherplatz freizugeben, können Sie Ihr ganzes Basisverzeichnis löschen. Achten Sie darauf, dass alles, was Sie behalten möchten, an einem anderen Ort gespeichert ist.
sudo rm -rf $HOME
16. Glückwunsch
In diesem Lab haben Sie eine Webanwendung geschrieben und Cloud Run so konfiguriert, dass Ihre Anwendung automatisch bereitgestellt wird, wenn eine Änderung am Quellcode Ihrer Anwendung vorgenommen wurde. Anschließend haben Sie Ihre Anwendung geändert und noch einmal bereitgestellt.
Wenn Ihnen dieses Lab gefallen hat, können Sie es in einer anderen Programmiersprache oder einem anderen Framework noch einmal ausprobieren:
Wenn Sie an einer UX-Forschungsstudie teilnehmen möchten, um die Produkte, mit denen Sie heute gearbeitet haben, zu verbessern, registrieren Sie sich hier.
Hier sind einige Möglichkeiten, wie Sie Ihr Wissen vertiefen können:
- Dokumentation: Firebase GenKit ist eine flexible Modellabstraktion, mit der sich jede Modell-API einfach integrieren und von der Community gepflegte Modelle verwenden lassen.
- Codelab: Gemini-gestützte Chat-App in Cloud Run bereitstellen
- Gemini-Funktionsaufrufe mit Cloud Run verwenden
- On-Demand-Workshop: Google Kubernetes Engine einrichten
- Videos szenenweise mit der Video Intelligence API in Cloud Run Jobs verarbeiten