20 декабря в 21:00
Разработка → Создайте свой сервер AWS S3 с открытым кодом перевод tutorial

Amazon S3 (Simple Storage Service, сервис простого хранилища) — очень мощный онлайн сервис файлового хранилища, предоставляемого Amazon Web Services. Думайте о нем, как об удаленном диске, на котором вы можете хранить файлы в директориях, получать и удалять их. Компании, такие как DropBox, Netflix, Pinterest, Slideshare, Tumblr и многие другие, полагаются на него.
Хоть сервис и отличный, его код не открыт, поэтому вы должны доверять Amazon свои данные, и хоть они предоставляют доступ к бесплатному инстансу на год, вы все равно должны ввести информацию о кредитной карте для создания аккаунта. Т.к. S3 должен знать каждый инженер-программист, я хочу, чтобы мои студенты приобрели опыт работы с ним и использовали его в своих веб-приложениях, и еще я не хочу, чтобы они за это платили. Некоторые студенты также работают во время поездок, что означает медленное Интернет-соединение и дорогой трафик, либо вообще полное отсутствие Интернета.
Вот почему я начал искать открытые решения, которые бы эмулировали S3 API, и которые могли бы работать на любой машине. Как обычно, мир Open Source не разочаровал меня и предоставил несколько решений, вот мои любимые:
- Первое, на что я наткнулся, было Fake S3, написанное на Ruby и доступное как гем, требуется всего несколько секунд для установки и библиотека очень хорошо поддерживается. Это отличный инструмент, чтобы начать, но он не реализует все команды S3 и не подходит для использования в продакшене.
- Второй вариант — это HPE Helion Eucalyptus, который предоставляет широкий спектр эмуляции сервисов AWS (CloudFormation, Cloudwatch, ELB...), включая поддержку S3. Это весьма законченное решение (только работающее на CentOS), ориентированное на энтерпрайз и, к сожалению, слишком тяжеловесное для личного использования или для малого бизнеса.
- Последний и предпочитаемый мною вариант — это сервер Scality S3. Доступен в виде Docker-образа, что очень легко позволяет его развернуть и начать использовать. Программное обеспечение подходит для личного использования, каждый может начать использовать его через несколько секунд без какой-либо сложной установки. Но оно также подходит и для энтерпрайза, т.к. оно масштабируемо и готово к продакшену. Лучшее из двух миров.
Начинаем работу с сервером Scality S3
Чтобы продемонстрировать насколько просто эмулировать AWS S3 с помощью сервера Scality S3, давайте его оживим!
Требования:
Запустите Docker-контейнер сервера Scality S3:
$ docker run -d --name s3server -p 8000:8000 scality/s3server Unable to find image 'scality/s3server:latest' locally latest: Pulling from scality/s3server 357ea8c3d80b: Pull complete 52befadefd24: Pull complete 3c0732d5313c: Pull complete ceb711c7e301: Pull complete 868b1d0e2aad: Pull complete 3a438db159a5: Pull complete 38d1470647f9: Pull complete 4d005fb96ed5: Pull complete a385ffd009d5: Pull complete Digest: sha256:4fe4e10cdb88da8d3c57e2f674114423ce4fbc57755dc4490d72bc23fe27409e Status: Downloaded newer image for scality/s3server:latest 7c61434e5223d614a0739aaa61edf21763354592ba3cc5267946e9995902dc18 $
Убедитесь, что Docker-контейнер исправно работает:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ed54e677b1b3 scality/s3server "npm start" 5 days ago Up 5 days 0.0.0.0:8000->8000/tcp s3server
Установите Ruby-гем AWS SDK v2 (документация здесь):
$ gem install aws-sdk
Теперь давайте создадим файл, который мы загрузим в нашу корзину:
$ touch myfavoritefile
Используя ваш любимый текстовый редактор, создайте файл, содержащий ваш скрипт на Ruby, давайте назовем его 's3_script.rb':
#!/usr/bin/ruby require 'aws-sdk' s3 = Aws::S3::Client.new( :access_key_id => 'accessKey1', :secret_access_key => 'verySecretKey1', :region => 'us-west-2', :endpoint => 'http://0.0.0.0:8000/', :force_path_style => true ) s3.create_bucket({bucket: "mybucket"}) File.open('myfavoritefile', 'rb') do |file| s3.put_object(bucket: 'mybucket', key: 'myfavoritefile', body: file) end resp = s3.list_objects_v2(bucket: 'mybucket') puts resp.contents.map(&:key)
Запустите скрипт:
$ ruby s3_script.rb $ myfavoritefile
Поздравляю, вы создали вашу первую S3-корзину и загрузили в нее файл!
Давайте разберем код
Здесь мы указываем, что скрипт должен быть выполнен Ruby и что мы подключаем библиотеку AWS SDK:
#!/usr/bin/ruby require 'aws-sdk'
Мы инициируем подключение к нашему серверу S3, работающему в нашем Docker-контейнере. Заметьте, что 'accessKey1' и 'verySecretKey1' — ключ доступа и ключ секретного доступа по умолчанию, определяемые сервером Scality S3:
s3 = Aws::S3::Client.new( :access_key_id => 'accessKey1', :secret_access_key => 'verySecretKey1', :region => 'us-west-2', :endpoint => 'http://127.0.0.1:8000/', :force_path_style => true )
Создаем S3-корзину с именем 'mybucket':
s3.create_bucket({bucket: "mybucket"})
Здесь мы загружаем в нашу корзину 'mybucket' ранее созданный файл 'myfavoritefile':
File.open('myfavoritefile', 'rb') do |file| s3.put_object(bucket: 'mybucket', key: 'myfavoritefile', body: file) end
И наконец, собираем содержимое корзины 'mybucket' и отображаем его в стандартном выводе:
resp = s3.list_objects_v2(bucket: "mybucket") puts resp.contents.map(&:key)
Перевод: Sylvain Kalache
Похожие публикации
- ASP.NET vNext. Open Source и с поддержкой Linux 12,8k 47 27
- vkontakte_api: ruby-адаптер для ВКонтакте API 23,5k 163 27
Самое читаемое Разработка
- Взлом на борту самолёта 8,1k 29 8
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
Интересные публикации
- Оптимизируем redux хранилище для более производительных изменений 2
- Спутники ЕКА обнаружили «струйное течение» из жидкого металла в ядре Земли 7
- Программирование игровых приложений на Corona SDK: часть 1 3
- Уровни изоляции транзакций с примерами на PostgreSQL 1
- В защите McAfee для банкоматов обнаружена опасная уязвимость 0
Original Page: https://habrahabr.ru/post/318086/
Sent from my iPad
Комментарии (12)