S3 хранилище - Лучший способ хранить файлы на бэкенде | Как работать с S3 через Python
HTML-код
- Опубликовано: 26 май 2024
- 💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gxT 💡
S3 - один из самых популярных способов хранить файлы на Backend'е. Расскажу, что это и как работать с S3 хранилищем.
Хранилище S3 из видео: slc.tl/wo36m
Подробнее об акции с кэшбэком на S3: slc.tl/zbcv0
Предзапись на курс по поиску работы разработчику и техническим навыкам для Middle: forms.gle/Zw7bPnQvTsfekVH47
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Код из видео найдете здесь: t.me/artemshumeiko/112
Пост в телеграме с реальными вилками на Middle/Senior разработчиков - подписывайся: t.me/artemshumeiko/93
Вступай в Python сообщество: t.me/python_community_rus
0:56 - S3 это не только Amazon!
1:16 - S3 дает плюс к резюме
1:51 - Применение и преимущества S3
3:58 - Универсальный скрипт для работы с S3 на Python
10:18 - Создаем объектное хранилище в Selectel
12:17 - Загружаем файлы в S3
15:42 - Загружаем видео в S3
16:56 - Создаем сайт для получения файлов из S3 хранилища
19:31 - Как создать приватное холодное S3 хранилище
21:06 - Сколько стоит S3 хранилище
💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot
Ну вот! Умеешь могешь! Вот за такие ролики я и обожаю этот канал )
Жду с нетерпением разбора!
Артём спасибо вам за разбор темы!
Мысли в слух:
S3 и приватные данные - не совместимые понятия)))
Как только мы загружаем приватные данные во внешнее хранилище которое мы не контролируем - они перестают быть приватными)))
GPG и его папа PGP передают привет. Бэкапы и приватную инфу нормальные (в лучшем смысле этого слова) люди льют в зашифрованном виде. А ещё эти нормальные люди почту шифруют и не удивляются новостям, что (внезапно) эти сервисы (естественно, бездушными роботами) читают почту пользователей.
Всегда удивлялся людям, которые топят за облачные сервисы.
@@__username__ Ага, люди в пагонах передают пламенный привет всем, кто использует не сертифицированные СКЗИ )
@@user-br7bh6vh8y Да пусть хоть запередаются. Если вы не входите в КИИ, то вам эти СКЗИ до ПЗД.
@@kirshkro Облачные сервисы - это хорошо. Но если это использовать аккуратно и не доводить ситуацию до вендорозависимости.
Ты прямо Бог!
Супер, молодец.
Использую google storage внутри firebase. Храним гигабайты данных на нашем видео в хостинге внутри нашей музыкальной школы. Но самое главное, это не только дешево, а еще и доступ к любому файлу можно завязать с авторизацией😊
На мой взгляд, хранилища типа S3 отлично подходят, например для того, чтобы фотографии пользователей хранить - или любых других ФАЙЛОВ, которые не жалко потерять и для которых не хватает места на основных серверах.
А основную БД лучше держать на выделенном сервере (а вот бекапы уже выгружать в холодное хранилище - отличный вариант!)
А почему вдруг фотографии пользователя это данные которые не жаль потерять? Клиент вам спасибо за такое точно не скажет...
7:17 когда говорят о загрузке на S3, почему-то редко вспоминают такую штуку, как подписанные URL-ы. Суть в том, что бекенд с помощью своих секретов от S3 подписывает специально сформированный URL, отдаёт его фронтенду, а фронт уже сам туда заливает нужный файл. Это экономит ресурсы бекенда и время пользователя. При этом у подписи есть срок жизнь (до семи дней), то есть, URL сам отключается и не даёт заменить данные. Плюс можно ограничить размер заливаемого файла, чтобы особо ушлые пользователи не слили весь ваш бюджет на хранение. Плюс в тот же URL можно зашивать кастомные теги, которые будут проставлены на файл после заливки (и пользователь не сможет их подменить, потому что они защищиены подписью). В общем, очень недооценённая функциональность.
Как же ты вовремя, лайк
Привет! Нравится смотреть твои видео, хорошая подача материала. Сам сейчас работаю backend Java разработчиком, начинал с python fast API. Здорово, что ты подсвечивает технологии, которые независимы от языка.
Также хочу предложить идею рассказать про распределенные транзакции, саги и тому подобное, поскольку грамотное построение межсервисного взаимодействия мало подсвечено на ютубе. Тема скорее уже ближе к мидлу условному, однако базовые моменты был бы рад увидеть в твоём видео.
Нравятся твои видео, да и "Самокат" тоже. Лайк, положительный комментарий, все дела:)
спасибо!
2:10 Ага. Да хоть в 10 - Гугл тут недавно взял и потёр все копии крупнейшего пенсионного фонда Автралии. Хорошо там были бэкапы НЕ в гугле :)
прочитал - грустная история :(
@@artemshumeiko
Поэтому лучший девопс - девопс параноик! :)
Это всё же человеческий фактор был, от него, увы, никто не застрахован!
@@saitaro- да-да, именно везде человеческий фактор… ну что поделаешь: живём среди людей)
Ну это круто, спасибо!) как в кассу вышел видос с тем, что мне в моем проекте надо сделать s3))) оп оп и готово
Спасибо
Спасибо за оочень качественный контент! 🔥
Видос супер. Спасибо ! Но микрофон чуть подальше, а то такое ощущение, что ты на ушко шепчешь
Отлично показано, наглядно!
Отличное вводное видео! пара вопросов, как тестировать работу с s3 моками? и как например защищаться от каких нибудь ддос атак, что бы нам все деньги не скушали? и будет ли продолжение?
Гуглится на первой строчке
Еще бы вкратце про ролевую модель рассказал, вообще огонь было бы)
спасибо, выглядит просто и понятно! будем пробовать селектел
Я сейчас пишу сервис кое какой в тг, пока не знаю как мне может пригодится это видео, но на всякий случай закинул в папку с тестами))
Запомните!!! Хоть Z7. Свои Данные хранить у Дяди сема супер небезопасно.😎☝️
Тебя свои же быстрее посадят , чем «дядя сема»
Для бэкапа можно использать rclone и не нужно писать никакого кода, нужно только настроить подключение и запускать команду rclone по расписани.
Расскажи про miniio
Надо было на пару дней раньше залить и отправить в сдек
Как насчёт ipfs?
О, реклама селектел подъехала =)
По опыту, в хорошей СУБД вообще никаких проблем с хранением файлов нет. На примере того же MS SQL Server, даже не обязательно FILESTREAM мутить. 70 ГБ прекрасно работало без падения производительности на HDD. На SSD теперь это и подавно не актуально. Если есть беспокойство за таблицы, просто выносите в отдельную а-ля словарь или типа того и в отдельный MDF размещайте.
S3 это интересно, но считайте деньги и >реальную< целесообразность.
70 Gb - это смешной размер базы просто, вот у вас там поэтому что-то и работает. У нас центральный даталейк на постгрюхе 40+ Tb, а в S3 вообще сотни... На MS SQL построено несколько DWH 1-3Tb каждая. Как только у вас файлов будет приличное кол-во, никакой filestream вас не спасет, а использование блобов для хранения файлов в реляционной базе вообще антипатерн.
@@Mikluxa.Maklai так, о том и речь! Если у вас уже серьезный большой размер базы данных всё это имеет смысл, а если у вас до 500 ГБ и/или малое количество запросов, то смысла не имеет морочиться с этими облачными хранилищами, разве только если хотите потратить деньги. Никаких антипаттернов - база данных для того и есть, чтобы в ней хранить данные и обеспечивать их ЦЕЛОСТНОСТЬ (важно), реляционная она или ещё какая - это просто модель.
Как обеспечить целостность данных при бэкапе БД на связке БД + S3?
Какой микрофон у тебя Артем
а что думаешь насчет шифрования чувствительных данных перед отправкой на S3? нужно/не нужно?
Никогда не будет лишним. Тут вопрос доверия к провайдеру хранилища.
Ну не приучайте пользователей хранить секртные ключи в таком виде же!
я не хочу записывать часовые видосы
Неужели тот, кто пришёл смотреть как прикрутить S3, не знает, как правильно хранить ключи?)
@@artemshumeiko не думаю, что видео станет часовым, если ты покажешь как не хардкодить ключи в код.
@@CTPEJIKuH Не будь душнилой
@@CTPEJIKuHзапиши ролик и узнаем
Привет, круто, спасибо
s3 хранилище действительно очень актуально на рынке, и нужно знать не только разработчикам и архитекторам, но и другим специалистам (аналитикам, тестировщикам, девопсам).
Хорошо бы еще увидеть как можно с этим работать, на примере какой ни будь тривиальной задачи, например хранение фотографии профиля пользователя (на фронте загрузили, на бэкенде сохранили в s3, получили ссылку на этот файл в хранилище, сохранили ее в связке с пользователем и потом отображаем фото по ссылке из s3).
вот тебе и проект, чтобы потренироваться
А если с java работаю то там тоже любая библиотека для amazon будет работать с selectel или timeweb cloud например?
Да, у них протокол работы один и тот же - S3
Только неделю назад подключат s3 от яндекса к джанге. Жаль это видео вышло только сейчас. До этого была проблема вообще понять как файлы то хранить
а что будет с курсом по fasapi после мая? планируется ли его обновление?
после мая курс будет недоступен для продажи никогда, то есть не будет такого, что через несколько месяцев я вернусь с обновленной версией текущего курса
@@artemshumeiko а если знаешь только джанго с его DRF, то работы тоже хватает?
Добрый день!
Хорошее видео, но тег для img ( 17:30 ) пишется без знака `/`
Только почему ты в асинхронную функцию засовываешь синхронную с открытием файла
Разве можно найти работу сейчас, зная только fastApi, или как конфиг s3 заполнить?
Хотя может и можно, некоторые кроме reactJs ничего не знают, и работают же.
У меня возникала ошибка SSL: CERTIFICATE_VERIFY_FAILED, после установки пакета "certifi", ошибка пропала
За год в финтехе технически получил миддла, но если честно понимаю, что торопился. Твои видео как глоток воздуха) спокойно применяю на пет проекте с пользователями 100+ сотрудников, переписываю то что писал еще стажёром 😁
А какой вариант приватности выбирать для голосовых сообщений? На сайте есть чат с голосовыми сообщениями. Для фоток публичный окей, а как быть с голосовыми? Они тоже пока что на публичном и для имени генерится uuid, и методом перебора ссылку фиг получить, но все же. Для приватного как получать всегда ссылку? Чтобы получать ссылку на аудио только через бек ?
да, получать ссылку только через бэк
Можешь подсказать, как получать на бэкенде ссылку на файл при загрузке в приватный бакет?
Не показано как динамически получить ссылку на файл (через бэкэнд, а не Ctrl+C & Ctrl+V). Если уж делать страничку, то делать с загрузкой файла через фронтенд.
Владельцы сервиса могут сливать приватные данные, это тоже нужно учитывать.
что за тема в PyCharm
Для тестовой локальной работы с s3 хранилищем есть смысл использовать minio - чтобы трафик не оплачивать.
все так, но 100 рублей как будто не деньги :) учитывая, что не придется париться с развертыванием
какой ИИ помощник используешь в IDE?
никакой
это PyCharm Professional
Это copilot, встроенный в IDE.
Где купить это хранилище, именно через Амазон сервисы? (В России)
Если под «в России» вы имеете в виду, что нужно хранение на территории России, то никак, у Амазона нет дата-центров в России. Посмотрите на любой российский вариант, сходу могу вспомнить Яндекс, Selectel, Timeweb. С точки зрения кода и архитектуры разница близка к нулю. А если имеется ввиду оплата из России (а хранение в Европе или где-то ещё), то можно попробовать завести карту в банке Армении или Казахстана.
Отличный материал бро! Удивился почему у меня не был ыключен колокольчик на тебя. Исправил это упущение
❤️🔥
Можете подсказать, как решить ошибку? raise SSLError(endpoint_url=request.url, error=e)
botocore.exceptions.SSLError: SSL validation
Такая же ошибка
попробуйте указать verify=False внутри функции create_client, либо расширив self.config ключом "verify": False
Может кто знает, можно ли в label studio подключить S3 не от amazon? В настройках именно написано AWS S3
Можно. Тебе подойдет любой провайдер S3. Так как при настройке ты просто указываешь ключи доступа, endpoint url, и регион. Всю эту информацию ты можешь получить от своего провайдера. И это будет работать так как API совместимы между собой. В документации label studio написано как подключать (сразу можешь перейти к подключению, а не настройке S3 бакета)
@@user-ev8bw9eu4v Спасибо за ответ
Так-то интересно, но без cdn все это не особо имеет смысл. Может сделаете видео с cdn?
Обычно провайдер предоставляет доступ на запись по с3, а чтение - через хттп. Вся сидиэнка там. Поэтому приложению не нужно подключаться по с3, выкладКа через файловый менеджер
Это если речь про статику. А пользовательский контент (или сгенерированный специально для пользователя) надо всё-таки через S3 заливать.
А есть возможность через API подгружать с файлами доп.информацию, типа теги, описание и прочие и соответственно потом выкачивать из хранилища файлы по своим критериям?
Так локально в базе сохраняй название файла и данные о нём, а потом в базе ищешь по критериям и подгружаешь из хранилища по названию
Навесить теги можно, но поиска по ним нет. Можно только получить информацию о файле, а в ней теги. Так что да, если нужен поиск, то хранить у себя в базе ссылки и всю нужную мета-информацию.
Это что за 1 терабайт мне каждый месяц платить по 2500 рублей ? Так я могу просто купить себе диск, и поставить MinIO.
скиньте плиз где купить терабайт жесткого диска. Без шуток, мне казалось, это дорогое удовольствие сравнимое с s3
Флешбеки из конца 90х, платный траффик 😮
Спасибо! А как получить ссылку на загруженный файл, чтобы сохранить себе в базу?
по сути это не нужно делать, достаточно хранить название файла, например, мы храним картинку кота в S3 по адресу /img/cat.jpg -> достаточно хранить только этот адрес. А сам домен, по которому живут картинки, у нас находится всегда в переменных окружения, и мы просто подставляем его и приклеиваем адрес картинки
@@artemshumeiko неделю назад как раз подрубил s3 от timeweb. долго ломал голову как же получить ссылку на файл после загрузки. В итоге тупо стал хранить название файла в бд и строить ссылку s3_link/file_name. сейчас вижу что это правильное решение)
@@artemshumeikoАртем, спасибо, если можно, уточняющий вопрос еще.
Я, загрузив файл в S3-хранилище, хочу затем пульнуть его в тг-канал как ссылку. Как мне сформировать эту ссылку, из какой переменной окружения взять первую часть url?
И обязательно ли для этого бакет должен быть публичным?
Центр защиты персональных данных плачет в стороне при виде S3
ну хз, все подобные хранилища соответствуют 152-ФЗ
я работаю в Самокате и мы активно юзаем S3 Селектела, поэтому считаю, что все норм с S3 хранилищами
p.s. на прошлой работе тоже юзали S3 крупного российского провайдера
@@artemshumeiko все верно оно соответствует требованиям, но при построении информационной системы безопасности в компании тянет за собой много дорогостоящих нюансов
Так а чем отличается S3 от облачного хранилища? Зачем было называть другим названием?
Добра , подойдет ли S3 для доски объявлений(типо авито,юла)?
да, конечно
Хранилище и хранилище. Как показывает опыт, никто лучше кроме вас не позаботиться о сохранности данных. У всех рано или поздно бывают факапы и за те копейки что стоит хранилище, никто ничего не восстановит. S3 увы, это никакая не волшебная палочка-выручалочка.
а вы что стали бы использовать?
@@artemshumeiko для начала локально хранить можно. Необходимость в сетевом хранилище возникает как только приложение начинает реплицироваться на несколько серверов, чтобы сделать его единым для всех. Вместо S3 может использоваться сетевой диск. В целом остаётся открытым вопрос резервного копирования содержимого такого хранилища.
разве если бд не на своем сервере, не будут ли задержки большие в запросах?
будут конечно, но хранить в базе файлы -- такое себе занятие. Нужно руками настраивать бэкапы отдельно файлов, отдельно данных в базе, настраивать шардирование, т.к. база не резиновая явно, а файлы много места занимают, выстраивать доступы до конкретных файлов, настраивать cdn для быстрой отдачи файлов по миру. Представьте, что нужно хранить паспортные данные, фото котиков, аватарки, сканы документов и доступ до всех файлов нужно выдавать конкретной команде/департаменту. Так еще чтобы можно было удобно в веб-панели ими управлять..
Вот тут и приходит на помощь S3 :)
@@artemshumeiko ну это да, просто насколько я знаю все стремятся задержки как можно больше сокращать, а такое обращение к внешним ьд помешает этому, а так спасибо!
никогда не храните файлы в БД. БД не для того придумана
@@shetiashcroft а где хранят файлы? даже интересно стало
@@user-jf8fp2um9s на диске ну и S3 никто не отменял
Если смысл хранить на s3 личные фотографии вместо купленного места, например на том же яДиск?
не имеет, как пользователю удобнее использовать ядиск, мэил облако и т.п.
если говорим про работу с файлами через api, то s3 удобнее
Спасибо за информацию, похоже на то же самое облако диски, только возможности поинтереснее, только вот паспортные данные я бы побоялся там хранить и прочею конфиденциальную информацию, сломают селектейл и все данные утекут, а для хранения личных данных отвечает компания которая продает услуги и берет эти данные под свою ответственность.
а где компании хранить такие данные?
свое s3 хранилище поднимать, бэкапить и поддерживать? звучит как куча денег впустую
@@artemshumeiko а какой ещё выход? Допустим те же банки хранят всё данные у себя на серверах, и имеют сертификацию PCI dss, и те же самые паспортные данные, когда их отправляют на s3 по факту нарушают закон о передачи данных 3лицам, если это не прописано в договоре оказания услуг, тут одно из двух такие данные всё же хранить у себя или иметь нужный договор оказания услуг, и то и то дорого может обойтись
так все s3 соответствуют 152 фз
если данные утекут, виноват провайдер
Что-то я не помню, чтобы хоть кто-то понёс реальное наказание за утечку персональных данных пользователей. У того же СДЕК-а уже как минимум второй раз крадут данные, и что-то тихо всё.
Но вообще можно подумать над end-to-end шифрованием: шифруешь файл на своём бекенде, на S3 загружаешь шифрованный файл. При необходимости скачиваешь и расшифровываешь тоже у себя на бекенде. Детали зависят от условий задачи.
Стал умнее, узнал много новых русских слов. Больше понравилось "чанки")))
У меня коллега так называла контейнер для еды.
А есть локальные s3 хранилища? Тип хранить всё на своей машине
Есть популярная opensource реализация - Minio
Не досмотрел до конца. Как только услышал, что вроде бы специалист топит за то чтобы хранить приватные данные в облаке. Да еще и сам об этом заявил, что на прошлой работе так делал... слышал бы сейчас его мой куратор по инфо-безопасности... Приватные данные, на то и приватные, что хранятся приватно. А для всего остального Google Workspace например, дешево и удобно по сервисам. Для командных проектов нужна система контроля версий, коих сейчас много, на вкус и цвет, как говорится.
Технология эта уже старая, если не ошибаюсь уже 17 лет как, в России опять пытаются вчерашний велосипед продать как завтрашний байк... Извиняюсь, но по мне, тема не раскрыта, да и технически тухло, все показано методом тыка и ухтышки.
хайп? хабр?
на днях один инженер жаловался на поддержку selectel по s3. судя по тексту, челу не положили батареек в комплект, и его бэкапы распухли
Ага, облака)) облака надежды и вечные, поверьте свои данные третьим лицам)) если работаете над чем то серьезным то ничего не должно покидать ваш контур. Баловство все это, если не хуже.
У меня в компе 4 диска, файлы хранятся зеркально на всех. Если у тебя 10гб хранилище, то проще хранить, как у меня. Вот если большие объемы то там уже надо думать.
10гб проще хранить в голове :)
Вопрос хранения - это всегда вопрос баланса между стоимостью и допустимыми рисками) RAID массив спасёт от отказа одного из дисков, но не спасёт от пожара, наводнения и других физических угроз серверу. Облачное хранение покрывает эти риски, но добавляет другие, вроде разорения твоего провайдера или санкций. Эти риски покрываются использованием нескольких облаков. В общем, всё зависит от того, какие данные нужно хранить.
Лучше локального рейда еще ничего не придумали)
Да! Технически всё красиво и может работать! Но для бизнеса это ж... 😅
Зачем это, если всё можно хранить на своём ПК? Купить отдельный диск, или два, если очень хочется.
речь про создание проекта, который работает 24/7
Разве можно хранить персональные данные россиян на s3?
да, все хранилища соответствуют 152 ФЗ о персональных данных
Хранить можно что угодно, но большие компании в 99,9999998% не дадут использовать ничего кроме своих серверов
На сервере такие аплоуды в таски наверное имеет смысл закидывать
Санкции не позволят обновить жесткие диски на s3 и данные нельзя будет восстановить.
чего?)
@@artemshumeiko я про отечественные сервисы
@@pom001 контрабанду никто не отменял) Сервисы останутся, просто в какой-то момент цена начнёт расти.