Создание файлового сервиса с 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>
-
Создайте аккаунт для сервиса VK Object Storage, если это еще не сделано:
-
Перейдите в личный кабинет VK Cloud.
-
Выберите проект.
-
Перейдите в раздел Object Storage → Аккаунты.
-
Нажмите кнопку Добавить аккаунт или Добавить.
-
Задайте имя аккаунта.
-
Нажмите кнопку Создать.
-
В открывшемся окне скопируйте и сохраните идентификатор ключа доступа (Access Key ID) и секретный ключ (Secret Key).
-
-
Создайте бакет
ai-file-service-bucketв регионе Москва. -
Убедитесь, что AWS CLI установлен и настроен для работы с созданным аккаунтом VK Object Storage.
-
Укажите в конфигурации данные для подключения к бакету:
[default]region = ru-mskoutput = jsons3 =addressing_style = path -
Убедитесь, что у вас установлен Python 3.10+ и пакетный менеджер
pip. -
Установите Boto3 — официальный SDK для Python:
pip install boto3 -
Убедитесь, что у вас есть доступ к Foundation Models и MCP-серверу VK Cloud.
Используйте 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/.
Настройте приложение для работы с 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
Запустите приложение локально и проверьте работу с VK Object Storage.
-
Запустите приложение:
cd ai-file-serviceuvicorn main:app --host 0.0.0.0 --port 8000 -
Загрузите тестовый файл через HTTP-запрос:
curl -X POST http://localhost:8000/upload \-F "file=@test-document.txt" -
Убедитесь, что файл появился в бакете, с помощью AWS CLI:
aws s3 ls s3://ai-file-service-bucket --endpoint-url https://hb.ru-msk.vkcloud-storage.ru -
Запросите presigned URL для скачивания файла:
curl http://localhost:8000/download-url/test-document.txt -
Скачайте файл по полученной ссылке и убедитесь, что содержимое совпадает с оригиналом.
MCP (Model Context Protocol) позволяет автоматизировать сборку и деплой приложения. Подключите MCP-сервер к вашему проекту, чтобы управлять инфраструктурой VK Cloud через единый интерфейс.
- Установите MCP-клиент и настройте подключение к MCP-серверу VK Cloud.
- Настройте MCP-сервер для работы с VK Object Storage: укажите endpoint URL, ключи доступа и имя бакета
ai-file-service-bucketв конфигурации MCP. - Убедитесь, что MCP-сервер имеет доступ к ресурсам VK Cloud: может создавать и управлять контейнерными приложениями, читать конфигурацию бакетов.
Используйте MCP для автоматизации сборки Docker-образа и деплоя приложения в Container Apps.
-
Создайте
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"] -
Создайте файл
requirements.txt:fastapiuvicornboto3python-multipart -
Через MCP-сервер выполните сборку образа и деплой в Container Apps.
-
Передайте переменные окружения в контейнерное приложение:
S3_ACCESS_KEY—<ACCESS_KEY>S3_SECRET_KEY—<SECRET_KEY>S3_ENDPOINT_URL—https://hb.ru-msk.vkcloud-storage.ruS3_REGION—ru-mskS3_BUCKET_NAME—ai-file-service-bucket
-
Получите URL развернутого приложения из Container Apps.
-
Загрузите тестовый файл через развернутое приложение:
curl -X POST https://<URL_ПРИЛОЖЕНИЯ>/upload \-F "file=@test-document.txt" -
Убедитесь, что файл появился в бакете
ai-file-service-bucket:aws s3 ls s3://ai-file-service-bucket --endpoint-url https://hb.ru-msk.vkcloud-storage.ru -
Запросите список файлов через API приложения:
curl https://<URL_ПРИЛОЖЕНИЯ>/files -
Получите presigned URL и скачайте файл, чтобы убедиться в корректной работе хранилища:
curl https://<URL_ПРИЛОЖЕНИЯ>/download-url/test-document.txt -
Скачайте файл по полученной ссылке и проверьте содержимое.
Созданные ресурсы тарифицируются. Если они вам больше не нужны:
- Удалите контейнерное приложение в Container Apps.
- Удалите бакет
ai-file-service-bucket.