Короткий ответ Нужно скачать предыдущую валидную версию объекта state из versioning-истории бакета (например, через AWS CLI aws s3api list-object-versions/get-object с нужным VersionId), проверить её локально (terraform show -json на загруженном файле, не на активном backend), и если с момента этой версии были реальные изменения в инфраструктуре мимо Terraform — аккуратно сверить их через terraform plan после восстановления, прежде чем аплайдить; саму восстановленную версию нужно загрузить обратно как текущий объект state (или через terraform state push), а не редактировать JSON вручную повторно. Как это работает подробнее S3 object versioning хранит каждую предыдущую версию объекта (включая state) как отдельный VersionId, то есть повреждение последней версии не удаляет предыдущие, и committed история state физически доступна для восстановления; Terraform CLI команда state push принимает локальный файл state и перезаписывает remote state целиком, что и используется для возврата к валидной версии как к новому