У Amazon есть много вариантов использования их вычислительного облака. И это относится не только к широкой линейке тарифов. Можно сказать, что количество тарифов можно умножить на два, поскольку инстансы бывают двух типов — on-demand и reserved. Их отличие только в стоимости. Первый удобно заказывать, когда необходимо взять вычислительную мощность на время, меньшее чем 1 год. В других случаях действительно выгоднее брать reserved-тип либо комбинировать оба. В принципе, ничто не мешает гонять on-demand instance годами, но финансовые потери в такой ситуации будут существенны, да и глупо это.

Например, я подсчитал, что примерная месячная стоимость on-demand t1.micro с параметрами как на Free Tier будет составлять около $15.76 (я рассчитывал так, что ресурсы будут израсходованы по максимуму):

  • Собственно вычислительная мощь: 0.48 * 30 * 12 = 172.8
  • 10 ГБ EBS: 0.1 * 10 * 12 = 12
  • 1 млн. I/O-операций на EBS: 0.1 * 12 = 0.12
  • 1 ГБ S3 storage для EBS: 0.14 * 12 = 1.68
  • 14 ГБ исходящего трафика (потому, что первый ГБ трафика ежемесячно бесплатен): 0.12 * 14 * 12 = 20.16

В год это $206.76 — дешевле, чем самый дешевый тариф от Linode.com. У Linode, правда, свои прелести есть. Например, 200 ГБ трафика дают на самом дешевом тарифе. Тем не менее, по сравнению с тем же AWS, on-demand выглядит дороже, когда узнаешь цену на reserved instance. Она составляет $54/1 год и $82/3 года. В принципе, можно было бы даже не учитывать всё, что навешивается дополнительно, достаточно сравнить первую цифру из расчетов с этими двумя. Что выбрать — 1 on-demand или 3 reserved t1.micro на год и пачку пива на вечер? :)

Хорошо, цифры смотрятся красиво, так как купить зарезервированный инстанс?

Тут есть два варианта. Первый — воспользоваться EC2 API Tools. Второй — из консоли управления AWS. Первый вариант я не пробовал, но всё же доверяю написанному. Быть может, кто-то из вас его попробует и потом поделится в комментариях опытом с благодарным Олежкой и читателями его блога ;). Кстати, если вы вознамерились делать первый вариант, и у вас при этом есть Ubuntu, то пользоваться ссылкой, которую я дал в начале абзаца, необязательно. EC2 API Tools есть в стандартных репозиториях Ubuntu, и проще поставить их традиционным способом:

aptitude install ec2-api-tools

Второй вариант — из консоли управления AWS.

По цифрам на картинке — Закладка “EC2” → В категории “Instances” кликнуть по “Reserved instances” → Кликнуть по кнопке “Purchase Reserved instances”:

Покупка Reserved Instance по шагам

Появится окошко, в котором будет предложено, какой тип инстанса вы хотите зарезервировать.

Покупка reserved instance

На снимке показаны те параметры, которые были нужны мне. Внимательно выбирайте нужные вам параметры. Тут зарыта маленькая, но немного воняющая собачка. Дело в том, что на самом деле вы покупаете не инстанс. Вы покупаете гарантию того, что какой-то из ваших инстансов (а может и все) будет работать непрерывно всё то время, которое вы оплатили. Проще говоря, после нажатия кнопки Continue вы не получите интерфейс для выбора AMI и прочей требухи для инстанса. После получения от вас подтверждения в ваших намерениях вам просто скажут “Всё окей, чувак, мы списали денежки с твой карточки, жди результата”.

Резерв куплен

Результатом будет появление ваших инстансов в категории Reserved instances, которая ранее пустовала. Если у вас такого инстанса нет (еще раз, внимательно смотрите на параметры резервируемых инстансов), вам необходимо его создать. В моей ситуации я уже имел работающий инстанс и во время резервирования указал именно его параметры. Инстанс появляется в категории Reserved не сразу, а в течение примерно 1 часа.

aws-reserved-list

Вообще метод предоставления услуги весьма интересный. Вот, например, случай, в котором он сработает на клиента: допустим, у вас есть t1.micro в us-east-1a c Linux на борту и он зарезервирован. Вам понадобилось полностью обновить ПО, вместе с операционной системой. Разумеется, для этого нужно погасить старый инстанс, создать новый (с теми же параметрами, что и у старого, т.е. Linux-инстанс t1.micro в зоне us-east-1a) с нужной ОС и накатить на него софт. Так и делаете. В результате у вас два инстанса. Удаляете старый, и по прошествии определенного времени уже новый становится зарезервированным. Таким образом, вы не теряете уплаченные деньги, вам не нужно кантовать саппорт с просьбами переключить что-то на что-то, чтобы вернуть деньги или направить их в нужное “русло”. Вы как будто поменяли плашку оперативной памяти в своем компьютере. Подробнее про то, как оно работает, можно почитать в этой ветке форума об AWS.

Однако, есть у меня один вопрос. Скажем, есть два одинаковых инстанса, находящихся в одной зоне. И вы покупаете резерв только для одного. Получается, что один резервируется, и один остается on-demand. Поскольку процесс резервирования происходит в режиме, который не контролируется пользователем, неизвестно, какой именно из этих двух инстансов будет зарезервирован. Это не имеет значения, даже смысла, когда два инстанса идентичны вплоть до выполняемых ими задач. Однако же, это имеет значение в противном случае.

UPD: Каюсь, был невнимателен, когда читал их документацию. Дело в том, что, покупая у Amazon reserved-инстансы, вы покупаете серьёзную скидку за час работы инстанса. Т.е., после покупки reserved-инстанса, вам всё равно будут начислять денежки за пользование, но, конечно же, в итоге получится дешевле, чем on-demand. Так что, к стоимости вычислительной мощи reserved-инстанса нужно прибавить ежемесячное пользование. Для t1.micro это (на данный момент — декабрь 2011 года) 0.007 * 24 * 30 (тут, понятное дело, я взял усредненно количество дней). Даже при таком раскладе получается дешевле, чем, наверное, везде.