How to handle resource creation? We're moving from a .NET monolithic application to a microservices architecture hosted on Azure.

Until now, we only had one build definition on TFS and a release definition for each environment (development, staging and production).
All the Azure resources needed to deploy to each environment were created manually. We want to automate this part.

How's the recommended approach to handle new resources setup? Do you just put steps in the release pipeline that will create the needed resources when they don't exist? Or do you have a separate pipeline that's solely responsible for creating all the resources for a new environment?
You can use Terraform for azure to handle the dynamic creation of azure resources in the release pipeline in Azure DevOps. Terraform maintains a state file for all the created resources after a run. 

If the script is run multiple times, it ignores already created resources unless there are any properties updated and created new resources.

FYI, follow below link for a quick example
Terraform example