2023-01-12
Microsoft Azureポータル(portal.azure.com)内で新規作成したボットで完結するならポータルGUIだけで事足りるが、BotBuilder-Samplesのように他の人が作ったソースを取り込んで使いたい場合、どうしてもコマンドラインからの操作が必要になる。
ローカルソースをAzureクラウドにアップロード(デプロイ)すればWebChatでテストが簡単にできるし、リモートのDebianからREST API経由でのテストもできるようになる。
公式マニュアルは
・Bot Framework SDK for JavaScript を使用したボットの作成
・ボットをデプロイする
で、この通りにすれば良いのだがいまいちわかりにくいのでメモ。自分の環境はDebian Buster + Node.jsで行った。Microsoft Azureのアカウント登録はできているものとする。
1、コマンドラインツールのインストール
マニュアルのとおり。
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
2、BotBuilder-Samplesサンプルソースコードの取得とローカル実行
Gitリポジトリから取ってくる。
git clone https://github.com/microsoft/BotBuilder-Samples.git
ユーザーから入力を受け取る44番のサンプル(Node.js版)を使いたいので実行。
cd botbuilder-samples/samples/javascript_nodejs/44.prompt-for-user-input/ npm install # ビルド npm start # 実行
このマシンの3978番ポートリッスンでボットが立ち上がるので、BotFramework-Emulatorでテストできればテストする。しかしWindowsでないとダメだしリモートからだとngrok.exeが必要だったりとテスト1つするのも面倒極まりない。さっさとデプロイしたほうがいいので次に進む。(↑Ctrl+Cでさっさと終了)
3、デプロイテンプレートのコピー
44.prompt-for-user-inputにはなぜかテンプレートが無いので02などからコピーする。
cd botbuilder-samples/samples/javascript_nodejs/44.prompt-for-user-input/ cp -Rp ../02.echo-bot/deploymentTemplates .
4、Azureにログイン&サブスクリプション設定
az login To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code GR2RCWA6V to authenticate.
とすると、ポータルのURLと認証コードが出力されるので、クリックして、ブラウザーでログイン&認証コードを入力すると、情報画面が出る。
[ { "cloudName": "AzureCloud", "id": "XXXXXXXX-c0f9-43c1-9b42-13319f75a31e", "isDefault": true, "name": "無料試用版", "state": "Enabled", "tenantId": "ZZZZZZZZ-9e6b-4c1a-aa1d-f9bb90663b27", "user": { "name": "hogeuser@example1155.jp", "type": "user" } } ]
ここの「id」が次に入力するサブスクリプションIDなので、次のコマンドで設定する。
az account set --subscription "XXXXXXXX-c0f9-43c1-9b42-13319f75a31e"
5、アプリ登録の作成
az ad app create --display-name "hogeuser-app-44-prompt-for-user-input" --password "AtLeastSixteenCharacters_0" --available-to-other-tenants (略) "appId": "YYYYYYYY-77cf-42c8-9fc2-e670f56bd621",
パスワードはちゃんと変えなきゃだめだが、サンプルテストなら↑のままでもよいだろう。
成功するとたくさん情報が出力されるが、デプロイに必要になるのは--passwordと、生成されたappIdである。
6、指定可能なロケーション識別子の一覧確認
az account list-locations (略) { "displayName": "Japan West", "id": "/subscriptions/4db49437-c0f9-43c1-9b42-13319f75a31e/locations/japanwest", "latitude": "34.6939", "longitude": "135.5022", "name": "japanwest", "subscriptionId": null }, { "displayName": "Japan East", "id": "/subscriptions/4db49437-c0f9-43c1-9b42-13319f75a31e/locations/japaneast", "latitude": "35.68", "longitude": "139.77", "name": "japaneast", "subscriptionId": null },
idの最後にある、japanwest、japaneastなどを、次の登録時ロケーション識別子として指定する。
7、デプロイ登録
3、でコピーしておいたデプロイテンプレートを指定するのでそのディレクトリまで移動して実行。
cd botbuilder-samples/samples/javascript_nodejs/44.prompt-for-user-input/deploymentTemplates az deployment create --name "hogeuser-deploy-44-prompt-for-user-input" --template-file "template-with-new-rg.json" --location "japaneast" --parameters appId="YYYYYYYY-77cf-42c8-9fc2-e670f56bd621" appSecret="AtLeastSixteenCharacters_0" botId="hogeuser-bot-44-prompt-for-user-input" botSku=F0 newAppServicePlanName="hogeuser-appplan-44-prompt-for-user-input" newWebAppName="hogeuser-webapp-44-prompt-for-user-input" groupName="hogeuser-group" groupLocation="japaneast" newAppServicePlanLocation="japaneast"
赤文字エラーが出なければ成功。
appIdは 5、で返ったappId、appSecretは 5、で指定した --password
8、ソースコードアップロード準備
cd botbuilder-samples/samples/javascript_nodejs/44.prompt-for-user-input az bot prepare-deploy --code-dir "." --lang Javascript # web.configファイルの生成 zip -r code.zip . # トップディレクトリ丸ごとZIPアーカイブ
9、デプロイフィニッシュ(ソースコードアップロード)
az webapp deployment source config-zip --resource-group "hogeuser-group" --name "hogeuser-webapp-44-prompt-for-user-input" --src "code.zip"
赤文字エラーが出なければ成功。
--resource-groupは7、で指定したgroupName、--nameは7、で指定したnewWebAppNameをそれぞれ指定。
これにて完了したので、ポータルのホームを開くと「リソースグループ」hogeuser-groupが居て、そこにそれぞれプラン、App Servece、ボット、が作成されているので、ボットをクリックして「Webチャットでテスト」をして、何か入力して名前を聞いてくれば無事サンプルをソースからアップに成功しており、Azure Cloud上で動いている。
<追記>
7、デプロイ登録では新リソースグループを作成したが、2通りの作り方がある。すでにリソースグループhogeuser-group、Appサービスプランhogeuser-appplan-44-prompt-for-user-inputを作成済みの場合。
A、既存のリソースグループの中に作成、さらにその中の既存のAppServiceを指定してデプロイ登録
az group deployment create --name "hogeuser-deploy-44-prompt-for-user-input" --resource-group "hogeuser-group" --template-file "template-with-preexisting-rg.json" --parameters appId="YYYYYYYY-77cf-42c8-9fc2-e670f56bd621" appSecret="AtLeastSixteenCharacters_0" botId="hogeuser-bot-44-prompt-for-user-input" newWebAppName="hogeuser-webapp-44-prompt-for-user-input" existingAppServicePlan="hogeuser-appplan-44-prompt-for-user-input" appServicePlanLocation="japaneast"
B、既存のリソースグループの中に作成、しかしAppServiceは新規作成してデプロイ登録
az group deployment create --name "hogeuser-deploy-44-prompt-for-user-input" --resource-group "hogeuser-group" --template-file "template-with-preexisting-rg.json" --parameters appId="YYYYYYYY-77cf-42c8-9fc2-e670f56bd621" appSecret="AtLeastSixteenCharacters_0" botId=""hogeuser-bot-44-prompt-for-user-input" newWebAppName="hogeuser-webapp-44-prompt-for-user-input" newAppServicePlanName="hogeuser-appplan2-44-prompt-for-user-input" appServicePlanLocation="japaneast"
という感じ。状況に応じて使い分けるのがいい。
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
Windowsのデスクトップ画面をそのまま配信するための下準備
WindowsでGPUの状態を確認するには(ASUS系監視ソフトの自動起動を停止する)
CORESERVER v1プランからさくらインターネットスタンダートプランへ引っ越しメモ
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
【Windows10】リモートデスクトップ間のコピー&ペーストができなくなった場合の対処法
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Windows版Google Driveが使用中と言われアンインストールできない場合
VirtualBoxの仮想マシンをWindows起動時に自動起動し終了時に自動サスペンドする
【Apache】サーバーに同時接続可能なクライアント数を調整する
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
Googleファミリーリンクで子供の端末の現在地がエラーで取得できない場合
【Linux】iconv/libiconvをソースコードからインストール
Ubuntu Server 21.10でイーサリアムブロックチェーン【その5】