Share via


Rapid automated deployments (large or small) in Microsoft Azure

Azure Task Manager (ATM) is a DevOps tool that enables you to deploy Microsoft Azure compute assets in parallel, thus cutting down on the time necessary to do large deployments. It brings convenience to periodic (daily/weekly/monthly) deployments, large or small, reducing resistance to shutting down resources that aren’t used 24x7 and so saving money. https://github.com/sebastus/Azure-Task-Manager

ATM is implemented as an Azure Webjob and uses a message-based pattern.  Drop a message into a queue and in a few minutes your service is up and running.  Drop 50 messages into a queue, and in the same few minutes your service collection is up and running.  At the end of the day use the same techniques to tear down those services.

ATM Architecture

Figure 1: Example of implementation for a new cloud service

Use the tool as part of your continuous integration mechanism to do your deployments.  For example, generate your deployment packages and send them to Azure storage.  When all packages are done, send the messages in bulk to ATM and in a few minutes the entire system is deployed.  This allows (for example) your QA environment to be stable most of the time, with refresh builds coming online as a unit rather than piecemeal.

Upgrade deployments are also supported.

Some companies do load testing using cloud-based VMs.  Load testing isn’t usually a 24x7 activity, but it can require quite a number of machines.  Starting them up in bulk and shutting them down in bulk is a significant value-add.

Additional use cases are being considered.  Please comment below if your company could make use of additional features.  Or just fork the repo.

Cheers!

Comments

  • Anonymous
    February 19, 2015
    What are the restrictions? Does ATM work with multiple VMs in the same cloud service? AFAIK, it's not possible to start or stop multiple VMs in parallel if they belong to the same service.

  • Anonymous
    February 19, 2015
    @ Aleksandar: While I didn't spell it out above, when I say "services" I mean PaaS services, i.e. web and worker roles.  A deployment package is a collection of deployment assets generated (usually) by Visual Studio and packaged up for deployment to a set of VMs.  You correctly point out that VMs in the same cloud service cannot (at this time) be started in parallel.  What I can say about IaaS VMs is this: I'm looking at allowing you to start all VMs in a service (in serial) but as quickly as possible.  Would this be a benefit to you?

  • Anonymous
    February 19, 2015
    Improved performance is always a benefit. :) I'm looking forward to starting my IaaS VMs in parallel with Azure Automation runbook. Or provision my test environment quickly with ARM, DSC, and Azure Automation.