Azure Bot ServiceのFunctionsでNode.jsコード変更が反映されないのでデプロイ方法調べた

タイトルの通りです。

Web App版のAzure Bot Serviceではオンラインエディタで変更した内容がすぐ反映されるのに対して、Functions版のBotでは、オンラインエディタからJavaScriptコードを変更しても、変更内容が全く反映されませんでした。

サービスの再起動など色々試していたのですが、どうも自分でビルドしないと動かないらしいです。

node.js - Azure bot app doesn't updating after modifications - Stack Overflow

ビルドの事前準備

azure-functions-core-toolsインストール

開発やデプロイに利用するパッケージです。

github.com

私の開発環境がUbuntuなので、こちらの手順で必要なパッケージをインストールしました。

$ wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
$ sudo dpkg -i packages-microsoft-prod.deb
$ sudo apt update
$ sudo apt install azure-functions-core-tools

他のOS向けのものもREADMEに記載があります。

$ func version
2.0.1-beta.35

azure-functions-packインストール

パッケージングに使うパッケージです。

github.com

NPMでインストールします。

$ npm install -g azure-functions-pack
$ funcpack -V
1.0.0

azure-cliのbotservice拡張のインストール

azコマンドのサブコマンドでbotを使えるようにしておきます。

$ az extension add  --name botservice
The installed extension 'botservice' is in preview.
$ az --version | head
azure-cli (2.0.44)
#--省略
Extensions:
botservice (0.0.3)
#--省略

リファレンスはこの辺りです。

az bot | Microsoft Docs

ソースコード変更作業

上記のstackoverflowではデバッグコンソールから作業するとありましたが、色々エラーが出たり、操作性悪いので、ローカルに落としてビルドして上げます。

ソースコードダウンロード

管理画面からもダウンロードできますが、コマンドからの方が簡単です。

azコマンドでダウンロードします。

$ az bot download -g your-bot-resource-group -n your-bot-name

コードの変更

関数のディレクトリ(ここではmessages関数)に入って、必要なパッケージをインストールして、修正やEmulatorを利用したデバッグを行います。

$ cd your-bot-name/bot-src
$ cd messages
$ npm i
$ code . # or vim or something

パッケージングとデプロイ

your-bot-name/bot-src 直下に移動して以下のコマンドを実行します。.funcpack というディレクトリが作成されて、ここにパッケージがデプロイされます。

$ funcpack pack -c .
info: Generating project files/metadata
info: Webpacking project
info: Complete!

.funcpack が存在すること確認してから以下のコマンドでデプロイを実行します。ちなみに.funcpack 無しでデプロイするとソースコードが空の状態になりました。

$ az bot publish -g otomo-bot-func-rg -n otomo-bot-func

毎回コマンド打つの面倒なので、package.json準備作っておいてもいいかもしれません。

{
  "scripts": {
    "build": "funcpack pack -c .",
    "deploy": "az bot publish -g otomo-bot-func-rg -n otomo-bot-func"
  }
}