Deploying a Virtual Assistant on the cheap

The Virtual Assistant Solution (VA) brings together all of the supporting components and greatly simplifies the creation of a new bot project including: basic conversational intents, Dispatch integration, QnA Maker, Application Insights and an automated deployment. Since it is designed to also encompass many of the best practices needed for an enterprise grade application, its deployment templates include enterprise grade solutions in Azure. This means setting up services with the capability of high availability and scale. But… sometimes you just want to test something out with the bare minimum pieces and cost just to see it work and see how it works.

The VA template deploys its resources via an ARM template and you can supply a parameters file to the deployment script to change how that deployment happens. The thing I was interested in recently was deploying to the smallest and least expensive dev/test instances of the various services in order to keep the cost down. Since this was just for demo purposes and I would be the only one talking to the bot, I didn’t need the capacity and scale of the default install.

This requires a couple of additional steps to be taken. First…

Modify the parameters file

The VA template already provides a parameters file you can use. It is located in the Deployments/Resources directory of the bot.


You can add whatever ARM template parameters you want to change into the file. Have a look at the ARM template used for deployment (the deployment.json file in the same directory) and you will see a whole host of parameters we can modify in the parameters section of the document.

Here is the template in my project. You will notice it lists parameters for the various SKUs of the services. In this example the default app service plan is going to be created as a Standard (S1) plan.


We can change that by overriding it in the parameters file by including a new “appServicePlanSku” object with the plan we want to use – the Free (F0) plan.


Use the parameter file when deploying

To use the parameter plan when deploying you just need to add it to the deploy.ps1 command by using the –parametersFile parameter.

.\Deployment\Scripts\deploy.ps1 -parametersFile .\Deployment\Resources\parameters.template.json

Then when the template gets deployed to Azure, your parameters will override the default values in the template.

I’ve saved my parameters file to a gist at

In that file, I’ve changed the following SKUs to free instances

  • Azure Search service
  • QnA Maker Service
  • Bot App Service Plan
  • Bot Service
  • Content Moderator
  • LUIS

Additional Notes

Remember that because of the limitations of the free services, this is not something you would do for production or even normal development scenarios. For example

  • You can easily hit the rate & transaction limits of the various free service tiers when a team is actively developing a bot.
  • You can not have more than one free search service in a subscription
  • The free tier of app service plans will always spin down after a period inactivity (meaning the first time you hit the bot later, there may be a delay)

But if you just want to deploy something to tinker with and see how it works, without incurring as much cost, you can override the default SKUs and have something up and running in just a few minutes.

If you don’t know what the SKUs should be, you can always create the resource in Azure and then select “export template” to see the values that are used to create it.

About Negative Eddy

Professional Geek - I work for Microsoft
This entry was posted in Azure, bots. Bookmark the permalink.

1 Response to Deploying a Virtual Assistant on the cheap

  1. Khurram says:

    Very interesting – How do you deploy this?

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s