クイックスタート: Azure App Service on Linux を使用して Python アプリを作成する

このクイック スタートでは、Azure のスケーラビリティに優れた自己適用型の Web ホスティング サービスである App Service on Linux に、Python Web アプリをデプロイします。 Mac、Linux、または Windows コンピューター上でローカル Azure コマンドライン インターフェイス (CLI) を使用して、Flask または Django のいずれかのフレームワークを使用したサンプルをデプロイします。 構成する Web アプリでは、Basic App Service レベルが使用され、Azure サブスクリプションにわずかなコストが発生します。

初期環境を設定する

  1. アクティブなサブスクリプションが含まれる Azure アカウントを用意します。 無料でアカウントを作成できます
  2. Python 3.6 以降をインストールします。
  3. Azure CLI 2.0.80 以降をインストールします。それを任意のシェルから使用してコマンドを実行することで、Azure リソースのプロビジョニングと構成を行います。

ターミナル ウィンドウを開き、Python のバージョンが 3.6 以降であることを確認します。

python3 --version

Azure CLI のバージョンが 2.0.80 以降であることを確認します。

az --version

次に CLI から Azure にサインインします。

az login

このコマンドを実行すると、お客様の資格情報を収集するためにブラウザーが開かれます。 コマンドが終了すると、ご利用のサブスクリプションに関する情報を含んだ JSON 出力が表示されます。

サインイン後は、Azure CLI を使用して Azure コマンドを実行して、サブスクリプション内のリソースを操作することができます。

問題がある場合は、 お知らせください。

サンプルを複製する

次のコマンドを使用してサンプル リポジトリを複製し、サンプル フォルダーに移動します (git をまだインストールしていない場合は、git をインストールします)。

git clone https://github.com/Azure-Samples/python-docs-hello-world
git clone https://github.com/Azure-Samples/python-docs-hello-django

このサンプルには、Azure App Service がアプリの起動時に認識するフレームワーク固有のコードが含まれています。 詳細については、「コンテナーのスタートアップ プロセス」を参照してください。

問題がありますか。 お知らせください。

サンプルを実行する

  1. python-docs-hello-world フォルダーに移動します。

    cd python-docs-hello-world
    
  2. 仮想環境を作成し、依存関係をインストールします。

    # Linux systems only
    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    
    # Git Bash on Windows only
    py -3 -m venv .venv
    source .venv\\scripts\\activate
    pip install -r requirements.txt
    

    Windows システムを使用していて、"'ソース' は内部コマンドまたは外部コマンドとして認識されていません" というエラーが表示される場合は、Git Bash シェルで実行しているか、上の [Cmd] タブで示されているコマンドを使用していることを確認してください。

    "[Errno 2] そのようなファイルまたはディレクトリはありません: 'requirements.txt'。" と表示された場合は、python-docs-hello-world フォルダーを開いていることを確認してください。

  3. 開発サーバーを実行します。

    flask run
    

    既定では、サーバーによって、アプリのエントリ モジュールが、サンプルで使用されている app.py 内にあると想定されています

    別のモジュール名を使用する場合は、FLASK_APP 環境変数をその名前に設定します。

    エラー "Could not locate a Flask application. You did not provide the 'FLASK_APP' environment variable, and a 'wsgi.py' or 'app.py' module was not found in the current directory. (Flask アプリケーションが見つかりませんでした。"FLASK_APP" 環境変数を指定しておらず、"wsgi.py" または "app.py" モジュールが現在のディレクトリに見つかりませんでした。) が発生した場合は、サンプルが含まれている python-docs-hello-world フォルダーにいることを確認してください。

  4. Web ブラウザーを開き、http://localhost:5000/ のサンプル アプリに移動します。 アプリに、Hello World! というメッセージが表示されます。

    サンプル Python アプリをローカルで実行する

  5. ターミナル ウィンドウで Ctrl + C キーを押して、開発サーバーを終了します。

  1. python-docs-hello-django フォルダーに移動します。

    cd python-docs-hello-django
    
  2. 仮想環境を作成し、依存関係をインストールします。

    # Linux systems only
    python3 -m venv .venv
    source .venv/bin/activate
    pip install -r requirements.txt
    
    # Git Bash on Windows only
    py -3 -m venv .venv
    source .venv\\scripts\\activate
    pip install -r requirements.txt
    

    Windows システムを使用していて、"'ソース' は内部コマンドまたは外部コマンドとして認識されていません" というエラーが表示される場合は、Git Bash シェルで実行しているか、上の [Cmd] タブで示されているコマンドを使用していることを確認してください。

    "[Errno 2] そのようなファイルまたはディレクトリはありません: 'requirements.txt'。" と表示された場合は、python-docs-hello-django フォルダーを開いていることを確認してください。

  3. 開発サーバーを実行します。

    python manage.py runserver
    
  4. Web ブラウザーを開き、http://localhost:8000/ のサンプル アプリに移動します。 アプリに、Hello World! というメッセージが表示されます。

    サンプル Python アプリをローカルで実行する

  5. ターミナル ウィンドウで Ctrl + C キーを押して、開発サーバーを終了します。

問題がありますか。 お知らせください。

サンプルのデプロイ

az webapp up コマンドを使用して、ローカル フォルダー (python-docs-hello-world) にコードをデプロイします。

az webapp up --sku B1 --name <app-name>
  • az コマンドが認識されない場合は、「初期環境を設定する」の説明に従って Azure CLI がインストールされていることを確認してください。
  • webapp コマンドが認識されない場合、それはご利用の Azure CLI のバージョンが 2.0.80 以上だからです。 そうでない場合は、最新バージョンをインストールしてください。
  • <app_name> を Azure 全体で一意の名前で置き換えます ("有効な文字は、a-z0-9、および - です")。 会社名とアプリ識別子を組み合わせて使用すると、適切なパターンになります。
  • --sku B1 引数により、Basic 価格レベルで Web アプリが作成され、時間単位のわずかなコストが発生します。 より高速な Premium レベルを使用するには、この引数を省略します。
  • 必要に応じて、引数 --location <location-name> を含めることができます。ここで、<location_name> は利用可能な Azure リージョンです。 az account list-locations コマンドを実行すると、お使いの Azure アカウントで使用可能なリージョンの一覧を取得できます。
  • "Could not auto-detect the runtime stack of your app (アプリのランタイム スタックを自動検出できませんでした)" というエラーが表示された場合は、requirements.txt ファイルがある python-docs-hello-world フォルダー (Flask) または python-docs-hello-django フォルダー (Django) でコマンドを実行していることを確認してください。 (GitHub の az webapp up を使用して自動検出の問題をトラブルシューティングする方法に関するページを参照してください。)

コマンドが完了するまでに数分かかる場合があります。 実行中には、リソース グループ、App Service プラン、およびホスティング アプリの作成、ログ記録の構成、ZIP デプロイの実行に関するメッセージが表示されます。 次に、"http://<app-name>.azurewebsites.net でアプリを起動することができます" という内容のメッセージが表示されます。これは、Azure 上のアプリの URL です。

az webapp up コマンドの出力例

問題がありますか。 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください

注意

az webapp up コマンドは、次の処理を実行します。

アプリの参照

URL http://<app-name>.azurewebsites.net を使って、お使いの Web ブラウザーでデプロイされたアプリケーションを参照します。 アプリが起動するまでに 1 から 2 分かかる場合があるため、既定のアプリ ページが表示される場合は、しばらく待ってからブラウザーを更新してください。

Python サンプル コードによって、App Service 内で、組み込みのイメージを使用して、Linux コンテナーが実行されています。

サンプル Python アプリを Azure で実行する

お疲れさまでした。 App Service に Python アプリをデプロイすることができました。

問題がありますか。 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください

更新の再デプロイ

このセクションでは、小さなコード変更を行ってから、コードを Azure に再デプロイします。 このコード変更には、次のセクションで使用するログ出力を生成するための print ステートメントが含まれます。

エディターで app.py を開き、次のコードに一致するように hello 関数を更新します。

def hello():
    print("Handling request to home page.")
    return "Hello, Azure!"

エディターで hello/views.py を開き、次のコードに一致するように hello 関数を更新します。

def hello(request):
    print("Handling request to home page.")
    return HttpResponse("Hello, Azure!")

変更を保存してから、もう一度 az webapp up コマンドを使用してアプリを再デプロイします。

az webapp up

このコマンドでは、 .azure/config ファイルにローカルでキャッシュされている値 (アプリ名、リソース グループ、App Service プランなど) を使用します。

デプロイが完了すると、http://<app-name>.azurewebsites.net が開かれたブラウザー ウィンドウに戻ります。 ページを最新の情報に更新すると、変更されたメッセージが表示されます。

更新したサンプル Python アプリを Azure で実行する

問題がありますか。 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください

ヒント

Visual Studio Code には、Python と Azure App Service 用の強力な拡張機能が用意されています。これを使うと、App Service に Python Web アプリをデプロイするプロセスが簡単になります。 詳細については、Visual Studio Code から App Service への Python アプリのデプロイに関する記事をご覧ください。

ログのストリーミング

アプリ、およびそれを実行するコンテナー内から生成されたコンソール ログに、アクセスすることができます。 ログには、print ステートメントを使って生成されたすべての出力が含まれます。

ログをストリーミングするには、az webapp log tail コマンドを実行します。

az webapp log tail

また、az webapp up コマンドに --logs パラメーターを指定して、デプロイ時にログ ストリームを自動的に開くこともできます。

ブラウザーでアプリを最新の情報に更新して、コンソール ログを生成します。これには、アプリに対する HTTP 要求に関するメッセージが含まれています。 すぐに出力が表示されない場合は、30 秒後に再試行してください。

https://<app-name>.scm.azurewebsites.net/api/logs/docker で、ブラウザーからログ ファイルを検査することもできます。

ログ ストリーミングを任意のタイミングで停止するには、ターミナルで Ctrl + C キーを押します。

問題がありますか。 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください

Azure アプリの管理

Azure portal に移動し、お客様が作成したアプリを管理します。 [App Services] を検索して選択します。

Azure portal で App Services に移動する

使用する Azure アプリの名前を選択します。

Azure portal で App Services の Python アプリに移動する

アプリを選択すると [概要] ページが開きます。ここでは、参照、停止、開始、再開、削除のような基本的な管理タスクを行うことができます。

Azure portal の [概要] ページで Python アプリを管理する

App Service のメニューには、アプリを構成するためのさまざまなページが用意されています。

問題がありますか。 まず、トラブルシューティング ガイドを参照し、それでも解決しない場合はお知らせください

リソースをクリーンアップする

前の手順では、リソース グループ内に Azure リソースを作成しました。 リソース グループには、お客様の場所に応じて "appsvc_rg_Linux_CentralUS" のような名前が付いています。 Web アプリを実行し続けると、継続的なコストが発生します (「App Service の価格」をご覧ください)。

今後これらのリソースが不要である場合は、次のコマンドを実行してリソース グループを削除します。

az group delete --no-wait

このコマンドでは、 azure/config ファイルにキャッシュされているリソース グループ名を使用します。

--no-wait 引数を使用すると、操作が完了する前にコマンドから戻ることができます。

問題がありますか。 お知らせください

次のステップ