Это история о том, как мы сократили расходы на AWS на 80% всего за две недели.

Для разработчиков AWS — это Клондайк возможностей

Начнем с того, что с 2018 года мы полностью перешли на AWS для всех наших проектов, и это действительно стало настоящим спасением. Наша команда полностью удаленная, поэтому владение собственным датацентром в какой-либо точке мира вызывало бы немало сложностей. Гораздо проще и экономичнее арендовать ресурсы у AWS, избегая при этом крупных капиталовложений.

Вести переговоры о покупке новых серверов с CFO? Не, спасибо! Неконтролируемо тратить тысячи на AWS? Я в деле!
Вести переговоры о покупке новых серверов с CFO? Не, спасибо! Неконтролируемо тратить тысячи на AWS? Я в деле!

Главная проблема AWS заключается в том, что разработчики фактически могут создавать любые ресурсы, не согласовывая это с финансовым отделом. В условиях традиционного дата-центра такое немыслимо: для приобретения дополнительного сервера потребуется счет-фактура от поставщика и одобрение покупки финансовым отделом.

Иными словами, основной корень проблемы в том, что с AWS разработчики могут купить столько ресурсов, сколько захотят и когда захотят.

Что мы сделали, чтобы сократить расходы на AWS?

Мы небольшая компания, и наши затраты на AWS немногим больше 7 тыс. долларов в месяц по всем учетным записям AWS. Также стоит упомянуть, что мы размещаем только DEV и QA‑стенды, поскольку PROD‑стенды оплачиваются нашими клиентами. Наши ресурсы — это в основном отдельные рабочие машины для разработки, тестовые базы данных и различные специализированные ресурсы для исследовательских проектов, такие как Kinesis Firehose, Sage Maker и т. д. Таким образом у нас множество разнообразных ресурсов, которые сложно классифицировать, структурировать, прогнозировать и контролировать.

Так что же мы сделали, чтобы снизить наши расходы на AWS?

Во-первых, мы начали изучать Cost Explorer и определили самые дорогостоящие позиции:

  • Мы обнаружили узел Bitcoin, который без остановки работал последние 4 месяца, и стоил нам 600 долларов в месяц, поскольку для его работы требовался большой SSD с дополнительной предоставленной скоростью. Мы проводили небольшое исследование по ординалам Bitcoin и не удалили эту машину.

Решение: мы заархивировали диск (это обходится нам в $6/месяц) и прекратили работу виртуальной машины. 

Экономия: $594 в месяц.

  • Мы нашли машину с GPU Nvidia Tesla, которая обходится нам в $531 в месяц. Мы продолжаем использовать её для экспериментов с генеративным искусственным интеллектом. Мы планируем создать своё приложение, которое будет преобразовывать текст в видео, поэтому эта машина нам нужна. 

Решение: мы переместили диск на spot-инстанс.

Экономия: $360 в месяц.

  • Это не была самая дорогая ошибка, но самое удивительное, что мы обнаружили — это то, что забыли удалить демо-PROD стенд в одном из неиспользуемых регионов, где мы развернули наши скрипты terraform для тестирования развертывания PROD «с нуля».

Экономия: $340 в месяц.

  • Еще множество мелких позиций. 

Решения: различные. 

Экономия: $1700 в месяц.

Во-вторых, мы начали переносить все, что возможно, на spot‑инстансы. Это простая процедура. Для отдельной машины вам нужно ее выключить, отсоединить диск (не забудьте записать путь к монтированию), а затем остановить работу машины. Затем вы создаете новый spot‑инстанс (неважно, какой AMI, главное — чтобы архитектура CPU была совместима с вашим предыдущим диском). Как только spot‑инстанс создан, отсоедините (и не забудьте удалить!) новый диск и подсоедините предыдущий диск на том же пути монтирования, что и на исходной машине. Для сред Beanstalk процесс еще проще — мы просто изменили настройки мощности, чтобы использовать только spot‑инстансы.

Экономия: $1000 в месяц

В-третьих, мы очистили неиспользуемые S3-бакеты (мы использовали некоторые автоматические торговые боты, которые накапливали большое количество потоковых данных). Мы также настроили автоматическое удаление данных в нескольких S3 бакетах, чтобы не хранить торговые данные более года, так как они полностью устаревают и становятся бесполезными. 

Экономия: $300 в месяц.

В-четвертых, мы уменьшили некоторые ресурсы. Вопрос в проверке используемого CPU и RAM, и если мы видим постоянное использование менее чем на 50%, мы уменьшаем уровень. 

Экономия: $300 в месяц (было бы в 3 раза больше на on-demand инстансах).

В-пятых, мы настроили автоматическое выключение на отдельных машинах. Мы создали множество функций lambda для разных типов задач: выключение SageMaker Jupyter VM после 1 часа бездействия, выключение отдельных VM, DEV и QA стендов на ночной период, когда никто не работает. Эти функции lambda запускаются на событиях CloudWatch каждый день. Также существуют функции lambda для включения DEV и QA стендов, чтобы облегчить процесс. 

Экономия: $500 в месяц.

Конечно, мы также применяли и другие мелкие меры по снижению расходов, но об этом мы не будем говорить в этой статье. 

На сегодняшний день мы уже сократили наши месячные затраты на AWS с $7000 до примерно $1500. Это около 80% от всей суммы! Я и представить не мог, что мы так много тратим на AWS. В итоге наша годовая экономия может достигнуть порядка $66,000.

Как организации подходят к оптимизации облачных расходов?

После того, как мы сами прошли через оптимизацию облачных расходов, я убедился, насколько критически важно мониторить эти затраты. Ведь уменьшение расходов на облачные сервисы может серьезно ускорить развитие бизнеса, если перенаправить сэкономленные средства, например, в маркетинг. Альтернативно, можно взять эти деньги в виде дивидендов и приобрести новый автомобиль. Это уже значительная сумма, которую можно потратить на множество нужд.

Если оптимизация затрат на облачные сервисы — это такая ключевая задача, то как компании обычно её решают? Давайте рассмотрим различные способы управления расходами на облачные ресурсы, от простых до более сложных и продвинутых.

1. Покупка только виртуальных машин

Вы можете подойти к этой проблеме самым традиционным способом. Игнорировать бесчисленные возможности, которые предоставляет AWS, и ограничить ваших разработчиков только покупкой виртуальных машин EC2. 

SQS? Нет. DynamoDB? Нет. Просто используйте виртуальные машины EC2 и устанавливайте на них все, что нужно.

Плюсы:

  • Расходы можно спланировать очень точно, потому что цена каждой машины EC2 заранее известна

  • Разработчики могут установить на доступные машины все, что им нужно. Это похоже на работу в обычном дата-центре, так что деньги тратятся эффективно.

Минусы:

  • Вы теряете все преимущества автомасштабирования

  • Разработчики тратят время на создание функционала, который на самом деле уже есть

  • Вы пропускаете автообновления, которые могли бы быть установлены автоматически. 

В общем, эта стратегия по типу «снять хостинг на GoDaddy и делать всё самим» — не лучший подход при работе с облаком.

2. Проверять каждый запрос

А что если разработчикам разрешено использовать и масштабировать любые ресурсы, но они должны согласовывать их с отделом, который контролирует затраты? Разработчики не могут самостоятельно приобретать или масштабировать ресурсы, но могут попросить специального сотрудника сделать это за них.

Представьте, что разработчику нужна конечная точка Kinesis Firehose (да, я упоминаю сервис, о котором вы, скорее всего, даже не слышали). Будет ли простой задачей для разработчика объяснить контролеру, что он хочет? Затем разработчику также придется объяснить причину масштабирования и, возможно, даже доказать, что выбор архитектуры является эффективным и не требует лишних затрат.

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

И это только верхушка айсберга. Теперь представьте:

  • Ресурс становится ненужным из-за изменения архитектуры

  • Разработчик увольняется и не удаляет ресурсы, которые использовались для индивидуальной разработки

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

Плюсы:

  • Разработчикам разрешено максимально использовать преимущества управляемых ресурсов AWS

  • Затраты хорошо контролируются.

Минусы:

  • Могут появиться излишки облачных ресурсов из-за ненужных и неудаленных элементов

  • Команда управления затратами должна обладать высоким уровнем знаний AWS

  • Уровень бюрократии может негативно сказаться на бизнесе.

3. Нанять команду FinOps

Более современный подход — это найти и привлечь специалистов по AWS, которые будут следить за нашими расходами. У AWS есть куча встроенных инструментов для контроля расходов. Это, например:

  • «исследователь расходов» (он как детектив, который анализирует, куда уходят деньги)

  • система тегов (это чтобы знать, какой проект или команда «кушает» больше всего)

  • зарезервированные экземпляры и планы экономии (чтобы сэкономить на долгосрочных проектах)

  • отслеживание аномалий в расходах (если что-то необычное происходит с расходами, они вам об этом скажут)

  • И многое другое.

Все эти инструменты не самые простые в обращении, нужно хорошо разбираться в AWS. Но зато мы можем вести контроль облачных расходов. Важно не только иметь инструменты и знать, как с ними работать, но и создать определённый «ритм» работы: периодически проверять ресурсы, проводить «уборку» и «оптимизацию».

Есть такое направление, как FinOps — это в основном команда DevOps, но с акцентом на финансах.

Плюсы:

  • Разработчикам доступны все преимущества AWS

  • Минимум бюрократии для разработчиков

  • Финансовая команда контролирует расходы по разным направлениям: по проектам, по командам и так далее

  • Разработчики сознательно используют ресурсы.

Минусы:

  • Нужны специалисты высокого класса, а таких ещё практически нет на рынке, так что придётся обучать своих сотрудников

  • Есть риск ошибок из‑за «человеческого фактора»

  • Если мы проверяем ресурсы не каждый день, то какой-нибудь неиспользуемый сервер может простаивать неделями, а мы об этом даже не узнаем.

4. Использовать программное обеспечение для управления облачными ресурсами

Если вы серьезно думаете о найме (или создании своей собственной) команды FinOps, вы также должны рассмотреть возможность использования стороннего программного обеспечения для оптимизации облачных затрат, например Infinops. Это ваш автоматический член команды FinOps, который работает 24/7 и не подвержен человеческим ошибкам. Такое программное обеспечение автоматически контролирует ваше облако на предмет недостаточно используемых ресурсов и других известных способов экономии, таких как:

  • Использование спотовых экземпляров

  • Использование зарезервированных экземпляров

  • Сокращение числа кластеров OpenSearch в QA-окружении

  • Отключение персональных VM на ночь

  • Автоматическое отключение дорогих VM SageMaker с Jupyter

  • и т.д.

Все эти советы приходят автоматически, поскольку ваша система постоянно сканируется на предмет изменений. И такие рекомендации могут сэкономить вам до 80% ежемесячного счета. Обычно это означает экономию не менее десятков тысяч долларов за год.

Плюсы:

  • Отличный инструмент для команды FinOps

  • Помогает новичкам в FinOps с методами оптимизации

  • Сокращает риск человеческого фактора

  • Обеспечивает периодический обзор потребления ресурсов

  • Двигает к использованию тегов, управлению жизненным циклом и т.д.

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

Минусы:

  • Имеет свою стоимость (обычно намного меньше, чем экономит).

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


  1. segment
    27.07.2023 13:15
    +2

    Поясните, а в чем заключается необходимый профессионализм FinOps? Мне не совсем понятно, потому что Вы описали в статье собственно саму суть оптимизации — посмотреть что неиспользуется и выключить, а также снизить ресурсы где уже не такая нагрузка.


  1. shai_hulud
    27.07.2023 13:15
    +9

    Вы можете подойти к этой проблеме самым традиционным способом. Игнорировать бесчисленные возможности, которые предоставляет AWS, и ограничить ваших разработчиков только покупкой виртуальных машин EC2. 

    SQS? Нет. DynamoDB? Нет. Просто используйте виртуальные машины EC2 и устанавливайте на них все, что нужно.

    Если посыпать всё кубером, то проблем с маштабированием нет.

    А альтернатива это сесть на штырь AWS и думать что это хребет айти-компании.


  1. amateur80lvl
    27.07.2023 13:15
    +2

    Ужос. Не знаю, сколько бы платили мы за этот AWS. Колокейшн нам стоит $95 за 1U и $120 за 2U серверы. Техподдержка, конечно, $80/час, минимум 15 минут, но всё налажено, поэтому за последние три года ни разу не была нужна.

    Ах, да - стоимость серверов. $3000 в среднем, но в долгосрочной перспективе всё равно меньше AWS, причём гораздо.


    1. farafonoff
      27.07.2023 13:15

      Каждой задаче свое решение. Как долго у вас займет сделать для меня sftp ссылку, чтобы я мог отправить вам 1000ТБ особо важных экспериментальных данных?


      1. atd
        27.07.2023 13:15
        +2

        Просто заплатить разово за rsync.net (или любой другой аналог, много их). Своё железо — не религия, и не запрещает «перебиваться» облачными сервисами по мере надобности.


  1. GryZin
    27.07.2023 13:15
    +2

    "SQS? Нет. DynamoDB? Нет. Просто используйте виртуальные машины EC2 и устанавливайте на них все, что нужно"

    Привет! Из этого пункта я делаю вывод что вы не совсем оптимальный для себя выбрали cloud. Думаю Azure или digitalocean вам бы больше подошло.


  1. shmutz
    27.07.2023 13:15
    +2

    Если отказаться от AWS в пользу какого-нибудь хетцнера, то ещё раза в 2-3 дешевле будет (за одинаковую производительность). VDS-ы там на любой вкус.


  1. vainkop
    27.07.2023 13:15

    Спасибо за статью.

    Все комментаторы, которые пишут что-то вроде "не используйте AWS", используйте Hetzner/Digitalocean и т.п. в том числе просто до конца не понимают насколько удобна его экосистема и насколько быстрее эти удобства позволяют выкатывать новый бизнес функционал в прод, который и приносит прибыль позволяющую в том числе оплачивать счета AWS. И да, это не для всех подходит.

    Стартапам поначалу AWS может вообще ничего не стоить, т.к. AWS может выдать 100 тысяч долларов на старт.

    К тому же AWS - серьёзное облако с большим количеством нюансов и возможностей для оптимизации расходов и заезжать в него и платить реальные деньги при этом не разбираясь и потому говорить, что дорого - это ... странный подход.


    1. Suvitruf
      27.07.2023 13:15

      Стартапам поначалу AWS может вообще ничего не стоить, т.к. AWS может выдать 100 тысяч долларов на старт.

      Так же как Azure и DO)


      1. vainkop
        27.07.2023 13:15

        И это не отменяет остального сказанного мной выше.

        Ставить DO в один ряд с Azure не серьёзно, а уж с AWS и подавно: DO беден по функционалу и экосистеме сервисов и менее надёжен и в этих условиях смысла использовать их программу для стартапов вместо AWS, в большинстве случаев, нет.

        Например, events like S3 triggering Lambda or SQS и т.д., сама Lambda, API Gateway + XRay, KMS, Opensearch, multi region PG (Aurora) и другие сервисы крайне полезны стартапу в целом и разработке могут пригодиться в любой момент и это поднимаются в AWS в production ready конфигурации за минуты и по большей части не требует обслуживания (конечно кроме Aurora и то, если она под высокой нагрузкой и т.п.).


        1. shmutz
          27.07.2023 13:15

          >events like S3 triggering Lambda or SQS и т.д., сама Lambda, API Gateway + XRay, KMS, Opensearch, multi region PG (Aurora) и другие сервисы крайне полезны стартапу

          смузихрень. конечно, стартап стартапу рознь, все мечтают стать единорогом. остальные делают overkill (сидя в aws)


          1. vainkop
            27.07.2023 13:15
            +1

            смузихрень. конечно

            Что из перечисленного мной вы считаете "смузихренью" и можете ли вы обосновать ваше мнение? Вы видели, что используют что то и это на самом деле не нужно? Вопросы не к AWS, а к тому, у кого вы видели. AWS предоставляет возможности.

            стартап стартапу рознь, все мечтают стать единорогом

            о том, чтобы стать единорогом мечтает 100% стартапов, не обманывайте себя, если думаете по-другому. Это бизнес и все мечтают зарабатывать как можно больше.

            остальные делают overkill

            Для стартапов обычно крайне важно иметь возможность быстро изменить продукт в угоду спросу/потенциальным клиентам и в AWS это сделать легче всего, потому что есть готовые сервисы очень много для чего, на поднятие и обслуживание которых нужно тратить значительно меньше времени команды и соответственно денег на зп и найм. Да в AWS можно и накрутить лишнего, но если это нужно, то есть такая возможность. А ещё стартапам предоставляют консультации архитекторов AWS и много другого полезного, чтобы знать как делать правильно.

            Я вам больше скажу: есть вполне себе не стартапы, а компании имеющие миллионы клиентов, которые прямо сейчас в проде под высокой нагрузкой используют перечисленные мной сервисы и не переезжают из AWS в том числе потому, что AWS дает им недоступную где либо ещё надежность и моментальную масштабируемость при резких наплывах трафика.


            1. shmutz
              27.07.2023 13:15

              опять рекламный поток... Именно "надежность и моментальную масштабируемость при резких наплывах" это то, что подавляющему большинству стартапов не нужно. Я, кстати, AWS не использовал, но от гуглоклауда и azure ужасные впечатления, когда тебе просто нужна пара серверов с nvme-дисками. И в хетцнере такое стоит 40 евро в месяц, а в абажурах 400 и при этом диски с SSD 5000 IOPSов , а HDD с 50 IOPS. И хоть ты тресни ) нафиг мне не нужна меганадежность с такой скоростью.

              И, кстати, у гуглоклауда лично сталкивался, весь датацентр падал на минимум 2 дня. Ты тыкаешь start vm, а тебе в ответ - нет ресурсов ) щас скажешь, что это нормально, надежность же не 100%, а 100 минус соплинка. Только соплинка бывает весьма смачная )


              1. vainkop
                27.07.2023 13:15

                опять рекламный поток... Именно "надежность и моментальную масштабируемость при резких наплывах" это то, что подавляющему большинству стартапов не нужно. 

                Читайте внимательнее, в этом абзаце я писал не про стартапы.

                Я, кстати, AWS не использовал, но...

                Как говорится "не читал, но осуждаю"? Я не писал, что всем нужно только в AWS и что Hetzner плох. Но :) вот, например, понадобился вам брокер очередей и в Hetzner вы пойдете заниматься его установкой, настройкой и дальнейшей поддержкой и не забудьте про скейлинг инфраструктуры, если это должно работать под какой-то нагрузкой), тогда как в AWS вы очень быстро создаете, например, SQS, причем сразу по экземпляру на каждое окружение, пилите фичи, прогоняете по окружениям, катите в прод. Для тех.же стартапов скорость релизов бывает очень даже критична.

                Статья про AWS, а не всех облачных провайдеров, и мои комментарии в целом тоже. Но всё же отмечу, что "ты тыкаешь start vm, а тебе в ответ - нет ресурсов" - это не похоже на "падение датацентра минимум на 2 дня".

                Далее, даже при достаточно высокой надёжности AWS проблемы случаются везде и как и везде вам необходимо самостоятельно решать насколько много ресурсов вы готовы потратить на лишние девятки в доступности вашего приложения. Это относится как к созданию инфраструктуры в нескольких зонах доступности/регионах (отказал один дц/зона/регион, ваши пользователи это не ощутят), так и продумыванию использования конкретных технологий, вроде spot instances, у которых есть свои нюансы by design (именно поэтому они и дешевле). Например вы решили поднять всё на спотах в одной зоне доступности, но не учли, что споты могут и закончиться (в терминологии Google Cloud - Preemptible instances?). К слову в связке с AWS spot instances очень неплохо работает spot.io или Karpenter, у каждого из которых свои плюсы и минусы и которые позволяют реализовывать порой даже очень stateful нагрузки на спотах.

                По итогу AWS даёт вам возможность реализовать желаемое, потратив на это минимум человекочасов и управляя всем этим правильно и очень гранулярно (например AWS IAM очень хорош, хоть и не прост для новичков) : git + terraform + CICD и т.д., а для большинства кейсов для Terraform ещё и community модули есть.


                1. shmutz
                  27.07.2023 13:15

                  >я писал не про стартапы.

                  99% что там вот эффективный дедушка в совете директоров/CEO порешал, а низы подчинились. скажу что в одном РФном системообразующем предприятии столько всякой дичи и миграций творится. то в облако, то из облака, то сап, то оракл, то лотус, то эксченж, то 1с.... и обоснования всегда есть. )

                  >понадобился вам брокер очередей

                  прогер его поднимет у себя на локалхосте одной доцкер-командой за 3 минуты

                  девопсь его поднимет в хетцнере одной командой ансибля. ну и вообще, у него в хетцнере кубер развернут )

                  >это не похоже на "падение датацентра минимум на 2 дня"

                  мимо тазика, это были не preemptible узлы

                  у гугла и остальных аварии случаются достаточно часто, надо разбаниться в гугле уже.


                  1. vainkop
                    27.07.2023 13:15

                    > понадобился вам брокер очередей

                    прогер его поднимет у себя на локалхосте одной доцкер-командой за 3 минуты

                    девопсь его поднимет в хетцнере одной командой ансибля. ну и вообще, у него в хетцнере кубер развернут )

                    Вы продолжаете игнорировать мои аргументы.

                    У любого сервиса есть цикл жизни. Вы почему то рассматриваете только "поднять", хотя нужно ещё обсуживать, масштабировать, патчить, разбираться с сетевыми проблемами и т.д. т.к. в Hetzner брокер очередей - это не managed сервис.

                    Для того, чтобы что-то поднять ансиблом одной командой у вас уже должен быть написан плейбук и в концов настроен ансибл, тогда как в случае с AWS разработчик может не имея вообще ничего (включая DevOps'а) с околонулевыми затратами времени накликопсить, после чего это можно импортировать в терраформ (например когда DevOps появится). Видел множество стартапом с такой не очень красивой ситуацией, но уже работающих в проде, т.е. приносящих необходимую им пользу, а иногда и реальные деньги от клиентов.

                    > это не похоже на "падение датацентра минимум на 2 дня"

                    мимо тазика, это были не preemptible узлы

                    у гугла и остальных аварии случаются достаточно часто, надо разбаниться в гугле уже.

                    Описанная вами ошибка не говорит о падении датацентра, и вы удобно проигнорировали всё, что я написал в том числе про зоны/регионы и девятки в доступности. Кратко перефразирую: вы можете реализовать вашу архитектуру так, что при падании одного из дц ваше приложение корректно отработает эту ситуацию и не повлияет на клиентов. В AWS часто это можно настроить из коробки. В Hetzner это гораздо сложнее.

                    За сим считаю бессмысленным продолжать дискуссию, потому что вы игнорируете мои аргументы.


                    1. shmutz
                      27.07.2023 13:15

                      >Описанная вами ошибка не говорит о падении датацентра

                      какой твердолобый впариватель облаков-то. о падении ДЦ у гугла говорят новости. перенести инстанс руками в другой регион я перенес, но то же самое я делаю и в селектеле и в хетцнере.

                      >с околонулевыми затратами времени накликопсить пользу

                      всё что надо знать про 80% стартапов... ))


  1. oller
    27.07.2023 13:15

    Как был у вас бардак, так и остался бардак....