Статьи

Fake S3 — Экономьте время, деньги и развивайтесь в автономном режиме

Amazon S3 — чрезвычайно мощный сервис в основе Amazon Web Services. Тем не менее, вне производственной среды, с S3 может быть сложно работать. Он включает передачу ключей, подготовку учетных записей пользователей и надежное сетевое соединение — не говоря уже о том, что это стоит денег.

В Spool мы создали Fake S3, чтобы значительно упростить работу с S3 в средах разработки и тестирования. Нашей целью было сделать самодостаточный исполняемый файл, который может имитировать большую часть S3 Rest API с небольшим количеством внешних зависимостей.

Для разработки каждый инженер запускает свой собственный экземпляр Fake S3, куда он может поместить гигабайты изображений и видео для разработки и тестирования, и ее настройки будут работать в автономном режиме, поскольку все они локальны. У нас также есть настройка непрерывной интеграции, которая запускает тесты 24/7 (часто с большими видеофайлами). Поддельный S3 экономит нам 1000 долларов в месяц только на пропускной способности для наших тестов. Как при разработке, так и при тестировании экономия времени на ожидании возврата ресурсов в AWS и обратно, особенно в наших больших медиа-файлах, делает Fake S3 очень полезным.

Мы выпускаем Fake S3 как драгоценный камень на GitHub. Это ранний релиз, и мы будем продолжать его улучшать. Если у вас есть идеи или проблемы, пожалуйста, внесите свой вклад в проект!

Установка

gem install fakes3

Бег

 fakes3 -r ~/fakes3_root -p 10001

Пример кода клиента

 require 'rubygems'
require 'aws/s3'

include AWS::S3
AWS::S3::Base.establish_connection!(:access_key_id => "123",
                                    :secret_access_key => "abc",
                                    :server => "localhost",
                                    :port => "10001")

Bucket.create('mystuff')

('a'..'z').each do |filename|
  S3Object.store(filename, 'Hello World', 'mystuff')
end

bucket = Bucket.find('mystuff')
bucket.objects.each do |s3_obj|
  puts "#{s3_obj.key}:#{s3_obj.value}"
end

Bucket.delete("mystuff",:force => true) # Delete your bucket and all its keys

В целом клиенты могут работать, если вы можете указать хост и порт для их подключения, а также форсировать запросы стиля пути (вместо поддоменов.) Могут работать запросы S3 в стиле поддоменов, но это включает добавление имен ваших сегментов в / etc / hosts ( т.е. s3.localhost или mybucket.localhost) или использование dnsmasq, если у вас большое количество сегментов.

Имитация условий сети

Еще одна полезная функция — поддержка моделирования условий в сети. Вы можете запустить fakes3 с включенным ограничением пропускной способности следующим образом:

 fakes3 -r ~/fakes3_root -p 10001 --limit=50K

Это ограничит пропускную способность вашего запроса GET до 50 Кб / с за запрос, а не мгновенно отключит ваш локальный компьютер. Это очень удобно, например, для симуляции поведения мобильных устройств в реальном мире.

Связанные инструменты

Поддельный S3 отлично подходит для разработки и тестирования благодаря своей простоте, но не предназначен для замены S3 в производстве. Если вы хотите заменить S3, есть другие инструменты, такие как Ceph , ParkPlace (поддерживает bitorrent), Boardwalk (интерфейс S3 перед MongoDB) и RiakCS, которые вы можете проверить.

Эта статья была переиздана из Spool Blog с разрешения.

Audi S3 изображение через Shutterstock