Introducing the Azure Plugin Library
An open source library of plugins installed with a command line tool (a package manager). Once a plugin is installed, it can be easily packaged with an Azure deployment to install application dependencies on a Web or Worker role.
One of the key strengths of Windows Azure, is the Platform as a Service offering. Why would you want to patch an operating system, manage the deployment of your application, and check the health of your infrastructure? It’s better left to someone else (Microsoft) so you can focus on your application. However, the pitfall is when your application depends on something extra being installed or configured on the machine.
There are a few ways for installing 3rd party components on an Azure instance. This blog post has a good summary of the options.
In summary, start-up tasks are the best mechanism available for installing dependencies, which is fine for something straight forward, but for more complicated components (like MongoDB for example) there is quite a bit of work involved in scripting out the installation. Projects like AzureRunMe help with this, but ideally you want something that just works, without you having to write a lot of script.
Azure Plugin Library
The Azure Plugin Library exploits an undocumented feature of the Azure SDK, whereby modules referenced in the Service Definition file are bundled with your application in a package, which is uploaded and deployed to the Azure instances. The SDK uses this mechanism to set up Remote Desktop, Connect, WebDeploy and Diagnostics, however, additional plugins can be added by copying the files to the “Windows Azure SDK\v1.6\bin\plugins” folder.
The Azure Plugin Library offers a range of additional plugins which you can download, and include with your Azure deployment. The library is hosted on GitHub, and is open source (accepting contributions).
Installing a plugin using APM
The AzurePluginManager (APM) is a command line utility to discover, install, update and remove plugins:
apm list (displays a list of plugins available in the library) apm installed (displays a list of installed plugins) apm install [PluginName] (installs the specified plugin) apm remove [PluginName] (removes the specified plugin) apm update [PluginName] (updated the specified plugin) apm update (updates all plugins)
What plugins are available?
At launch only a few plugins are available but this list is set to grow. Community contributions will be accepted, so please fork the repository and issue a pull request with your own ideas.
How do I include a plugin in my Azure package?
Installed plugins will be included in your Azure package if you add them as an Import in your ServiceDefinition.csdef file:
<ServiceDefinition> <WorkerRole> <Imports> <Import moduleName="[PluginName]" /> </Imports> </WorkerRole> </ServiceDefinition>
How do I add my own plugin to the library?
The library has some instructions on how to do this.