A challenge with Infrastructure as code
Something that developers new to cloud development and infrastructure often find challenging is realising that there are two stages to repeatable deployments in Azure:
- Creating infrastructure that can host your web application
- Creating your application and then deploying it into that infrastructure
There are a myriad of ways to achieve both of these in Microsoft Azure and the choices can sometimes be overwhelming. Do you use the Azure Powershell Cmdlets for one and the Azure CLI for another? In my experience, many developers give up and fall back to creating infrastructure manually and deploying via "right-click publish".
Treating Infrastructure and Applications as one
When we started the Farmer project we quickly realised that we only solved half of the problem - creating infrastructure becomes much easier, but we hadn't addressed the problem of then deploying your code after the infrastructure has been created. Now, with the 0.8.0 release of Farmer you can also deploy code as well as infrastructure as part of your templates.
open Farmer
open Farmer.Resources
// Create a web application
let myFirstApp = webApp {
name "farmervideo"
zip_deploy @"C:\Code\MyWebApp\publish"
}
// Attach it to a deployment
let deployment = arm {
location NorthEurope
add_resource myFirstApp
}
// Push out to Azure
deployment
|> Deploy.quick "farmer-video-rg"
The key part to observe here is the zip_deploy
command, which signals that Farmer should zip and upload the contents of the specified folder automatically, once the infrastructure itself has been deployed. This allows you to unify your application deployment of infrastructure and code as one.
This short video shows you step-by-step how to do this.
Summary
We're excited at the direction that Farmer is going in and are looking forward to pushing more changes in the future in this vein.
Have (fun () -> ())
!
Isaac