Maybe a little bit late, but I just had to implement the very same thing, so here are the answers to your questions in hope they could be useful to others:
1) As JoyrexJ9 mentioned above, you can do this via an ARM template by setting the Application Settings of your App Service which will override the values in your Web.config. More about this here.
- You can put together and set the connection string of a storage account in the ARM template like this:
{
"type": "Microsoft.Web/sites",
"kind": "app",
"name": "MyWebApp",
"apiVersion": "2015-08-01",
"location": "westeurope",
"properties": {
"name": "MyWebApp",
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', 'MyAppServicePlanName')]",
"siteConfig": {
"appSettings": [{
"name": "StorageConnectionString",
"value": "[concat('DefaultEndpointsProtocol=https;AccountName=','MyStorageAccountName',';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', 'MyStorageAccountName'), '2017-10-01').keys[0].value,';EndpointSuffix=core.windows.net')]"
}],
"cors": {
"allowedOrigins": [
"*"
]
}
}
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', 'MyStorageAccountName')]",
"[resourceId('Microsoft.Web/serverfarms', 'MyAppServicePlanName')]"
]
}
- For LUIS and QnA maker you will need to get the values from the respective portals manually and either update the App Settings after the ARM deployment manually, or re-run the ARM deployment with the manually acquired values passed to it as parameters. The latter works because for the first time you can leave those values empty in your ARM template, and when you deploy it the second time with the parameter values in place, ARM will simply update those App Settings values. More on this topic here.
(Hint: if you provision the QnA Maker and LUIS apps programmatically through their API-s, then you'll only need to get the subscription key for LUIS manually, because you'll get the knowledge base's credentials from QnA Maker's API.)
2) Unfortunately you cannot automate the provisioning of a LUIS app completely at the moment. You can create the resource in Azure via an ARM template and you can do the bulk of the rest of the work through the LUIS API, but for example you cannot assign the subscription key created by the ARM template to a LUIS app programmatically, because that API method is deprecated.
3) The QnA Maker service and it's hosting model changed significantly since you've submitted your questions. I wrote a full blog post about how to do the provisioning of it in the new system.
As JoyrexJ9 mentioned above, it's very important to point out that you won't be able to automate the bot registration fully even with a script, because there's no API for registering an application at https://apps.dev.microsoft.com/. You'll have to do that manually as well. Everything else (besides the things I mentioned above) can be fully automated either via ARM templates or scripts.