AWS: Cost optimization – обзор расходов на сервисы и стоимость трафика в AWS

Автор: | 01/11/2021

Продолжим серию постов по оптимизации расходов в AWS. Предыдущие посты – AWS: оптимизация расходов – покупка и анализ RDS Reserved Instances и AWS: Cost Explorer – проверка расходов на примере CloudWatch Logs.

Один из основных недостатков cloud-based архитектуры является стоимость обслуживания такой системы. При этом у клауд-провайдеров может быть весьма запутанная схема тарификации, в которой отдельно оплачиваются используемые ресурсы, отдельно – трафик и так далее.

Собственно, в этом посте попробуем разобраться с вопросом – куда же тратятся деньги в Amazon Web Services, а в следующих – рассмотрим полезные сервисы AWS по контролю расходов и оптимизации окружений (Cost Explorer, Trusted Advisor, Compute Optimizer, AWS Budget, etc).

Категории затрат AWS

Все раходы можно поделить на три основные группы – Compute, Storage и Data Transfer:

  • Compute (вычисления): платим за аренду мощностей – за время аренды или использования CPU и RAM, стоимость зависит от типа используемого ин
  • Storage (хранение) – платим за объём хранимых
  • Data transfer (передача данных): в большинстве случаев входящий трафик или трафик между сервисами в одном регионе бесплатен, но с исключениями. Исходящий трафик агрегируется со всех сервисов и считается как общий исходящий. При этом чем больше трафика – тем дешевле. Трафик – вообще отдельная тема, так что мы её разберём в этом посте детальнее чуть ниже, в AWS Data Transfer Costs

И отдельно можем вынести Data processing (обработка данных): сюда включим тарификацию за количество обработанных HTTP-запросов и обработку потоковых данных.

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

Рассмотрим подробнее, с примерами сервисов:

  • Вычисления:
    • время использования инстанса с CPU и памятью (EC2, RDS, Redshift)
    • время использования бессерверных мощностей – CPU и памяти (Lambda)
    • использование CPU credits для T-инстансов (T2/T3/Т4 Unlimited mode) (EC2, RDS, Redshift)
    • тип оплаты инстанса – On Demand, Spot, Reserved, etc (EC2, RDS)
    • тип деплоймента – в одной или нескольких Availability Zones (RDS)
    • тип самого инстанса и размер используемых им мощностей CPU и памяти
  • Хранение:
    • Elastic Block Store (EBS):
      • количество read/write операций (чтение-запись)
      • размер хранимых данных
      • размер передаваемых данных (считается как исходящий трафик)
      • хранение снапшотов (по стоимости S3)
      • тип диска – SSD, HDD
    • Simple Store Service (S3):
      • тип хранилища (Standard, Infrequently-Accessed, Glacier)
      • количество хранимых объектов
  • Передача данных:
    • переданный трафик (NAT Gateway, LoadBalancer, EC2/EBS, S3)
  • Обработка данных:
    • объём полученных и/или обработанных данных (Kinesis, CloudWatch Logs)
    • количество обработанных HTTP-запросов (CloudFront, API Gateway)

Кроме того, мы платим за:

  • API-запросы к ядру AWS (сбор метрик CloudWatch, события CloudTrail)
  • лицензии за продукты из AWS Marketplace
  • и всякие дополнительные платы, специфичные для сервиса, например – количество правил в AWS WAF WebACL, различные RDS Insights, расширенный мониторинг с CloudWatch для EC2.

Таблица сервисов и их оплачиваемые услуги

Соберём основные сервисы в таблицу, и посмотрим наглядно – где и за что мы платим:

AWS service Compute Storage Data transfer Data processing Comments
EC2 – per-minute on running instances – see EBS – outbound data transfer – price depends on the pricing model (On-Demand, Reserved, Spot, Saving Plan)
EBS – per GB stored on EBS
– snapshots store (in S3) per GB
– I/O operations
– snapshots transfer to AWS S3 (if cross-region) – per MB/s (for gp3) – price depends on an EBS type (SSD-backed, HDD-backed)
– EBS snapshots store charged
RDS – per-minute on running instances – per GB stored
– I/O operations
– backups (snapshots) storage
– snapshots export to S3
– outbound data transfer
– price depends on a Single or Multi-AZ deployment model
– cross-AZ replication data transfer is free
S3 – per GB stored
– per objects number stored
– outbound data transfer – requests number (PUT, COPY, POST, etc)

– additional management like S3 inventory, analytics, objects tagging

– depends on Storage Class (S3 Standard, S3 Glacier, etc)
– data transfer is free between S3 buckets in the same AWS Region
– data transfer is free from an S3 to an AWS Service in the same AWS Region
CloudFront – data transfers out from edge locations to the Internet
– data transfers out from edge locations to an origin
– number of HTTP or HTTPS requests – the price depends on Price Class (Price Class All, Price Class 200, Price Class 100)
Lambda – per seconds of used compute time during functions executing
– number of function invocations
– memory used
– provisioned concurrency
– AWS Region outbound data transfer – data transfer is free between Lambda and some AWS Services

AWS Data Transfer Costs

Отдельно рассмотрим вопросы трафика, так как тут у AWS на первый взгляд всё немного запутано.

В целом, весь трафик делится на два типа – между Amazon Web Services и Интернетом, и внутри AWS. Также, влияет то, куда трафик направляется – в эту же, или другую Availability Zone, AWS VPC или AWS Region.

Основные правила:

  • оплачивается исходящий трафик со всех сервисов, у которых есить Elastic Betwork Interface (EC2, ALB)
  • оплачивается cross-availability zone график
  • оплачивается cross-region график

AWS Data Transfers через Internet

Входящий трафик из интернета в AWS

Практически весь входящий трафик из Internet к AWS бесплатен независимо от того, куда он направлен – на EC2, AWS Direct Connect или CloudFront Edge Locations. И наоборот – исходящий трафик как правило тарифицируется.

Исходящий трафик из AWS в интернет

Передача данных в Интернет считается по ценам каждого региона, так как везде они разные. См. Amazon EC2 On-Demand Pricing > Data TransferData Transfer IN To Amazon EC2 From Internet и Data Transfer OUT From Amazon EC2 To Internet.

При этом, при выборе условия тарификации считается общий исходящий трафик всего аккаунта для следующий сервисов:

  • Amazon RDS
  • Amazon Redshift
  • Amazon SES
  • Amazon SimpleDB
  • Amazon EBS
  • Amazon S3
  • Amazon Glacier
  • Amazon SQS
  • AWS Storage Gateway
  • Amazon SNS
  • Amazon DynamoDB
  • Amazon CloudWatch Logs

Data Transfer Costs внутри AWS Cloud

Inter-Region data transfers

Передача данных между регионами считается по тарифу региона-источника трафика. В той же таблице Amazon EC2 On-Demand Pricing > Data Transfer  в Data Transfer OUT From Amazon EC2 To отображены цены каждого конкретного региона.

К примеру, у нас есть корзина в us-east-2, Ohio, и из неё выполняется репликация данных в us-west-1, N. California, см. AWS: настройка S3 Cross-Region Replication и удаление файлов при репликации – в таком случае мы оплачивать трафик по ценам us-east-2, Ohio.

Data transfers между AWS Regions и Direct Connect locations

Хотя в целом входящий трафик из Интернета к сервису в любом AWS Region бесплатен, для Dicrect Connect есть исключение, так как его входящий трафик тарифицируется, и также зависит от региона-источника, к тому же ещё и от региона-цели. См. Data transfer out (DTO) pricing for AWS Direct Connect.

Например, передача данных из Ohio к Direct Connection подключению в N. California будет стоить $0.0200, а оттуда же в Ирландию, eu-west-1 – $0.0282 за каждый GB.

Data transfers между CloudFront Edge locations и AWS Regions

Edge locations для CloudFront – это дата-центры AWS, на которых он хранит информацию, полученную с наших origin-серверов.

Тут оплата происходит за:

  1. трафик от Edge locations в Интернет
  2. трафик от Edge locations к Origin-серверам
  3. количество HTTP-запросов

При этом цена трафика к origin также зависит от региона, в который идёт трафик, см. Amazon CloudFront Pricing.

AWS Data transfer внутри AWS Region

При коммуникации сервисов AWS друг с другом в рамках одного AWS Region часть трафика также может быть платной.

  • передача данных между Amazon EC2, AWS containers, Amazon RDS, Amazon Redshift, Amazon DynamoDB Accelerator (DAX), Amazon ElastiCache instances или Elastic Network Interfaces между разными Availability Zones, будь то передача данных через публичный, приватный IP, или с использованием Elastic IPv4, стоит $0.01 за каждый GB outbound и $0.01 за GB входящего трафика

Например, мы передаём 500 гигабайт данных с кластера Redshift в VPC-1 на EC2-инстанс в той же VPC1, но соседней Availability Zone – в таком случае мы оплатим $5 за исходящий трафик и $5 за входящий в VPC-2.

  • передача данных между инстансами EC2, контейнерами или Elastic Network Interfaces в одной Availability Zone и одной VPC используя публичный IP или Elastic IP стоит $0.01 GB за входящий и исходящий трафик

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

  • передача данных между EC2 инстансами, контейнерами или Elastic Network Interfaces в одной Availability Zone и одной VPC используя приватный адрес – бесплатна

Тут вроде всё просто: используем приватные IP внутри VPC, не пускаем трафик “наружу” – и ничего не платим.

  • передача данных между сервисами AWS, которые не могут быть ограничены конкретной Availability Zone или VPC (например, AWS S3, DynamoDB, SES, Kinesis, etc) и EC2 инстансами или другими сервисами в этом же AWS Region бесплатна

Кроме того, трафик некоторых сервисов, у которых из коробки есть multi-AZ деплоймент бесплатен. Например, Amazon Aurora, Amazon Neptune и Amazon RDS.

Также, трафик между Classic или Application Load Balancer и EC2 в том же регионе не тарифицируется.

Карта тарификации трафика в AWS

Сколько гуглил по этой теме, но практически нигде не встречал наглядного представления того – как же считается трафик. Исключение – страница Overview of Data Transfer Costs for Common Architectures в AWS Blogs, где отображены наиболее часто используемые варианты архитектуры и платный трафик в них.

Собственно, на схеме ниже постарался отобразить направление трафика, и его тарификацию:

Разберём её шаг за шагом.

Начнём с “точки вхождения” – с Load Balancer в Region-1 и AZ-1, а затем пройдёмся по остальным элементам.

Region-1, Availability Zone-1:

  1. входящий трафик на ALB платен (так как LCU включает в себя кол-во обработанных байт)
  2. затем трафик идёт от ALB к EC2 – передача данных между ними бесплатна
  3. EC2 возвращает ответ через NAT Gateway, при этом передача данных между EC2 и NAT GW бесплатна, а вот исходящий трафик от NAT GW – оплачивается (исходящий трафик практически во всех сервисах AWS платен)
  4. EC2 передаёт данные на CloudFront Edge Location в этом же регионе бесплатно, передача от CloudFront Edge Location к клиентам платная
  5. трафик от CloudFront Edge Location к EC2 платный
  6. передача трафика между EC2 и S3 в этом же регионе бесплатная
  7. EC2 через VPC-пиринг обращается к RDS Master в этой же AZ – трафик между ними бесплатен
  8. EC2 через VPC-пиринг обращается к RDS Slave в другой AZ – трафик между ними платен (cross-AZ)
  9. трафик для репликации между RDS Master и RDS Slave в пределах одного региона бесплатен

Region-1, Availability Zone-2:

  1. трафик от EC2 в AZ-2 к EC2 в AZ-1 платный, так как это cross-AZ traffic
  2. трафик между EC2 и RDS Slave в AZ-2 бесплатен
  3. а обращение с EC2 к RDS Master будет платным, так как снова cross-AZ

Region-2, Availability Zone-3:

  1. исходящий трафик от EC2 в этом регионе к EC2 в Region-1 платный, так как cross-region
  2. исходящий трафик от EC2 в этом регионе к S3-корзине в Region-1 платный, так как cross-region

Советы по трафику

  • старайтесь держать всё в одном регионе, если нужен второй – выбирайте тот, трафик к которому будет самым дешёвым
  • старайтесь держать всё в одной Availability Zone и VPC, и использовать приватные адреса для доступа – тогда трафик будет бесплатным
  • избегайте NAT Gateway – он тарифицируется по проходящему через него трафику. Используйте Internet Gateway, где можно.
  • используйте CloudFront – трансфер данных с него выйдет быстрее и дешевле, чем напрямую с AWS сервиса типа EC2

Ссылки по теме