相信很多devops已經全面開始使用ARM來創建azure資源了,ARM有很多方便的地方,比如簡單易學,Infrastructure as Code,但是深入使用ARM開始會發現一些有待改進的方面。這篇文章主要是分享一下我在做Teams app的時候使用ARM來創建資源的經驗,以及遇到的一些問題。希望大家以后遇到類似問題可以少走彎路。
在一個teams bot中有一個比較特殊的azure資源需要創建,就是Bot service,一年多前你還可以在另一個微軟的獨立網站上創建bot,但是現在已經全部整合到azure的大旗下了。
?
這個資源主要用來干什么?它主要是用來作為Teams和你的api service的通訊橋梁。它會從Teams(也可以是其他,比如skype)里接受消息,然后抽象成一個統一的bot通信數據模型后,傳遞給你的api service,當你的api service完成處理后,它又將返回的信息,發送回Teams。所以這個資源必不可少。
我們先看看它長什么樣子,注意一點:目前在azure上這個Bot Channels Registration還不支持Export Template,所以還不能反向工程成ARM
{"name": "YourBotServiceName","type": "Microsoft.BotService/botServices","apiVersion": "2018-07-12","location": "global","tags": {"displayName": "Bot Service"},"sku": {"name": "F0"},"kind": "bot","dependsOn": ["[resourceId('Microsoft.Insights/components/', variables('appInsightsName'))]"],"properties": {"displayName": "LuckyDraw","endpoint": "https://api.yourapiservice.com/messages","msaAppId": "[parameters('microsoftAppId')]","developerAppInsightKey": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')), '2015-05-01').InstrumentationKey]"}
},
有幾點需要注意:
- apiVersion目前最新是2018-07-12,我就使用了這個版本。Microsoft.BotService botServices template reference
- location是global,這個和一般的azure resource不同,需要特別注意
- endpoint就是你的api服務的endpoint
- msaAppId是你的Microsoft application的id,這個需要另外申請,我這里是作為外部參數傳入的
- developerAppInsightKey,為了以后調試方便,所以創建了一個application insight,然后把key配置到這里
大家需要注意一點,當使用ARM創建完bot service后,默認情況下沒有打開Teams通道。這點我研究了很久也沒有找到答案,可能在以后版本中會支持這個,如果大家知道如何做,也請留言告訴我。我有幾次忘記打開這個,然后就發現teams發送不了消息到我的api服務,而且也沒有詳細的出錯信息。
所以我們需要登入azure portal,然后手動打開teams通道,完成后就一切就緒,可以和你的api服務進行通信了。