1. Обзор
Первое развертывание веб-приложения может показаться сложным. Даже после первого развертывания, если процесс слишком трудоемкий, вы можете избегать развертывания новых версий приложения. С помощью непрерывного развертывания вы можете легко и автоматически развертывать изменения в своем приложении.
В этой лабораторной работе вы напишете веб-приложение и настроите Cloud Run для автоматического развертывания вашего приложения при внесении изменений в исходный код. Затем вы внесете изменения в приложение и снова его развернете.
Что вы узнаете
- Напишите веб-приложение с помощью редактора Cloud Shell.
- Сохраняйте код своего приложения на GitHub.
- Автоматически разверните ваше приложение в Cloud Run.
- Внедрите генеративный ИИ в свое приложение с помощью Vertex AI.
2. Предварительные требования
- Если у вас еще нет учетной записи Google, вам необходимо ее создать .
- Используйте личный аккаунт вместо рабочего или учебного. Рабочие и учебные аккаунты могут иметь ограничения, которые не позволят вам включить API, необходимые для этой лабораторной работы.
- Если у вас еще нет учетной записи GitHub, вам необходимо ее создать.
- Если у вас есть существующая учетная запись GitHub, используйте её. GitHub с большей вероятностью заблокирует новую учетную запись как спам.
- Настройте двухфакторную аутентификацию в своей учетной записи GitHub, чтобы снизить вероятность того, что ваша учетная запись будет помечена как спам.
3. Настройка проекта
- Войдите в консоль Google Cloud .
- Включите выставление счетов в облачной консоли.
- Выполнение этой лабораторной работы должно обойтись менее чем в 1 доллар США в виде облачных ресурсов.
- В конце этой лабораторной работы вы можете выполнить действия по удалению ресурсов, чтобы избежать дальнейших списаний средств.
- Новые пользователи могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .
- Собираетесь посетить мероприятие Gen AI for Devs? Возможно, вам будет предоставлен кредит в размере 1 доллара США .
- Создайте новый проект или выберите вариант повторного использования существующего проекта.
- Подтвердите, что выставление счетов включено в разделе «Мои проекты» в Cloud Billing.
- Если в столбце
Billing accountBilling is disabled:- Нажмите на три точки в столбце
Actions. - Нажмите «Изменить оплату».
- Выберите платежный аккаунт, который вы хотите использовать.
- Нажмите на три точки в столбце
- Если вы посещаете мероприятие Gen AI for Devs, ваша учетная запись, скорее всего, будет называться Google Cloud Platform Trial Billing Account.
- Если в столбце
4. Откройте редактор Cloud Shell.
- Перейдите в редактор Cloud Shell.
- Если терминал не отображается в нижней части экрана, откройте его:
- Нажмите на значок гамбургера.

- Нажмите «Терминал»
- Нажмите «Новый терминал»

- Нажмите на значок гамбургера.
- В терминале настройте свой проект с помощью этой команды:
- Формат:
gcloud config set project [PROJECT_ID] - Пример:
gcloud config set project lab-project-id-example - Если вы не помните идентификатор своего проекта:
- Вы можете вывести список всех идентификаторов ваших проектов с помощью:
gcloud projects list | awk '/PROJECT_ID/{print $2}'

- Вы можете вывести список всех идентификаторов ваших проектов с помощью:
- Формат:
- Если появится запрос на авторизацию, нажмите «Авторизовать» , чтобы продолжить.

- Вы должны увидеть следующее сообщение:
Если вы видитеUpdated property [core/project].
WARNINGи вас спрашиваютDo you want to continue (Y/N)?, то, скорее всего, вы неправильно ввели идентификатор проекта. НажмитеN, затемEnterи попробуйте снова выполнить командуgcloud config set project.
5. Включите API.
В терминале включите API:
gcloud services enable \
run.googleapis.com \
cloudbuild.googleapis.com \
aiplatform.googleapis.com
Выполнение этой команды может занять несколько минут, но в итоге должно отобразиться сообщение об успешном завершении, похожее на это:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. Настройка Git
- Укажите адрес электронной почты вашего глобального пользователя Git:
git config --global user.email "you@example.com" - Укажите ваше глобальное имя пользователя Git:
git config --global user.name "Your Name" - Установите глобальную ветку по умолчанию в Git на
main:git config --global init.defaultBranch main
7. Напишите свой код.
Чтобы написать приложение на Go:
- Перейдите в домашний каталог:
cd ~ - Создайте каталог
codelab-genai:mkdir codelab-genai - Перейдите в каталог
codelab-genai:cd codelab-genai - Инициализируем файл go.mod для объявления нашего модуля:
go mod init codelab-genai - Создайте файл
main.go:touch main.go - Откройте файл
main.goв редакторе Cloud Shell: Теперь в верхней части экрана должен появиться пустой файл. Здесь вы можете редактировать файлcloudshell edit main.gomain.go
- Отредактируйте
main.goи вставьте в него следующий код: Через несколько секунд редактор Cloud Shell автоматически сохранит ваш код. Этот код отвечает на HTTP-запросы нашим приветствием "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) } }
Исходный код вашего приложения готов и может быть сохранен в системе контроля версий.
8. Создайте репозиторий.
- Вернитесь к терминалу Cloud Shell в нижней части экрана.
- Убедитесь, что вы по-прежнему находитесь в правильной директории:
cd ~/codelab-genai - Инициализируйте свой репозиторий Git.
git init -b main - Войдите в интерфейс командной строки GitHub.
Нажмитеgh auth loginEnter, чтобы принять параметры по умолчанию, и следуйте инструкциям в инструменте командной строки GitHub, включая:- В какой учетной записи вы хотите войти?
GitHub.com - Какой протокол вы предпочитаете использовать для операций Git на этом хосте?
HTTPS - Аутентифицировать Git с помощью учетных данных GitHub?
Y(Пропустите, если этот пункт не отображается.) - Как вы хотите авторизоваться в GitHub CLI?
Login with a web browser - Скопируйте свой одноразовый код
- Откройте https://github.com/login/device
- Вставьте свой одноразовый код
- Нажмите «Авторизовать GitHub»
- Завершите вход в систему.
- В какой учетной записи вы хотите войти?
- Подтвердите, что вы вошли в систему:
Если вы успешно вошли в систему, отобразится ваше имя пользователя на GitHub.gh api user -q ".login" - Создайте переменную
GITHUB_USERNAMEGITHUB_USERNAME=$(gh api user -q ".login") - Убедитесь, что вы создали переменную среды:
Если вы успешно создали переменную, то в результате должно отобразиться ваше имя пользователя на GitHub.echo ${GITHUB_USERNAME} - Создайте пустой репозиторий GitHub с именем
codelab-genai: Если вы получили ошибку:gh repo create codelab-genai --private Значит, у вас уже есть репозиторий с именемGraphQL: Name already exists on this account (createRepository)
codelab-genai. Для продолжения выполнения этого руководства у вас есть два варианта:- Удалите существующий репозиторий GitHub.
- Создайте репозиторий с другим именем и не забудьте изменить его в следующих командах.
- Добавьте репозиторий
codelab-genaiв качестве удаленногоorigin:git remote add origin https://github.com/${GITHUB_USERNAME}/codelab-genai
9. Поделитесь своим кодом
- Убедитесь, что вы находитесь в правильной директории:
cd ~/codelab-genai - Добавьте все файлы из текущего каталога в этот коммит:
git add . - Создайте первый коммит:
git commit -m "add http server" - Отправьте свой коммит в
mainветку репозиторияorigin:git push -u origin main
Вы можете выполнить эту команду и перейти по полученному URL-адресу, чтобы просмотреть код своего приложения на GitHub:
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. Настройте автоматическое развертывание.
- Оставьте вкладку «Редактор Cloud Shell» открытой. Мы вернемся к этой вкладке позже.
- В новой вкладке перейдите на страницу Cloud Run .
- Выберите нужный проект Google Cloud в консоли.

- Нажмите ПОДКЛЮЧИТЬ РЕПОЗИТОРИЙ
- Нажмите «НАСТРОЙКА С ПОМОЩЬЮ CLOUD BUILD».
- Выберите GitHub в качестве поставщика репозитория.
- Если вы не вошли в свою учетную запись GitHub в браузере, войдите, используя свои учетные данные.
- Нажмите «Аутентифицировать» , а затем « Продолжить» .
- После входа в систему на странице Cloud Run вы увидите сообщение о том, что приложение GitHub не установлено ни в одном из ваших репозиториев.
- Нажмите на кнопку «УСТАНОВИТЬ GOOGLE CLOUD BUILD» .
- На странице «Настройка установки» выберите «Выбрать только репозитории» и выберите репозиторий codelab-genai , который вы создали через CLI.
- Нажмите «Установить».
- Примечание: Если у вас много репозиториев GitHub, загрузка может занять несколько минут.
- Выберите
your-user-name/codelab-genaiв качестве репозитория.- Если репозиторий отсутствует, нажмите ссылку «Управление подключенными репозиториями» .
- Оставить ветку как
^main$ - Используйте Go, Node.js, Python, Java, .NET Core, Ruby или PHP через buildpacks от Google Cloud.
- Остальные поля (
Build context directory,EntrypointиFunction target) оставьте без изменений.
- Остальные поля (
- Нажмите «Сохранить».
- Выберите GitHub в качестве поставщика репозитория.
- Прокрутите вниз до раздела «Аутентификация» .
- Нажмите «Разрешить неаутентифицированные вызовы».
- Нажмите СОЗДАТЬ
После завершения сборки (что займет несколько минут) выполните эту команду и перейдите по полученному URL-адресу, чтобы просмотреть запущенное приложение:
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. Измените свой код
- Вернитесь к терминалу Cloud Shell в нижней части экрана.
- Убедитесь, что вы по-прежнему находитесь в правильной директории:
cd ~/codelab-genai - Откройте
main.goв редакторе Cloud Shell.cloudshell edit main.go - Установите Vertex AI SDK для Go:
go get cloud.google.com/go/vertexai/genai - Установите библиотеку Metadata для Go, чтобы получить текущий идентификатор проекта:
go get cloud.google.com/go/compute/metadata - Замените следующий код в файле
main.go: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. Передислокация
- Убедитесь, что вы по-прежнему находитесь в правильной директории в Cloud Shell:
cd ~/codelab-genai - Выполните следующие команды, чтобы добавить новую версию вашего приложения в локальный репозиторий Git:
git add . git commit -m "add latest changes" - Отправьте изменения в GitHub:
git push - После завершения сборки выполните эту команду и откройте развернутое приложение:
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"
Для завершения сборки может потребоваться несколько минут, прежде чем вы сможете увидеть внесенные изменения.
Историю всех изменений можно посмотреть здесь: https://console.cloud.google.com/run/detail/us-central1/codelab-genai/revisions
13. (Необязательно) Проведите аудит использования Vertex AI.
Как и в других сервисах Google Cloud, вы можете проводить аудит операций Vertex AI . Журналы аудита помогут вам ответить на вопросы: «Кто что сделал, где и когда?». Административные журналы аудита для Vertex AI включены по умолчанию. Чтобы проводить аудит запросов на генерацию контента, необходимо включить журналы аудита доступа к данным :
- В консоли Google Cloud перейдите на страницу «Журналы аудита» :
Если вы воспользуетесь строкой поиска, чтобы найти эту страницу, выберите результат, подзаголовок которого — IAM & Admin . - Убедитесь, что вы создаете приложение Cloud Run именно в том существующем проекте Google Cloud.
- В таблице конфигурации журналов аудита доступа к данным в столбце «Сервис» выберите
Vertex AI API. - На вкладке «Типы журналов» выберите типы журналов аудита доступа к данным:
Admin readиData read. - Нажмите « Сохранить ».
После включения этой функции вы сможете просматривать журналы аудита для каждого запуска приложения. Чтобы просмотреть журналы аудита с подробным описанием запусков, выполните следующие действия:
- Вернитесь к развернутому приложению и обновите страницу, чтобы запустить запись в журнал.
- В консоли Google Cloud перейдите на страницу Log Explorer :
- В окне запроса введите:
LOG_ID("cloudaudit.googleapis.com%2Fdata_access") protoPayload.serviceName="aiplatform.googleapis.com" - Нажмите « Выполнить запрос» .
Журналы аудита фиксируют использование API Vertex AI, но они не позволяют отслеживать данные, связанные с рабочей нагрузкой, такие как подсказки или подробности ответов.
14. (Необязательно) Повысьте наблюдаемость вашей рабочей нагрузки ИИ.
Журналы аудита не фиксируют информацию, связанную с рабочей нагрузкой. Для повышения наблюдаемости ваших рабочих нагрузок необходимо явно регистрировать эту информацию. Для этого можно использовать любую удобную для вас систему логирования. Следующие шаги демонстрируют один из способов сделать это с помощью библиотеки структурированного логирования Go.
- Откройте
main.goв редакторе Cloud Shell.cloudshell edit ~/codelab-genai/main.go - Измените блок импорта, чтобы включить библиотеки Go для структурированного логирования и работы с JSON:
import ( "context" "encoding/json" "fmt" "log" "log/slog" "net/http" "os" "cloud.google.com/go/compute/metadata" "cloud.google.com/go/vertexai/genai" ) - После инициализации клиента Vertex (строка 33) добавьте следующие строки для инициализации структурированного логгера, использующего правильные поля для Google Cloud Logging:
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)) - После проверки ответа на вызов
GenerateContent(строка 69) добавьте следующие строки внутрь блока if: Этот код записывает вjsonBytes, 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информацию о сгенерированном контенте, используя структурированный формат логирования . Агент логирования в Cloud Run перехватывает вывод, отображаемый вstdout, и записывает этот формат в Cloud Logging. - Откройте Cloud Shell заново и введите следующую команду, чтобы убедиться, что вы находитесь в правильном каталоге:
cd ~/codelab-genai - Подтвердите изменения:
git commit -am "Observe generated content" - Отправьте изменения в GitHub, чтобы запустить повторное развертывание измененной версии:
git push
После развертывания новой версии вы сможете просмотреть отладочную информацию о вызовах к Vertex AI.
Чтобы просмотреть журналы вашего приложения, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу Log Explorer :
- В окне запроса введите:
LOG_ID("run.googleapis.com%2Fstdout") severity=DEBUG - Нажмите « Выполнить запрос» .
Результат запроса отображает журналы с запросом и ответом от Vertex AI, включая «рейтинги безопасности», которые можно использовать для мониторинга соблюдения правил техники безопасности.
15. (Необязательно) Уборка
Хотя Cloud Run не взимает плату, когда услуга не используется, с вас все равно может взиматься плата за хранение образа контейнера в реестре артефактов. Вы можете удалить свой проект Cloud, чтобы избежать дополнительных расходов. Удаление проекта Cloud прекращает выставление счетов за все ресурсы, используемые в этом проекте.
При желании вы можете удалить проект:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Вы также можете удалить ненужные ресурсы с диска Cloudshell. Для этого выполните следующие действия:
- Удалите каталог проекта codelab:
rm -rf ~/codelab-genai - Уберите все ненужные вам тревожные посылки:
cd ~ go clean -modcache - Внимание! Это действие необратимо! Если вы хотите удалить все данные в Cloud Shell, чтобы освободить место, вы можете удалить всю свою домашнюю директорию . Будьте внимательны и убедитесь, что все, что вы хотите сохранить, сохранено в другом месте.
sudo rm -rf $HOME
16. Поздравляем!
В этой лабораторной работе вы написали веб-приложение и настроили Cloud Run для автоматического развертывания приложения при внесении изменений в исходный код. Затем вы модифицировали приложение и развернули его снова.
Если вам понравилась эта лабораторная работа, вы можете попробовать выполнить её ещё раз на другом языке программирования или с использованием другого фреймворка:
Если вас интересует участие в исследовании пользовательского опыта (UX) для улучшения продуктов, с которыми вы работаете сегодня, зарегистрируйтесь здесь .
Вот несколько вариантов для продолжения обучения:
- Документация: Используйте Genkit как гибкую абстракцию моделей, которая упрощает интеграцию любого API моделей и использование моделей, поддерживаемых сообществом.
- Codelab: Как развернуть чат-приложение на базе Gemini в Cloud Run
- Как использовать вызов функций Gemini с помощью Cloud Run
- По запросу пройд-мастер-класс: Google Kubernetes Engine Onboard
- Как использовать API Cloud Run Jobs Video Intelligence для покадровой обработки видео.