VK Cloud logo

Создание файлового сервиса с Foundation Models и MCP

С помощью VK Object Storage можно создать файловый сервис, где объектное хранилище выступает основной системой хранения данных, а Foundation Models и MCP (Model Context Protocol) ускоряют разработку и деплой приложения. VK Object Storage обеспечивает S3-совместимый API, что позволяет использовать стандартные SDK (например, Boto3 для Python) для загрузки, скачивания и управления файлами.

Для примера далее используются следующие данные:

  • Имя бакета: ai-file-service-bucket
  • Регион: ru-msk (Москва)
  • Endpoint URL: https://hb.ru-msk.vkcloud-storage.ru
  • S3-ключи: <ACCESS_KEY> и <SECRET_KEY>

Подготовительные шаги

  1. Создайте аккаунт для сервиса VK Object Storage, если это еще не сделано:

    1. Перейдите в личный кабинет VK Cloud.

    2. Выберите проект.

    3. Перейдите в раздел Object StorageАккаунты.

    4. Нажмите кнопку Добавить аккаунт или Добавить.

    5. Задайте имя аккаунта.

    6. Нажмите кнопку Создать.

    7. В открывшемся окне скопируйте и сохраните идентификатор ключа доступа (Access Key ID) и секретный ключ (Secret Key).

  2. Создайте бакет ai-file-service-bucket в регионе Москва.

  3. Убедитесь, что AWS CLI установлен и настроен для работы с созданным аккаунтом VK Object Storage.

  4. Укажите в конфигурации данные для подключения к бакету:

    [default]region = ru-mskoutput = jsons3 =    addressing_style = path
  5. Убедитесь, что у вас установлен Python 3.10+ и пакетный менеджер pip.

  6. Установите Boto3 — официальный SDK для Python:

    pip install boto3
  7. Убедитесь, что у вас есть доступ к Foundation Models и MCP-серверу VK Cloud.

1. Сгенерируйте приложение с помощью Foundation Models

Используйте Foundation Models для генерации каркаса файлового сервиса. Сформулируйте промпт для модели, описывающий задачу: веб-приложение на Python (Flask/FastAPI) с функциями загрузки, скачивания и получения ссылок на файлы, хранящиеся в S3-совместимом хранилище.

Пример промпта для Foundation Models:

Создай веб-приложение на Python (FastAPI) для файлового сервиса.Приложение должно:- Принимать файлы через HTTP POST-запрос и загружать их в S3-совместимое хранилище (Boto3).- Возвращать список загруженных файлов.- Генерировать presigned URL для скачивания файлов.- Использовать переменные окружения для конфигурации (endpoint, access key, secret key, bucket name).

Сохраните сгенерированный код в директорию проекта, например ai-file-service/.

2. Настройте загрузку файлов в VK Object Storage

Настройте приложение для работы с VK Object Storage через Boto3. Инициализируйте S3-клиент, явно указав endpoint_url и region_name, чтобы избежать попыток SDK подключиться к стандартным эндпоинтам AWS.

Пример инициализации клиента Boto3:

import boto3from botocore.client import Configimport os# Учетные данные и параметры из переменных окруженияaccess_key = os.environ.get('S3_ACCESS_KEY')secret_key = os.environ.get('S3_SECRET_KEY')endpoint_url = os.environ.get('S3_ENDPOINT_URL', 'https://hb.ru-msk.vkcloud-storage.ru')region_name = os.environ.get('S3_REGION', 'ru-msk')bucket_name = os.environ.get('S3_BUCKET_NAME', 'ai-file-service-bucket')# Инициализация клиента S3s3_client = boto3.client(    's3',    endpoint_url=endpoint_url,    aws_access_key_id=access_key,    aws_secret_access_key=secret_key,    region_name=region_name,    config=Config(s3={'addressing_style': 'path'}, request_checksum_calculation="when_required", response_checksum_validation=None))

Пример функции загрузки файла в бакет:

def upload_file(file_data: bytes, object_key: str) -> str:    """Загружает файл в VK Object Storage и возвращает ключ объекта."""    s3_client.put_object(        Bucket=bucket_name,        Key=object_key,        Body=file_data    )    return object_key

Пример функции генерации presigned URL для скачивания файла:

def generate_download_url(object_key: str, expiration: int = 3600) -> str:    """Генерирует presigned URL для скачивания файла."""    url = s3_client.generate_presigned_url(        'get_object',        Params={'Bucket': bucket_name, 'Key': object_key},        ExpiresIn=expiration    )    return url

Пример функции получения списка загруженных файлов:

def list_files() -> list:    """Возвращает список объектов в бакете."""    response = s3_client.list_objects_v2(Bucket=bucket_name)    if 'Contents' in response:        return [obj['Key'] for obj in response['Contents']]    return []

Настройте переменные окружения для приложения:

export S3_ACCESS_KEY=<ACCESS_KEY>export S3_SECRET_KEY=<SECRET_KEY>export S3_ENDPOINT_URL=https://hb.ru-msk.vkcloud-storage.ruexport S3_REGION=ru-mskexport S3_BUCKET_NAME=ai-file-service-bucket

3. Проверьте хранение файлов и получение ссылок

Запустите приложение локально и проверьте работу с VK Object Storage.

  1. Запустите приложение:

    cd ai-file-serviceuvicorn main:app --host 0.0.0.0 --port 8000
  2. Загрузите тестовый файл через HTTP-запрос:

    curl -X POST http://localhost:8000/upload \  -F "file=@test-document.txt"
  3. Убедитесь, что файл появился в бакете, с помощью AWS CLI:

    aws s3 ls s3://ai-file-service-bucket --endpoint-url https://hb.ru-msk.vkcloud-storage.ru
  4. Запросите presigned URL для скачивания файла:

    curl http://localhost:8000/download-url/test-document.txt
  5. Скачайте файл по полученной ссылке и убедитесь, что содержимое совпадает с оригиналом.

4. Подключите MCP-сервер

MCP (Model Context Protocol) позволяет автоматизировать сборку и деплой приложения. Подключите MCP-сервер к вашему проекту, чтобы управлять инфраструктурой VK Cloud через единый интерфейс.

  1. Установите MCP-клиент и настройте подключение к MCP-серверу VK Cloud.
  2. Настройте MCP-сервер для работы с VK Object Storage: укажите endpoint URL, ключи доступа и имя бакета ai-file-service-bucket в конфигурации MCP.
  3. Убедитесь, что MCP-сервер имеет доступ к ресурсам VK Cloud: может создавать и управлять контейнерными приложениями, читать конфигурацию бакетов.

5. Выполните сборку и деплой приложения в Container Apps через MCP

Используйте MCP для автоматизации сборки Docker-образа и деплоя приложения в Container Apps.

  1. Создайте Dockerfile для приложения:

    FROM python:3.12-slimWORKDIR /appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
  2. Создайте файл requirements.txt:

    fastapiuvicornboto3python-multipart
  3. Через MCP-сервер выполните сборку образа и деплой в Container Apps.

  4. Передайте переменные окружения в контейнерное приложение:

    • S3_ACCESS_KEY<ACCESS_KEY>
    • S3_SECRET_KEY<SECRET_KEY>
    • S3_ENDPOINT_URLhttps://hb.ru-msk.vkcloud-storage.ru
    • S3_REGIONru-msk
    • S3_BUCKET_NAMEai-file-service-bucket

6. Проверьте работу приложения и хранение данных в VK Object Storage

  1. Получите URL развернутого приложения из Container Apps.

  2. Загрузите тестовый файл через развернутое приложение:

    curl -X POST https://<URL_ПРИЛОЖЕНИЯ>/upload \  -F "file=@test-document.txt"
  3. Убедитесь, что файл появился в бакете ai-file-service-bucket:

    aws s3 ls s3://ai-file-service-bucket --endpoint-url https://hb.ru-msk.vkcloud-storage.ru
  4. Запросите список файлов через API приложения:

    curl https://<URL_ПРИЛОЖЕНИЯ>/files
  5. Получите presigned URL и скачайте файл, чтобы убедиться в корректной работе хранилища:

    curl https://<URL_ПРИЛОЖЕНИЯ>/download-url/test-document.txt
  6. Скачайте файл по полученной ссылке и проверьте содержимое.

Удалите неиспользуемые ресурсы

Созданные ресурсы тарифицируются. Если они вам больше не нужны:

  • Удалите контейнерное приложение в Container Apps.
  • Удалите бакет ai-file-service-bucket.