Experimenting with Azure Managed Applications

"Hello World"!
Today I'm playing with the new service "Azure Managed Applications" (Service Catalog) and would like to write down some key points I learned, and can be hopefully useful for new comers:

  • when you create a managed application this is nothing else than a standard ARM template, you need to create also other two JSON files but these are just for UI and some related stuff.
  • The ARM template will be deployed in the end-user subscription, but we get the access to the resources!
  • The end-user will not get access to the resources created, so we can "safely" deploy our intellectual properties
  • Being just an ARM template this defines a set of resources and their interconnections, by default so does not deploy any Bits or piece of code.
  • Once the end-user has created the managed application we can deploy our solution, having access to the created group

But If we want to have a "ready-to-use"/"self-installing", application we need to use an ARM template that deploys the solution code after the resources creation, otherwise the experience for the end-user will be an "empty" set of resources, and he needs to wait for us to deploy the solution in its group.

Some template resources can execute extra steps after the resource creation, for example:

  • You can execute custom scripts on VM
  • A Web app can use WebDeploy to automatically deploy the code:
 {
    "name": "MSDeploy",
    "type": "extensions",
    "location": "[resourceGroup().location]",
    "apiVersion": "2015-08-01",
    "dependsOn": [
        "[resourceId('Microsoft.Web/sites', parameters('webAppName'))]"
    ],
    "tags": {
        "displayName": "WebDeployMyProfile"
    },
    "properties": {
        "packageUri": "https://dx.blob.core.windows.net/dx-stageartifacts/content/MyDeploy.zip?st=2....-08-21T08%3A13%3A00Z&sp=rl&sv=2016-05-22&sr=b&sig=DfI556J0yG09pvw2Pkuliuhj7gxODmJb0p04Rq60oqc8%3D",
        "dbType": "None",
        "connectionString": "",
        "setParameters": {
     "IIS Web Application Name": "[parameters('webAppName')]"
        }
   }
}

 

Note: This is still in preview, so things may change very quickly :-)