пятница, 23 декабря 2016 г.

Создайте свой сервер AWS S3 с открытым кодом / Хабрахабр

/devel
32,5
рейтинг
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
  • Установленный Ruby

Запустите 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
@Indexator
карма
47,7
рейтинг 32,5
/devel
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (12)

  • +1
    Ни слова о Ceph. Почему?
    • +1
      А Ceph умеет эмулировать API S3?
      • +1
        • +1
          Ну там тоже не полная поддержка. А как я понял из текста — основная задача была подобрать решение не требующее сложной инсталляции и настройки, так как предполагается лишь ознакомление студентов с API S3 (без смс и регистрации).
          • 0

            да, но ceph – это, скорее всего, самое production решение из всех предложенных (не считая, собственно, aws). Странно что он даже не упомянут.

            • 0
              Ну здрасте, а как же риак?
              • 0

                Так он тоже не упомянут...

  • +4
    • 0
      лучшее решение, чем описанное в статье
      • 0
        однако тоже без поддержки всех возможностей S3. В частности нельзя загрузить файл и сделать его публичным за одну операцию, то как это идет в офф клиентах S3
        • 0

          Может это офф клиенты не могут работать ни с чем другим, кроме S3?

          • 0
            ну надо отметить, что они и не должны, т.к. остальные мимикрируют под апи S3, а не наоборот.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.



Original Page: https://habrahabr.ru/post/318086/



Sent from my iPad

Комментариев нет:

Отправить комментарий