Azure App Service で Bokeh アプリをデプロイする記事を実践してみた
2022/3/1追記 Azure にデプロイしていたアプリは公開停止しました。
下記の記事をもとに Azure AppService で Bokehアプリをデプロイしてみました。
やっていることは基本記事通りですが、苦労もしたのでまとめます。
私がデプロイしたアプリはこちら
-> 2022/3/1 で公開停止しました
2022年2月いっぱいでデプロイ停止するのでご了承ください。
アプリ自体はこちらのGitHubで公開されてますし、そもそも Bokeh の公式ドキュメントにて公開されているものそのままです。
Pythonは3.8で検証しています。
実際自分が使ったファイルをGitHubにあげています、もともと記事のGitHubを流用しているので微妙ですが、yaml ファイルで更新した箇所にコメントを入れたので、yamlファイルはご参考になるかもしれません。
実行手順の概要
- Bokehでアプリを実行するファイル(app.py)を作成する
- ローカルで実行して動くか確かめる
- AzureAppServiceのリソースを作成する
- AzureDevOpsのPipelineで環境(environment)を作成する
- AzureDevOpsのリソースを作成する
- AzureDevOpsにコードをアップロードする
- AzureDevOpsの環境(environment)を作成する
- AzureDevOpsの設定でServiceConnectionの設定をする
- AzureDevOpsのPipelineを作成する
- AzureDevOpsのパラレル処理の申請を行う
- 2〜3営業日待ってパラレル処理の許可がおりたらPipelineを実行する
Bokehでアプリを実行するファイル(app.py)を作成する
今回は先述の通り、アプリ自体はこちらのGitHubをそのまま使っています。
ローカルで実行して動くか確かめる
下記コマンドをCLIで入力してローカルで動くか確かめましょう。
bokeh serve app.py --show
AzureAppServiceのリソースを作成する
AzureAppServiceのリソース作成については下記記事をご参照ください。
AppServiceの構成の全般設定で必要な設定を変更する
記事で触れられていますが、AppService の構成の全般設定でいくつか設定を変更する必要があります。
- スタートアップコマンドに下記のコマンドを修正して入力
python -m bokeh serve app.py --port 8000 --address 0.0.0.0 --unused-session-lifetime 5000 --check-unused-sessions 5000 --allow-websocket-origin=mywebserver.azurewebsites.net
python の実行ファイル名(app.py) と AppService の URL(mywebserver.azurewebsites.net) の部分は適宜更新ください。
- Web ソケットを オン にする
Web ソケットの設定変更は ベーシックプラン以上でないと変更できないっぽいのでベーシックプラン以上にしておきましょう。
AzureDevOpsのリソースを作成する
Azure DevOps のサイトから作成しましょう。
AzureDevOpsのRepoにコードをアップロードする
リポジトリの使い方は、概ねGitHubと同じです。
簡単に後述しますが、DevOps の Pipeline 作成時に、GitHub と連携させて GitHub からデータを取り込むこともできるようです。
AzureDevOpsのPipelineで環境(environment)を作成する
DevOpsの環境(Environments)タブをクリックし、 New environment をクリックします。
設定画面で Name を更新します。
この名称を yaml ファイルに記載する必要があるので控えておきましょう。
その際リソースはとりあえず None でよいようです。
AzureDevOpsの設定でServiceConnectionの設定をする
左下の歯車(設定アイコン)をクリックし、New service connection で Azure Resource Manager を選択します。
Service principal (automatic) を選択します。
ポップアップで Azure にログインを求めてくるのでログインし、リソースグループを選択します。
任意の Service connection name を設定。この名称を yaml ファイルに記載する必要があるので控えておきましょう。
あとは変更せず保存しましょう。
AzureDevOpsのPipelineを作成する
DevOps の Pipeline タブをクリックし、New Pipeline をクリックします。
Code を選択します。
さきほど DevOps に挙げたコードを使いますので、 Azure Repos Git を選択します。
Python package を選択します。
yaml ファイルの更新画面になるので、こちらを参考に更新しましょう。
Save and Run で Save を選択しましょう。
補足
なお、すでにGitHub等にAzurePipelineの.yamlファイルがある場合は、pipeline実行時に、GitHubリポジトリを選択して連携し、Existing Azure Piplelines YAML file を選択 しましょう。
AzureDevOpsのパラレル処理の申請を行う
Pipeline の設定を終え、いざ Pipeline を実行するとエラーが出ました。
No hosted parallelism has been purchased or granted. ...(略)
エラーを読むと、DevOps の無料プランだとパラレル処理できません。したかったら申請してね!URLはこちら(意訳)、という内容でしたので申請してみました。
エラーの中に申請用URLも書いてあるので同じエラーに遭遇した方はエラー内容を参照ください。
こちらの記事でもURLが紹介されてます。
そのとき DevOps の Organization の名称を記載する必要がありますので、間違えずに記載しましょう。
自分はプロジェクト名と間違えそうになりました...。
自分の場合だと DevOps の画面の bokehapp のところが Organization の名称でした。
なお、bokeh はプロジェクト名です。
2〜3営業日待ってパラレル処理の許可がおりたらPipelineを実行する
こんな感じで申請が通った旨のメールが来ればOKです。
自分の場合は 2営業日くらいで許可メールがきました。
早速Pipelineを実行しましょう。
Pipeline 実行時に、環境とPipelineの許可を求められるので、Permission needed をクリックして実行を許可します。
大体数分くらいでデプロイが終わりました。
ついでに先日ブログに書いたルート最適化アプリもデプロイできました。
-> 2022/3/1 で公開停止しました。
こちらも2月いっぱいでデプロイ停止しますので悪しからず。
以上になります、最後までお読みいただきありがとうございました。
Discussion