Короткий ответ
IaaS даёт только виртуальную инфраструктуру (сеть, диски, виртуальные машины), и всю ОС, рантайм и приложение настраивает команда; PaaS берёт на себя ОС, рантайм и часть эксплуатации, оставляя команде код и конфигурацию; SaaS — готовое приложение, где DevOps обычно настраивает только интеграции. Чем выше уровень абстракции, тем меньше контроля, но и меньше операционной нагрузки.
Как это работает подробнее
облачный провайдер проводит условную границу ответственности — IaaS (виртуальные машины, сети, диски) оставляет ОС, патчи и масштабирование приложения на пользователя; PaaS (управляемые среды выполнения) берёт на себя ОС и рантайм, пользователь поставляет код и конфиг; SaaS — готовый продукт, доступный через API/UI.
Пример кода
example.txt
IaaS: aws ec2 run-instances ... # вы управляете ОС, патчами, рантаймом
PaaS: gcloud app deploy app.yaml # платформа управляет ОС и рантаймом, вы — кодом
SaaS: доступ через веб-интерфейс/API провайдера, инфраструктуру не видноЧто использовать на практике
- Рекомендация. выбор уровня абстракции зависит от требований к контролю (кастомные ядра, специфичные библиотеки) и скорости разработки; команда DevOps для IaaS отвечает за патчинг и автоскейлинг, для PaaS — за деплой и конфигурацию, для SaaS — за интеграцию и управление доступами.
- Проверка. для выбранной модели команда должна чётко указать, где заканчивается её зона ответственности на схеме shared responsibility, прежде чем проектировать мониторинг и патчинг.
Подводные камни
- Риск. считать, что PaaS не требует мониторинга и алертинга
- Риск. пытаться получить полный доступ к ОС на PaaS там, где это архитектурно не предусмотрено
- Риск. путать "меньше инфраструктурной работы" с "меньше ответственности за надёжность приложения".