Resource (resource "type" "name") Terraform создаёт/обновляет/удаляет; data source (data "type" "name") только читает уже существующий объект и подставляет атрибуты в конфиг.
Разбор
- Data не «владеет» объектом — не destroy'ит его при
terraform destroy.
- Типично: AMI, VPC по тегам, remote state другого стека.
- Resource попадает в state как управляемый; data — как снимок на момент refresh.
- Ошибка: пытаться data'ой создать то, чего ещё нет.
Итог
Resource = управление жизненным циклом; data = read-only ссылка на существующее.