Ed Elliott gives us a few ways of deploying Azure resources without using ARM templates:
So, what are our options?
Create/Edit/Delete ourselves using Powershell/.Net/Python/Go/Java/Some Other SDK
Process something else (YAML?) into JSON
Generate the ARM using c#/Powershell/something else
3rd party tools, (Terraform is the big daddy) / others include Sparkle Formation
To be honest, I’d probably just stick with ARM templates.