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. Напишите свой код.
Чтобы написать приложение на Next.js:
- Перейдите в домашний каталог:
cd ~ - Создайте новое приложение
codelab-genaiNext.js:npx create-next-app@latest codelab-genai \ --ts \ --eslint \ --tailwind \ --no-src-dir \ --app \ --no-import-alias - Если появится запрос на установку
create-next-app, нажмитеEnter, чтобы продолжить:Need to install the following packages: create-next-app@14.2.14 Ok to proceed? (y)
- Перейдите в каталог
codelab-genai:cd codelab-genai - Откройте файл
page.tsxв редакторе Cloud Shell: Теперь в верхней части экрана должен появиться файл. Здесь вы можете редактировать файлcloudshell edit app/page.tsxpage.tsx.
- Удалите существующий код. Скопируйте следующий код и вставьте его в открытый файл
page.tsx: Через несколько секунд редактор Cloud Shell автоматически сохранит ваш код. Этот код отвечает на HTTP-запросы нашим приветствием "Hello world!".import React from "react"; export default function Home() { return ( <main> Hello World! </main> ); }
Исходный код вашего приложения готов и может быть сохранен в системе контроля версий.
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/app/page.tsx \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
Если у вас все еще открыт редактор 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.
Добавьте Vertex AI в свое приложение.
- Вернитесь к терминалу Cloud Shell в нижней части экрана.
- Убедитесь, что вы по-прежнему находитесь в правильной директории:
cd ~/codelab-genai - Установите Node.js Vertex AI SDK:
npm install @google-cloud/vertexai - Установите Node.js Google Auth SDK:
npm install google-auth-library - Создайте файл
app/actions.tsв терминале.touch app/actions.ts - Откройте
actions.tsв редакторе Cloud Shell.cloudshell edit app/actions.ts - Скопируйте следующий код и вставьте его в открытый файл
actions.ts:'use server' import { VertexAI } from '@google-cloud/vertexai'; import { GoogleAuth } from 'google-auth-library'; const auth = new GoogleAuth(); export async function getFunFactsAction(animal: string) { const project = await auth.getProjectId(); const vertex = new VertexAI({ project: project }); const generativeModel = vertex.getGenerativeModel({ model: 'gemini-1.5-flash' }); const prompt = `Give me 10 fun facts about ${animal || 'dog'}. 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); if (!resp.response.candidates) { throw new Error('Did not receive response candidates.') } console.log({ text: resp.response.candidates[0].content.parts[0].text }) const factArray = JSON.parse(resp.response.candidates[0].content.parts[0].text || ''); return factArray; }; - Откройте
page.tsxв редакторе Cloud Shell.cloudshell edit ~/codelab-genai/app/page.tsx - Замените код в файле
page.tsxследующим:'use client' import React, { useState } from "react"; import { getFunFactsAction } from "./actions"; export default function Home() { const [animal, setAnimal] = useState(''); const [funFacts, setFunFacts] = useState<string[]>([]); async function getNewFunFacts() { const funFacts = await getFunFactsAction(animal); setFunFacts(funFacts); } return ( <main> <h1 className="text-xl">Animal Fun Facts!</h1> <label className="text-lg p-2 m-2">Animal</label> <input placeholder="dog" value={animal} onChange={(e) => setAnimal(e.target.value)} className="text-black border-2 p-2 m-2 rounded" /> <button onClick={getNewFunFacts} className="font-bold border-2 p-2 m-2 rounded hover:bg-white hover:text-black" > Get New Fun Facts </button> <ul className="list-disc list-inside"> {funFacts.map(function (thing) { return <li key={thing}>{thing}</li> })} </ul> </main> ); }
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. (Необязательно) Повысьте наблюдаемость вашей рабочей нагрузки ИИ.
Журналы аудита не фиксируют информацию, связанную с рабочей нагрузкой. Для повышения наблюдаемости ваших рабочих нагрузок необходимо явно регистрировать эту информацию. Для этого можно использовать любую удобную систему логирования. Следующие шаги демонстрируют, как это сделать с помощью встроенного механизма логирования Node.js.
- Откройте файл
actions.tsв редакторе Cloud Shell.cloudshell edit ~/codelab-genai/app/actions.ts - После вызова метода
await generativeModel.generateContent(prompt)(строка 19) добавьте следующую строку: Этот код записывает вconsole.log(JSON.stringify({ severity: 'DEBUG', message: 'Content is generated', prompt: prompt, response: resp.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 не взимает плату, когда услуга не используется, с вас все равно может взиматься плата за хранение образа контейнера в реестре артефактов. Вы можете удалить свой проект Cloud, чтобы избежать дополнительных расходов. Удаление проекта Cloud прекращает выставление счетов за все ресурсы, используемые в этом проекте.
При желании вы можете удалить проект:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Вы также можете удалить ненужные ресурсы с диска Cloudshell. Для этого выполните следующие действия:
- Удалите каталог проекта codelab:
rm -rf ~/codelab-genai - Внимание! Это действие необратимо! Если вы хотите удалить все данные в Cloud Shell, чтобы освободить место, вы можете удалить всю свою домашнюю директорию . Будьте внимательны и убедитесь, что все, что вы хотите сохранить, сохранено в другом месте.
sudo rm -rf $HOME
16. Поздравляем!
В этой лабораторной работе вы написали веб-приложение и настроили Cloud Run для автоматического развертывания приложения при внесении изменений в исходный код. Затем вы модифицировали приложение и развернули его снова.
Если вам понравилась эта лабораторная работа, вы можете попробовать выполнить её ещё раз на другом языке программирования или с использованием другого фреймворка:
Вот несколько вариантов для продолжения обучения:
- Документация: Используйте Genkit как гибкую абстракцию моделей, которая упрощает интеграцию любого API моделей и использование моделей, поддерживаемых сообществом.
- Codelab: Как развернуть чат-приложение на базе Gemini в Cloud Run
- Как использовать вызов функций Gemini с помощью Cloud Run
- Как использовать API Cloud Run Jobs Video Intelligence для покадровой обработки видео.
- По запросу пройд-мастер-класс: Google Kubernetes Engine Onboard