Регулирование команд S3 с помощью aws cli

Я запускаю сценарий резервного копирования с помощью AWS CLI для выполнения команды синхронизации S3 каждую ночь на моем сервере MediaTemple. Это работает без сбоев в течение нескольких месяцев, но я обновил свою установку Plesk, и теперь каждую ночь, когда запускается сценарий резервного копирования, MediaTemple отключает мой сервер из-за чрезмерного использования. Границы, которые я, кажется, пересекаю, следующие:

RESOURCE INFO:
Packets per second limit: 35000
Packets per second detected: 42229.11667000000306870788
Bytes per second limit: 50000000
Bytes per second detected: 61801446.10000000149011611938

они также включают снимок сети в то время, когда они принимают сервер в автономном режиме, который включает в себя много открытых соединений с IP-адреса Amazon (9 на момент создания снимка).

есть ли что-нибудь, что я могу сделать, чтобы дросселировать соединения с AWS? Желательно, чтобы я искал вариант в API AWS (хотя я не видел ничего полезного в документации), но за исключением этого, есть ли что-то, что я могу сделать с моей стороны, чтобы управлять подключениями на сетевом уровне?

4 ответов


команды AWS CLI S3 transfer (которые включают синхронизацию) имеют следующие релевантные параметры конфигурации:

  • max_concurrent_requests -
    • по умолчанию: 10
    • максимальное количество одновременных запросов.
  • multipart_threshold -
    • по умолчанию: 8 МБ
    • порог размера, который CLI использует для multipart передача отдельных файлов.
  • multipart_chunksize -
    • по умолчанию: 8 МБ
    • при использовании составные передачи, это размер куска, который CLI использует для многоступенчатая передача отдельных файлов.

Это не так гранулировано, как дросселирование пакетов в секунду, но кажется, что установка более низкого значения параллельного запроса и снижение многопартийного порога и chunksize помогут. Если значения, которые вы вставили близко к среднему, я бы начал с этих значений и настройки, пока вы надежно не превысите пределы:

$ aws configure set default.s3.max_concurrent_requests 8
$ aws configure set default.s3.multipart_threshold 6MB
$ aws configure set default.s3.multipart_chunksize 6MB

а также изменение максимальных соединений по умолчанию и размер куска уже упоминает, что вы также можете установить max_bandwidth. Это очень эффективно при загрузке больших одиночных файлов.

aws configure set default.s3.max_bandwidth 50MB/s


Я закончил с помощью ручеек и покрывая скорость загрузки & загрузки на 20 000 кб/ с. Это позволило мне использовать мой существующий скрипт без особых изменений (все, что мне нужно было сделать, это добавить вызов trickle в начало команды).

кроме того, похоже, что регулирование пропускной способности было добавлено в качестве проблемы в AWS CLI, поэтому, надеюсь, все это не будет проблемой для людей, если это будет реализовано.


Если вы не можете заставить trickle работать с командой aws s3, как я, вы можете использовать:

sudo apt-get install pv (or yum install pv) pv -L 1M local_filename 2>/dev/null | aws s3 cp - s3://bucket_name/remote_filename

где-L 1M ограничивает ширину полосы частот до 1M/s и бросок за cp укажите stdin

Примечание: awscli от apt-get слишком стар для поддержки ввода stdin, вам нужно обновить его через pip