Все уроки
DevOps и облакоСредний15 мин чтенияПолезно знать

AWS

Самое большое облако: сотни сервисов, из которых важны несколько, и счёт, за которым нужно следить.

  • EC2
  • S3
  • RDS
  • Lambda
  • CloudFront
  • VPC & IAM
Шаг 1/5
Один VPS: дёшево и просто, но админ, ответственный за бэкапы и будильник в 3 часа ночи — это всё вы.

За 30 секунд

Amazon Web Services посекундно сдаёт вам в аренду вычислительные кирпичики: виртуальные серверы, хранилища, базы данных, сети, очереди и многое другое. Вы платите только за то, что используете, и можете вырасти с одного сервера до тысяч. Но вместе с мощью приходит сложность: сеть и права доступа нужно проектировать самому, а расходы могут неприятно удивить, если за ними никто не следит.

Не в моём ежедневном стеке — я понимаю принципы и изучу детали, когда это понадобится проекту.

Почему это важно

  • AWS важен, потому что это самое распространённое облако: многие компании, вакансии и интеграции исходят из того, что вы его знаете.
  • Он нужен команде, когда она вырастает из отдельных серверов: управляемые базы с автоматическим failover, глобальные CDN, автомасштабирование и множество регионов трудно построить самому.
  • Его управляемые сервисы меняют обслуживание серверов на конфигурацию, и это может избавить маленькую команду от патчей и бэкапов.
  • В своих проектах я в основном использую VPS с Docker Compose — на таком масштабе это дешевле и проще; а хорошее знание AWS позволяет понять, в какой момент этот баланс меняется.

Как это работает

01Регионы, зоны доступности и разделённая ответственность

AWS разделён на регионы — отдельные географические области вроде Франкфурта или Ирландии, в каждой из которых есть своя копия большинства сервисов. Регион содержит несколько зон доступности (AZ): один или несколько дата-центров с независимым питанием, охлаждением и сетью, расположенных достаточно близко для быстрых соединений. Запуск приложения минимум в двух AZ защищает от отказа одного дата-центра; использование нескольких регионов защищает от отказа целого региона, но стоит гораздо дороже и сложнее. Выбирайте регион ближе к пользователям и соответствующий требованиям к данным. Безопасность разделена: AWS отвечает за безопасность самого облака (железо, дата-центры, гипервизор), а вы — за безопасность в облаке: ваши права IAM, сетевые правила, патчи для серверов EC2, шифрование и то, чтобы данные не торчали наружу.

  • Регион = географическая область; AZ = изолированный дата-центр (или несколько) внутри неё.
  • Высокая доступность = распределение минимум по двум AZ.
  • Ошибки конфигурации на вашей стороне — самая частая причина утечек в облаке.

02Основные сервисы и когда их использовать

Сотни сервисов вам не нужны: дюжина покрывает большинство веб-приложений. Вычисления бывают трёх видов: виртуальные машины EC2, которыми вы управляете сами; контейнеры на ECS (проще, родной для AWS) или EKS (управляемый Kubernetes), при желании в serverless-режиме на Fargate; и функции Lambda, которые запускаются по событиям вообще без серверов. Данные живут в S3 для файлов и в RDS или Aurora для управляемых реляционных баз. CloudFront — CDN впереди, Route 53 — DNS и маршрутизация с health check'ами. VPC — ваша приватная сеть, IAM контролирует, кто что может делать, а SQS — управляемая очередь для развязки работы.

  • EC2: полный контроль, долгоживущие серверы, любой софт.
  • ECS / EKS (+ Fargate): контейнеры без самостоятельного управления планировщиками.
  • Lambda: короткие задачи по событиям (до 15 минут), оплата за вызов.
  • S3: объектное хранилище для загрузок, бэкапов, статических сайтов; версионирование и lifecycle-правила.
  • RDS / Aurora: управляемые PostgreSQL или MySQL с бэкапами, Multi-AZ failover, репликами.
  • CloudFront + Route 53: CDN и DNS; SQS: очереди; VPC + IAM: сеть и права доступа.

03Сеть: разумная схема VPC

VPC (virtual private cloud) — ваша изолированная сеть внутри региона. Вы делите её на подсети, каждая — в одной зоне доступности. У публичных подсетей есть маршрут к internet gateway, и в них живёт только то, что должно смотреть в интернет, — обычно load balancer. В приватных подсетях живут серверы приложений и базы данных; напрямую из интернета до них не достучаться. Security group'ы работают как stateful firewall'ы, привязанные к каждому ресурсу: load balancer принимает 443 откуда угодно, приложение — трафик только от security group балансировщика, база — только от security group приложения. Приватным ресурсам, которым нужен исходящий интернет (обновления пакетов или внешние API), нужен NAT gateway — это удобно, но это один из классических сюрпризов в счёте, поэтому стоит добавить VPC endpoint'ы для S3 и других сервисов AWS.

  • Публичная подсеть: только load balancer.
  • Приватная подсеть: приложение и база, доступ через ссылки на security group'ы.
  • Между своими уровнями ссылайтесь на security group'ы, а не на диапазоны IP.

04IAM и принцип минимальных привилегий

IAM (Identity and Access Management) решает, кто может вызывать какой API AWS на каком ресурсе. Принцип минимальных привилегий означает, что каждая учётная запись получает только те права, которые нужны для её работы. Защитите root-аккаунт с помощью MFA и никогда не используйте его в повседневной работе. Люди должны входить через IAM Identity Center с временными учётными данными, а не с долгоживущими access key. Приложения должны использовать роли: instance profile у EC2, task role у ECS или execution role у Lambda автоматически дают коду короткоживущие учётные данные, так что никаких ключей в .env-файлах. Пишите узкие политики вроде примера, который разрешает приложению читать и писать только в один префикс бакета. Используйте IAM Access Analyzer, чтобы находить неиспользуемые или слишком широкие права, и включите CloudTrail, чтобы записывать каждый вызов API.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3:::example-app-uploads/uploads/*"
    }
  ]
}

05Ловушки в расходах и как их избежать

Счета AWS редко бывают большими из-за одного крупного сервера; они растут из мелочей, за которыми никто не следит. NAT gateway'и берут плату за час и за каждый обработанный гигабайт. Исходящий трафик в интернет и между зонами доступности тихо накапливается. Каждый публичный IPv4-адрес оплачивается почасово. Неподключённые тома EBS, старые снапшоты, простаивающие load balancer'ы и забытые тестовые окружения продолжают списывать деньги. Приём логов в CloudWatch может стоить дороже серверов, которые эти логи пишут. RDS Multi-AZ примерно удваивает стоимость базы — часто это правильно, но это должно быть осознанным выбором. Защищайтесь с первого дня: настройте алерты AWS Budgets, тегируйте каждый ресурс проектом и окружением, раз в месяц смотрите Cost Explorer, задайте срок хранения логов и используйте Savings Plans или зарезервированные мощности для стабильной нагрузки.

bash
aws budgets create-budget --account-id 111122223333 \
  --budget '{"BudgetName":"monthly","BudgetLimit":{"Amount":"200","Unit":"USD"},"TimeUnit":"MONTHLY","BudgetType":"COST"}' \
  --notifications-with-subscribers '[{"Notification":{"NotificationType":"ACTUAL","ComparisonOperator":"GREATER_THAN","Threshold":80},"Subscribers":[{"SubscriptionType":"EMAIL","Address":"[email protected]"}]}]'

06AWS или VPS?

VPS от DigitalOcean, Hetzner и им подобных даёт фиксированную месячную цену, щедрый включённый трафик и одну простую панель управления. Для одного приложения хорошо настроенный VPS с Docker Compose, бэкапами вне площадки и мониторингом часто в разы дешевле аналога на AWS и понятнее маленькой команде. AWS выигрывает, когда нужно то, что трудно построить самому: управляемые базы с автоматическим failover и point-in-time recovery, автомасштабирование под всплески трафика, множество регионов, сертификаты соответствия, которых требуют корпоративные клиенты, или глубокая интеграция с другими сервисами AWS. Распространённый средний путь — VPS для вычислений плюс несколько точечных управляемых сервисов, например S3-совместимое хранилище для загрузок и CDN. Решайте по требованиям и навыкам команды, а не по моде.

Когда применять

  • Сильно меняющийся трафик, где автомасштабирование и оплата по факту экономят реальные деньги.
  • Когда нужна управляемая высокая доступность: Multi-AZ базы, load balancer'ы, DNS с failover.
  • Корпоративные или регулируемые клиенты, которым нужны определённые программы соответствия или регионы.
  • Событийные задачи, которые хорошо ложатся на Lambda, SQS и триггеры S3.

Когда не стоит

  • Одно небольшое или среднее приложение со стабильным трафиком — VPS дешевле и проще.
  • Команда, в которой некому отвечать за IAM, сеть и расходы: ошибки конфигурации — главный риск.
  • Задачи с большим трафиком, где стоимость передачи данных доминирует в счёте.

Альтернативы

  • VPS-провайдеры (DigitalOcean, Hetzner)

    Предсказуемые цены, простая сеть, идеально для одного или нескольких серверов.

  • Google Cloud

    Силён в Kubernetes (GKE), данных и аналитике; похожие строительные блоки.

  • Microsoft Azure

    Популярен у компаний, которые уже сидят на identity и инструментах Microsoft.

  • Lightsail

    Собственный продукт AWS в стиле VPS с пакетными ценами, мягкий вход.

Лучшие практики

  1. Закройте root-аккаунт MFA и используйте IAM Identity Center для людей.
  2. Давайте приложениям IAM-роли, никогда — долгоживущие access key в конфигах.
  3. Держите базы в приватных подсетях и разрешайте доступ только от security group приложения.
  4. Блокируйте публичный доступ к бакетам S3, если только не раздаёте их через CloudFront с origin access control.
  5. Настройте бюджеты и алерты в первый же день и тегируйте каждый ресурс.
  6. Включите CloudTrail и держите инфраструктуру в коде (Terraform или CloudFormation).

Частые ошибки

  • Коммитить access key в Git, где боты находят и начинают злоупотреблять ими за считанные минуты.
  • Сделать бакет публичным, чтобы по-быстрому починить ошибку прав доступа.
  • Положить базу в публичную подсеть с 0.0.0.0/0 в её security group.
  • Оставлять тестовые окружения и NAT gateway'и работать месяцами.
  • Использовать один аккаунт AWS для всего вместо разделения продакшена и экспериментов.

Глубже

07Как IAM решает: разрешить или запретить

Каждый вызов AWS API проверяется по всем политикам, которые к нему относятся, и логика здесь строгая. Всё начинается с неявного запрета. Явный Deny в любой применимой политике всегда побеждает. Внутри аккаунта запрос разрешён, только если его разрешает какая-то identity-based или resource-based политика и ничто его не запрещает. Поверх этого есть ограничители, которые могут только отнимать права и никогда их не выдают: service control policies из AWS Organizations, permission boundaries на роли и session policies тоже должны разрешать действие. Условия (Condition) делают политики точными: ограничение по исходному VPC endpoint, обязательное шифрование при передаче, обязательный MFA или доступ только к ресурсам с тегом одного проекта. Когда доступ не проходит, сообщение об ошибке и CloudTrail обычно подсказывают, какой тип политики его запретил, а IAM policy simulator может воспроизвести решение.

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyInsecureTransport",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": ["arn:aws:s3:::example-app-uploads", "arn:aws:s3:::example-app-uploads/*"],
      "Condition": { "Bool": { "aws:SecureTransport": "false" } }
    }
  ]
}

08Мультиаккаунтная структура с AWS Organizations

Аккаунт AWS — самая сильная граница изоляции, которую предлагает AWS: отдельные права, отдельные квоты и отдельная строка в счёте. Поэтому зрелые установки используют много аккаунтов под управлением AWS Organizations, а не один аккаунт на всё. Типичная схема: management-аккаунт только для биллинга и настроек организации; аккаунт-архив логов, куда стекаются CloudTrail и config-логи из всех остальных аккаунтов и который команды приложений не могут изменить; security-аккаунт для инструментов аудита; и отдельные workload-аккаунты для продакшена, staging и песочниц. Service control policies на уровне организации задают правила, которые никто не может обойти внутри аккаунта: запрет выхода из организации, запрет отключения CloudTrail или запрет любых регионов, кроме используемых. Люди входят один раз через IAM Identity Center и переключаются в роли каждого аккаунта. AWS Control Tower может развернуть такую landing zone с разумными настройками по умолчанию.

  • Радиус поражения: утёкший ключ от staging не может затронуть продакшен.
  • Квоты и расходы разделены по аккаунтам и по командам.
  • SCP — это ограничители: они сужают права, но никогда их не выдают.

09Правильный доступ к EC2: IMDSv2 и Session Manager

Каждый EC2-инстанс может читать свои метаданные, включая временные учётные данные своей instance role, с локального адреса 169.254.169.254. В исходной версии IMDSv1 работал любой простой GET-запрос, поэтому SSRF-уязвимость в приложении (когда сервер можно заставить запросить URL, подставленный атакующим) могла слить эти учётные данные. Именно так произошло несколько известных утечек. IMDSv2 требует сессионный токен, полученный PUT-запросом, и ограничение на число хопов, что закрывает большинство путей SSRF; включайте его обязательным на каждом инстансе — новые типы инстансов и AMI всё чаще делают это по умолчанию. Для shell-доступа AWS Systems Manager Session Manager открывает сессию через SSM-агент с аутентификацией через IAM и логированием в CloudTrail — без входящего порта 22, без bastion-хоста и без SSH-ключей, которые нужно ротировать. Через него же можно пробросить порт и достучаться до приватной базы для отладки.

bash
# require IMDSv2 on an existing instance
aws ec2 modify-instance-metadata-options --instance-id i-0123456789abcdef0 \
  --http-tokens required --http-endpoint enabled
 
# shell without SSH or open ports
aws ssm start-session --target i-0123456789abcdef0
 
# tunnel to a private RDS instance through that host
aws ssm start-session --target i-0123456789abcdef0 \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters '{"host":["db.internal.example.com"],"portNumber":["5432"],"localPortNumber":["5432"]}'

10Куда уходят деньги на сеть и как их сохранить

Сеть — то место, где счета AWS чаще всего удивляют, потому что трафик тарифицируется по маршруту. Данные из интернета в AWS бесплатны. Данные наружу, в интернет, оплачиваются за гигабайт, причём тарифы CloudFront обычно ниже, чем при раздаче напрямую из EC2 или S3, и есть бесплатный месячный объём, так что CDN часто экономит и деньги, и задержку. Трафик между availability zones оплачивается в обе стороны, поэтому «болтливые» сервисы в разных зонах или реплики в других зонах стоят реальных денег. NAT gateway берёт плату за час и за каждый обработанный гигабайт сверх обычной передачи, так что приватные серверы, тянущие через NAT большие образы или бэкапы, платят дважды. Gateway VPC endpoints для S3 и DynamoDB бесплатны и убирают этот трафик с пути через NAT; interface endpoints для других сервисов стоят денег за час, но всё равно могут оказаться дешевле. Каждый публичный IPv4-адрес тоже оплачивается почасово.

  • Добавляйте бесплатный S3 gateway endpoint в каждый VPC с приватными подсетями.
  • Раздавайте публичные ассеты через CloudFront, а не напрямую из S3 или EC2.
  • Используйте Cost Explorer с группировкой по usage type, чтобы найти расходы на NAT и передачу данных.

Реальные ситуации

01

Ключ доступа попал в публичный репозиторий

Проблема

GitHub присылает алерт: двадцать минут назад в публичном коммите появился AWS access key. Ключ принадлежит IAM-пользователю с широкими правами, которого использовал скрипт деплоя.

Как решить

Сразу деактивируйте ключ в IAM, а затем удалите его, как только убедитесь, что от него не зависит ничего легитимного. Исходите из того, что им уже воспользовались: ищите ID ключа в CloudTrail по всем регионам — новые IAM-пользователи или ключи, инстансы в необычных регионах (типичный признак — майнинг криптовалюты), изменённые security groups и чтения из S3. Удалите всё, что создал атакующий, включая новые ключи доступа и роли. Проверьте счёт и уведомления AWS Health об утечке. Затем устраните причину: замените IAM-пользователя ролью, для CI — через OIDC, включите secret scanning с push protection и добавьте SCP, запрещающую регионы, которыми вы никогда не пользуетесь.

02

Месячный счёт удвоился без новых фич

Проблема

Финансы спрашивают, почему счёт AWS вырос примерно с 900 до 1,800 долларов. Трафик вырос совсем немного, и никто не помнит, чтобы запускал что-то крупное.

Как решить

Откройте Cost Explorer, сгруппируйте по сервису, затем по usage type и сравните с прошлым месяцем. Типичные виновники: байты, обработанные NAT gateway, после того как какая-то задача начала тянуть данные из S3 через NAT; трафик между AZ от новой реплики; приём логов в CloudWatch Logs после включения debug-логирования; забытое тестовое окружение. Каждую причину лечите своим инструментом: бесплатный S3 gateway endpoint, размещение «болтливых» сервисов рядом, уровни логирования и retention, удаление простаивающих ресурсов. Затем предотвратите повторение: Cost Anomaly Detection с алертами, бюджеты по аккаунтам, обязательные теги проекта и окружения и короткий ежемесячный обзор расходов, за который отвечает конкретный человек.

03

Пошаговый переезд приложения с VPS в AWS

Проблема

Растущий SaaS работает на одном VPS. Корпоративный клиент теперь требует управляемую базу с автоматическим failover и задокументированный процесс восстановления, но переезд «одним рывком» кажется рискованным.

Как решить

Переносите по одному слою, и у каждого шага должен быть свой откат. Сначала загрузки: скопируйте файлы в S3 через aws s3 sync, переключите storage-драйвер приложения и раздавайте файлы через CloudFront. Затем база: создайте RDS Multi-AZ в приватной подсети, настройте репликацию с VPS через логическую репликацию или AWS DMS и переключитесь в короткое, заранее объявленное окно. Затем вычисления: при необходимости контейнеризуйте приложение и запустите его на ECS с Fargate в двух зонах за ALB, пока DNS ещё можно вернуть на VPS. С самого начала описывайте инфраструктуру в Terraform и держите VPS, пока не пройдёт целый месяц стабильной работы.

Шпаргалка

Под какой учётной записью я работаю?
aws sts get-caller-identity
Войти через IAM Identity Center
aws sso login --profile prod-admin
Временная ссылка на скачивание приватного файла
aws s3 presign s3://example-app-uploads/report.pdf --expires-in 600
Следить за логами Lambda в реальном времени
aws logs tail /aws/lambda/process-upload --follow
Компактный список запущенных инстансов
aws ec2 describe-instances --filters Name=instance-state-name,Values=running --query "Reservations[].Instances[].[InstanceId,InstanceType,Placement.AvailabilityZone]" --output table
Сделать IMDSv2 обязательным на инстансе
aws ec2 modify-instance-metadata-options --instance-id i-0123456789abcdef0 --http-tokens required
Shell на инстансе без SSH
aws ssm start-session --target i-0123456789abcdef0
Задать retention, чтобы логи перестали расти
aws logs put-retention-policy --log-group-name /app/prod --retention-in-days 30
Проверить блокировку публичного доступа к бакету
aws s3api get-public-access-block --bucket example-app-uploads

Вопросы и ответы

Q1Объясните модель разделённой ответственности AWS.

AWS защищает само облако: физические дата-центры, железо, магистральную сеть и слой виртуализации, а также базовую инфраструктуру управляемых сервисов. Клиент защищает всё, что он кладёт в облако: IAM-пользователей и роли, security group'ы, выбор шифрования, классификацию данных, а также операционную систему и софт на инстансах EC2. Граница сдвигается в зависимости от сервиса: на EC2 вы патчите ОС; на RDS движок базы патчит AWS, но сетевой доступ и учётные данные по-прежнему на вас; на Lambda вам принадлежат только ваш код и его права. Большинство реальных утечек происходит на стороне клиента — обычно это публичные бакеты или утёкшие ключи.

Q2Когда вы выберете EC2, ECS с Fargate или Lambda?

EC2 — когда мне нужен полный контроль над машиной, долгоживущие процессы, специфичный софт или минимальная стоимость при стабильной нагрузке, и я готов сам её патчить и обслуживать. ECS с Fargate — когда приложение уже в контейнерах и я хочу, чтобы AWS запускал их без управления хостами; это подходит для API, воркеров и веб-приложений со стабильным или умеренно меняющимся трафиком. Lambda — для коротких задач по событиям: обработка изображений при загрузке в S3, вебхуки, задачи по расписанию, API со всплесками нагрузки. Оплата Lambda за запрос отлична при низком или «рваном» объёме, но долгие задачи, тяжёлый постоянный трафик и пути, чувствительные к cold start, обычно дешевле или лучше на контейнерах.

Q3Как защитить бакет S3, в котором хранятся загрузки пользователей?

Оставьте включённым Block Public Access на уровне аккаунта и бакета и сохраните настройку владения объектами по умолчанию (bucket-owner-enforced), чтобы ACL были отключены. Приложение получает IAM-роль с политикой, ограниченной нужными действиями над этим бакетом или префиксом. Пользователи загружают и скачивают файлы через короткоживущие presigned URL, которые генерирует бэкенд, или через CloudFront с origin access control для публичных ассетов. Шифрование at rest включено по умолчанию; используйте ключи KMS, если нужен аудит или контроль над ключами. Включите версионирование и lifecycle-правила, чтобы случайные удаления можно было восстановить, а старые версии истекали, и при необходимости логируйте доступ через data events CloudTrail.

Q4IAM-пользователь или IAM-роль: в чём разница?

IAM-пользователь — долгоживущая учётная запись с постоянными учётными данными: паролем или access key. У роли постоянных учётных данных нет; доверенный субъект — инстанс EC2, функция Lambda, пользователь из другого аккаунта или человек через федерацию — принимает (assume) её и получает временные учётные данные, которые истекают автоматически. Сегодня лучшая практика — почти полностью отказаться от IAM-пользователей. Люди входят через IAM Identity Center или внешний identity provider и принимают роли; нагрузки используют instance profile, task role или execution role. Это убирает долгоживущие ключи — самый частый источник утечек — и делает доступ лёгким для аудита и отзыва.

Q5Как сделать приложение высокодоступным в AWS?

Сначала уберите единые точки отказа внутри региона. Запустите минимум два инстанса или задачи приложения в разных зонах доступности за Application Load Balancer с health check'ами, чтобы нездоровые цели заменялись. Используйте RDS или Aurora с Multi-AZ, чтобы база переключалась автоматически, и держите сессии и кэш в управляемом Redis-совместимом сервисе, а не на инстансах. Храните файлы в S3, а не на локальном диске. Поставьте CloudFront перед статикой. Автомасштабирование подгоняет мощность под нагрузку. Мультирегиональные схемы добавляют failover в Route 53 и репликацию данных, но стоят намного дороже, поэтому оправданы только реальными бизнес-требованиями.

Q6Почему компания может платить за AWS больше, чем за VPS, и как это контролировать?

Потому что AWS отдельно берёт плату за множество мелочей: часы и обработанный трафик NAT gateway, исходящий трафик и трафик между зонами, публичные IPv4-адреса, load balancer'ы, приём логов, снапшоты и простаивающие тома. Ещё добавляют инстансы с запасом и забытые окружения. VPS же упаковывает вычисления и щедрый трафик в одну цену. Чтобы контролировать расходы AWS: настройте бюджеты и алерты на аномалии, тегируйте ресурсы по проекту и окружению, подбирайте размер инстансов по реальным метрикам, используйте инстансы Graviton и Savings Plans для стабильной нагрузки, добавьте VPC endpoint'ы, чтобы сократить трафик через NAT, задайте срок хранения логов и удаляйте то, у чего нет владельца. Разбирайте счёт ежемесячно — это должно стать привычкой команды.

Вопросы уровня senior

S1Спроектируйте отказоустойчивое веб-приложение на AWS при среднем бюджете. На какие компромиссы вы пойдёте?

Две availability zones, а не три: это покрывает отказ дата-центра с меньшими затратами. Application Load Balancer в публичных подсетях, задачи ECS на Fargate в приватных подсетях, минимум две задачи, распределённые по зонам, автомасштабирование по CPU или числу запросов. RDS PostgreSQL Multi-AZ для автоматического failover, с автоматическими бэкапами и PITR, плюс ElastiCache для сессий и кэша. S3 с CloudFront для ассетов и загрузок. Компромиссы: один NAT gateway вместо одного на зону — мы принимаем, что отказ зоны ломает исходящие вызовы из другой зоны до исправления, и смягчаем это S3 gateway endpoints; инстансы Graviton и Compute Savings Plan; один регион с копиями бэкапов в другой регион для disaster recovery вместо active-active. Каждый компромисс документируется вместе с риском, чтобы бизнес принял его осознанно.

S2SQS, SNS, EventBridge или Kinesis: как выбрать?

SQS — это очередь: одно сообщение обрабатывает один консьюмер, с повторами, visibility timeout и dead-letter очередями. Используйте её, чтобы буферизовать работу для пула воркеров. FIFO-очереди добавляют порядок внутри группы и дедупликацию ценой меньшей пропускной способности. SNS — это fan-out по модели publish-subscribe: одно сообщение доставляется многим подписчикам, часто SQS-очередям, так что каждый консьюмер получает свою надёжную копию. EventBridge — шина событий с правилами маршрутизации по содержимому, реестром схем, архивом и replay, а также интеграциями с SaaS и событиями сервисов AWS; она подходит для событийных архитектур, где многие команды реагируют на доменные события, но ценой большей задержки и оплаты за событие. Kinesis Data Streams — упорядоченный лог с возможностью повторного чтения, разбитый на шарды по ключу, ближе всего к Kafka; он для больших потоков вроде clickstream или телеметрии, которые несколько консьюмеров читают независимо и в своём темпе.

S3Расскажите о стратегиях disaster recovery в AWS и о том, как выбрать одну из них.

AWS описывает четыре стратегии — по мере роста стоимости и сокращения времени восстановления. Backup and restore: данные бэкапятся в другой регион, а инфраструктура при необходимости пересоздаётся из кода; RTO — часы, стоимость минимальная. Pilot light: ключевые данные реплицируются непрерывно, например кросс-региональная реплика базы, а вычисления описаны, но выключены; RTO — десятки минут. Warm standby: во втором регионе работает уменьшенная, но полностью рабочая копия, которую масштабируют при переключении; RTO — минуты. Multi-site active-active: оба региона обслуживают трафик, RTO почти нулевой, но и задачи самые сложные, особенно согласованность данных и разрешение конфликтов. Выбор определяется RPO и RTO бизнеса и стоимостью простоя. Большинству компаний вполне хватает backup and restore или pilot light — при условии, что переключение отрепетировано, а инфраструктура описана в коде.

S4В какой момент Lambda становится дороже контейнеров?

Lambda берёт плату за запрос и за гигабайт-секунду выполнения и ничего не берёт за простой. При пиковом или низком трафике это трудно превзойти: функция, вызываемая несколько тысяч раз в день, почти ничего не стоит, мгновенно масштабируется и не требует планирования мощностей. Когда трафик становится высоким и ровным, вы платите за каждую миллисекунду каждого запроса, тогда как контейнер на Fargate или EC2 обслуживает много параллельных запросов на мощностях, за которые вы платите один раз, особенно с Savings Plans. Точка пересечения зависит от длительности, памяти и параллелизма, поэтому считайте на реальных цифрах. Важны и другие факторы: задачи дольше пятнадцати минут, чувствительность задержки к cold start, лимиты соединений к реляционным базам (часто нужен RDS Proxy) и операционная стоимость сопровождения контейнеров. Многие системы совмещают оба подхода: контейнеры для основного API, Lambda для событий и «клея».

Глоссарий

ARN
Amazon Resource Name: уникальный идентификатор любого ресурса AWS; в политиках с его помощью точно указывают, что разрешено.
Principal
Тот, кто делает запрос: пользователь, роль, сервис AWS или федеративная учётная запись, которым политики разрешают или запрещают действия.
SCP
Service control policy: ограничитель на уровне организации, задающий максимум прав, доступных в аккаунтах-участниках.
Instance profile
Контейнер, который привязывает IAM-роль к EC2-инстансу и автоматически выдаёт его ПО временные учётные данные.
IMDSv2
Версия сервиса метаданных EC2 на основе токенов, которая блокирует большинство краж учётных данных через SSRF.
NAT gateway
Управляемый сервис, дающий ресурсам приватных подсетей исходящий доступ в интернет; оплачивается за час и за гигабайт.
VPC endpoint
Приватное соединение из вашего VPC к сервису AWS, чтобы трафик не шёл через интернет или NAT.
Multi-AZ
Развёртывание с резервной копией в другой availability zone, которая автоматически берёт работу на себя при отказе основной.
Savings Plan
Обязательство на один или три года тратить фиксированную сумму в час в обмен на большую скидку на вычисления.
Egress
Исходящие из сети данные, например из AWS в интернет; обычно именно это направление передачи стоит денег.

Есть идея продукта?Давайте создадим его.

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