Сейчас активно внедряю решения по уменьшению расходов на инфрастуктуру AWS, решил закинуть пару постов на эту тему.
Первым будет тема AWS RDS Reserved Instances. Суть проста: вы обязуетесь использовать определённые инстансы один или три года. При этом есть возможность как оплатить их использование сразу на весь период — тогда скидка будет больше, либо частично, либо без предоплаты вообще — в таком случае с вас каждый час просто будет сниматься сумма, на которую коммититесь при покупке серверов («резервации инстансов»).
Аналогичное решение для AWS EC2 — Saving Plans (хотя и для них существуют EC2 Reserved Instances, но AWS переходит на использование Saving Plans как основного решения). Saving Plans для RDS, думаю, в скором времени появится тоже. AWS EC2 Saving Plans рассмотрим подробнее в следующем посте — мы ими уже активно пользуемся, и они тоже реально помогают экономить.
Учтите, что Reserved Instances работают для конкретного региона, в котором она приобретается, на определённое семейство инстансов и на их количество.
Посмотрим наши текущие расходы, что бы определить сколько и куда мы сейчас тратим.
Содержание
Анализ расходов AWS RDS
Переходим в Cost Explorer, в Filters выбираем RDS, и смотрим расходы по типам инстансов:
Больше половины, 111 USD/day, у нас уходит на инстансы типа r5.2xlarge — это наши Production сервера AWS RDS Aurora-кластеров, и их тип меняться не планируется — вполне тянут текущие нагрузки. Значит — есть смысл в их резервации (посмотрим, сколько серверов брать).
AWS Cost Explorer: RDS No Instance type
Вторая крупная часть расходов — No Instance type, 37 USD/day.
Что бы узнать, что это за расходы — переключаем Group by с Instance type на Usage type:
Тут видим ещё три опции, за которые начисляется оплата — Aurora:StorageIOUsage
— 16 USD, Multi-AZUsage:db.t2.xlarge
— 14 USD, RDS:ChargedBackupUsage
— ещё 8 USD, плюс по мелочи аналогичные расходы (толковый пост — Tips and Tricks for Exploring your Data in AWS Cost Explorer).
Их уменьшить с помощью Reserved Instances мы не можем, поэтому пропускаем.
Возвращаемся к Group: InstanceType, смотрим оставшиеся инстансы — db.r5.large 27 USD/day, db.t2.xlarge — 14 долларов.
Переходим в RDS, считаем количество каждого типа инстанса:
- db.r5.2xlarge:
- USA-2 region: Production кластер, 4 штуки + Aurora ReadReplica AutoScaling
- db.r5.large:
- USA-2 region: Dev и Stage кластера, 4 штки
- db.t2.xlarge:
- EU-3 region: аналитика Production, 1 сервер
Есть смысл пока взять в Ohio db.r5.2xlarge 4 штуки — менять эти сервера в ближайшем времени не планируем.
Size-flexible reserved DB instances
См. документацию тут>>>.
Ещё один нюанс, который стоит учитывать: при покупке резерваций на конкретный тип инстанса, в нашем случае это 2xlarge, эта скидка будет распространяться на всё семейство r5, которые мы покупаем. Т.е. и на r5.large, и на r5.4xlarge, если такие появятся в будущем.
В этом плане EC2 Saving Plans, конечно, более удобны и очевидны, надеюсь, их таки прикрутят и для AWS RDS.
Вернёмся к нашим баранам серверам.
Итак, Dev и Stage кластера могут меняться, поэтому их пока не трогаем — r5.large не покупаем, но позже увидим их на графиках — скидка с r5.2xlarge будет распространяться и на них.
Смотрим в Billings:
«USD 1.16 per RDS db.r5.2xlarge», за 13 дней Апреля отработали суммарно 1168 часов, что обошлось нам в 1355 долларов, проверим:
[simterm]
>>> 1355/1168.0 1.16
[/simterm]
Смотрим цены на инстансы — db.r5.2xlarge стоит 1,16 доллара за час, тут всё сходится.
В месяц 1 инстанс обходится в:
[simterm]
>>> 1.16*24*30 835.19
[/simterm]
В год:
[simterm]
>>> 1.16*24*30*364 304012.8
[/simterm]
Запомним эти цены — сейчас посмотрим, что нам покажут при покупке резерваций.
Покупка Reserved Instances
Переходим в RDS — Reserved instances, кликаем Purchase Reserved DB Instance:
Смотрим цены на инстансы — db.r5.2xlarge, Offering type — No Upfront:
0.760 USD (hourly) — это в месяц получается 547 долларов, или 199180 за год (сейчас, как помним, они нам обходятся в 835 и 30000 соответственно).
Если же выбрать All upfront, т.е. заплатить за них сразу вперёд, то:
5,541.00 USD, или по:
[simterm]
>>> 5541/364/24 0.63
[/simterm]
0,63 доллара в час — цена ниже практически вдвое!
Либо можно не мучаться с калькулятором, а просто использовать
При No upfront — 554 доллара:
И при All upfront — 5541 за год, т.е. 461 в месяц:
Собственно — как мы и считали с калькулятором.
Дальше осталось только зарезервировать 4 инстанса r5.2xlarge:
И подождём пару дней, что бы увидеть насколько уменьшится расход.
Результаты покупки RDS Reserved Instances
Превой неожиданностью стало то, что AWS снял сумму за резервации на следующий день и до конца месяца, хотя судя по документации (да и на скришоте выше — «will charge $0.00»), и так как выбирался «No upfront«, ожидалось, что будет чаржить каждый час, как при использовании EC2 Saving Plans, а не наперёд:
В документации по резервациям RDS этого не сказано, но есть в документации к EC2 Reserved Instances:
13 число, до конца месяца осталось 17 дней, считаем:
[simterm]
>>> 1343/17/4/24.0 0.82
[/simterm]
0.82 доллара.
Если вычтем примерно 100 долларов за сервера, которые не покрыты резервациями (см. скрин ниже, за 14-е число) — то получим как раз 0.76 доллара за час работы каждого зарезервированного инстанса:
[simterm]
>>> (1343-100)/17/4/24.0 0.7616421568627452
[/simterm]
Итак, резервации заработали, что стало хорошо видно на графиках за 14-е число:
Либо можно переключиться на почасовое отображение, и увидеть в графиках ещё за 13-ое.
Полезными могут быть графики по AWS Cost Management > Reservations > Utilization report — посмотреть, насколько используются наши 4 зарезервированных инстанса:
Все 4 наши резервации r5.2xlarge используются на все 100%, и тут же видим, сколько мы сэкономили: 111 долларов было бы при использовании On Demand инстансов, 72 мы заплатили за резервации, 38 в день сэкономили.
А вот Coverage report говорит, что мы покрываем не все расходы на r5, так как, как помним — Size-flexible reserved DB instances покрывает расходы на всё семейство r5 в регионе, а у нас ещё 4 штуки обычных r5.large, и часть резерваций покрывает их:
И это же видно в Cost explorer running hours costs and usage:
Плюс — автоскейлинг Aurora, где иногда создаются read-replicas, которые хоть и живут недолго, 10-15 минут, но каждый инстанс билится за час.
В общем — RDS Reserved Instances штука приятная, экономить помогает значительно, хотя местами не слишком очевидная и удобная.
В этом плане EC2 Saving Plans лучше и гибче, о чём и поговорим в следующий раз.