Лучший способ обработки ресурсов в AWS - это сгруппировать их по жизненному циклу и / или назначению. Я бы никогда не хотел, чтобы база данных создавалась в том же стеке, что и серверы приложений или ресурсы, так как они могут меняться в течение срока службы приложения, но база данных может и не быть.
Если в вашем случае вы правы, TF создаст ресурсы, если они не существуют, но вы неправильно поняли контекст. TF создаст их, если они не существуют в файле состояния, а не в AWS. Если два стека пытаются создать один и тот же ресурс с одинаковыми именами, стек 1 создаст их, стек 2 попытается, но потерпит неудачу, поскольку ресурс уже существует в AWS.
Я бы разделил группы безопасности и группы подсетей на их собственный модуль, а затем использовал источник данных для ссылки на них в модуле Redshift.