Automating Deployment in Bot Framework (Bot + LUIS+ QnA + Table Storage)

安稳与你 提交于 2019-12-22 06:49:52

问题


We have a bot deployed on Azure but we want to give it to a client so he can deploy it run it using his own resources. We need to give them a Powershell script that magically create and deploy all the resources needed for the bot to work. My bot architecture consists on the following parts:

  • Bot's Logic (ASP.NET Web API Project deployed over an Azure App Service)
  • LUIS Model (published over a Cognitive Services Account)
  • QnA Service Knowledge Base done with QnA Maker (published directly from the QnaMaker Portal (have no idea where it's deployed)
  • Azure Table Storage

My Questions are:

1) How to configure bots web api to connection strings parameters? (table storage, luis and qna service will be different when they re redeployed) Currently I am defining the conn. strings and api keys on the web.config, but as I said, this needs to be dynamic.

2) How to automate deployment for LUIS? Luis needs to have the Key of the Cognitive Services Account that should be created first. And I assume I have the exported model json file. I was thinking of using the LUIS API to do the app export and the publishing part. Would that be enough?

3) How to deploy qna services? I think currently is deployed somewhere magically so maybe I won't need to do anything with it.

Thanks!


回答1:


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.




回答2:


Some of this you can automate with ARM templates, you can use functions like listKeys() to query the connection keys of one resource and use it as parameters for another resource. If you use Azure App Services you can override settings in web.config with what are called App Settings, and these can be set inside an ARM template

Check out this ARM template which deploys a bot and dynamically links it to a newly deployed cognitive service

The bot and app-id registration I don't think you can currently automate, there's no API or CLI



来源:https://stackoverflow.com/questions/43191957/automating-deployment-in-bot-framework-bot-luis-qna-table-storage

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!