Генерация и распространение изображений быстро возрастает до O(n^2) или выше, а поскольку terraform явно ориентирован на создание экземпляров, он полагается на внешние поставщики внутреннего состояния.
Он будет работать в меньших масштабах, но значительно усложнит модель гибридного облака и вызовет проблемы, если системы прослужат долго.
Это также имеет тенденцию вызывать трудности с рефакторингом итерации, но они будут зависеть от вашего варианта использования.
Например, предположим, что вы хотите развернуть новую версию модуля Python. Если у вас есть колесо или файл требований.txt, вы можете развернуть его у облачного провайдера a,b,c в версиях ОС c и d. Но при использовании полностью запеченных изображений вам придется создавать и тестировать изображения a_c, b_c, c_c, a_d, b_d,c_d. Если вам придется делать это за итерацию, затраты на продуктивность разработчиков вырастут очень быстро.
Обратите внимание: вы можете предполагать, что образы будут полностью неизменяемыми, но без инструмента управления конфигурацией у вас нет возможности убедиться в этом.
Поскольку контейнеры в целом сейчас работают по доверенной модели, и для любого процесса или человека, имеющего доступ к запуску машины в таких средах, как Docker, довольно просто вносить произвольные изменения во что-либо в системе (каждый пользователь API является пользователем root, даже на хосте для докера) это непредвиденная ситуация, которую вы хотите учитывать.
Если вы сохраните слабую связь между поставщиком облачных услуг, приложением и базовой ОС, будет гораздо проще выполнять итерации с течением времени, а смягчение последствий со стороны поставщиков станет намного проще.
Если вы поддерживаете конфигурацию terraform для GCE, AWS и Azure, конфигурацию упаковщика для каждой ОС, а затем метод развертывания приложения отдельно, это может увеличить первоначальную сложность, но эти затраты быстро окупятся в течение всего жизненного цикла проекта.
Лично я нахожу такой инструмент, как ansible, который можно запускать без централизованной инфраструктуры и который может вносить организованные изменения на основе состояния, чтобы быть более гибким в чистой модели развертывания, но в какой-то момент мне всегда приходилось модифицировать ту или иную форму управления конфигурацией. .
Это может не соответствовать вашему конкретному варианту использования, но это очень веская причина, по которой это обычная практика.