Какие семейства (типы) инстансов EC2 вы знаете и как выбираете подходящий для задачи?

«Какие семейства (типы) инстансов EC2 вы знаете и как выбираете подходящий для задачи?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные семейства:

Семейство Оптимизация Типичные кейсы использования Пример инстанса
General Purpose Баланс vCPU, памяти, сети Веб-серверы, микросервисы, среды разработки t3.micro, m6i.large
Compute Optimized Высокая производительность процессора Пакетная обработка, медиатранскодинг, научные вычисления c7g.xlarge, c6i
Memory Optimized Большой объем оперативной памяти Базы данных (Redis, Elasticsearch), in-memory кэши, аналитика r6i.xlarge, x2iedn
Storage Optimized Высокая пропускная способность и IOPS дисков NoSQL БД (Cassandra), data warehousing, лог-обработка i4i.large, d3en
Accelerated Computing Сопроцессоры (GPU, FPGA) Машинное обучение, рендеринг графики, стриминг p4d.24xlarge, g5

Процесс выбора в DevOps:

  1. Профилирование: Используем мониторинг (CloudWatch, Prometheus) существующего приложения, чтобы понять утилизацию CPU, памяти, дискового ввода-вывода и сети.
  2. Требования: Определяем, что лимитирует производительность — CPU, RAM, диск или сеть.
  3. Выбор модели закупки:
    • On-Demand: Для непостоянных или непредсказуемых нагрузок.
    • Reserved Instances (RI) / Savings Plans: Для стабильной базовой нагрузки (экономия до 70%).
    • Spot Instances: Для fault-tolerant, прерываемых задач (например, CI/CD воркеры, обработка очередей) — максимальная экономия.
  4. Инфраструктура как код (Terraform):
# Для веб-сервера с переменной нагрузкой выбираем General Purpose
resource "aws_instance" "web_app" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t3.medium" # Баланс цены и производительности

  # Используем Spot для экономии, если приложение устойчиво к прерываниям
  instance_market_options {
    market_type = "spot"
    spot_options {
      max_price = "0.01" # Максимальная цена, которую готовы платить
    }
  }
  ...
}

# Для in-memory кэша (Redis) выбираем Memory Optimized
resource "aws_instance" "redis_cache" {
  ami           = data.aws_ami.redis_optimized.id
  instance_type = "r6i.large"
  ...
}

Всегда начинаем с минимального подходящего типа и масштабируем по мере необходимости, используя Auto Scaling Groups.