Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8705

Azure Bot Service を node.js で作ってスクリプトで自動更新する方法

$
0
0

Microsoft Bot Framework(node/JavaScript) v4 で作成した BOT を、スクリプトで Azure Bot Service に自動デプロイする方法を調べました。
Azure Pipeline とか Visual Studio 2019 とかに載ってしまえば楽なのかも知れませんが、自力で自動化したい場合の情報が探しづらくて苦労しました。

0. 準備するもの

  • コマンドプロンプトか PowerShell(Core) か Bash など

cURL を使うだけなので Windows でも macOS でもどちらでもOKです(私は Windows を使っています)。

1. Bot Service を作る(JS Echo bot)

こちら、

を参考に、Azure に Bot を作成します。言語は node で、Echo Bot を選択します。

それぞれの設定名は次の通りとしました。
リソースグループ、App Service プランも新規作成した方が無難です。既存のを使うと後でごちゃごちゃになって管理しきれなくなる。
新規にリソースグループを作ってそこにぶら下げておけば、不要になったらリソースグループごと削除できます。

  • リソースグループ名: my_bot_001_rc
  • Web アプリ ボット名: my_bot_001
  • App Service 名: mybot001
  • App Service プラン名: my-bot-001-app-service-plan

デプロイが終わったら、 Web チャットでテストしておきましょう。

image.png

2. ソースコードをダウンロードする

ビルド → ボットのソース コードをダウンロードする で、Echo ボットのソースコードをダウンロードします。
ファイル名は my_bot_001-src.zipとします。

image.png

3. BOT の動きを少し変える

my_bot_001-src.zipを解凍して bot.jsの内容を次のように変更します。

this.onMessage(async(context,next)=>{constreplyText=`Echo2: ${context.activity.text}`;// ← Echo: を Echo2: に変更

保存したら、再び ZIP ファイルに圧縮します。ファイル名は my_bot_001-src-2.zipとします。

4. 自動デプロイに必要な認証情報を得る

image.png

  1. Azure ポータルで、AppService の mybot001 を開き、デプロイセンターを選択します。
  2. FTP を選択し、ダッシュボード を押します。

image.png

  1. アプリの資格情報に表示される ユーザー名 と パスワード をコピーします。ちなみに「資格情報のリセット」を押すとパスワードが変わります。

5. コマンドでデプロイする

コマンドプロンプトまたは Terminal などで、次のコマンドを実行します。

curl -X POST -u "<user>:<password>" --data-binary @"<アップロードするZIPファイルパス>" https://<AppService名>.scm.azurewebsites.net/api/zipdeploy
  • user: 3 でコピーしたユーザー名の \以降。(例: mybot001\$mybot001 → \$mybot001)
  • password: 3 でコピーしたパスワード。$ などが含まれる場合は \でエスケープが必要と思われる。
  • アップロードするZIPファイルパス: アップロードするZIPファイルのパス
  • AppService名: 1 で作成した App Service 名。この例では mybot001 。

実際のコマンド

bash

curl -X POST -u"\$mybot001:xxxxxxx"--data-binary @"my_bot_001-src-2.zip" https://mybot001.scm.azurewebsites.net/api/zipdeploy

PowerShell

curl.exe-XPOST-u'$mybot001:xxxxxxx'--data-binary@my_bot_001-src-2.ziphttps://mybot001.scm.azurewebsites.net/api/zipdeploy

コマンドプロンプト

curl.exe -X POST -u "$mybot001:xxxxxxx" --data-binary @my_bot_001-src.zip https://mybot001.scm.azurewebsites.net/api/zipdeploy

実行して、何もエラーが出ずに次のプロンプト(bash-5.0#) が表示されたらアップロード成功。

7. 確認

Azure ポータルで Bot Service: my_bot_001 を開き、Web チャットでテストします。

image.png

2 の修正の通り、"Echo:" が "Echo2:" に変わっていれば成功です。

まとめ

これで、Docker があれば、スクリプトから Bot Service を自動デプロイできるようになりました。
次は、TypeScript のソースをビルド → WebPack → ZIP化 → デプロイという一連の流れを実現したいと思います。

参考

愚痴

  • AWS や Firebase のような、CI 用の CLIログインの方法が Azure CLI に用意されているのかよくわかりませんでした
  • デプロイは FTP や SCP でも可能と書いてありますが、それらでは認証エラーになってしまい先へ進めませんでした
  • ターミナルの種類により微妙に書き方が異なるのがイラッ
  • Azure CLI と格闘した結果、「Azure CLI は要らんかったんや」と気づいたのがこの記事を書き終わる直前

Viewing all articles
Browse latest Browse all 8705

Trending Articles