S5Cmd - S3 на стеройдах
Сегодня расскажу про проект
S5Cmd - отличный open source инструмент (изначально написанный ребятами из
Peak Games) для ускорения и кастомизации процессов между S3 и локальной файловой системой. Три ключевых момента:
- скорость - S5Cmd написан на Go, максимально использует возможности параллельной обработки и
transfer acceleration; собственно
perfomance тесты есть на странице проекта (и ниже напишу свои результаты)
- привычная работа по маске (wildcard support); без всех этих exclude и include, которыми оперирует aws-cli
- работа в пакетном режиме на основе текстового командного файла либо pipe конвеера, что открывает произвольные
варианты интеграции с unix shell
Чтобы не быть голословным, приведу результаты локального теста. Исходные установки: есть бакет, в котором хранятся разбитые по датам данные нескольких проектов. То есть s3://bucket-name/YYYY/MM/DD/prj1..., prj2..., и т.д. Каждый проект состоит из нескольких файлов. Копирую себе данные за один день по одному проекту:
1. В aws-cli это выглядит так:
s3 cp s3://bucket-name/2020/09/27/ ./ --exclude "*" --include "prj1*" --recursive
- минута и 43 секунды. Замечу, что несмотря на плоскую структуру внутри дня, без recursive не обойтись
2. В s5cmd это выглядит лаконичнее:
cp 's3://bucket-name/2020/09/27/prj1*' ./
- 37 секунд - в три раза быстрее
Дополнительно попробовал batch-режим, собрав предварительно с помощью ls и awk файл, где каждая строка - это копирование одного объекта. Здесь получилось 54 секунды за счёт какой-то задержки на старте (видимо файл парсится во внутреннюю структуру для исключения конфликтов, например сочетания команд копирования и удаления). Однако это всё равно довольно хорошо, если использовать командный файл по назначению - как сценарий разнородных действий.
Рекомендую присмотреться, если у вас есть соответствующие задачи (например, работа с данными s3 на серверной стороне за рамками AWS-инфраструктуры). Авторы из Amazon инструмент также
хвалят.