<目次>
(1) FlaskアプリをAzure App Serviceにデプロイする手順
やりたいこと
(1-0) 前提事項
(1-1) STEP1:Flaskアプリの準備
(1-2) STEP2:Azure App Serviceの設定
(1-3) STEP3:FlaskアプリをAzureにデプロイ
(1-4) STEP4:疎通確認
(1-5) トラブル対処①:VS CodeでAzureにSign Inしてもサブスクリプションが表示されない
(1-6) トラブル対処②:作成したPythonプログラムのフォルダを指定してデプロイするもエラーとなる
(1) FlaskアプリをAzure App Serviceにデプロイする手順
やりたいこと
・Pythonの軽量WebフレームワークであるFlaskで簡易Webサーバアプリを作ります。
・作ったアプリを、Azure上(Azure App Service)にデプロイします。
・結果として、ブラウザからインターネット経由でアクセスできる事を確認します。
(図111)全体像イメージ
(1-0) 前提事項
(1-1) STEP1:Flaskアプリの準備
●STEP1-1:Flaskアプリの作成
疎通用の簡単なFlaskアプリを作ります(手順は下記記事を参照)。
(図121①)STEP1完成イメージ
↓
(図121②)STEP1完成イメージ
●STEP1-2:requirements.txtの準備
(説明)
・Azure App ServiceやAzure Functions等のAzureリソース上にPythonアプリをデプロイする際には「requirements.txt」が必要となります。
・「requirements.txt」はプログラムが動作するために必要なライブラリを一覧で記載しておき、それをデプロイ先で動的に取得&配備するための、指示書の様なものです。
・例えば、Flaskはローカルでは「pip install Flask」しているため問題なく動作しますが、デプロイ先(Azure)の初期状態ではFlaskは無いため、「requirements.txt」で指示します。
(手順)
・①「requirements.txt」という名前でテキストファイルを作ります。
(※階層はSTEP1のPythonプログラムと同じにします)
(図122①)
↓
・②中身は下記を追記します。
Flask==2.2.2
(図122②)
●STEP1-3:venv(仮想環境)の準備
・①venvの作成
作成したPythonプログラムがあるフォルダに移動(cd)した状態で、下記コマンドを実行
> python -m venv .venv
(図123①)
↓
・②venvの起動
> .venv\scripts\activate
(図123②)
※venvについては「
コチラの記事」で詳細を紹介しています。
↓
・③必要なライブラリをインストール
> pip install -r requirements.txt
⇒実行するとFlaskの2.2.2がインストールされます
(図123③)
↓
・④Flask起動
> flask run
(図123④)
↓
・⑤Flaskのサンプルプログラムをコピーペースト
※Flaskについては「
コチラの記事」で詳細を紹介しています。
(サンプルプログラム)
# Flaskクラスのインポート
from flask import Flask
# Flaskクラスのインスタンス生成
app = Flask(__name__)
# route()デコレーターを用いて、どのURLで処理を実行するか?をFlaskに教えています
# methodsはどのHTTPメソッドを許可するか?を設定しています(デフォルトは['GET'])
@app.route('/hello/', methods=['GET', 'POST'])
def helloworld():
return "Hello World!"
# __name__はPythonにおいて特別な意味を持つ変数です。
# 具体的にはスクリプトの名前を値として保持します。
# この記述により、Flaskがmainモジュールとして実行された時のみ起動する事を保証します。
# (それ以外の、例えば他モジュールから呼ばれた時などは起動しない)
if __name__ == '__main__':
# Flaskアプリの起動
# →Webサーバが起動して、所定のURLからアクセス可能になります。
# →hostはFlaskが起動するサーバを指定しています(今回はローカル端末)
# →portは起動するポートを指定しています(デフォルト5000)
app.run(host='0.0.0.0', port=5000)
↓
・⑤疎通
URL:http://127.0.0.1:5000
(図123⑤)
(1-2) STEP2:Azure App Serviceの設定
●STEP2-1:VS CodeのAzure App Service拡張機能をインストール(⇒済の場合は省略)
・①左メニューの「Extensions」を押下
(図131①)
↓
・②Azure App Serviceで検索して「Install」押下
(図131②)
↓
・③インストール完了
(図131③)
●STEP2-2:VS CodeからAzureにSign Inする(⇒済の場合は省略)
・①左メニューで「Azure」を選択
(図132①)
↓
・②「Sign in to Azure」押下
(図132②)
↓
・③サインイン
(図132③~⑤)
↓
・④サインイン完了し、サブスクリプションが表示されます。
(図132⑥)
※(備考)もしVS Code左メニューにAzureのアイコンが表示されない場合は「Azure Tools extension for VS Code」をインストールする必要あり
●STEP2-3:Azure App Serviceのリソースを作成&アプリのデプロイ
(概要)
・Azure App Serviceのリソースを作ります。
・作り方は数通りあり、今回はVS Codeから直接作ります。
・VS Codeの場合、作った流れで一気にアプリのデプロイまで連続して行えます(今回はこの方法を採用)
(手順)
・①サブスクリプションを選択して「+」ボタン押下
(図133①)
↓
・②「Create App Service Web App」を選択
(図133②)
↓
・③App Serviceの名前を入力
例:rainbow-sample-app
(図133③)
↓
・④ランタイムスタックの選択(今回はPython3.9を選択)
(図133④)
↓
・⑤App Serviceのプランを選択
無料ならF1、少し課金可能ならB1
(図133⑤)
↓
・⑥リソースの作成成功を確認し、右下の「Deploy」を押下
(図133⑦)
↓
・⑦デプロイするアプリのフォルダを指定
→STEP1のPythonプログラムがあるフォルダを指定
(図133⑧)
↓
・⑧「Always deploy ~」はYesを選択
→CD/CIを可能にする
(図133⑨)
↓
デプロイ完了
↓
・⑨リソース確認
(図133⑩)
(1-3) STEP3:FlaskアプリをAzureにデプロイ
・不要(●STEP2-3の⑦→⑧→⑨で実施済みのため)
(説明)
・Azure App Serviceの作る方法は3つあり((A)VS Codeから、(B)Azure CLIから、(C)Azure Portalから)、うち(A)(B)はリソース作成の手順の中で、Flaskアプリのデプロイまで一緒に実施しています。
・よって、STEP3では不要としています。
(参考)
(1-4) STEP4:疎通確認
・①URLを確認
(図141①)
↓
・②エンドポイント毎に疎通確認
(例)
https://rainbow-sample-app1.azurewebsites.net/
https://rainbow-sample-app1.azurewebsites.net/sample_api/
(図141②)
(1-5) トラブル対処①:VS CodeでAzureにSign Inしてもサブスクリプションが表示されない
●エラー
(図151①)
●原因
Azure Portalにログインした状態である必要あるかも。よって、Azure Portalにログインした状態でVS Code側もサインインする必要があると理解。
(参考)
●対策
・①一度サインアウト
コマンドパレット(Ctrl+P)を開き「Azure Sign Out」を入力
(図151②)
↓
・②Azure Portalにログイン
(図151③)
・③この状態で再度サインイン
(図132②)
(1-6) トラブル対処②:作成したPythonプログラムのフォルダを指定してデプロイするもエラーとなる
●エラー
(図161①)
(エラーメッセージ)
The deployment failed with error: The request was aborted. Please take a few minutes to help us improve the deployment experience
●原因
・2022年8月時点では、Azure App Serviceの拡張機能の影響で上記エラーが発生する模様。
・ログ上でエラーを出ているが、実際のデプロイ自体は成功している
・拡張機能にエラー報告が上がり、そのうち修正版がリリースされるかも。
●対策
現時点では、修正版のリリースを待つほか無し。
●参考