Как стать автором
Обновить

Рисоваська, часть 3: Амазоновские веб-сервисы в действии

Время на прочтение10 мин
Количество просмотров36K
В данной статье я расскажу, что же такое Amazon Web Services или сокращенно AWS, для чего это можно использовать, и приведу пошаговую инструкцию, как настроить их у себя с самого начала. В статье основной упор будет сделан на Amazon Elastic Compute Cloud или EC2 и Amazon Simple Storage Service или S3. Amazon CloudFront, являющийся логическим продолжением S3, хорошо рассмотрен в статье mish: Настраиваем CloudFront для работы с S3. С остальными амазоновскими сервисами вы можете познакомиться самостоятельно: Amazon SimpleDB, Amazon Simple Queue Service или SQS, а также другими сервисами Амазона. Данная статья является продолжением первой и второй статей. Итак:

Что такое Amazon Web Services


Это набор удобных сервисов, которые можно использовать как по отдельности, так и вместе. В первую очередь это «облачные вычисления» (анг. Elastic Compute Cloud). Что это значит? Это значит, что вы можете запустить в «облаке» любое кол-во компьютеров нужной вам конфигурации c нужной вам операционной системой всего за пару минут. Это действительно так. Время запуска одного инстанса (instance называется один виртуальный сервер в амазоне) обычно не превышает двух минут. Сразу после запуска инстанс начинает работать, к нему есть root-доступ по SSH или Remote Desktop, если там установлен Windows. Не правда ли, здорово! С момента запуска оплата за инстанс идет по часам. В любой момент вы можете остановить инстанс и деньги за его использование перестанут сниматься. Помимо времени работы инстанса, так же отдельно оплачивается входящий и исходящий трафик.

Вторым замечательным сервисом Амазона является Amazon Simple Storage Service или S3. Это распределенное надежное хранилище данных. В S3 вы можете положить любой файл от нескольких байт до нескольких гигабайт и иметь доступ к нему из обычного браузера по ссылке, т.е. через HTTP. Для доступа к S3 совсем не обязательно иметь запущенный EC2-инстанс. Например, вот ссылка на картинку: http://s3.amazonaws.com/moodbox-server-data/channel_logo/1. В S3 можно положить и весь ваш сайт, если он состоит из статических картинок, более того можно привязать к определенной корзине (англ. bucket, в S3 все ваши файлы хранятся в них) доменное имя вашего сайта, после чего можно к нему обращаться, как к обычному сайту в браузере. Файлы в S3 можно делать закрытыми для общего доступа, тогда доступ к ним можно получить, только имея ключи, о чем расскажу ниже.

Конечно это не все сервисы, но в статье я буду описывать именно эти два сервиса, как наиболее интересные и которые мы реально используем в нашем проекте «Рисоваська».

Регистрация в AWS


Перед началом использования любого из сервисов Амазоны вы должны завести там аккаунт и привязать к нему свою кредитную карточку. Для этого идете на страницу регистрации, выберите вариант «I am a new user» и создаете новый аккаунт. Вторым шагом является задание информации по оплате. Для России фактически единственным вариантом оплаты является кредитная карта. Я лично использовал свою виртуальную карту Альфа-Банка системы MasterCard. Виртуальная карта позволяет оплачивать товары и услуги только через интернет и не подходит для обычных банкоматов. Обычные дебитные карты у меня Амазон не принимал, возможно это зависит от банка.

И последним обязательным шагом является получение ключей доступа. Вам потребуются для работы с EC2 и S3 два типа ключей: Access Key ID and Secret Access Key и X.509 Certificate. Оба они получаются на указанной странице. Важно: на этой же странице вверху справа написан ваш Account Number, например так: 8311-6132-8591. Этот номер пригодиться при создании своего образа.

Все указанные выше пункты можно сделать за 5-10 минут. После чего вы можете подписываться на нужные вам услуги. Подписаться очень просто, например для подписки на SimpleDB идете на страницу http://aws.amazon.com/simpledb/ и справа нажимаете кнопку «Sign Up for Amazon SimpleDB». Аналогично с любой другой услугой. За само подписку на услугу деньги не взимаются, поэтому подписывайтесь на все, что захотите. Вообще политика Амазона по оплате следующая: вы платите только за то, что используете и оплачиваете уже после оказания услуги, т.е. пост-оплата.

А теперь перейдем к более детальному описанию сервисов.

Amazon EC2 или Амазоновские облака


Перечислю основные преимущества EC2:
  • запуск и остановка любого кол-ва инстансов в течении пары минут
  • гибкий выбор типов инстансов под разные задачи
  • надежность: согласение об уровне обслуживания гарантирует 99.95% доступность инстансов. В общем обычные выделенные сервера падают чаще :)
  • две географические зоны расположения серверов: Америка и Европа
  • Elastic IP — IP адрес, который всегда остается за вами, независимо работает ли инстанс или остановлен
  • Достаточно низкая цена

Описание EC2 можно условно разбить на три части: выбор типа инстанса, выбор и настройка образа операционной системы (Amazon Machine Image) и запуск и работа с инстансом или несколькими инстансами.

Амазон предоставляет несколько типов инстансов разбитых на две категории: Standard Instances и High-CPU Instances. Минимальный инстанс имеет следующие характеристики: Small Instance (Default) 1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of instance storage, 32-bit platform и стоит $0.10 в час в случае установки на него Unix-системы и $0.125 в случае Windows. Часто для работы вполне хватает этого «минимального» инстанса. В месяц он будет обходиться вам в $74 и еще нужно будет дополнительно заплатить за трафик $0.10 за гигабайт входящего трафика и $0.17 за гигабайт исходящего трафика. Наша практика показывает, что обычно трафик не превышает $15 в месяц. Подробнее типы инстансов и цены указаны на главной странице EC2.

Совсем недавно появилась возможность сократить расходы на инстанс при использовании его от года и более. Это Reserved Instances. Суть в следующем, вы платите вперед 325 долларов за годовой контракт или 500 долларов за 3-х летний контракт и потом в любое время запускаете такой инстанс и его стоимость будет 0.03 доллара в час. Для сравнения обычный инстанс за год вам обойдется в $846, а Reserved Instance обойдется в $325 + $259 = $584. Более подробно об этом написано на главной странице EC2

После выбора инстанса нужно выбрать и настроить образ операционной системы, который будет там работать. Образ — это как сама операционая система так и все необходимые для работы программы (Apache, MySQL, Memcached, Erlang и т.д.), а так же в образ могут быть включены и все нужные вам данные: содержимое сайта, исходники программы и т.д. Есть большое кол-во готовых образов от Амазона и энтузиастов. Например, мы использовали не-амазоновский образ Ubuntu с сайта http://alestic.com/.

Есть два способа взаимодействия с EC2: набор утилит (API) от Амазон. Для этого способа так же потребуется поставить Java Runtime Environment. Следующим обязательным шагом, нужным та же для дальнейшей работы с инстансом через Putty — создание каталога c:\ec2. В этот каталог в папки bin и lib распаковывается набор утилит от Amazon. В этой же папке создается файл ec2.bat со следующим содержимым:
@echo off
set EC2_HOME=c:\ec2
set PATH=%PATH%;%EC2_HOME%\bin
set EC2_PRIVATE_KEY=%EC2_HOME%\PrivateKey.pem
set EC2_CERT=%EC2_HOME%\509Certificate.pem
set JAVA_HOME=C:\Program Files\Java\jre1.x.0_xx

PrivateKey.pem и 509Certificate.pem вы получили раньше при получении ключей доступа. Их нужно тоже положить в папку с:\ec2. На самом деле лучше прописать все эти переменные в переменных среды Windows, чтобы всегда были под рукой.

Далее генерируем пару сессионных ключей для доступа к инстансу по ssh выполнив в командной строке:
ec2-add-keypair gsg-keypair

gsg-keypair — собственно имя пары ключей, вам нужно будет придумать свое

на экране получаем приватный ключ вида:
----BEGIN RSA PRIVATE KEY----
MIIEpAIBAAKCAQEAwCh8PpHU8ceulZVD7HOIl2U+KW5osbPkfZ+qQH+AJyiz+VMjkfJK2JY7qmO+
... skipped...
P2RGGwVzpMl1/QCPO29jT80pZRA9YN/3vkp9ntCtlDnH5YLnrQOKMsfcS43yvay+pdjnA00Kvbru
zsX7a7uic2rGpSXW+/8K0AvxuOwjq/zxgi6Vuqg2QqvhxnBQenayCgBMVyjRNty2Hn2EKA==
----END RSA PRIVATE KEY----

копируем его (c экрана, как есть) и сохраняем в файл, например в my_private_key.ppk. Для Putty нужно конвертировать этот ключ в putty-формат. Для этого запускаем puttygen, говорим ему load private key file. Он должен открыть его без сообщений об ошибок. Сохраняем приватный ключ (putty его переконвертировал ) в тот же другой файл, например в с:\ec2\my_putty_private_key.ppk.

Надеюсь вы не сдались и сделали все это, т.к. на самом деле это было самое сложное :) Дальше все намного приятнее. Вы конечно можете продолжать управлять своими инстансами через командную строку, используя набор утилит от Амазон, но я рекомендую для конфортной работы с EC2 поставить плагин к FireFox: Elasticfox и тогда работа с EC2 станет на порядок проще. Установка ElasticFox думаю не вызовет ни у кого сложностей, а вся настройка заключается в открытии плагина из меню «Инструменты» (англ. Tools) на отдельной странице браузера, нажатие на кнопку Credentials и ввода в отдельном окне полученных ранее AWS Access Key и AWS Secret Access Key. Дополнительно для работы с EC2 требуется поставить программу Putty о которой я упоминал выше.

Итак у нас настроен компьютер, стоит Putty и плагин ElasticFox. Осталось совсем немного, чтобы запустить и работать со своим инстансом. Дело в том, что как только вы начинаете работать с EC2 у вас закрыты все порты доступа к вашим инстансам. Их нужно открыть. Для этого в ElasticFox переходим на закладку «Security groups» слева выбрать группу «default» и добавляем порт 22 (работа через ssh), нажав кнопку «Grant Permission» справа-вверху. Таким же образом нужно открыть все порты, которые вам будут нужны для доступа к инстансам снаружи EC2: 80, 443 и т.д. Замечательной особенностью EC2 является то, что все ваши инстансы работают в изолированном пространстве и не доступны другим инстансам в EC2. Но при этому они прекрасно видят друг друга изнутри по своим внутренним IP.

Запускаем свой первый инстанс в EC2


В плагине ElasticFox на закладке Images находим нужный вам образ. В нашем случае это образ с AMI ami-71fd1a18 с описанием alestic/ubuntu-8.04-hardy-base-20090216.manifest.xml, нажимаем кнопку Launch Instance(s) над гридом и в появившемся окне выбираем в выпадающем списке Available Zone нужную вам географическую зону запуска инстанса (Америка или Европа).

Замечательной особенностью дистрибутива на Ubuntu является возможность ввести в поле User Data shell-скрипт, который автоматически выполниться при запуске инстанса. Так же вы можете указать кол-во запускаемых инстансов больше одного. Нажимаем кнопку Launch.

На закладке Instances можно наблюдать процесс запуска. Обычно нужно подождать две минуты пока в колонке State не появиться текст «running». В колонке Public DNS появиться внешнее имя вашей машины. А теперь важный момент: при каждом запуске инстанса Public DNS и внешний IP будет разный. Чтобы избежать постоянной смены IP у вашего инстанса после его остановки и последующего запуска нового инстанса в EC2 есть Elastic IP. Получить один или несколько можно на закладке Elastic IPs. Один раз полученный Elastic IP всегда остается за вами. После получения Elastic IP его нужно привязать к запущенному инстансу на этой же закладке. Важно помнить, что пока вы не привязали Elastic IP ни к одному инстансу вы платите за него небольшие деньги. Это сделано для того, чтобы не брали себе много ненужных Elastic IPs. При остановке инстанса Elastic IP автоматически отвязывается от него и его можно привязать к новому инстансу. Таким образом вы можете смело привязать свой Elastic IP к вашему домену. Он никогда не будет меняться.

После запуска инстанса и привязки к нему Elastic IP, запускаем Putty и первым делом настраиваем ее:
  • на закладке Session в поле Host Name вводим IP или доменное имя вашего инстанса. Здесь вводите полученный ранее Elastic IP
  • на закладке Connection -> Data в поле Auto-Login username вводим: root
  • на закладке Connection -> SSH устанавливаем галочку «Enable compression» для снижения трафика
  • на закладке Connection -> SSH -> Auth в последнее поле вводим с:\ec2\private_putty_key.ppk
  • на закладке Session в поле Saved Session вводим название конфигурации и нажимаем кнопку Save

В дальнейшем вам будет достаточно запустить Putty, выбрать сохраненную конфигурацию из списка и нажать кнопку Open. Нажимаем ее.

Появляется консоль вашего инстанса с root доступом. Вы можете ставить и настраивать любые программы. После завершения всей настройки вы можете создать свой образ, который можете в дальнейшем использовать при запуске свои инстансов, как я описано выше. Для создания своего образа нужно выполнить следующие шаги:
  • скопировать на инстанс ключи доступа в mnt, например с помощью следующих команд:
    C:\Program Files\PuTTY\pscp.exe" -i C:\ec2\key_2_private.ppk c:\ec2\509Certificate.pem root@%1:/mnt/
    C:\Program Files\PuTTY\pscp.exe" -i C:\ec2\key_my_private.ppk c:\ec2\PrivateKey.pem root@%1:/mnt/
  • в консоли инстанса выполнить команду:
    ec2-bundle-vol -d /mnt/ -k /mnt/PrivateKey.pem -c /mnt/509Certificate.pem -u YourAccountNumber -r i386 -e /root/.mc,/root/.ssh -p name_of_your_image
  • залить созданный образ в S3 командой:
    ec2-upload-bundle -a YourAccessKey -s YourSecretKey -b YourPathInS3 -m /mnt/name_of_your_image.manifest.xml
  • зарегистрировать новый образ в списке AMIs с помощью ElasticFox выбрав закладку Images, нажав кнопку «Register AMI» и введя YourPathInS3 + name_of_your_image.manifest.xml, указываемые выше

Монтируемые тома или EBS


Неприятной особенностью EC2 является потеря всех данных при остановке или зависании инстанса. С одной стороны — это хороший вызов при проектировании системы. С другой стороны сейчас есть выход — это Amazon Elastic Block Store (EBS). EBS — это монтируемый том емкостью от 1GB до 1TB. Сразу после запуска инстанса, его можно подмонтировать к нему использую закладку Volumes and Snapshots в Elasticfox. В самом инстансе нужно подмонтировать этот том как обычно это делается в Linux.
Скорость работы и надежность EBS выше, чем встроенного в инстанс хранилища. При остановке инстанса монтируемый том вместе со своими данными никуда не теряется и его можно перемонтировать к другому инстансу. Для еще большей надежности можно периодически делать snapshots тома в S3. Единственным недостатком EBS, что за него нужно дополнительно платить, но реально у нас получается всего $2 в месяц.

Amazon S3 или высоконагрузочное распределенное хранилище


Перечислю основные преимущества S3:
  • низкая цена хранения: вы потратите только $0.15 за гигабайт в месяц и еще обычно $1-10 за трафик
  • надежность: любой файл, положенный в S3 автоматически копируется на несколько серверов, чтобы избежать его потери
  • выдерживает любые нагрузки: S3 построена так, что автоматически увеличивает кол-во копий файла, при увеличении кол-ва желающих получить данный файл
  • легкость работы через HTTP протокол
  • возможность к каждому файлу в S3 прикреплять свои metadata, размером до 2кб.
  • возможность получать статистику обращения к каждому файлу через S3
  • два географических места расположения ваших корзин: Америка и Европа
  • возможность, используя Amazon CloudFront, уменьшить время отклика на получение файла из S3 при незначительном увеличении затрат

Самый простой способ работы с S3 — поставить плагин к Forefox S3Fox. После установки просто откройте плагин через меню «Инструменты», нажмите кнопку «Manage Accounts» и введите любой Account Name и полученные ранее AWS Access Key and AWS Secret Access Key. Это все, чтобы начать работать с S3.

Слева показывается ваша файловая система, а справа ваши корзины, папки и файлы в S3. Первым шагом является создание вашей первой корзины (анг. Bucket), нажав кнопку «Create Bucket/Directory» справа-вверху. Это место, где хранятся ваши файлы (в S3 они называются объектами). При создании корзины указывается ее географическое расположение: Америка или Европа. Так же важно понимать, что название корзины должно быть уникально среди всех пользователей S3. Почему так, потому что путь доступа в вашему файлу формируется либо так: «s3.amazonaws.com/your_bucket/your_file», либо «your_bucket.s3.amazonaws.com/your_file». После создания корзины, вы можете копировать в нее файлы, как в обычном файловом менеджере. После копирования файла в S3, можно выделить его в правой панели и задать для него права доступа, нажав кнопку «Edit ACL» вверху-справа. Например, вы можете указать виден ли файл всем, только авторизованным пользователям или только вам, как владельцу файла.

Вы можете скопировать в S3 весь свой сайт целиком и даже привязать определенную корзину к своему домену. Если ваш сайт написан только с использованием JavaScript и не хранит данных в базе данных, тогда получается очень дешевый хостинг сайта всего за $0.15 за гигабайт в месяц + трафик $0.17 за гигабайт. На практике расходы обычно не превышают $5-10 долларов в месяц. Учитывая надежность и выдерживания больших нагрузок, такое решение выглядит намного лучше виртуального хостинга, даже по цене.

Если фантазировать дальше, то в качестве базы данных можно использовать Amazon SimpleDB с доступом к ней из JavaScript, но в данной теме я не специалист, поэтому только намечу возможное направление исследования для желающих.

Детально работа с S3 описана в Getting Started Guide

Продолжение следует...


В следующих статьях будет описано: взаимодействие Эрланга с другими языками программирования (Java, C) и использование распределенной базы Mnesia (которая входит в состав Erlang/OTP) в Рисоваське.
Теги:
Хабы:
+95
Комментарии51

Публикации

Изменить настройки темы

Истории

Ближайшие события