Перенос приложений из локальной среды в облако: полнофункциональная миграция приложений с помощью Gemini CLI и Cloud SQL MCP.

1. Введение

Представляем AllStrides — полнофункциональную платформу для управления мероприятиями в фитнес-сообществах. Несмотря на богатый функционал, в настоящее время она работает только локально. Она использует локальную базу данных SQLite и ручное выполнение кода на Node.js. Для роста сообщества AllStrides необходимы масштабируемость, надежность и безопасность Google Cloud.

В этом практическом занятии вы не будете выполнять традиционную миграцию. Вместо этого вы выступите в роли архитектора продукта, используя Gemini CLI в качестве партнера по взаимодействию с агентами. Оснастив Gemini тремя серверами Google Cloud Model Context Protocol (MCP), вы позволите ИИ «связываться» и напрямую взаимодействовать с сервисами Google Cloud. Вы начнете с использования MCP Developer Knowledge, чтобы определить наилучшую базу данных Google Cloud для приложения AllStrides. Затем вы используете MCP Cloud SQL для создания экземпляра базы данных и переноса локальных данных сообщества в облако одним нажатием кнопки. Наконец, вы используете MCP Cloud Run для контейнеризации приложения, сделав AllStrides доступным в режиме реального времени и глобально.

e031fbb4ae5d2afc.png

Предварительные требования

  • Базовое понимание консоли Google Cloud.
  • Базовые навыки работы с командной строкой и Cloud Shell.

Что вы узнаете

  • Как развернуть и настроить Gemini CLI для работы с удаленным MCP
  • Как использовать сервер Development Knowledge MCP
  • Как использовать удаленный сервер Cloud SQL MCP для миграции данных в облако
  • Как использовать удаленный сервер MCP Cloud Run для развертывания приложения в облаке
  • Как использовать Gemini CLI в Google Cloud Shell

Что вам понадобится

  • Аккаунт Google Cloud и проект Google Cloud
  • Веб-браузер, такой как Chrome , поддерживающий консоль Google Cloud и Cloud Shell.

2. Настройка и требования

Настройка проекта

  1. Войдите в консоль Google Cloud . Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

Используйте личный аккаунт вместо рабочего или учебного.

  1. Создайте новый проект или используйте существующий. Чтобы создать новый проект в консоли Google Cloud, в заголовке нажмите кнопку «Выбрать проект», после чего откроется всплывающее окно.

295004821bab6a87.png

В окне «Выберите проект» нажмите кнопку «Новый проект», после чего откроется диалоговое окно для создания нового проекта.

37d264871000675d.png

В диалоговом окне введите желаемое название проекта и выберите местоположение.

96d86d3d5655cdbe.png

  • Название проекта — это отображаемое имя участников данного проекта. Название проекта не используется API Google и может быть изменено в любое время.
  • Идентификатор проекта (Project ID) уникален для всех проектов Google Cloud и является неизменяемым (его нельзя изменить после установки). Консоль Google Cloud автоматически генерирует уникальный идентификатор, но вы можете настроить его. Если вам не нравится сгенерированный идентификатор, вы можете сгенерировать другой случайный или указать свой собственный, чтобы проверить его доступность. В большинстве практических заданий вам потребуется указать идентификатор вашего проекта, который обычно обозначается заполнителем PROJECT_ID.
  • К вашему сведению, существует третье значение — номер проекта , которое используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .

Включить выставление счетов

Создайте личный платежный аккаунт.

Если вы настроили оплату с использованием кредитов Google Cloud, этот шаг можно пропустить.

  1. Перейдите по этой ссылке и войдите в систему, используя личный аккаунт Google.
  2. Вы увидите что-то подобное:

f54628965f465486.png

  1. Нажмите кнопку «НАЖМИТЕ ЗДЕСЬ ДЛЯ ДОСТУПА К ВАШИМ КРЕДИТАМ» . Это переведет вас на страницу настройки вашего платежного профиля. Если вам будет предложено зарегистрироваться для бесплатного пробного периода, нажмите «Отмена» и продолжите привязку платежной системы.

20e88842cf2a732e.png

  1. Нажмите «Подтвердить». Теперь вы подключены к пробному платёжному аккаунту Google Cloud Platform.

cdc87f1c57777951.png

Создайте личный платежный аккаунт.

Если вы настроили оплату с использованием кредитов Google Cloud, этот шаг можно пропустить.

Чтобы настроить личный платежный аккаунт, перейдите сюда, чтобы включить оплату в облачной консоли.

Несколько замечаний:

  • Выполнение этой лабораторной работы должно обойтись менее чем в 3 доллара США в виде облачных ресурсов.
  • В конце этой лабораторной работы вы можете выполнить действия по удалению ресурсов, чтобы избежать дальнейших списаний средств.
  • Новые пользователи могут воспользоваться бесплатной пробной версией стоимостью 300 долларов США .

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Активировать Cloud Shell

В качестве альтернативы вы можете нажать G, а затем S. Эта последовательность активирует Cloud Shell, если вы находитесь в консоли Google Cloud, или воспользуйтесь этой ссылкой .

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:

Скриншот терминала Google Cloud Shell, показывающий, что среда подключена.

Эта виртуальная машина содержит все необходимые инструменты разработки. Она предоставляет постоянный домашний каталог объемом 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Вся работа в этом практическом задании может выполняться в браузере. Вам не нужно ничего устанавливать.

3. Прежде чем начать

Включить базовый API

Для использования управляемых баз данных, таких как Cloud SQL и другие сервисы, для сборки и развертывания вашего приложения в Cloud Run необходимо включить их соответствующие API в вашем проекте Google Cloud.

В зависимости от выбранного подхода вы можете пропустить этот шаг и позволить Gemini CLI включить все необходимые API позже, но в этом случае во время выполнения могут возникнуть задержки и повторные действия.

В терминале Cloud Shell убедитесь, что идентификатор вашего проекта указан правильно:

gcloud config set project [YOUR-PROJECT-ID]

Установите переменную среды PROJECT_ID:

PROJECT_ID=$(gcloud config get-value project)

Включите все необходимые службы:

gcloud services enable sqladmin.googleapis.com \
                       aiplatform.googleapis.com \
                       secretmanager.googleapis.com \
                       artifactregistry.googleapis.com \
                       cloudbuild.googleapis.com \
                       run.googleapis.com \
                       containerregistry.googleapis.com

Ожидаемый результат:

student@cloudshell:~ (test-project-001-402417)$ PROJECT_ID=$(gcloud config get-value project)
Your active configuration is: [cloudshell-14650]
student@cloudshell:~ (test-project-001-402417)$ 
student@cloudshell:~ (test-project-001-402417)$ gcloud services enable sqladmin.googleapis.com \
                       aiplatform.googleapis.com \
                       secretmanager.googleapis.com \
                       artifactregistry.googleapis.com \
                       cloudbuild.googleapis.com \
                       run.googleapis.com \
                       containerregistry.googleapis.com
Operation "operations/acat.p2-812263612774-c2dbeef3-c4c1-4a7d-a4b2-b5380be65044" finished successfully.

Предоставление прав доступа к учетной записи службы

Для создания и хранения образов приложений необходимо предоставить учетной записи службы вычислений по умолчанию права администратора хранилища. Как и на предыдущем шаге, у вас есть возможность делегировать эти права команде Gemini CLI позже во время выполнения.

PROJECT_ID=$(gcloud config get-value project)
 gcloud projects add-iam-policy-binding $PROJECT_ID --member=serviceAccount:$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")-compute@developer.gserviceaccount.com --role=roles/storage.admin

Включить удаленный MCP

Для каждого сервиса в проекте необходимо явно включить удаленные сервисы MCP. По умолчанию они отключены, и это помогает регулировать доступ к API на уровне проекта и сервиса.

Начнём с сервиса Developer Knowledge MCP . Чтобы включить API Developer Knowledge и удалённый сервис MCP, выполните следующие команды gcloud.

PROJECT_ID=$(gcloud config get-value project)
gcloud beta services mcp enable developerknowledge.googleapis.com --project=$PROJECT_ID

После включения API и удаленного MCP для базы знаний разработчиков, вы можете продолжить и сделать то же самое для службы удаленного MCP Cloud SQL .

gcloud beta services mcp enable sqladmin.googleapis.com --project=$PROJECT_ID

Как и во всех удаленных MCP для баз данных, доступ и разрешения MCP предоставляются поэтапно, обеспечивая детальный доступ к самому API на уровне проекта, и это может сделать только субъект (пользователь или учетная запись службы) с ролью администратора использования службы (roles/serviceusage.serviceUsageAdmin).

Только субъекты с ролью MCP Tool User (roles/mcp.toolUser) могут совершать вызовы к удаленному API MCP.

Например, если у вас нет роли администратора Cloud SQL (roles/cloudsql.admin), вы не сможете создавать, клонировать или обновлять какие-либо экземпляры в проекте.

Более подробную информацию о необходимых ролях и правах доступа можно найти в документации .

Как мы видим, поэтапная и детализированная авторизация защищает нас от несанкционированных атак даже при включенной удаленной конечной точке MCP, что делает ее достаточно безопасной для нашей производственной среды.

Следующий удаленный MCP, который мы собираемся включить, предназначен для сервиса Cloud Run. Подход к включению и доступу к удаленному MCP Cloud Run аналогичен подходу к удаленному MCP Cloud SQL.

Включите службу Cloud Run MCP с помощью следующей команды.

gcloud beta services mcp enable run.googleapis.com --project=$PROJECT_ID

Наконец, мы можем проверить, включены ли все удаленные MCP в нашем проекте, используя следующую команду.

gcloud beta services mcp list --project=$PROJECT_ID

Ожидаемый результат:

student@cloudshell:~ (test-project-001-402417)$ gcloud beta services mcp list --project=$PROJECT_ID
NAME: services/developerknowledge.googleapis.com
MCP_ENDPOINT: developerknowledge.googleapis.com

NAME: services/run.googleapis.com
MCP_ENDPOINT: run.googleapis.com/mcp

NAME: services/sqladmin.googleapis.com
MCP_ENDPOINT: sqladmin.googleapis.com/mcp

Теперь, когда все наши API и сервисы включены, нам необходимо настроить Gemini CLI.

4. Настройка Gemini CLI

Лабораторная работа разработана с использованием Gemini CLI в качестве основного агента для выполнения большинства действий, и первым шагом является его настройка для работы с удаленными серверами MCP. Также настоятельно рекомендуется использовать последнюю версию Gemini CLI и последнюю версию Gemini, например, Gemini-3-pro или Gemini-3-flash (в настоящее время находится в режиме предварительного просмотра).

Если у вас уже установлена ​​последняя версия Gemini CLI и вы настроили её для работы с последними моделями Gemini, то можете пропустить следующие 2 шага и сразу перейти к шагу 3.

1. Получите ключ API Gemini.

Для использования новейших моделей Gemini в Gemini CLI необходимо настроить аутентификацию с помощью ключа API. Ключ API можно получить в Google AI Studio.

  1. Перейдите в Google AI Studio -> Получить ключ API в вашем браузере.
  2. В правой части экрана нажмите кнопку Create API key
  3. Во всплывающем окне выберите свой проект или импортируйте его, если он там не отображается.

683940deabde2975.jpeg

  1. Создайте ключ API.
  2. Вы можете скопировать ключ, используя кнопку копирования справа.

3d97805534c50bf.jpeg

Ключ подготовлен, и теперь мы можем использовать его для Gemini CLI.

2. Настройка Gemini CLI

Gemini CLI можно настроить через файл конфигурации настроек или в интерактивном режиме с помощью команды /settings . Нам нужно, чтобы наши настройки сохранялись в файле настроек.

Сначала создадим директорию для нашего проекта. Назовём её projectmcp и перейдём в неё с помощью следующих команд.

mkdir ~/projectmcp
cd ~/projectmcp

В этой директории мы создадим каталог для конфигурационных файлов Gemini и будем выполнять все наши команды. Gemini CLI по умолчанию использует конфигурационный файл пользовательской области видимости и расширения, установленные в директории ~/.gemini. Но мы собираемся создать собственную конфигурацию проектной области видимости в нашей директории ~/projectmcp. Давайте начнем с создания конфигурационного каталога и файлов.

mkdir ~/projectmcp/.gemini
touch ~/projectmcp/.gemini/settings.json

Затем мы открываем файл ~/projectmcp/.gemini/settings.json с помощью редактора Cloud Shell.

edit ~/projectmcp/.gemini/settings.json

В открывшемся окне редактора добавьте следующую конфигурацию.

{
  "general": {
    "preferredEditor": "vscode",
    "previewFeatures": true,
    "sessionRetention": {
      "enabled": true
    }
  },
  "ide": {
    "enabled": true,
    "hasSeenNudge": true
  },
  "security": {
    "auth": {
      "selectedType": "gemini-api-key"
    }
  },
  "ui": {
    "theme": "Default"
  },
  "tools": {
    "shell": {
      "enableInteractiveShell": false
    }
  }
}

После редактирования файла вы можете использовать ctrl+s для сохранения изменений и вернуться в терминал, нажав кнопку Open Terminal

e152c73931dac892.jpeg

В указанном выше файле settings.json тип аутентификации Gemini CLI задается как gemini-api-key, и вам необходимо указать этот ключ в модели. Это можно сделать, создав файл .env в каталоге, где вы хотите работать с Gemini CLI, и сохранив ваш API-ключ для аутентификации Gemini CLI в качестве переменной окружения, которая будет использоваться при запуске IDE.

Давайте отредактируем файл с помощью редактора Cloud Shell.

edit ~/projectmcp/.env

И сохраните ключ API, созданный на шаге 1.

GEMINI_API_KEY= <YOUR_API_KEY>

Теперь вы можете вернуться в терминал и продолжить. Следующий шаг — обновить Gemini CLI до последней версии. Версия в Google Cloud Shell или в вашей среде может быть устаревшей и некорректно работать с последними конфигурациями и сервисами MCP. Поэтому важно обновить Gemini CLI до последней версии и запустить его. В терминале выполните следующее.

cd ~/projectmcp/
npm install -g @google/gemini-cli@latest

Теперь вы можете проверить версию. Пожалуйста, имейте в виду, что если вы работаете в Google Cloud Shell, то при каждом перезапуске оболочки она может возвращаться к предыдущей версии. Изменения, внесенные вами в саму CLI Gemini, не являются постоянными в Cloud Shell.

gemini --version

Должна отображаться последняя версия Gemini CLI (версия 0.27 на момент написания лабораторной работы). Проверить последнюю версию Gemini CLI можно здесь . Теперь мы можем запустить его и убедиться, что он использует последнюю модель Gemini. Выполните следующую команду в папке вашего проекта, чтобы запустить Gemini CLI.

gemini

После запуска Gemini CLI вы можете проверить версию и модель, выполнив команду /about в интерфейсе. Вы должны увидеть что-то похожее на изображение ниже.

dea82957ace33156.jpeg

Как видите, используется новейшая модель Gemini-3.

2. Настройка серверов MCP в Gemini CLI.

Теперь пришло время добавить все включенные серверы MCP. В Gemini CLI их можно включить двумя способами: через расширения или непосредственно в настройках. В этой лабораторной работе вы будете использовать файл setting.json, содержащий параметры аутентификации серверов MCP, и добавите туда соответствующие данные.

  1. Для сервера Developer Knowledge MCP необходимо создать ключ API для авторизации на конечной точке.

Вот шаги:

  • В консоли Google Cloud для проекта, в котором вы включили API, перейдите на страницу «Учетные данные» .
  • Нажмите «Создать учетные данные», а затем выберите «Ключ API» в меню. В диалоговом окне «Создан ключ API» отобразится строка для вашего нового ключа.
  • В диалоговом окне нажмите на ссылку Edit API key .
  • В поле Name укажите имя для ключа. Например, DK API Key .
  • В разделе «Ограничения API» выберите Restrict key .
  • В списке «Выберите API» включите Developer Knowledge API и нажмите «ОК».
  • Нажмите «Сохранить».

d0e7c7081e43788e.jpeg

Теперь, если вам нужно использовать ключ, вы можете перейти на страницу и нажать «Показать ключ» справа.

caf35e95bba68c2.jpeg

Теперь вам нужно сохранить этот ключ в конфигурации. Раздел MCP в нашем файле settings.json будет выглядеть следующим образом (вам нужно указать там значение для вашего ключа API DK). Вот пример того, как выглядит раздел MCP в файле settings.json, если добавлен только API DK. Позже в лабораторной работе вы также увидите, как должен выглядеть файл settings.json со всеми серверами MCP вместе.

    "mcpServers": {
    "DeveloperKnowledge": {
      "httpUrl": "https://developerknowledge.googleapis.com/mcp",
      "headers": {
        "X-Goog-Api-Key": "<Your DK API Key>"
      }
    }
  },
  1. Далее вы можете добавить конфигурацию для нашего сервера Cloud SQL MCP. Для Cloud SQL MCP вы будете использовать свои учетные данные Google вместо API. Это более безопасно и позволяет нам определять роли и область действия, разрешенные для пользователя. Вот конфигурация для сервера MCP. Пожалуйста, замените "<ВАШ_ПРОЕКТ_GCP>" на идентификатор вашего проекта.
    "Cloud SQL MCP Server": {
      "httpUrl": "https://sqladmin.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      },
      "timeout": 500000,
      "trust": false,
      "headers": {
        "X-Goog-User-Project": "<YOUR_GCP_PROJECT>"
      }
    },
  1. Следующий фрагмент JSON содержит конфигурацию сервера Cloud Run MCP. Он следует тому же шаблону, что и в приведенном выше примере, и использует учетные данные Google для аутентификации и авторизации. Вот пример конфигурации.
    "CloudRun": {
      "httpUrl": "https://run.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      }
    }

Все эти параметры необходимо добавить в файл ~/projectmcp/.gemini/settings.json .

Откройте файл ~/projectmcp/.gemini/settings.json с помощью редактора Cloud Shell.

edit ~/projectmcp/.gemini/settings.json

Замените содержимое следующей конфигурацией. Пожалуйста, укажите ваш API-ключ и идентификатор проекта в полях "X-Goog-Api-Key" и "X-Goog-User-Project" в соответствии с вашей средой .

{
  "general": {
    "preferredEditor": "vscode",
    "previewFeatures": true,
    "sessionRetention": {
      "enabled": true
    }
  },
  "ide": {
    "enabled": true,
    "hasSeenNudge": true
  },
  "security": {
    "auth": {
      "selectedType": "gemini-api-key"
    }
  },
  "mcpServers": {
    "DeveloperKnowledge": {
      "httpUrl": "https://developerknowledge.googleapis.com/mcp",
      "headers": {
        "X-Goog-Api-Key": "<Your DK API Key>"
      }
    },
    "Cloud SQL MCP Server": {
      "httpUrl": "https://sqladmin.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      },
      "timeout": 500000,
      "trust": false,
      "headers": {
        "X-Goog-User-Project": "<YOUR_GCP_PROJECT>"
      }
    },
    "CloudRun": {
      "httpUrl": "https://run.googleapis.com/mcp",
      "authProviderType": "google_credentials",
      "oauth": {
        "scopes": [
          "https://www.googleapis.com/auth/cloud-platform"
        ]
      }
    }
  },
  "ui": {
    "theme": "Default"
  },
  "tools": {
    "shell": {
      "enableInteractiveShell": false
    }
  }
}

Теперь мы можем запустить Gemini CLI и увидеть все наши MCP-серверы, включенные в него.

cd ~/projectmcp/
gemini

После запуска Gemini CLI вы можете выполнить команду /mcp , чтобы увидеть все работающие серверы MCP.

352638b053783696.png

5. Подготовка заявления

В следующем примере вы попытаетесь перенести ваше локальное тестовое приложение в Google Cloud. Сначала мы установим приложение локально и протестируем его.

1. Клонируйте исходный код.

Нам нужно клонировать наше приложение из репозитория GitHub. В Cloud Shell или локальном терминале в папке проекта выполните команду.

git clone https://github.com/google/mcp.git

2. Запустите приложение локально.

Давайте протестируем приложение и загрузим несколько тестовых данных.

В той же командной оболочке перейдите в папку приложения и запустите приложение, используя команду...

cd mcp/examples/allstrides
./start_allstrides.sh

3. Протестируйте приложение.

Если вы работаете в Cloud Shell, нажмите кнопку « Web preview в верхней части окна Cloud Shell и выберите Preview on port 8080

db0d9210014ade3d.jpeg

Откроется новая вкладка браузера с интерфейсом приложения, где вы сможете, например, нажать кнопку Events .

67423438eef0c999.jpeg

На данный момент у вас нет никаких мероприятий.

4. Загрузка выборочных данных

При желании вы можете зарегистрироваться в приложении и создавать собственные события, сообщения чата и пользователей, или же использовать предоставленные вместе с приложением примеры данных.

Откройте еще одну вкладку Cloud Shell, используя знак "+" вверху.

abc505ac4d41f24e.png

В новой вкладке облачной оболочки перейдите в каталог приложения и выполните импорт с помощью утилиты sqllite3:

cd ~/projectmcp/mcp/examples/allstrides
sqlite3 allstrides.db < seed_data.sql

Если вы вернетесь на страницу приложения, то после повторного нажатия на кнопку «События» вы должны увидеть несколько событий.

5adc772a1d2261f4.jpeg

Вы также можете протестировать страницу чата и посмотреть там некоторые сообщения.

Теперь вы можете закрыть вторую вкладку, набрав exit

exit

А затем остановите приложение на первой вкладке, используя комбинацию клавиш Ctrl+C.

6. Тестирование. Знания разработчика. MCP.

Платформа Developer Knowledge MCP позволяет нам использовать документы Google непосредственно из наших универсальных инструментов, предоставляя возможность проверять инструкции, создавать учебные пособия и выполнять другие задачи, которые могут быть дополнены самой актуальной документацией Google.

Запустите Gemini CLI и выведите список доступных инструментов MCP на сервере Developer Knowledge MCP.

/mcp

В панели инструментов Developer Knowledge MCP вы должны увидеть три доступных инструмента:

Ожидаемый результат:

🟢 DeveloperKnowledge - Ready (3 tools)
  Tools:
  - batch_get_documents
  - get_document
  - search_documents

Наша задача — перенести наше приложение в облако Google, а это значит, что нам нужно перейти с локальной базы данных Sqlite на более масштабируемое и облачное решение. Давайте попросим Gemini проанализировать код нашего приложения и дать рекомендации по выбору базы данных.

В командной строке Gemini CLI введите следующее:

Hello, I need to choose a database platform for my allstrides application in Google Cloud. Can you analyze documentation and prepare a tutorial to choose the correct database engine?

Gemini CLI начнет с анализа вашего кода, а затем запросит его выполнение.

Ожидаемый результат

 ?  search_documents (DeveloperKnowledge MCP Server) {"query":"choose google cloud database"}                                                                                                               ← │
│                                                                                                                                                                                                              │
│ MCP Server: DeveloperKnowledge                                                                                                                                                                               │
│ Tool: search_documents                                                                                                                                                                                       │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "search_documents" from server "DeveloperKnowledge"?                                                                                                                             │
│                                                                                                                                                                                                              │
│ ● 1. Allow once                                                                                                                                                                                              │
│   2. Allow tool for this session                                                                                                                                                                             │
│   3. Allow all server tools for this session                                                                                                                                                                 │
│   4. No, suggest changes (esc)   

Мы видим, что инструмент использует MCP для привязки ответа к документации Google. Разрешите выполнение запроса MCP из базы знаний разработчика. Возможно, он запросит дополнительную информацию еще один или два раза, прежде чем предоставить ответ. Пока не разрешайте вносить какие-либо изменения в ваше приложение.

В конце был создан учебный материал с кратким обзором, где Cloud SQL for Postgres был назван лучшим выбором для бэкэнда базы данных. Ваш ответ может немного отличаться из-за недетерминированной природы моделей генеративного ИИ.

Ожидаемый результат:

By switching to Cloud SQL for PostgreSQL, AllStrides gains a robust, scalable foundation suitable for production deployment on Google Cloud. The transition is straightforward due to the use of Sequelize ORM.  

Мы также можем попросить подготовить пошаговое руководство по миграции данных. Введите новое сообщение в командной строке Gemini:

I agree with the recommendation to use Cloud SQL for PostgreSQL as the new database for my application. Can you prepare a detailed migration tutorial based on Google documentation on how to move data from my local database to Cloud SQL in the cloud?

И здесь мы снова ожидаем, что Gemini CLI будет использовать Developer Knowledge MCP в качестве источника достоверной информации при подготовке руководства. Последовательность действий, выполняемых Gemini CLI, может немного отличаться в зависимости от конкретной модели и других факторов. Например, он может запросить предварительную подготовку скриптов миграции, и только после этого приступить к работе над окончательной документацией к руководству.

Вот один из примеров, где запрашивается разрешение на выполнение модуля MCP для разработчиков:

 ?  search_documents (DeveloperKnowledge MCP Server) {"query":"migrate local database to Cloud SQL for PostgreSQL"}                                                                                         ← │
│                                                                                                                                                                                                              │
│ MCP Server: DeveloperKnowledge                                                                                                                                                                               │
│ Tool: search_documents                                                                                                                                                                                       │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "search_documents" from server "DeveloperKnowledge"?                                                                                                                             │
│                                                                                                                                                                                                              │
│ ● 1. Allow once                                                                                                                                                                                              │
│   2. Allow tool for this session                                                                                                                                                                             │
│   3. Allow all server tools for this session                                                                                                                                                                 │
│   4. No, suggest changes (esc)                                                                                                                                                                               │
│                                                                                                                                                                                                              │
│                                                                                                                                                                                                              │
│ ⊷  search_documents (DeveloperKnowledge MCP Server) {"query":"import data into Cloud SQL PostgreSQL"}
 

В процессе выполнения Gemini CLI может запросить выполнение некоторых команд. Например, для лучшего понимания схемы данных и подготовки корректных инструкций для миграции данных.

В итоге необходимо подготовить пошаговую инструкцию по миграции данных.

Затем вы можете попросить Gemini CLI написать инструкцию.

Please write the tutorial down

И это создаст новый файл Markdown с документом, содержащим обучающее видео.

Ожидаемый результат:

✦ I have created a detailed migration guide for you.

  You can find the tutorial in the new file: MIGRATION_GUIDE.md.

  This guide covers:
   1. Exporting your local SQLite data to CSV format.
   2. Creating the PostgreSQL schema with compatible data types.
   3. Uploading data to Google Cloud Storage.
   4. Importing data into Cloud SQL in the correct order to respect relationships.
   5. Resetting ID sequences to ensure new data can be added without errors.

На следующем этапе мы будем работать с Cloud SQL MCP, подготавливая нашу базу данных и осуществляя миграцию данных.

7. Тестирование Cloud SQL Remote MCP

1. Создайте экземпляр Cloud SQL.

Для начала вы можете ознакомиться с доступными инструментами на сервере Cloud SQL MCP, набрав /mcp в командной строке Gemini.

/mcp

В настоящее время нам доступны следующие инструменты.

Ожидаемый результат:

🟢 Cloud SQL MCP Server - Ready (11 tools)
  Tools:
  - clone_instance
  - create_instance
  - create_user
  - execute_sql
  - get_instance
  - get_operation
  - import_data
  - list_instances
  - list_users
  - update_instance
  - update_user

Мы уже решили использовать Cloud SQL for Postgres в качестве бэкенда для нашего приложения в Google Cloud. Теперь мы можем попросить Gemini создать для нас экземпляр Cloud SQL.

В командной строке Gemini CLI введите свой запрос следующим образом:

Please create a Cloud SQL for Postgres instance with appropriate edition and version in the us-central1 region to be a backend for our application with a public IPs in the current project with 2 CPU and 8 GB memory.

Чтобы избежать лишних вызовов для идентификации текущего проекта, вы можете явно указать идентификатор проекта при вводе запроса. Если имя проекта ранее не использовалось в контексте, модель либо запросит идентификатор проекта, либо попросит выполнить команду gcloud для идентификации проекта.

Затем система проанализирует существующие инструменты и запросит разрешение на использование инструментов Cloud SQL MCP. В результате вы должны увидеть следующий запрос на подтверждение.

?  create_instance (Cloud SQL MCP Server MCP Server) {"tier":"db-custom-2-8192","region":"us-central1","project":"gleb-test-short-001-486416","databaseVersion":"POSTGRES_17","edition":"ENTERPRISE","nam... ← │
│                                                                                                                                                                                                              │
│ MCP Server: Cloud SQL MCP Server                                                                                                                                                                             │
│ Tool: create_instance                                                                                                                                                                                        │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "create_instance" from server "Cloud SQL MCP Server"?                                                                                                                            │
│                                                                                                                                                                                                              │
│ ● 1. Allow once                                                                                                                                                                                              │
│   2. Allow tool for this session                                                                                                                                                                             │
│   3. Allow all server tools for this session                                                                                                                                                                 │
│   4. No, suggest changes (esc)
 

После запуска выполнения программа запросит мониторинг состояния операции и возможные запросы на приостановку работы между проверками. Примерно так.

✦ I will wait for 30 seconds before checking the status of the instance creation.
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ⊶  Shell sleep 30 [current working directory /home/gleb/demo]                                                                                                                                                │
│                                                                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
⠋ Refining Instance Configuration (esc to cancel, 11s)

Затем последует инструмент get_operation для Cloud SQL Server MCP.

╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ?  get_operation (Cloud SQL MCP Server MCP Server) {"project":"gleb-test-short-001-486416","operation":"73c39ca7-65fe-46d1-bdb8-0dfa00000032"}                                                             ← │
│                                                                                                                                                                                                              │
│ MCP Server: Cloud SQL MCP Server                                                                                                                                                                             │
│ Tool: get_operation                                                                                                                                                                                          │
│                                                                                                                                                                                                              │
│ Allow execution of MCP tool "get_operation" from server "Cloud SQL MCP Server"?                                                                                                                              │
│                                                                                                                                                                                                              │
│ ● 1. Allow once

После выполнения последнего запроса get_instance вы должны получить информацию о созданном экземпляре. Примерно следующую.

Ожидаемый результат:

✦ I will wait for 30 seconds before checking the status of the instance creation.
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ⊶  Shell sleep 30 [current working directory /home/gleb/demo]                                                                                                                                                │
│                                                                                                                                                                                                              │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
⠋ Refining Instance Configuration (esc to cancel, 11s)

Затем последует вызов инструмента get_operation для Cloud SQL Server MCP и вызов инструмента get_insance MCP. Возможно, вам придется столкнуться с дополнительными проверками и вызовами, выполняемыми Gemini CLI для подтверждения успешного завершения задачи.

The Cloud SQL for Postgres instance allstrides-db has been successfully created in the us-central1 region with 2 vCPUs and 8 GB of RAM.

  Instance Details:
   - Project ID: gleb-test-short-001-486416
   - Instance Name: allstrides-db
   - Public IP Address: 35.226.187.246
   - Database Version: POSTGRES_17
   - Machine Type: db-custom-2-8192 (2 vCPU, 8 GB RAM)
   - Region: us-central1
   - Connection Name: gleb-test-short-001-486416:us-central1:allstrides-db

  The instance is configured with public IP enabled, IAM authentication turned on, and Data API access allowed.

2. Перенос данных

Экземпляр готов, и теперь мы можем продолжить миграцию всех наших данных из существующей базы данных SQLite в новую базу данных в облаке.

В командной строке Gemini CLI введите следующий запрос.

Now when we have our Cloud SQL instance ready it is time to move the data from our local database. Please migrate all the  data to a new database in our Cloud SQL instance where the new user for application would be the database owner? Let's call the new database allstrides-db and the user allstrides. Please use our MCP tools whenever it is possible.

В процессе выполнения Gemini CLI проанализирует нашу модель данных и для этого запросит разрешения на выполнение некоторых команд. Рабочий процесс не является на 100% детерминированным, и некоторые шаги могут отличаться.

Вот пример того, как это может начаться.

Ожидаемый результат:

✦ I will read the allstrides/README.md and allstrides/seed_data.sql files to understand the local database structure and data.
╭──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ ✓  ReadFile allstrides/README.md                                                                                                                                                                             │
│                                                                                                                                                                                                              │
│                                                                                                                                                                                                              │
│ ✓  ReadFile allstrides/seed_data.sql                                                                                                                                                                         │
│                                                                                                                                                                                                              │
╰─────────────────────────────────────────────────────────────────────────

Затем, после нескольких шагов, система использует Cloud SQL MCP для подготовки базы данных, пользователя и, в конечном итоге, миграции данных. Одним из первых действий, выполняемых с базой данных, является добавление вас в качестве пользователя IAM и предоставление вам разрешений на создание базы данных и пользователя. У вас должны быть достаточные привилегии в Google Cloud в качестве пользователя IAM.

Вот пример некоторых этапов рабочего процесса.

Ожидаемый результат:

 ✓  execute_sql (Cloud SQL MCP Server MCP Server) {"project":"gleb-test-short-001-486416","instance":"allstrides-db","sqlStatement":"CREATE DATABASE \"allstrides-db\";","database":"postgres"}               │
│                                                                                                                                                                                                              │
│ {                                                                                                                                                                                                            │
│   "messages": [                                                                                                                                                                                              │
│     {                                                                                                                                                                                                        │
│       "message": "Execution complete. 1 result set(s) returned.",                                                                                                                                            │
│       "severity": "INFO"                                                                                                                                                                                     │
│     }                                                                                                                                                                                                        │
│   ],                                                                                                                                                                                                         │
│   "metadata": {                                                                                                                                                                                              │
│     "sqlStatementExecutionTime": "0.075591388s"                                                                                                                                                              │
│   },                                                                                                                                                                                                         │
│   "results": [                                                                                                                                                                                               │
│     {}                                                                                                                                                                                                       │
│   ]                                                                                                                                                                                                          │
│ }                                                                                                                                                                                                            │
│       

3. Развертывание приложения в облаке.

Теперь база данных создана, и локальные данные приложения перенесены в вашу базу данных CloudSQL. Вы готовы развернуть свое приложение в Cloud Run. Во время развертывания вы будете использовать комбинацию Google Cloud SDK для создания образа в облаке Google, а затем развернете его с помощью Cloud Run MCP.

В командной строке Gemini выполните следующую команду.

Now, when all the data is successfully migrated to our Cloud SQL instance allstrides-db we can migrate our allstrides application to Cloud Run and deploy using my Cloud SQL database. Please put the username and the password for my database user user to Secret Manager to not show openly in Cloud Run.
Let's build the image first and then use MCP to create the Cloud Run service.

В процессе выполнения программа проверит API, подготовит данные для менеджера секретов и создаст необходимые секреты. Также она обновит приложение для работы с базой данных PostgreSQL и добавит необходимые модули npm.

Затем, после создания образа и его размещения в реестре артефактов, используется служба MCP для развертывания приложения в Cloud Run.

Вот пример вызова Cloud Run MCP.

Ожидаемый результат:

✦ I will deploy the 'allstrides' service to Cloud Run using the deploy_service_from_image tool. I will configure the environment variables and map the
  database credentials from Secret Manager. Note that the MCP tool's schema does not explicitly expose the Cloud SQL instance attachment parameter, which is
  typically required for the Unix socket connection (/cloudsql/...) to work. I will proceed with the deployment as requested, but if the database connection
  fails due to the missing instance attachment, we may need to use gcloud to update that specific configuration.


╭───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Action Required                                                                                                                                    1 of 1 │
│                                                                                                                                                           │
│ ?  deploy_service_from_image (CloudRun MCP Server) {"service":{"invokerIamDisabled":true,"name":"projects/gleb-test-short-001-486416/locations/us-centra... │
│                                                                                                                                                           │
│ MCP Server: CloudRun                                                                                                                                      │
│ Tool: deploy_service_from_image                                                                                                                           │
│ Allow execution of MCP tool "deploy_service_from_image" from server "CloudRun"?                                                                           │
│                                                                                                                                                           │
│ ● 1. Allow once                                                                                                                                           │
│   2. Allow tool for this session                                                                                                                          │
│   3. Allow all server tools for this session                                                                                                              │
│   4. No, suggest changes (esc)                                                                                                                            │
│                                                                                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Точный путь выполнения всех операций может меняться от выполнения к выполнению. Агенты ИИ выбирают путь, основываясь на контексте, результатах выполнения команд и множестве других переменных. И в этом заключается сила программного обеспечения на основе ИИ — оно может реагировать, корректировать свой подход и повторять шаги для выполнения задач и достижения успешных результатов.

Теперь ваше приложение Allstrides должно быть развернуто и запущено в Cloud Run и подключено к вашей базе данных Cloud SQL.

Вот что вы, возможно, сможете увидеть в конце.

Ожидаемый результат:

✦ The application allstrides has been successfully migrated to Cloud Run and is connected to the Cloud SQL database allstrides-db.

  Deployment Details:


   * Service URL: https://allstrides-812263612774.us-central1.run.app
   * Database: allstrides-db (PostgreSQL)
   * Database User: allstrides (Password updated and stored in Secret Manager)
   * Secrets: db-user and db-pass are mounted as environment variables.
   * Region: us-central1

  Steps Taken:


   1. Database Configuration:
       * Updated the allstrides database user password.
       * Created db-user and db-pass secrets in Google Cloud Secret Manager.
       * Updated database.ts to support PostgreSQL connections via Cloud SQL socket.
   2. Build:
       * Built the container image gcr.io/gleb-test-short-001-486416/allstrides using Cloud Build.
   3. Deployment:
       * Initiated deployment using the MCP deploy_service_from_image tool.
       * Granted the Secret Manager Secret Accessor role to the Cloud Run service account.
       * Attached the Cloud SQL instance connection using gcloud (as the MCP tool currently lacks this specific configuration parameter).


  The application is now serving traffic and successfully connected to the database.

А когда вы откроете указанный URL-адрес в браузере, вы должны увидеть страницу приложения.

d710de5dbee99720.png

И все наши мероприятия должны быть там доступны для просмотра.

4ae98d3607718794.png

Поздравляем! Вам удалось с помощью Gemini CLI и удаленных сервисов Google Cloud MCP перенести ваше локальное приложение в облако. На этом развертывание завершено, и все ресурсы можно освободить.

8. Очистка окружающей среды

Самый простой способ очистить среду — попросить Gemini CLI удалить все созданные вами компоненты. При этом все ресурсы должны остаться в контексте. Но если по какой-то причине вы вышли из системы и у вас нет сохраненной истории, вы можете попробовать более точно запросить очистку службы Cloud Run, образа и экземпляра Cloud SQL. Для удаления службы необходимо пройти аутентификацию у пользователя с необходимыми правами и использовать команду gcloud.

Вот пример задания.

Now, when we've tested the application can you please delete the created Cloud Run service, the image we've built and the Cloud SQL instance we've created in the project. 

После удаления вы можете использовать удаленные службы MCP для проверки успешного удаления службы Cloud Run или экземпляра Cloud SQL.

Can you please list all Cloud SQL instances in the project and Cloud Run services in the project.

В конце вы должны увидеть сообщение примерно следующего содержания:

Ожидаемый результат:

✦ There are currently no Cloud SQL instances or Cloud Run services (in us-central1) in the project gleb-test-short-001-486416.

На этом этапы лабораторных работ завершаются.

9. Поздравляем!

Поздравляем с завершением практического занятия!

Программа обучения Google Cloud

Что мы рассмотрели

  • Как развернуть и настроить Gemini CLI для работы с удаленными MCP в Google Cloud.
  • Как использовать KnowledgeMCP в разработке
  • Как использовать Cloud SQL MCP для миграции данных в облако
  • Как использовать Cloud Run MCP для развертывания приложения в облаке
  • Как использовать Gemini CLI в Google Cloud Shell

10. Опрос

Выход:

Как вы будете использовать этот учебный материал?

Прочитайте только до конца. Прочитайте текст и выполните упражнения.