Привет! Я — Владимир Чмуж, Full Stack Web developer & Solution Architect в NIX. На протяжении семи лет я занимаюсь веб-разработкой, у меня есть опыт взаимодействия с облачными платформами. Внимание к облачным технологиям ежегодно растет. Если вы планируете связать свою жизнь с разработкой программного обеспечения, то весьма вероятно, что вам придется столкнуться с той или иной cloud-платформой. На сегодняшний день Amazon Web Services — самая популярная из них.
Эта статья даст вам базовое понимание основных возможностей AWS и будет полезна тем, кто только начинает знакомство с платформой. Поехали!
Если однажды Amazon не станет, то каждый пользователь интернета ощутит это на себе
Amazon Web Services — это онлайн-платформа, которая предоставляет пользователям виртуальные вычислительные ресурсы, хранилища, инфраструктуру и сервисы, которые содержат функционал уже готовый к использованию.
Вместо того, чтобы покупать физический сервер и устанавливать его локально, вы арендуете виртуальные ресурсы онлайн.
AWS-сервисам доверяют крупнейшие корпорации, которые выбирают эту платформу для обслуживания рабочих нагрузок, включая мобильные и веб-приложения, разработку игр, обработку и хранение информации. Если бы вдруг AWS прекратил свою работу, это повлияло бы на многих пользователей интернета. Популярные сайты и сервисы прекратили бы функционировать, так как они широко используют мощности AWS.
График ниже показывает, что AWS занимает 32% рынка всех облачных платформ. На втором месте — Microsoft Azure, а на третьем — Google.
AWS занимает почти половину рынка всех облачных платформ / Canalys
Используя платформу AWS, проект Coursera может ежемесячно обрабатывать около 500 Тбайт трафика. В 2009 году Netflix стал самым известным первым пользователем AWS среди больших корпораций и сейчас использует более 100 000 серверных инстансов на AWS.
Успешные примеры использования возможностей AWS можно перечислять очень долго. Но прежде чем перейти к подробному разбору этих сервисов, рассмотрим основные способы взаимодействия с платформой.
Сервис Elastic Cache – Reserved Nodes
Немногие знают, что можно приобретать reserved инстансы для Elastic Cache. Экономия довольно значительная:
- 1 год резерва – 65% скидки
- 3 года резерва – 77% скидки
Процесс схож с приобретением EC2 инстансов. Чтобы приобрести reserved node, необходимо сделать следующее:
- Перейти в Elastic Cache (не EC2 Reserved instances)
- Перейти в Reserved Nodes
- Нажать на Синюю кнопку «Purchase Reserved Node» справа сверху
- Выбрать Redis или Memcached
- Выбрать тип ноды
- Выбрать желаемый срок бронирования
- Выбрать Offering Type (1 или 3 года)
- Нажать Next
Другие меры экономии с Elastic Cache почти такие же, как и с EC2. Нужно выключать не используемые ноды и уменьшать размер самих нод.
Для Elastic Cache нет AWS Marketplace’а
Обратите внимание, что нет никакого Marketplace для Reserved Nodes! Перед покупкой убедитесь, что будете использовать её хотя бы год.
Как управлять платформой AWS
Доступ и управление Amazon Web Services осуществляется через AWS Console — сайт, на котором можно управлять ресурсами через браузер. Это один из способ взаимодействия, но есть и другие:
- SDK — способ программного взаимодействия с платформой. SDK реализованы для таких популярных языков программирования, как: C++, Go, Java, JS, .NET, PHP, Python, Ruby. Если же для того языка, на котором вы пишете код, нет официального SDK, вероятно, существует библиотека, которая поддерживается сообществом. Либо же можно написать свой SDK, который будет некой оберткой к предоставляемому HTTP-интерфейсу.
- AWS CLI — утилита командной строки, которую удобно использовать для автоматизации процессов. Также она подойдет тем, кому удобнее пользоваться командной строкой, а не графическим интерфейсом.
С умом выбирайте план технической поддержки AWS
Всего есть 4 типа технической поддержки:
- Basic – бесплатный
- Developer — $ 29 / месяц или 3% от счета каждый месяц
- Business — $ 100 / месяц или 10-3% от счета, в зависимости от объема
- Enterprise — $ 15.000 в месяц
Мы попробовали план Business и остались недовольны результатом. На наш взгляд он слишком дорогой для того уровня поддержки и сопровождения, который он предоставляет. Не могу ничего утверждать про уровень Enterprise, так как мы его не использовали. (Уровень Enterprise подходит, например, крупным компаниям перед запуском крупных премьер или продуктов.)
Привлекайте вашего регионального менеджера AWS
Используйте вашего регионального менеджера и архитектора решений по максимуму! Они работают отдельно от центральной команды поддержки и могу предоставлять гораздо более подходящие услуги. Команда AWS вообще очень умелая и сильно помогает! Рекомендации, которые они предоставляли о продвинутых настройках безопасности и применение GDPR были просто лучшими! Меня впечатлила техническая осведомленность и желание помочь нам достичь лучших результатов. Такая поддержка заставляет дважды подумать, перед тем как сменить облачного провайдера.
Главные преимущества AWS
Не требует больших вложений
Если вы хотите запустить свой стартап и создать мессенджер, вам понадобятся:
- серверы, которые будут осуществлять коммуникацию;
- сервер с базой данных, который будет хранить историю сообщений,
- серверы для хранения файлов, чтобы пользователи могли обмениваться изображениями друг с другом.
Все это может стоить достаточно больших денег. При этом у вас не будет никаких гарантий, что бизнес станет успешным, и вы не потеряете то, что вложили.
Купив физический сервер и заплатив за него, вы, вероятнее всего, не будете использовать его круглосуточно и на полную мощность. Если же вы задействуете облачную платформу, то ваша виртуальная машина сможет поделить физическое «железо» с виртуальными машинами других пользователей. Благодаря этому обеспечивается его более низкая стоимость.
В случае с AWS вы можете арендовать только те ресурсы и мощности, которые необходимы прямо сейчас, и платить за них почасово, либо за количество выполненных запросов.
Если вы замечаете, что что-то идет не так, вы сможете просто отключить все серверы и ресурсы, которые были задействованы. Тем самым вы не рискуете потерять огромные вложения.
Предоставляет крупнейшую среди всех облачных провайдеров инфраструктуру
На сегодня инфраструктура AWS состоит из 25 регионов, в каждом из которых присутствует несколько availability zones (зоны доступности). Это один или несколько дата-центров.
AWS предлагает множество облачных сервисов, которые можно использовать в комбинациях, соответствующих вашим бизнес-требованиям и организационным задачам.
Вы можете легко отключать серверы и ресурсы, которыми не пользуетесь
Интерес к Chia растет
Неясно, когда именно Amazon AWS начал рекламировать это решение, но это ещё один признак растущего уровня внимания и интереса к майнингу Chia со стороны китайских инвесторов.
В прошлом месяце по мере того, как китайские розничные инвесторы проявляли интерес к майнингу Chia, цены на различные модели жёстких дисков в Китае росли, причем на некоторые модели более чем на 100%.
Несмотря на то, что на рынке имеется множество запасных частей для жёстких дисков, некоторые дилеры и оптовые торговцы не продавали свои запасы, чтобы поднять цены.
Основанная в 2022 году криптовалюта Chia представляет собой децентрализованную сеть хранения данных, цель которой – использование жёстких дисков в качестве вычислительной мощности для замены энергоёмкого механизма биткоина Proof-of-Work.
Основная сеть для майнинга была запущена 19 марта, и за последние два месяца объём хранилища, который используется для майнинга в сети, вырос до более чем одного эксабайта, что соответствует объёму хранения более 1 миллиона единиц жёстких дисков ёмкостью 1 ТБ.
Основные сервисы Amazon
AWS предлагает огромное количество сервисов. Это и сервисы для выполнения разных вычислений, файловые хранилища и базы данных, виртуальные сети, сервисы для машинного обучения и AI, для оркестрации контейнеров, медиа-сервисы. Ниже я опишу самые основные, на мой взгляд, которые пригодятся веб-разработчикам.
IAM (Identity Access Management)
IAM (Identity Access Management) — это сервис, без которого невозможна командная работа в AWS. Он позволяет создавать и управлять уровнем доступа пользователей.
Когда вы регистрируетесь в AWS, создается аккаунт. Внутри этого аккаунта вы можете формировать различные ресурсы. Чтобы участники вашей команды также получили доступ к этим ресурсам, вы создаете пользователей и распределяете их между собой.
Например, можете объединить их в отдельные группы — администраторов, тестировщиков, разработчиков. Далее вы сможете создавать полиси (policies), которые будут определять доступы и разрешения внутри вашего аккаунта. Например, вы можете создать полиси, которая позволяет читать и изменять все ресурсы и передать эту политику группе администраторов. А можете разрешить читать все ресурсы, но запретить их изменять и назначить эту политику группе тестировщиков.
Еще одна сущность, которую вы можете создавать — это роли. Пользователей вы создаете для людей, а роли — для сервисов. Например, у вас есть веб-сервер и это значит, что вы можете создать для него роль, в которой будут policies, разрешающие доступ к базе данных. Так вы откроете доступ к БД, но у других сервисов его не будет.
S3 (Simple Storage Service)
S3 (Simple Storage Service) — это сервис объектного хранилища, который предлагает автоматическую масштабируемость.
S3 хранит копии данных на разных физических девайсах, что и позволяет обеспечить высокую доступность и надежность. Для доступа и управления данными S3 предоставляет HTTP-интерфейс.
Это именно тот сервис, который мы бы использовали, если бы создали свою версию Dropbox или Google Drive. Также, например, его можно использовать для хранения статических файлов сайта. S3 предоставляет безграничное хранилище, которое расширяется автоматически. Вам не придется беспокоиться о доступном размере для файлов. Вы сможете хранить файлы размером до пяти терабайт.
Также есть разные классы хранения. Например, если у вас есть файл, а доступ к нему осуществляется нечасто, вы можете поместить его в класс хранения infrequent access и будете платить за хранение данных значительно меньше. Дополнительная плата в этом случае зависит от количества выполненных запросов. Актуальные цены можете посмотреть по ссылке.
Файлы можно архивировать с помощью сервиса S3 glacier. Например, если законодательно вам нужно хранить данные не меньше трех лет, этот сервис как раз то, что нужно. Он позволит снизить расходы на оплату. Но есть минус — получение доступа к данным может занять несколько часов.
S3 предусматривает функцию версионирования. Как она работает: после изменения файлов вы всегда сможете вернуться к предыдущим версиям и восстановить их. Управление жизненным циклом позволяет назначить такой файл, который после создания попадет в архив, а через два года — полностью удалится. S3 поддерживает мультифакторную аутентификацию для удаления файлов. Это значит, что вы можете настроить хранилище так, что пользователь сможет удалить файлы, только пройдя мультифакторное подтверждение.
CloudFront
CloudFront — это, по сути, Content Delivery Network — система серверов по всему миру, которая кэширует статический контент.
Пользователя, который хочет получить статический контент, система направляет к ближайшему серверу, который выдаст данные оперативно. Такие серверы называются edge locations. Их система существует независимо от регионов и зон доступности. Это дополнительный уровень инфраструктуры Amazon. Система работает не только на быструю отдачу файлов, но и на получение.
Если у вас есть S3 bucket в Европе, а пользователь пытается загрузить файл из США, то благодаря функционалу S3 Transfer Acceleration система направит его на ближайший edge location, что позволит загрузить файл на платформу быстрее, а затем он по специализированной частной сети Amazon с высокой доступностью и низким уровнем задержек попадет в нужный регион.
EC2 (Elastic Computer Cloud)
EC2 (Elastic Computer Cloud) — сервис, позволяющий создавать виртуальные машины с разными операционными системами и устанавливать на них программное обеспечение.
Создание такой виртуальной машины занимает всего несколько минут. EC2 предлагает разные типы и конфигурации серверов. Например, заточенные под определенные вычислительные задачи с мощными процессорами. Или другой вариант — серверы для работы с большими объемами данных.
EC2 позволяет подключать разные виртуальные хранилища, например, общего назначения, с повышенной пропускной способностью — в зависимости от ваших потребностей. Детальнее об этом можете почитать здесь.
EC2 позволяет создавать bootstrap-скрипты, которые будут задействованы на этапе создания виртуальной машины. С помощью этих скриптов можно произвести предварительные настройки и установить необходимое ПО. Также можно делать snapshot — снимки состояния виртуальной машины в определенное время. На их основании создают желаемый образ виртуальной машины, а после — делают копии с уже установленным ПО и настройками.
EC2 предлагает разные ценовые модели:
- OnDemand-сервер — вы платите за серверы почасово и только в момент их работы.
- Reserved-сервер — заключаете контракт с Amazon на использование сервера на протяжении года или трех лет. Тем самым вы обязуетесь использовать сервер в установленные сроки. Есть скидка в зависимости от сроков использования.
- Spot-сервер — цена может варьироваться, но вы сами устанавливаете планку, выше которой платить не готовы. Может быть полезно, например, для вычислений, для которых не очень важно, чтобы они были выполнены непрерывно и в строго в определенный срок, но при этом они нерентабельны при цене выше какого-то уровня.
- Dedicated-сервер — позволяет устанавливать виртуальную машину на одно и то же физическое железо. Это полезно, если, например, лицензия обязывает использовать программное обеспечение на конкретной машине. Может быть и так, что вы приобрели ПО и зарегистрировали его на конкретном компьютере и тогда уже не сможете использовать эту же лицензию. Новое «железо» требует новой лицензии.
ELB (Elastic Load Balancer)
ELB (Elastic Load Balancer) — это сервис, который позволяет регулировать и распределять нагрузку между существующими серверами.
Load Balancer умеет периодически проверять серверы на работоспособность. Если произошла авария и сервер не отвечает, Elastic Load Balancer прекращает отправлять на него трафик и распределяет его между оставшимися серверами.
Amazon предлагает несколько видов Load Balancer:
- Application — дает возможность гибкой маршрутизации на основе HTTP-параметров.
- Network — без продвинутой маршрутизации позволяет распределить трафик поровну. Оперативно выполняет запросы, обрабатывая миллионы запросов в секунду.
- Classic — устаревший вид LB. Для новых систем лучше использовать Application LB или Network.
Auto Scaling
Auto Scaling — сервис, позволяющий создавать группы серверов и автоматически управлять их количеством.
Auto Scaling может поддерживать минимальное, но при этом необходимое количество экземпляров. Он позволяет проводить масштабирование вручную или настроить по событию. Допустим, если средняя загрузка центрального процессора превышает 60%, значит, нужно добавлять серверы. Доступна и масштабируемость по расписанию. Представьте: в своем интернет-магазине вы запустили акцию. Вы уверены, что огромный наплыв покупателей будет именно в воскресенье. Значит, в этот день необходимо масштабироваться вдвое.
Cloud Watch
Cloud Watch — сервис для мониторинга ваших ресурсов в AWS.
Этот сервис позволяет мониторить сотни разных предопределенных метрик (например, загрузку процессора, диска, сети и так далее) и определять индивидуальные. Также в CloudWatch есть возможность собирать и анализировать логи всей вашей инфраструктуры, приложений и сервисов в одном месте.
На основе собранной информации можно определять «сигналы тревоги» для тех или иных событий. Например, создать такое правило: если средняя загрузка процессора на вашем сервере на протяжении определенного времени не опускается ниже 80%, CloudWatch сообщит об этом с помощью письма на электронную почту или SMS на телефон. Или же у вас есть определенный бюджет на использование ресурсов Amazon, вы точно так же можете установить сигнал, который предупредит о том, что вы превысили свой лимит.
RDS (Relational Database Service)
RDS (Relational Database Service) — сервис реляционных баз данных от Amazon, который поддерживает несколько движков: MySQL, MariaDB, PostgreSQL, Oracle, Microsoft SQL.
В случае использования Amazon RDS, администрирование программного обеспечения — это не ваша зона ответственности.
Все необходимое ПО для функционирования системы БД уже установлено управляется и поддерживается платформой AWS. RDS предоставляет функциональность Multi Availability Zones для аварийного восстановления. Например, создаете копию своей БД на отдельном сервере в другой зоне доступности. Эта база данных будет постоянно синхронизироваться с основным экземпляром. Когда основной сервер придет в нерабочее состояние, RDS автоматически переключит все запросы на копию, размещенную в другой зоне. При этом работоспособность приложения не будет нарушена.
Также здесь есть функционал Read Replicas, который позволяет создавать копии базы данных для масштабирования производительности. Допустим, есть один экземпляр, который не справляется с нагрузкой. Чтобы решить эту проблему, необходимо создать одну дополнительную или несколько реплик, которые могут распределить нагрузку на чтение между собой и увеличат производительность.
Amazon Aurora
Amazon Aurora — это управляемый движок реляционных баз данных, совместимый с PostgreSQL и MySQL, который предлагает автоматическое масштабирование. Amazon заявляет, что его производительность в пять раз больше, чем в MySQL, и в три раза больше, чем в PostgreSQL.
Благодаря автоматическому масштабированию вам не придется постоянно следить за оставшимся количеством места. Для высокой доступности и сохранности по умолчанию все ваши данные хранятся в виде шести копий по две в трех зонах доступности (availability zones). Если в каком-то из дата-, Aurora все равно продолжит свою работу.
Aurora Serverless дополнительно предлагает автоматическое масштабирование мощности экземпляров. Например, в зависимости от текущей нагрузки сервер баз данных может использовать один vCPU или восемь. Функционал автоматического старта/стопа позволяет остановить сервер, если, например, на протяжении пяти минут к нему не поступают запросы.
DynamoDB
DynamoDB — это основное NoSQL-решение от Amazon. DynamoDB умеет автоматически масштабироваться до огромных размеров без потери производительности.
Копии данных хранятся в трех физически разных местах, что обеспечивает высокую доступность «из коробки». Важно понимать, что, несмотря на скорость и простую масштабируемость, NoSQL не предоставят вам такой мощности языка, запросов и строгости структуры данных, которые существуют у реляционной базы данных. Возможно, не стоит использовать DynamoDB как основную базу данных для приложений в сфере финансов или охраны здоровья.
Route53
Route53 — это DNS-сервис, который позволяет зарегистрировать доменное имя и привязать его к разным таргетам внутри инфраструктуры AWS.
Например, EC2 instance, Load Balancer или любой другой IP вне Amazon. Route53 предлагает разные виды маршрутизации.
Виды маршрутизации Route53:
- аварийная — если какой-то из таргетов не отвечает, Route53 прекращает посылать трафик;
- по величине задержки — сервис перенаправляет трафик к тому таргету, который отвечает пользователю быстрее всех;
- по географическому расположению — Route53 выбирает таргет, который географически ближе к пользователю.
Подробнее со всем видами маршрутизации вы можете ознакомиться по ссылке.
Cognito
Cognito — сервис авторизации и аутентификации.
Поддерживает современные стандарты OAuth 2.0, OpenID Connect, SAML 2.0 и предлагает функционал регистрации, мультифакторную аутентификацию через email/sms, готовый пользовательский интерфейс, возможность интеграции со сторонними провайдерами (Facebook, Google и т.д.) и Microsoft Active Directory.
SQS (Simple Queue Service)
SQS (Simple Queue Service) — это сервис для обмена сообщениями через очереди.
Позволяет обеспечить эластичность и слабую связанность между компонентами (сервисами) системы. Популярным опенсорс-аналогом SQS можно назвать RabbitMQ.
SQS предлагает два вида очередей:
- Standart — более быстрый и масштабируемый вариант, но порядок доставки сообщений не гарантирован;
- FIFO (first in-first out) — гарантирует порядок сообщений, но его скорость ограничена до 3000 сообщений в секунду.
SNS (Simple Notification Service)
SNS (Simple Notification Service) — сервис для отправки сообщений, который работает по модели publisher-subscriber.
Предположим, у вас есть издатель (publisher), который отправляет сообщение в SNS-топик. SNS рассылает сообщение нескольким подписчикам топика. В роли подписчиков может выступать SQL-очередь, e-mail, push-уведомления в мобильном приложении (подробнее об этом можно почитать здесь).
Приведу пример использования SNS. Допустим, в системе происходит регистрация нового пользователя. Мы отправляем сообщение об этом действии в SNS. Сервис посылает сообщение пользованию с текстом о том, что регистрация прошла успешно. В это же время сообщение отправляется в SQS-очередь, откуда данные потребляются, обрабатываются и отправляются в хранилище для последующего анализа. Также параллельно сообщение уходит в еще одну SQS-очередь, обработчик которой на базе предоставленной информации попробует получить дополнительные данные о пользователе со стороннего сервиса.
Lambda
Lambda — сервис, позволяющий выполнять определенный код в результате событий, не беспокоясь о настройке и поддержке инфраструктуры. В данном случае разработчик абстрагирован от такого понятия как сервер и может больше сосредоточиться на реализации своих бизнес-задач.
Разработчик пишет код, загружает его в AWS, и на его основе создается Lambda-функция. Затем он определяет триггер (событие), который будет запускать созданную функцию. Код должен содержать главную функцию-обработчик (точку входа), которая в виде аргументов получит детали о событии, запустившем выполнение функции.
Lambda поддерживает различные runtime: Node.js, Python, Ruby, Java, Go, .NET. Custom runtime позволяет настроить свой рантайм и использовать любые другие языки программирования (детальнее об этом — здесь).
AWS API Gateway
AWS API Gateway — позволяет определять HTTP RESTfull API или websocket-интерфейсы для других AWS-ресурсов.
Вы можете определять HTTP endpoints или websocket routes на разные бэкенды, например, AWS Lambda, SQS или DynamoDB.
API Gateway — это управляемый сервис, который не требует настройки и поддержки инфраструктуры. При этом он предоставляет масштабируемость и отказоустойчивость. Также «из коробки» поддерживается логирование, throttling запросов и кэширование. На уровне API Gateway можно определить авторизацию на основе интеграции с упомянутым выше AWS Cognito. А на базе API Gateway и Lambda — создать Serverless Application.
Суть в том, что в Lambda может загрузить не только простую функцию, но и полноценное веб-приложение. В этом случае API Gateway будет работать как прокси, перенаправляя запросы в пайплайн вашего приложения.
CloudFormation
CloudFormation — это сервис для автоматизации развертывания инфраструктуры.
Вы описываете ресурсы, из которых состоит ваша система, в файле формата YML или JSON. На его основе можно воссоздавать копии системы. CloudFormation удобен тем, что вся система управляется как единое целое. Удалить все ресурсы системы, обновить или воссоздать копию можно практически одной командой.
Время еще немного поучиться!
Внедрите процедуру экономии затрат в AWS
Легкая часть закончена, а теперь приступим к сложным задачам! Нет волшебной пилюли, чтобы уменьшить затраты в AWS, вам нужно усердно работать и выполнять регулярную процедуру для мониторинга затрат! Уменьшение облачных затрат должна стать вашей ежедневной рутинной процедурой! Представьте, сколько вы сэкономите за 365 дней! Количество времени, которое вы вкладываете, зависит от размера вашей организации и ваших затрат в AWS. Я трачу около 30 минут в день для мониторинга аккаунта и расставления приоритетов для действий по снижению затрат. Помимо этого, инженеры Back4App тратят не менее 1 часа в день на внедрение инициатив по снижению стоимости.
Первая инициатива, которую мы выполнили: создание простого листа в Excel для определения приоритетов среди инициатив по снижению затрат.
Основные критерии, по которым мы определяем экономию:
- Потенциал экономии – Наибольшая прибыль от действий по экономии
- Сложность – Насколько сложно применить усилия и требуемую работу
- Владелец – Кто будет выполнять действие
В нашем случае, наибольшая экономия приходится на использование Elastic Compute Cloud (EC2), и это был первый предмет, в котором мы начали разбираться.