Provisioning with Packer, Terraform or Ansible?


I’m now running a Packer to build a Windows server base image.
On a second Packer run I’m cloning a Windows server base image and provision it with cmd&php scripts to contain my application.

After build I’m using a Terraform’s vSphere clone to make a new VM containing my application. This pipeline work’s.

But what is the best practice to do this?
Is it, Packer to build clean OS, Terraform just to clone it to a new virtual machine and after that use Ansible to provision it?

Or how to do it a “right way”?