- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF128:Amazon EC2
Материал из Linuxformat.
- Hardcore Linux Проверьте себя на крутом проекте для продвинутых пользователей
Amazon EC2: На облаке
- Надоела шумиха насчет облачных вычислений? Коэн Вервлоесем докажет, что это не пустая болтовня, и запустит в облака Ubuntu.
Elastic Compute Cloud (EC2) от Amazon – гибкая альтернатива традиционному серверному хостингу. Посути, это те же серверы, на которых запущены виртуальные машины на гипервизоре Xen, но работа с ними организована поистине гибко. Можно запускать свои виртуальные машины за какие-то минуты, а за ненадобностью – отключать. Оплата за них рассчитывается по трем параметрам: количество машинного времени, объем сгенерированного сетевого трафика и тип используемой конфигурации, от ма ленькой (Small) до большой (Large). Это настоящие вычисления по требованию: если ваш сервер испытывает пик нагрузки, вы просто бросаете на подмогу дополнительные экземпляры. Отпадает и проблема долгосрочных контрактов на хостинг – Amazon не требует авансовых платежей. Неудивительно, что многие начинающие компании и сервисы Web 2.0 вроде Facebook используют для своих web-приложений EC2.
Как пользователь EC2, вы создаете или загружаете так называемый образ компьютера Amazon (Amazon Machine Image, AMI). Это заранее сконфигурированная операционная система и ПО, которые инициа лизируются на EC2 как виртуальная машина (ВМ). У Ubuntu есть официальные образы для Server Edition 8.04, 8.10 и 9.04. Виртуальные серверы Ubuntu следуют стандартному жизненному циклу поддержки Ubuntu, то есть обычный релиз сопровождается обновлениями безопасности и тому подобным в течение 18 месяцев, а релиз с долгосрочной поддержкой, такой как 8.04, поддерживается в течение пяти лет. Посмотрим, как это работает в Ubuntu 9.04.
Официальные AMI Ubuntu
Версия | Доступна | x86 | x86_64 |
---|---|---|---|
8.04 (Hardy) | Европа | ami-30c0e844 | ami-3ac0e84e |
8.04 (Hardy) | США | ami-5d59be34 | ami-2959be40 |
8.10 (Intrepid) | Европа | ami-80c0e8f4 | ami-84c0e8f0 |
8.10 (Intrepid) | США | ami-5059be39 | ami-255bbc4c |
Присоединяемся к Amazon EC2
Образами Ubuntu можно пользоваться бесплатно, но вам придется завести учетную запись на Amazon EC2 и указать данные своей кредитной карты, с которой будет списываться плата за ресурсы. Итак, создайте учетную запись AWS на http://aws.amazon.com, перейдите на http://aws.amazon.com/ec2 и выберите SignUp For Amazon EC2. Затем введите реквизиты своей кредитной карты. После регистрации сайт попросит вас создать сертификат X.509 или загрузить его. Если у вас его нет, позвольте Amazon создать его и заберите закрытый ключ. Не потеряйте ключ, потому что Amazon удалит его с сервера! Вам так же понадобится загрузить файл сертификата. Мы сохранили оба в ката логе ~/.ec2. Запишите номер своей учетной записи – число в виде XXXX-XXXX-XXXX, которое показывается под словами «Добро пожа ловать, имярек» после входа в систему.
Получив учетную запись, нужно за дать кое-какие переменные окружения, так как утилитам EC2, которые мы собираемся установить, потребуются закрытый ключ и файл сертификата. Для этого добавим в ~/.bashrc следующие строки:
export AWS_USER_ID=XXXXXXXXXXXX export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXX export AWS_SECRET_ACCESS_KEY=XXXXXXXXXXX export EC2_PRIVATE_KEY=$HOME/.ec2/pk-XXXXXX.pem export EC2_CERT=$HOME/.ec2/cert-XXXXXXXXXX.pem export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/
Первые три числа можно найти на странице «Идентификаторы доступа» (Access Identifiers) на странице вашей учетной записи в Amazon AWS. AWS_USER_ID — номер учетной записи без дефисов, а переменные EC2_PRIVATE_KEY и EC2_CERT ссылаются на закрытый ключ и сертификат соответственно. Убедитесь в правильности имен файлов, затем откройте новый терминал или выполните в нем команду source ~/.bashrc, чтобы обновить переменные окружения.
установка утилит
Подготовив учетную запись и задав переменные окружения, остается установить утилиты EC2. В версии 9.04 (Jaunty) это легко. Просто включите репозиторий Multiverse (так как исходники утилит EC2 от Amazon не открыты) и установите инструменты, например, командой sudo apt-get install ec2-api-tools.
Чтобы проверить, все ли утилиты установлены и настроены правильно, просто убедитесь, работает ли команда
ec2-describe-images -o self -o amazon
Если все в порядке, вы увидите длинный список образов, которые Amazon предлагает запустить на EC2. А если вас поприветствова ло сообщение об ошибке ‘Client.AuthFailure’, значит, что-то не так с учетной записью Amazon Web Services (например, указаны неверные данные кредитной карты) или вы сослались не на те закрытые ключи или файл сертификата в ~/.bashrc.
Теперь сгенерируйте пару ключей SSH для входа в EC2, следующим образом:
ec2-add-keypair lxf-keypair > ~/.ec2/lxf-keypair.pem
Затем разрешите доступ по SSH, иначе мы не сможем войти в наш экземпляр ОС на облаке (а если в вашей облачной ОС работает web-сервер, откройте так же доступ к порту 80):
ec2-authorize default -p 22
На последнем этапе убедитесь, что права доступа ко всем файлам ключей заданы верно. Вряд ли вы за хотите, чтобы их видел кто-то другой:
chmod 600 ~/.ec2/*.pem
Переносить ли сервер на облако?
Если вам нужен экземпляр, отличный от варианта по умолчанию (m1.small), воспользуйтесь ключом -t в команде ec2-run- instances.
В Ubuntu Server 9.04 к программе GNU screen были добавлены несколько полезных профилей, которые постав ляются под именем screen-profiles. Они позволяют показывать некоторую системную информацию в статусной строке экрана. Сюда входит примерная стоимость вашей сис темы на Amazon EC2. При ее расчете анализируются время работы системы, число процессоров и активность сети.
Утилита пригодится и на серверах, которые не работают на EC2. С ее помощью можно подсчитать, во сколько обойдется перенос на EC2 физического или виртуального сервера.
Для получения более подробной информации можно так же запустить скрипт ec2-cost script командой /var/lib/screen-profiles/ec2-cost --detail.
Запуск нашего первого AMI на EC2
Список всех доступных для запуска образов AMI вы получите, выполнив команду ec2-describeimages -x all.
Теперь все готово для запуска Ubuntu на EC2. Единственное, что нам нужно знать – идентификатор публичного образа Ubuntu AMI ID (несколько таких приведены в разделе «Официальные AMI Ubuntu» выше). Например, если вы хотите запустить 32-битную Ubuntu Hardy в США (на выбор даются США и Европа), выполните следующую команду:
ec2-run-instances ami-5d59be34 -k lxf-keypair
Убедитесь, что после параметра -k указано имя пары ключей, а не имя локального файла с путем. Если все в порядке, команда ec2-describeinstances выведет название нового экземпляра со статусом ‘pending’ [ожидание].
Запускаем и работаем
Через некоторое время (порядка пары минут – потерпите немножко!) статус изменится на ‘running’, и экземпляр получит IP-адрес и имя хоста:
$ ec2-describe-instances RESERVATION r-c5a1f2ac 181921386298 default INSTANCE i-afa7a8c6 ami-5d59be34 ec2-174-129-86- 66.compute-1.amazonaws.com ip-10-244-125-177.ec2. internal running lxf-keypair 0 m1.small 2009-07- 29T13:45:18+0000 us-east-1d aki-6e709707 ari-6c709705
После этого можно войти на виртуальный сервер Ubuntu, который вы запустили как пользователь ‘ubuntu’. Просто ука жите правильно ключ SSH и имя хоста (которое начинается с ec2- и заканчивается amazonaws.com):
ssh -i ~/.ec2/lxf-keypair.pem ubuntu@ec2-174-129-86-66.compute-1.amazonaws.com
Так как вы входите в систему с помощью пары ключей, пароль вводить не придется. Ваша ВМ Ubuntu приветствует вас, и теперь на сервере Ubuntu в облаке можно делать все что угодно! Можно создавать пользователей и устанавливать пакеты, такие как web-сервер или база данных. Последнее проще всего сделать командой sudo tasksel.
Кстати, счетчик оплаты запускается с момента запуска ОС на EC2 — не забудьте завершить ее работу, если она вам не нужна! Это делается командой
ec2-terminate-instances i-afa7a8c6
Идентификатор экземпляра, в примере – i-afa7a8c6, можно найти в выводе команды ec2-describe-instances. Однако после остановки системы все ваши изменения, сделанные в образе, будут утеряны.
По умолчанию, каждая ВМ при инициализации получает случайный IP-адрес. Работающий на облаке сервер довольно удобен, но если вы хотите разместить на нем службу для других пользователей, он должен быть доступен по фиксированному IP-адресу. Нужно ли за это платить? Нет! Добрый Amazon предоставляет каждому пользователю пять бесплатных IP-адресов. Вот как их получить:
- Затребуйте IP-ад рес командой ec2-allocate-address. Она вернет строку с зарегистрированным адресом.
- Свяжите выполняющийся экземпляр с выделенным IP-адресом командой ec2-associate-address. Она принимает два параметра: идентификатор экземпляра и IP-адрес.
$ ec2-associate-address 174.129.11.115 -i i-15a3ac7c ADDRESS 174.129.11.115 i-15a3ac7c
Это потребует пары минут, в течение которых система не будет доступна ни по старому, ни по новому IP-адресу. После этого вам нужно будет помнить только один IP-адрес, и можно создать собственное доменное имя, ссылающееся на него. Вывести список всех выделенных IP-адресов можно командой ec2-describe-addresses.
Создаем собственные AMI
EC2 прекрасен, но, как мы уже говорили, по завершении работы системы все изменения уничтожаются. Так почему бы не создать собственный образ? К счастью, Эрик Хэммонд [Eric Hammond] написал скрипт, который собирает, комплектует и загружает образ Ubuntu или Debian на Amazon EC2 (он так же создал несколько образов рабочих столов – см. ниже). Для начала просто загрузите программу с http://ec2ubuntu-build-ami.notlong.com.
Теперь создадим образ Ubuntu Jaunty командой ec2ubuntu-build-ami. Это большая команда с изрядным количеством параметров. Вот ее пример:
sudo bash ec2ubuntu-build-ami --codename jaunty –bucket lxf-bucket --user $AWS_USER_ID --access-key $AWS_ ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_ KEY --private-key ~/.ec2/pk-XXXXXXXXX.pem --cert ~/.ec2/ cert-XXXXXXXX.pem --bundle-opts --no-inherit
Здесь lxf-bucket – название корзины S3, в которой окажется образ. В качестве кодового имени можно использовать ‘dapper’, ‘hardy’, ‘intrepid’, ‘jaunty’ и ‘karmic’ для образов Ubuntu и ‘etch’, ‘lenny’ и ‘squeeze’ – для образов Debian. Эту команду так же можно выполнить на экземпляре образа AMI, запущенном на EC2, опустив параметры --bundle-opts --no-inherit.
Рабочий стол на облаке
На Amazon EC2 можно запустить и настольную версию Ubuntu, и Эрик Хэммонд создал несколько общедоступных образов. Найдите идентификатор образа на http://alestic.com и запустите его на EC2. Например, для 32-битной версии Jaunty команда будет такой:
ec2-run-instances ami-0b729462 -k lxfkeypair
Этот образ загружается дольше, чем образы серверных систем. Зайдите в систему, обновите ее (apt-get update && apt-get upgrade -y) и создайте пользователя командой user-setup. Установите и запустите клиент NX на локальном компьютере и укажите ему внешнее имя хоста своего экземпляра настольной версии Ubuntu в EC2. Введите имя пользователя и пароль, которые вы указали при создании пользователя, и выберите рабочий стол Gnome.
Теперь ваш рабочий стол Ubuntu работает на серверах Amazon. Благодаря NX его не отличить от локального!
Создаем и загружаем
Команда ec2ubuntu-build-ami выполняется очень долго и выдает массу сообщений. Погуляйте в парке, заварите чашечку чая или другого кофеинового напитка и подож дите, пока образ создастся и загрузится. Когда вы вернетесь и увидите, что команда завершила работу, она предложит вам запустить ec2-register для регистрации загруженного образа в Amazon S3. Команда вернет идентификатор образа:
$ ec2-register lxf-bucket/ubuntu-9.04-jauntycustom-20090730.manifest.xml IMAGE ami-7b6c8d12
Идентификатор так же можно найти командой ec2-describeimages:
$ ec2-describe-images IMAGE ami-7b6c8d12 lxf-bucket/ubuntu-9.04-jauntycustom- 20090730.manifest.xml 181921386298 available private i386 machine
Итак, у нас появился частный образ с идентификатором ami-7b6c8d12. Запускается он так же, как и наши прежние образы. Например:
ec2-run-instances ami-7b6c8d12 -k lxf-keypair
Теперь немного подождите и зайдите на свой сервер Ubuntu Jaunty на Amazon EC2 по SSH (по умолчанию создается только пользователь root). Если система не загружается, изучите вывод ядра по команде ec2-get-console-output с идентификатором экземпляра.
Первая команда, которую нужно выполнить при запуске Ubuntu на EC2 – sudo apt-get up-date && sudo apt-get upgrade -y. Она обновит систему.
Получив работающий образ, вы наверняка захотите сделать с ним еще что-нибудь. Добавить пакеты мож но с помощью параметра --package ИМЯ. Перед созданием образа можно так же запустить внешний скрипт параметром --script ФАйЛ. Для сборки образа настольной системы укажите параметр --desktop nx. Тогда в систему так же будет установлен сервер NX, и вы сможете подключиться к нему с рабочего стола Linux через клиент NX.
Кроме утилит командной строки, Amazon предоставляет для управления экземплярами EC2 web-интерфейс. Просто зайдите на http://console.aws.amazon.com/ec2 и войдите на сайт под своей учетной записью AWS. Теперь вы видите состояние своих систем на «приборной доске» [dashboard] EC2. Щелкнув на Instances [Экземпляры], вы увидите все запущенные системы и сможете завершить их работу или перезагрузить их, а так же посмотреть на консольный вывод запущенной системы или создать новую.
Щелкнув на AMIs, вы увидите список всех образов и сможете выбрать один из них для просмотра. Можно зарегистрировать новый образ, разрегистрировать существующий или изменить права доступа к вашим образам. Например, по умолчанию образ приватен, то есть запустить его может только владелец. Однако можно сделать его публичным и разделить с другими пользователями. Вы можете добавить других пользователей, если у вас есть номера их учетных записей AWS. Все это можно сделать и с командной строки, но web-интерфейс дает более широкий обзор.
Форум Swyzzle
Компания Swyzzle из Атланты предлагает сайт, на котором можно создать собственное мультимедиа-шоу. На серверной стороне они используют Ubuntu на Amazon EC2. Лори Холл [Laurie Hall], вице-президент по продуктам, объясняет, почему ее компании так нравится это сочетание: «Мы переместились с другой платформы облачных вычислений на Amazon EC2 из-за ее возможности поддерживать множество разных платформ. Мы выбрали Ubuntu потому, что наше серверное ПО для работы с мультимедиа, Wowza, его поддерживает, и потому, что нам нужна была платформа Unix. Раньше опыта работы с Ubuntu у нас не было, хотя мы уже много лет работа ли с различными версиями Unix. Я предпочла выбрать один из образов с http://alestic.com, так как они чистые и хорошо поддерживаются. При переносе нам оказался очень полезен форум ec2ubuntu на http://groups.google.com/group/ec2ubuntu. Рекомендую каждому желающему развернуть Ubuntu на EC2 подписаться на эту группу».
Польза от Ubuntu на облаке
Зачем нам Ubuntu на Amazon EC2? Если у вас есть web-приложение, и сервер регулярно работает на пике нагрузки, облако может быть жизненно необходимым, но у него есть и другие применения. Например, если вам время от времени нужен большой объем вычислительных ресурсов, но под рукой нет подходящего оборудования, воспользуйтесь конфигурацией High-CPU Extra Large: она примерно эквива лентна восьми виртуальным ядрам с процессорами Opteron или Xeon частотой 2,5 ГГц (см. таблицу «Варианты конфигурации»). Этот виртуальный компьютер отлично вас выручит, если понадобится ускорить сборку ядра на старом процессоре. Не забывайте: вы заплатите всего за один час, а это практически ничего не стоит!
Варианты конфигураций
Tип | Процессор | Память, ГБ | Жесткий диск, ГБ | Платформа | Название | Цена для США, $/час | Цена для Eвропы, $/час |
---|---|---|---|---|---|---|---|
Small [Малая] | 1 вычислительная единица EC2 | 1,7 | 160 | 32-битная | m1.small | 0,10 | 0,11 |
Large [Большая] | 4 вычислительных единицы EC2 | 7,5 | 850 | 64-битная | m1.large | 0,40 | 0,44 |
Extra Large [Супер-большая] | 8 вычислительных единиц EC2 | 15 | 1690 | 64-битная | m1.large | 0,80 | 0,88 |
High-CPU Medium [Средняя, с быстрым процессором] | 5 вычислительных единиц EC2 | 1,7 | 350 | 32-битная | c1.medium | 0,20 | 0,22 |
High-CPU Extra Large [Супер-большая, с быстрым процессором] | 20 вычислительных единиц EC2 | 7 | 1690 | 64-битная | c1.xlarge | 0,80 | 0,88 |