Help us understand the problem. What is going on with this article?

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

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) => {
        const replyText = `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 -X POST -u '$mybot001:xxxxxxx' --data-binary @my_bot_001-src-2.zip https://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 は要らんかったんや」と気づいたのがこの記事を書き終わる直前
amay077
ランチの時は呼ぶといい!
https://blog.amay0777.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした