#what-is-state-and-why
Зачем Terraform нужен state? Почему нельзя просто читать API провайдера?
Что отвечать
State - карта между HCL и реальными ресурсами провайдера. В нём id'шники ресурсов, computed-атрибуты, метаданные. Без state Terraform не знает, какой `aws_s3_bucket.demo` в HCL соответствует какому реальному bucket - имена в HCL это адреса, а не глобальные идентификаторы. Читать API каждый раз - дорого и иногда невозможно (data lag, eventual consistency), плюс это не покрывает «удалили из HCL - надо удалить ресурс».
Что хотят услышать
Senior должен: - объяснить адресацию: `aws_s3_bucket.demo` это адрес в графе, реальный id (например `arn:aws:s3:::my-bucket-12345`) хранится в state - назвать что state нужен для трёх вещей: маппинг HCL→реальные id, кэш computed-атрибутов, понимание «было/стало» для diff в plan - сказать что без state каждый plan был бы full-refresh, и для десятков тысяч ресурсов это бессмысленно по времени - упомянуть `terraform refresh` как форсированный re-read из API, обычно не нужен (apply сам делает refresh)
Подводные камни
- ✗ Сказать что state - это «бэкап конфига». Конфиг - это HCL, state - маппинг
- ✗ Думать что state можно восстановить из API. Частично - да, через import, но computed-атрибуты вроде random_id это не вернёт
- ✗ Не упомянуть зачем нужны computed-атрибуты в state - тогда непонятно, откуда там pasword'ы (sensitive в state)
Follow-up
- ? Что произойдёт если удалить state-файл? Какие данные восстановимы?
- ? Чем `terraform refresh` отличается от `terraform plan -refresh-only`?
- ? Зачем там computed-атрибуты, если их в HCL не было?
Глубина в базе знаний