1. Przegląd
Wdrożenie aplikacji internetowej po raz pierwszy może być trudne. Nawet po pierwszym wdrożeniu, jeśli proces jest zbyt pracochłonny, możesz unikać wdrażania nowych wersji aplikacji. Ciągłe wdrażanie umożliwia łatwe automatyczne wdrażanie zmian w aplikacji.
W tym module napiszesz aplikację internetową i skonfigurujesz Cloud Run, aby automatycznie wdrażać aplikację, gdy w kodzie źródłowym aplikacji zostaną wprowadzone zmiany. Następnie zmodyfikuj aplikację i wdroż ją ponownie.
Czego się nauczysz
- Pisanie aplikacji internetowej za pomocą edytora Cloud Shell
- Przechowywanie kodu aplikacji w GitHubie
- Automatyczne wdrażanie aplikacji w Cloud Run
- Dodawanie generatywnej AI do aplikacji za pomocą Vertex AI
2. Wymagania wstępne
- Jeśli nie masz jeszcze konta Google, musisz je utworzyć.
- Używaj konta osobistego zamiast konta służbowego lub szkolnego. Konta służbowe i szkolne mogą mieć ograniczenia, które uniemożliwiają włączenie interfejsów API potrzebnych w tym module.
- Jeśli nie masz jeszcze konta GitHub, musisz utworzyć konto GitHub
- .
- Jeśli masz już konto GitHub, użyj go. GitHub częściej blokuje nowe konto jako spam.
- Skonfiguruj uwierzytelnianie dwuskładnikowe na koncie GitHub, aby zmniejszyć ryzyko oznaczenia Twojego konta jako spam.
3. Konfigurowanie projektu
- Zaloguj się w konsoli Google Cloud.
- Włącz płatności w konsoli Google Cloud.
- Pod względem opłat za zasoby chmury ukończenie tego modułu powinno kosztować mniej niż 1 USD.
- Jeśli chcesz uniknąć dalszych opłat, wykonaj czynności opisane na końcu tego modułu, aby usunąć zasoby.
- Nowi użytkownicy mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.
- Bierzesz udział w wydarzeniu Generatywna AI dla programistów? Możesz otrzymać środki w wysokości 1 USD.
- Utwórz nowy projekt lub użyj już istniejącego.
- Sprawdź, czy płatności są włączone w sekcji Moje projekty na stronie Płatności Cloud.
- Jeśli w kolumnie
Billing accountprzy nowym projekcie widniejeBilling is disabled:- Kliknij 3 kropki w kolumnie
Actions. - Kliknij Zmień płatności.
- Wybierz konto rozliczeniowe, którego chcesz używać.
- Kliknij 3 kropki w kolumnie
- Jeśli uczestniczysz w wydarzeniu Gen AI for Devs, konto prawdopodobnie będzie się nazywać Próbne konto rozliczeniowe Google Cloud Platform.
- Jeśli w kolumnie
4. Otwórz edytor Cloud Shell
- Otwórz edytor Cloud Shell.
- Jeśli terminal nie pojawi się u dołu ekranu, otwórz go:
- Kliknij menu
. - Kliknij Terminal.
- Kliknij Nowy terminal
.
- Kliknij menu
- W terminalu ustaw projekt za pomocą tego polecenia:
- Format:
gcloud config set project [PROJECT_ID] - Przykład:
gcloud config set project lab-project-id-example - Jeśli nie pamiętasz identyfikatora projektu:
- Aby wyświetlić listę wszystkich identyfikatorów projektów, użyj tego polecenia:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Aby wyświetlić listę wszystkich identyfikatorów projektów, użyj tego polecenia:
- Format:
- Jeśli pojawi się pytanie o autoryzację, kliknij Autoryzuj, aby przejść dalej.

- Powinien wyświetlić się ten komunikat:
Jeśli widzisz symbolUpdated property [core/project].
WARNINGi pojawia się pytanieDo you want to continue (Y/N)?, prawdopodobnie identyfikator projektu został wpisany nieprawidłowo. NaciśnijN, a potemEnteri spróbuj ponownie uruchomić poleceniegcloud config set project.
5. Włącz interfejsy API
W terminalu włącz interfejsy API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
Wykonanie tego polecenia może potrwać kilka minut, ale powinno ostatecznie wyświetlić komunikat o sukcesie podobny do tego:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Skonfiguruj Git
- Ustaw globalny adres e-mail użytkownika Git:
git config --global user.email "you@example.com" - Ustaw globalną nazwę użytkownika Git:
git config --global user.name "Your Name" - Ustaw domyślną gałąź globalną Git na
main:git config --global init.defaultBranch main
7. Napisz kod
Aby napisać aplikację w Node.js:
- Przejdź do katalogu domowego:
cd ~ - Utwórz nową aplikację
codelab-genaiAngular:npx @angular/cli new codelab-genai \ --minimal \ --inline-template \ --inline-style \ --ssr \ --defaults - Jeśli pojawi się prośba o zainstalowanie
@angular/cli, naciśnijEnter, aby kontynuować:Need to install the following packages: @angular/cli@18.2.4 Ok to proceed? (y)
- Przejdź do katalogu
codelab-genai:cd codelab-genai - Otwórz plik
app.component.tsw edytorze Cloud Shell: U góry ekranu powinien pojawić się pusty plik. W tym miejscu możesz edytować plikcloudshell edit src/app/app.component.tsapp.component.ts.
- Skopiuj ten kod i wklej go do otwartego pliku
app.component.ts: Po kilku sekundach edytor Cloud Shell automatycznie zapisze Twój kod. Ten kod odpowiada na żądania HTTP pozdrowieniem „Hello world!”.import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet], template: ` <h1>Hello world!</h1> <router-outlet /> `, styles: [], }) export class AppComponent { }
Początkowy kod aplikacji jest gotowy i możesz go zapisać w systemie kontroli wersji.
8. Tworzenie repozytorium
- Wróć do terminala Cloud Shell u dołu ekranu.
- Upewnij się, że nadal jesteś w odpowiednim katalogu:
cd ~/codelab-genai - Zainicjuj repozytorium Git
git init -b main - Logowanie się w GitHub CLI
Naciśnijgh auth loginEnter, aby zaakceptować opcje domyślne, i postępuj zgodnie z instrukcjami w narzędziu interfejsu wiersza poleceń GitHub, w tym:- Na które konto chcesz się zalogować?
GitHub.com - Jaki jest preferowany protokół operacji Git na tym hoście?
HTTPS - Uwierzytelnić Git za pomocą danych logowania do GitHuba?
Y(Pomiń, jeśli się nie pojawi). - Jak chcesz uwierzytelnić interfejs wiersza poleceń GitHub?
Login with a web browser - Skopiuj kod jednorazowy
- Otwórz stronę https://github.com/login/device.
- Wklej kod jednorazowy
- Kliknij Autoryzuj GitHub.
- Dokończ logowanie
- Na które konto chcesz się zalogować?
- Sprawdź, czy jesteś zalogowany:
Jeśli logowanie się powiodło, powinna się wyświetlić Twoja nazwa użytkownika GitHuba.gh api user -q ".login" - Tworzenie zmiennej
GITHUB_USERNAMEGITHUB_USERNAME=$(gh api user -q ".login") - Sprawdź, czy zmienna środowiskowa została utworzona:
Jeśli zmienna została utworzona, powinna wyświetlić Twoją nazwę użytkownika GitHuba.echo ${GITHUB_USERNAME} - Utwórz puste repozytorium GitHub o nazwie
codelab-genai: Jeśli pojawi się błąd:gh repo create codelab-genai --private Masz już repozytorium o nazwieGraphQL: Name already exists on this account (createRepository)
codelab-genai. Aby kontynuować ten samouczek, masz 2 możliwości:- Usuń istniejące repozytorium GitHub
- Utwórz repozytorium o innej nazwie i pamiętaj, aby zmienić ją w kolejnych poleceniach.
- Dodaj repozytorium
codelab-genaijako zdalne repozytoriumorigin:git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
9. Udostępnianie kodu
- Sprawdź, czy jesteś w odpowiednim katalogu:
cd ~/codelab-genai - Dodaj wszystkie pliki z bieżącego katalogu do tego zatwierdzenia:
git add . - Utwórz pierwszy commit:
git commit -m "add http server" - Wypchnij zatwierdzenie do gałęzi
mainrepozytoriumorigin:git push -u origin main
Możesz uruchomić to polecenie i otworzyć wynikowy adres URL, aby wyświetlić kod aplikacji na GitHubie:
echo -e "\n\nTo see your code, visit this URL:\n \
https://github.com/${GITHUB_USERNAME}/codelab-genai/blob/main/src/app/app.component.ts \n\n"
10. Konfigurowanie automatycznych wdrożeń
- Pozostaw otwartą kartę edytora Cloud Shell. Wrócimy do tej karty później.
- Na nowej karcie otwórz stronę Cloud Run.
- Wybierz odpowiedni projekt Google Cloud w konsoli
. - Kliknij POŁĄCZ REPOZYTORIUM.
- Kliknij SKONFIGURUJ Z CLOUD BUILD.
- Jako dostawcę repozytorium wybierz GitHub
- .
- Jeśli nie jesteś zalogowany(-a) na konto GitHub w przeglądarce, zaloguj się za pomocą swoich danych logowania.
- Kliknij Uwierzytelnij, a następnie Dalej.
- Po zalogowaniu się na stronie Cloud Run zobaczysz komunikat Aplikacja na GitHubie nie jest zainstalowana w żadnym Twoim repozytorium.
- Kliknij przycisk ZAINSTALUJ GOOGLE CLOUD BUILD.
- Na stronie Konfiguracja instalacji wybierz Tylko wybrane repozytoria i wskaż repozytorium codelab-genai utworzone za pomocą interfejsu CLI.
- Kliknij Zainstaluj.
- Uwaga: jeśli masz dużo repozytoriów GitHub, wczytanie listy może potrwać kilka minut.
- Wybierz
your-user-name/codelab-genaijako repozytorium- .
- Jeśli repozytorium nie jest widoczne, kliknij link Zarządzaj połączonymi repozytoriami.
- W polu Gałąź pozostaw wartość
^main$. - Kliknij Go, Node.js, Python, Java, .NET Core, Ruby lub PHP za pomocą pakietów kompilacji Google Cloud
- .
- Pozostaw pozostałe pola (
Build context directory,EntrypointiFunction target) bez zmian.
- Pozostaw pozostałe pola (
- Kliknij Zapisz.
- Jako dostawcę repozytorium wybierz GitHub
- Przewiń w dół do sekcji Uwierzytelnianie.
- Kliknij Zezwalaj na nieuwierzytelnione wywołania.
- Kliknij UTWÓRZ.
Gdy kompilacja się zakończy (co potrwa kilka minut), uruchom to polecenie i otwórz wynikowy adres URL, aby wyświetlić działającą aplikację:
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. Zmień kod
Powrót do edytora Cloud Shell
Jeśli edytor Cloud Shell jest nadal otwarty, możesz pominąć te kroki.
- Otwórz edytor Cloud Shell.
- Jeśli terminal nie pojawi się u dołu ekranu, otwórz go:
- Kliknij menu
. - Kliknij Terminal.
- Kliknij Nowy terminal
.
- Kliknij menu
- W terminalu ustaw projekt za pomocą tego polecenia:
- Format:
gcloud config set project [PROJECT_ID] - Przykład:
gcloud config set project lab-project-id-example - Jeśli nie pamiętasz identyfikatora projektu:
- Aby wyświetlić listę wszystkich identyfikatorów projektów, użyj tego polecenia:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Aby wyświetlić listę wszystkich identyfikatorów projektów, użyj tego polecenia:
- Format:
- Jeśli pojawi się pytanie o autoryzację, kliknij Autoryzuj, aby przejść dalej.

- Powinien wyświetlić się ten komunikat:
Jeśli widzisz symbolUpdated property [core/project].
WARNINGi pojawia się pytanieDo you want to continue (Y/N)?, prawdopodobnie identyfikator projektu został wpisany nieprawidłowo. NaciśnijN, a potemEnteri spróbuj ponownie uruchomić poleceniegcloud config set project.
Dodawanie Vertex AI do aplikacji
- Wróć do terminala Cloud Shell u dołu ekranu.
- Upewnij się, że nadal jesteś w odpowiednim katalogu:
cd ~/codelab-genai - Zainstaluj pakiet Node.js Vertex AI SDK:
npm install @google-cloud/vertexai - Zainstaluj pakiet Node.js Google Auth SDK:
npm install google-auth-library - Ponowne otwieranie pliku
server.tsw edytorze Cloud Shellcloudshell edit server.ts - Zastąp kod w pliku
server.tstym kodem:// server.ts import { APP_BASE_HREF } from '@angular/common'; import { CommonEngine } from '@angular/ssr'; import express from 'express'; import { fileURLToPath } from 'node:url'; import { dirname, join, resolve } from 'node:path'; import bootstrap from './src/main.server'; import { VertexAI } from '@google-cloud/vertexai'; import { GoogleAuth } from 'google-auth-library'; // The Express app is exported so that it can be used by serverless Functions. export function app(): express.Express { const server = express(); const serverDistFolder = dirname(fileURLToPath(import.meta.url)); const browserDistFolder = resolve(serverDistFolder, '../browser'); const indexHtml = join(serverDistFolder, 'index.server.html'); const commonEngine = new CommonEngine(); const auth = new GoogleAuth(); server.set('view engine', 'html'); server.set('views', browserDistFolder); // Example Express Rest API endpoints server.get('/api/facts', async (req, res) => { const project = await auth.getProjectId(); const vertex = new VertexAI({ project: project }); const generativeModel = vertex.getGenerativeModel({ model: 'gemini-1.5-flash', generationConfig: { responseMimeType: 'application/json' } }); const animal = req.query['animal'] || 'dog'; const prompt = `Give me 10 fun facts about ${animal}. Return as json as an array in the format ['fact 1', 'fact 2'] Remove backticks and other markdown formatting.`; const resp = await generativeModel.generateContent(prompt); let factArray = ''; if (resp.response.candidates) { factArray = JSON.parse(resp.response.candidates[0].content.parts[0].text || ''); } res.send(factArray); }); // Serve static files from /browser server.get('**', express.static(browserDistFolder, { maxAge: '1y', index: 'index.html', })); // All regular routes use the Angular engine server.get('**', (req, res, next) => { const { protocol, originalUrl, baseUrl, headers } = req; commonEngine .render({ bootstrap, documentFilePath: indexHtml, url: `${protocol}://${headers.host}${originalUrl}`, publicPath: browserDistFolder, providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }], }) .then((html) => res.send(html)) .catch((err) => next(err)); }); return server; } function run(): void { const port = process.env['PORT'] || 4000; // Start up the Node server const server = app(); server.listen(port, () => { console.log(`Node Express server listening on http://localhost:${port}`); }); } run(); - Otwórz plik
app.component.tsw edytorze Cloud Shell.cloudshell edit src/app/app.component.ts - Zastąp kod w pliku
app.components.tstym kodem:// app.component.ts import { Component, signal } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', standalone: true, imports: [RouterOutlet, FormsModule], template: ` <section> <input type="text" placeholder="dog" [(ngModel)]="animal" class="text-black border-2 p-2 m-2 rounded" /> <button (click)="getNewFunFacts()" > Get New Fun Facts </button> <ol> @for(fact of facts(); track fact) { <li>{{fact}}</li> } @empty { <li>No facts are available</li> } </ol> </section> `, styles: '', }) export class AppComponent { animal = ''; facts = signal<string[]>([]); getNewFunFacts() { fetch(`/api/facts?animal=${this.animal}`).then(response => response.json()).then(facts => { this.facts.set(facts); }); } }
12. Wdróż ponownie
- Upewnij się, że w Cloud Shell nadal jesteś w odpowiednim katalogu:
cd ~/codelab-genai - Uruchom te polecenia, aby zatwierdzić nową wersję aplikacji w lokalnym repozytorium Git:
git add . git commit -m "add latest changes" - Wypchnij zmiany do GitHuba:
git push - Po zakończeniu kompilacji uruchom to polecenie i otwórz wdrożoną aplikację:
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"
Zanim zobaczysz zmiany, może minąć kilka minut, zanim kompilacja się zakończy.
Historię wszystkich wersji znajdziesz tutaj: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions
13. (Opcjonalnie) Sprawdzanie wykorzystania Vertex AI
Podobnie jak w przypadku innych usług Google Cloud możesz kontrolować operacje Vertex AI. Logi kontrolne pomagają odpowiedzieć na pytania „kto, co, gdzie i kiedy?”. Logi kontrolne administracyjne dotyczące Vertex AI są domyślnie włączone. Aby kontrolować żądania generowania treści, musisz włączyć logi kontrolne dostępu do danych:
- W konsoli Google Cloud otwórz stronę Logi kontrolne:
Jeśli do znalezienia tej strony użyjesz paska wyszukiwania, wybierz wynik z podtytułem Administracja. - Upewnij się, że istniejący projekt Google Cloud to ten, w którym tworzysz aplikację Cloud Run.
- W tabeli Konfiguracja logów kontrolnych dostępu do danych znajdź i wybierz
Vertex AI APIw kolumnie Usługa. - Na karcie Typy logów wybierz typy logów kontrolnych dostępu do danych
Admin readiData read. - Kliknij Zapisz.
Po włączeniu tej funkcji będziesz mieć dostęp do dzienników kontrolnych każdego wywołania aplikacji. Aby wyświetlić dzienniki kontrolne ze szczegółami wywołań, wykonaj te czynności:
- Wróć do wdrożonej aplikacji i odśwież stronę, aby wywołać log.
- W konsoli Google Cloud otwórz stronę Eksplorator logów:
- W oknie zapytania wpisz:
LOG_ID("cloudaudit.googleapis.com%2Fdata_access") protoPayload.serviceName="aiplatform.googleapis.com" - Kliknij Uruchom zapytanie.
Dzienniki kontroli rejestrują użycie interfejsu Vertex AI API, ale nie umożliwiają obserwowania danych związanych z obciążeniem, takich jak prompty czy szczegóły odpowiedzi.
14. (Opcjonalnie) Zwiększ widoczność zbioru zadań AI
Dzienniki kontroli nie rejestrują informacji związanych ze zbiorem zadań. Aby zwiększyć widoczność zbiorów zadań, musisz jawnie rejestrować te informacje. Możesz to zrobić za pomocą ulubionego frameworka do rejestrowania. Poniższe kroki pokazują, jak to zrobić za pomocą natywnego mechanizmu logowania Node.js.
- Ponowne otwieranie pliku
server.tsw edytorze Cloud Shellcloudshell edit ~/codelab-genai/server.ts - Po wywołaniu funkcji
await generativeModel.generateContent(prompt)(wiersz 19) dodaj ten wiersz: Ten kod zapisuje wconsole.log(JSON.stringify({ severity: 'DEBUG', message: 'Content is generated', prompt: prompt, response: resp.response, }));stdoutinformacje o wygenerowanych treściach w formacie logowania strukturalnego. Agent logowania w Cloud Run przechwytuje dane wyjściowe drukowane wstdouti zapisuje je w tym formacie w Cloud Logging. - Ponownie otwórz Cloud Shell i wpisz to polecenie, aby sprawdzić, czy jesteś w odpowiednim katalogu:
cd ~/codelab-genai - Zatwierdź zmiany:
git commit -am "observe generated content" - Prześlij zmiany do GitHuba, aby wywołać ponowne wdrożenie zmodyfikowanej wersji:
git push
Po wdrożeniu nowej wersji możesz obserwować informacje o debugowaniu dotyczące wywołań Vertex AI.
Aby wyświetlić logi aplikacji:
- W konsoli Google Cloud otwórz stronę Eksplorator logów:
- W oknie zapytania wpisz:
LOG_ID("run.googleapis.com%2Fstdout") severity=DEBUG - Kliknij Uruchom zapytanie.
Wynik zapytania pokazuje logi z promptem i odpowiedzią Vertex AI, w tym „oceny bezpieczeństwa”, które można wykorzystać do monitorowania praktyk związanych z bezpieczeństwem.
15. (Opcjonalnie) Czyszczenie
Cloud Run nie nalicza opłat, gdy usługa nie jest używana, ale może zostać pobrana należność za przechowywanie obrazu kontenera w Artifact Registry. Aby uniknąć opłat, możesz usunąć projekt Cloud. Usunięcie projektu w Cloud spowoduje zaprzestanie naliczania opłat za wszelkie zasoby wykorzystywane w ramach tego projektu.
Jeśli chcesz, usuń projekt:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Możesz też usunąć niepotrzebne zasoby z dysku Cloud Shell. Możesz:
- Usuń katalog projektu ćwiczeń z programowania:
rm -rf ~/codelab-genai - Ostrzeżenie! Tej czynności nie można cofnąć. Jeśli chcesz usunąć wszystko z Cloud Shell, aby zwolnić miejsce, możesz usunąć cały katalog domowy. Upewnij się, że wszystko, co chcesz zachować, jest zapisane w innym miejscu.
sudo rm -rf $HOME
16. Gratulacje
W tym module napiszesz aplikację internetową i skonfigurujesz Cloud Run, aby automatycznie wdrażać aplikację, gdy w jej kodzie źródłowym zostaną wprowadzone zmiany. Następnie zmodyfikowano aplikację i ponownie ją wdrożono.
Jeśli to laboratorium Ci się spodobało, możesz spróbować ponownie w innym języku programowania lub frameworku:
Jeśli chcesz wziąć udział w badaniu wrażeń użytkowników, aby pomóc nam ulepszyć usługi, z których korzystasz, zarejestruj się tutaj.
Oto kilka opcji, które pozwolą Ci kontynuować naukę:
- Dokumenty: używaj Genkit jako elastycznej abstrakcji modelu, która ułatwia integrację dowolnego interfejsu API modelu i korzystanie z modeli utrzymywanych przez społeczność.
- Ćwiczenia z programowania: wdrażanie aplikacji do czatu opartej na Gemini w Cloud Run
- Jak używać wywoływania funkcji Gemini z Cloud Run
- Jak używać Cloud Run Jobs Video Intelligence API do przetwarzania filmu scena po scenie
- Warsztaty na żądanie: Wprowadzenie do Google Kubernetes Engine