There are two ways defined in the Microsoft site in order to create the azure VM.
There are like 10 different ways to create a VM in Azure (6 or so different SDK's, Powershell\Cli\Cli2\Rest Request\Arm Template\probably something else).
If chef can create a vm in Azure it is using one of those ways internally to do so. The main difference is what you have to know\do for one of the methods to work.
To automate app deployment to an Azure VM you can use different means (script extension\DSC\Ansible\Chef\puppet\etc).
Also, you question is too broad to be answered with more precision.