Короткий ответ Workspaces дают один и тот же код конфигурации с разными state-файлами, переключаемыми командой terraform workspace select, что удобно для небольших различий (например, разный count/var.environment), но плохо подходит, когда окружения должны отличаться структурно (разные ресурсы, разные провайдеры, разный доступ), — для таких случаев лучше отдельные директории (или отдельные корневые модули) с явно разным backend key на каждое окружение. Как это работает подробнее workspace — это просто именованный префикс для state внутри одного backend (например, отдельный файл или путь в S3 на каждый workspace), конфигурация .tf-файлов остаётся общей, а различия между окружениями выражаются через terraform.workspace в выражениях или через переменные, подставляемые отдельно для каждого workspace. Пример кода Что использовать на практике Практика. workspaces хорошо работают, когда окружения действительно похожи (например, несколько feature-веток одного и того же набора ресурсов для review), но для prod/staging