1. Обзор
Первое развертывание веб-приложения может быть пугающим. Даже после первого развертывания, если процесс слишком трудоёмкий, вы можете отказаться от развертывания новых версий приложения. Непрерывное развертывание позволяет легко автоматически развертывать изменения в приложении.
В этой лабораторной работе вы напишете веб-приложение и настроите Cloud Run для автоматического развертывания приложения при внесении изменений в его исходный код. Затем вы внесете изменения в приложение и развернёте его снова.
Чему вы научитесь
- Напишите веб-приложение с помощью Cloud Shell Editor
- Сохраните код вашего приложения на GitHub
- Автоматически разверните ваше приложение в Cloud Run
- Добавьте генеративный ИИ в свое приложение с помощью Vertex AI
2. Предпосылки
- Если у вас еще нет учетной записи Google, вам необходимо ее создать .
- Используйте личную учётную запись вместо рабочей или учебной. Рабочие и учебные учётные записи могут иметь ограничения, которые не позволят вам включить API, необходимые для этой лабораторной работы.
- Если у вас еще нет учетной записи GitHub, вам необходимо создать учетную запись GitHub.
- Если у вас есть существующая учётная запись GitHub, используйте её. GitHub с большей вероятностью заблокирует новую учётную запись как спам.
- Настройте двухфакторную аутентификацию в своей учетной записи GitHub, чтобы снизить вероятность того, что ваша учетная запись будет помечена как спам.
3. Настройка проекта
- Войдите в Google Cloud Console .
- Включите выставление счетов в Cloud Console.
- Выполнение этой лабораторной работы обойдется менее чем в 1 доллар США в виде облачных ресурсов.
- Вы можете следовать инструкциям в конце этой лабораторной работы, чтобы удалить ресурсы и избежать дальнейших расходов.
- Новые пользователи имеют право на бесплатную пробную версию стоимостью 300 долларов США .
- Планируете мероприятие Gen AI for Devs? Возможно, вам будет доступен кредит в размере 1 доллара США .
- Создайте новый проект или выберите повторное использование существующего проекта.
- Подтвердите, что выставление счетов включено в разделе «Мои проекты» в разделе «Облачный биллинг».
- Если в вашем новом проекте в столбце «Учетная запись
Billing accountуказано,Billing is disabled:- Нажмите на три точки в столбце
Actions. - Нажмите «Изменить платеж».
- Выберите платежный аккаунт, который вы хотели бы использовать
- Нажмите на три точки в столбце
- Если вы посещаете мероприятие Gen AI for Devs, учетная запись, скорее всего, будет называться «Учетная запись пробного выставления счетов Google Cloud Platform».
- Если в вашем новом проекте в столбце «Учетная запись
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. Напишите свой код
Чтобы написать приложение на Java:
- Перейдите в домашний каталог:
cd ~ - Создайте каталог
codelab-genai:mkdir codelab-genai - Перейдите в каталог
codelab-genai:cd codelab-genai - Создайте стартовое приложение с помощью start.spring.io:
curl https://start.spring.io/starter.zip \ -d dependencies=web \ -d javaVersion=17 \ -d type=maven-project \ -d bootVersion=3.3.2 -o java-starter.zip - Разархивируйте стартовое приложение:
unzip java-starter.zip - Снимите молнию, чтобы не загромождать пространство.
rm java-starter.zip - Выполните эту команду, чтобы добавить файл
project.toml, который настроит Cloud Buildpacks для использования Java 17.cat > project.toml << EOF [[build.env]] name = "GOOGLE_RUNTIME_VERSION" value = "17" EOF - Откройте файл
DemoApplication.javaв редакторе Cloud Shell: В верхней части экрана должен появиться сформированный файл Main. Здесь вы можете редактировать файлcloudshell edit src/main/java/com/example/demo/DemoApplication.javaDemoApplication.java.
- Скопируйте следующий код и вставьте его в открытый файл
DemoApplication.java: Через несколько секунд Cloud Shell Editor автоматически сохранит ваш код. Этот код отвечает на http-запросы приветствием «Hello world!». Размещение двух классов в одном файле — нетипично для приложений Spring. Это решение было принято для упрощения кодовой лаборатории.package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @RestController class HelloController { @GetMapping("/") public String hello() { return "Hello world!"; } }
Ваш исходный код приложения завершен и готов к сохранению в системе контроля версий.
8. Создайте репозиторий
- Вернитесь к терминалу Cloud Shell в нижней части экрана.
- Убедитесь, что вы все еще находитесь в правильном каталоге:
cd ~/codelab-genai - Инициализируйте свой git-репозиторий
git init -b main - Войдите в GitHub CLI
Нажмитеgh auth loginEnter, чтобы принять параметры по умолчанию, и следуйте инструкциям в инструменте GitHub CLI, включая:- В какую учетную запись вы хотите войти?
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/src/main/java/com/example/demo/DemoApplication.java \n\n"
10. Настройте автоматическое развертывание
- Оставьте вкладку «Редактор Cloud Shell» открытой. Мы вернёмся к этой вкладке позже.
- В новой вкладке откройте страницу Cloud Run .
- Выберите правильный проект Google Cloud в консоли.

- Нажмите «ПОДКЛЮЧИТЬ РЕПО»
- Нажмите «НАСТРОЙКА С ПОМОЩЬЮ ОБЛАЧНОГО СБОРА»
- Выберите 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 через сборочные пакеты 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
Если у вас все еще открыт Cloud Shell Editor, вы можете пропустить эти шаги.
- Перейдите в редактор 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.
Добавьте Vertex AI в ваше приложение
- Вернитесь к терминалу Cloud Shell в нижней части экрана.
- Убедитесь, что вы все еще находитесь в правильном каталоге:
cd ~/codelab-genai - Установите Java Vertex AI SDK, добавив следующее в строку 42 вашего
pom.xml:sed -i 's/<dependencies>/<dependencies>\r\n\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.google.cloud<\/groupId>\r\n\t\t\t<artifactId>google-cloud-vertexai<\/artifactId>\r\n\t\t\t<version>1.7.0<\/version>\r\n\t\t<\/dependency>\r\n/g' pom.xml - Установите библиотеку Google Cloud Core, чтобы позже получить идентификатор проекта:
sed -i 's/<dependencies>/<dependencies>\r\n\r\n\t\t<dependency>\r\n\t\t\t<groupId>com.google.cloud<\/groupId>\r\n\t\t\t<artifactId>google-cloud-core<\/artifactId>\r\n\t\t\t<version>2.42.0<\/version>\r\n\t\t<\/dependency>\r\n/g' pom.xml - Повторно откройте
DemoApplication.javaв редакторе Cloud Shell.cloudshell edit ~/codelab-genai/src/main/java/com/example/demo/DemoApplication.java - Замените код в файле
DemoApplication.javaна:package com.example.demo; import java.io.IOException; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.google.cloud.vertexai.VertexAI; import com.google.cloud.vertexai.api.GenerateContentResponse; import com.google.cloud.vertexai.generativeai.GenerativeModel; import com.google.cloud.vertexai.generativeai.ResponseHandler; import com.google.cloud.ServiceOptions; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @RestController class HelloController { String projectId = ServiceOptions.getDefaultProjectId(); @GetMapping("/") public String getFacts(@RequestParam(defaultValue = "dog") String animal) throws IOException { String prompt = "Give me 10 fun facts about " + animal + ". Return this as html without backticks."; VertexAI vertexAI = new VertexAI(projectId, null); GenerativeModel model = new GenerativeModel("gemini-1.5-flash", vertexAI); GenerateContentResponse response = model.generateContent(prompt); return ResponseHandler.getText(response); } }
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 . - Убедитесь, что существующий проект Google Cloud — это тот проект, в котором вы создаете приложение Cloud Run.
- В таблице конфигурации журналов аудита доступа к данным найдите и выберите
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. (Необязательно) Увеличьте наблюдаемость вашей рабочей нагрузки ИИ.
Журналы аудита не фиксируют информацию, связанную с рабочей нагрузкой. Чтобы повысить наблюдаемость рабочих нагрузок, необходимо явно регистрировать эту информацию. Вы можете использовать для этого предпочитаемую вами инфраструктуру журналирования. Следующие шаги показывают, как это сделать с помощью встроенного механизма журналирования Java Util.
- Повторно откройте
DemoApplication.javaв редакторе Cloud Shell.cloudshell edit ~/codelab-genai/src/main/java/com/example/demo/DemoApplication.java - Замените код в файле
DemoApplication.javaна: Этот код записывает вpackage com.example.demo; import java.io.IOException; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.google.cloud.vertexai.VertexAI; import com.google.cloud.vertexai.api.GenerateContentResponse; import com.google.cloud.vertexai.generativeai.GenerativeModel; import com.google.cloud.vertexai.generativeai.ResponseHandler; import com.google.cloud.ServiceOptions; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } @RestController class HelloController { final Logger logger = Logger.getLogger(HelloController.class.getName()); String projectId = ServiceOptions.getDefaultProjectId(); @GetMapping("/") public String getFacts(@RequestParam(defaultValue = "dog") String animal) throws IOException { String prompt = "Give me 10 fun facts about " + animal + ". Return this as html without backticks."; VertexAI vertexAI = new VertexAI(projectId, null); GenerativeModel model = new GenerativeModel("gemini-1.5-flash", vertexAI); GenerateContentResponse response = model.generateContent(prompt); logger.log(Level.INFO, "Content is generated", new HashMap<String, Object>() { { put("prompt", prompt); put("response", response); } }); return ResponseHandler.getText(response); } }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 не взимает плату, когда сервис не используется, с вас может взиматься плата за хранение образа контейнера в Artifact Registry. Вы можете удалить свой проект Cloud, чтобы избежать оплаты. Удаление проекта Cloud прекращает выставление счетов за все ресурсы, используемые в этом проекте.
Если хотите, удалите проект:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Вы также можете удалить ненужные ресурсы с диска CloudShell. Вы можете:
- Удалить каталог проекта codelab:
rm -rf ~/codelab-genai - Внимание! Это действие необратимо! Если вы хотите удалить всё из Cloud Shell, чтобы освободить место, вы можете удалить весь домашний каталог . Убедитесь, что всё, что вы хотите сохранить, сохранено где-то ещё.
sudo rm -rf $HOME
16. Поздравления
В этой лабораторной работе вы написали веб-приложение и настроили Cloud Run для автоматического развертывания приложения при внесении изменений в его исходный код. Затем вы внесли изменения в приложение и развернули его снова.
Если вам понравилась эта лабораторная работа, вы можете попробовать выполнить ее еще раз на другом языке программирования или фреймворке:
Если вы заинтересованы в участии в исследовании пользовательского опыта (UX) с целью улучшения продуктов, с которыми вы работали сегодня, зарегистрируйтесь здесь .
Вот несколько вариантов продолжения обучения:
- Документация: используйте Genkit как гибкую абстракцию модели, которая упрощает интеграцию любого API модели и использование поддерживаемых сообществом моделей.
- Codelab: Как развернуть чат-приложение на базе Gemini в Cloud Run
- Как использовать вызов функций Gemini с помощью Cloud Run
- Как использовать API Cloud Run Jobs Video Intelligence для обработки видео по сценам
- Семинар по запросу: Google Kubernetes Engine Onboard