Рекомендации по работе с объектным хранилищем S3

Рекомендации по работе с объектным хранилищем S3 для загрузки видеофайлов цифрового следа

S3 (Simple Storage Service) — это протокол доступа к объектному хранилищу, который позволяет хранить и извлекать данные. В нашем случае хранилище используется для размещения видеофайлов, чтобы в дальнейшем передавать ссылки на них в составе xAPI стейтментов цифрового следа.

Для отправки артефактов (в частности, видеофайлов онлайн-трансляций) используется объектное хранилище CLOUD4Y. Объектное хранилище поддерживает протокол доступа Amazon S3 API. В объектном хранилище данные хранятся без иерархии (каждый объект расположен в пуле данных на одном уровне). Доступ к данным возможен через API.

Доступ к s3 предоставляется вместе с доступом к LRS. Если вы получали доступ к LRS ранее, доступ к s3 можно запросить отдельно.

По запросу на доступ к LRS мы также выдаем доступ к хранилищу S3, если его нет — запросите отдельно на apps@2035.university, указав:

1) Полное название проекта

2) Полное название вашей организации

Вам будет предоставлен логин и пароль. Их необходимо использовать для авторизации в личном кабинете веб-версии по ссылке: https://cmc.objstor.cloud4u.com:8443/Cloudian/

Group Name:

Password:

А также User ID, Access Key ID, Secret Key - эти данные необходимы для загрузки файлов на S3-хранилище. Для отправки по API необходимо использовать эндпоинт: https://s3.objstor.cloud4u.com

User ID: -ИМЯ БАКЕТА-

Access Key ID:

Secret Key:

Способ загрузки видео в s3

Ниже представлен рабочий скрипт на Python с использованием библиотеки boto3. Он загружает файл в указанный бакет с правами доступа private.

Необходимо расположить скрипт с расширением .py в той же папке, где будут находится видео на загрузку.

Редактируемые строки:

При использовании скрипта вам нужно заменить четыре параметра:

1. video_file = указать имя вашего локального видеофайла

2. bucket_name = User ID, указать имя вашего бакета в хранилище

3. aws_access_key_id = Access Key ID, ключ доступа, полученный на apps@2035.university.

4. aws_secret_access_key = Secret Key, ключ доступа, полученный на apps@2035.university.

Остальные строки (конфигурация клиента, endpoint, метод загрузки) изменять не требуется.

Скрипт для загрузки видео:

import boto3
from botocore.client import Config
from botocore.exceptions import ClientError
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def upload_file_with_acl(filename, bucket, object_name=None, acl='private'):
    if object_name is None:
        object_name = filename
    s3_config = Config(
        signature_version='s3',
        s3={'addressing_style': 'path'}
    )
    s3_client = boto3.client(
        's3',
        endpoint_url='https://s3.objstor.cloud4u.com',
        region_name='k41',
        aws_access_key_id='-ВАШ Access Key ID-  ',
        aws_secret_access_key='ВАШ Secret Key-',
        verify=False,
        config=s3_config
    )
    try:
        s3_client.upload_file(
            filename,
            bucket,
            object_name,
            ExtraArgs={'ACL': acl}
        )
        print(f"File {filename} uploaded to {bucket}/{object_name}")
        return True
    except ClientError as e:
        print(f"Error: {e}")
        return False
video_file = "ИМЯ ВАШЕГО ФАЙЛА В ФОРМАТЕ .mp4"
bucket_name = "User ID -ИМЯ ВАШЕГО БАКЕТА-"
upload_file_with_acl(video_file, bucket_name)

Формирование ссылки на конкретное, положенное в s3, видео

После успешной загрузки файла, ссылка на него формируется по следующему шаблону:

Ссылка на видео:

https://s3.objstor.cloud4u.com/ИМЯ БАКЕТА (User ID)/НАЗВАНИЕ ВИДЕО.mp4

Прикрепление ссылки на видеоматериал в шаблон "ЦС_Получателя_поддержки_просмотр_видеоконтента"

Шаблон: https://www.postman.com/gold-comet-924936/cs-kb/re...

Ссылка на видео вставляется в цифровой след, в блок attachments.

Ссылка на объект в S3 пишется в поле fileUrl. Это обязательное условие для корректной обработки xAPI стейтмента.

Пример заполненного блока attachments:

"attachments": [
    {
        "usageType": "http://id.tincanapi.com/attachment/supporting_media",
        "display": {
            "ru-RU": "Записанная онлайн трансляция"
        },
        "description": {
            "ru-RU": "Ссылка на запись онлайн трансляции"
        },
        "contentType": "text/html",
        "length": 123456,
        "fileUrl": "https://s3.objstor.cloud4u.com/ИМЯБАКЕТА(User ID)/НАЗВАНИЕ_ВИДЕО.mp4",
        "sha2": "a914802032ce28709ccf566d33cb4c5460a3976a16dcd7e4beb5bfb68191020e"
    }
]

Вопрос: Как проверить, что видео точно лежит в S3 и доступно?

Ответ: Существует два способа проверки.

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

С помощью скрипта: Используйте следующий скрипт для программной проверки наличия файла в бакете. В нем необходимо заменить имя файла и имя бакета на ваши данные, а также подставить свои ключи доступа.

import boto3
from botocore.client import Config
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def check_file_in_bucket(filename, bucket):
    s3_config = Config(
        signature_version='s3',
        s3={'addressing_style': 'path'}
    )
    s3_client = boto3.client(
        's3',
        endpoint_url='https://s3.objstor.cloud4u.com',
        region_name='k41',
        aws_access_key_id='-ВАШ Access Key ID-  ',
        aws_secret_access_key=''ВАШ Secret Key-',
        verify=False,
        config=Config(signature_version='s3v4')
    )
    try:
        response = s3_client.list_objects_v2(Bucket=bucket)
        if 'Contents' in response:
            for obj in response['Contents']:
                if obj['Key'] == filename:
                    print(f" Файл '{filename}' найден в бакете '{bucket}'")
                    print(f"  Размер: {obj['Size']} байт")
                    print(f"  Дата: {obj['LastModified']}")
                    return True
        print(f"✗ Файл '{filename}' не найден в бакете '{bucket}'")
        return False
    except Exception as e:
        print(f"Ошибка: {e}")
        return False
check_file_in_bucket('ИМЯ ВАШЕГО ФАЙЛА В ФОРМАТЕ .mp4', 'ИМЯ ВАШЕГО БАКЕТА')

Вопрос: Что проверить, если видео грузится медленно?

Ответ: В первую очередь необходимо проверить скорость интернет-соединения на стороне того, кто выполняет загрузку.

Рекомендуется:

Использовать проводное подключение вместо Wi-Fi для большей стабильности, а также проверьте, что в вашем регионе временно не снижается скорость

Временно отключить другие программы и устройства, которые могут потреблять много трафика.

Проверить скорость на speed-test сервисах. Если скорость исходящего соединения низкая, проблема на вашей стороне.

Вопрос: Какая скорость загрузки считается приемлемой?

Ответ: Приемлемой считается скорость, позволяющая загрузить файл за время, не превышающее длительность видео более чем в 1.5-2,5 раза. Для файла размером 1 Гб (примерно 1 час видео в среднем качестве) при скорости интернета 10 Мбит/с загрузка займет около 12-20 минут, что является нормальным показателем. Ориентируйтесь на стабильность соединения и разумное время ожидания.