この記事では Pythonの簡易な Web アプリを Azure にデプロイする手順を紹介します。
- Azure アカウントを作成済であること
- Python の Flask フレームワークの基礎知識があること
- Python パッケージマネージャーに poetry を使用していること
- コードエディタは Visual Studio Code を使用していること
Visual Studio Code に Azure Tools 拡張機能の導入
はじめに Visual Studio Code に Azure Tools というMicrosoft Azure 上での開発を支援してくれる拡張機能をインストールします。
Azure Tools 拡張機能をインストール
Azure Tools を使えば、Azure Portal (Web ブラウザの Azure コンソールページ)を使わずに Visual Studio Code から直接 Azure リソースを管理できます。
以下の画像の手順で拡張機能をインストールしましょう。

Visual Studio Code 上で Azure Portal にサインイン
拡張機能をインストールできたら、Visual Studio Code 上で Azure Portal にサインインします

Azure Functions 開発用のプロジェクト(ディレクトリ)を作成
ここから実際に Visual Studio Code 上で Azure Functions の実装準備を行います。
Azure Tools の拡張機能を使用して「Create New Functions Project」をクリックします。

以降は「Python」→「Model 2」→「HTTP Trigger」→「ANONYMOUS」を選択します。
承認レベルの「ANONYMOUS」を設定すると、関数の呼び出しにアクセスキーを必要としません。
Function の URL を知っている人なら誰でも関数を呼び出せてしまいます。
クローズドな運用では「ANONYMOUS」は使用しない方が良いでしょう。
一方で Web API として Function をエンドポイントとして公開する場合は、誰でも関数にアクセスできるよう「ANONYMOUS」を設定すると良いでしょう。
プロジェクトの作成が完了すると、選択したディレクトリに自動で HTTP トリガー関数の Python スクリプトとともに Function 実装に必要なファイルが作成されます。

function_app.py の内容を修正して、関数の挙動を変更できます。
本記事ではデプロイ方法に重点を置いているので、自動で作成された function_app.py をそのまま利用します。
ローカル環境の構築
Azure Functions Core Tools をインストール
本記事では、Azure Functions Core Tools コマンドラインを使ってローカルの関数を起動・デバッグします。
以下の手順に沿って、インストールしましょう。
macOS では Homebrew を使って、ローカルに Azure Functions Core Tools をインストールします。
ターミナルで下記コマンドを実行しましょう。
brew tap azure/functions
brew install azure-functions-core-tools@4
# if upgrading on a machine that has 2.x or 3.x installed:
brew link --overwrite azure-functions-core-tools@4

Azure Functions Core Tools をインストール結果確認
インストールが完了後func --version
コマンドを使用して、Core Tools のバージョンが少なくとも 4.0.5530
以上であることを確認できたら OK です。
func --version
# 出力結果
4.0.5907
Python 環境構築
ローカルに Python の poetry 環境を作成します。
Azure Functions でサポートされる Python のランタイムは 3.6.x 〜 3.11.x バージョンです。
Python バージョンを確認
# python -V
python のバージョン管理に pyenv を使用している場合、プロジェクトの python バージョンを指定しましょう。
# カレントディレクトリの Python バージョンを確認
pyenv version
# 出力結果
3.12.2 (set by /Users/junpei/.pyenv/version)
# python 3.6.x ~ 3.11.x でない場合
# pyenv に 3.11.9 をインストールして、カレントディレクトリの python バージョンを 3.11.9 に設定
pyenv install 3.11.9
pyenv local 3.11.9
# 再度 Python バージョン確認
python -V
# 出力結果
Python 3.11.9
Python 仮想環境を作成・起動
ターミナルで Functions 環境のディレクトリに移動して、下記コマンドを実行して Python の仮想環境を作成します。
# 環境の初期化
poetry init
# カレントディレクトリに .venv フォルダを作成するよう設定
poetry config virtualenvs.in-project true
# Python のバージョンを指定して .venv 仮想環境フォルダ作成
poetry env use 3.11.9
仮想環境を作成できたら、アクティベートします。
# .venv 仮想環境をアクティベート
source ./.venv/Script/activate
ライブラリのインストール
functions_app.py 内でライブラリを使用する場合は、仮想環境にインストールしておきます。
下記コマンドを実行して、ライブラリをインストールしましょう。
# ライブラリの追加
poetry add flask azure-functions
ローカル関数のデバッグ
作成した関数をローカルでデバッグするには、下記のコマンドを実行します。
# ローカルで関数をデバッグ
func start
上記コマンドを実行すると、以下のようにエンドポイントの URL が表示されます。
# 出力結果
Found Python version 3.11.9 (python3).
Azure Functions Core Tools
Core Tools Version: 4.0.5907 Commit hash: N/A +807e89766a92b14fd07b9f0bc2bea1d8777ab209 (64-bit)
Function Runtime Version: 4.834.3.22875
[2024-08-03T05:01:15.220Z] Worker process started and initialized.
Functions:
sample_web_app: http://localhost:7071/api/sample_web_app
For detailed output, run func with --verbose flag.
出力された http://localhost:7071/api/sample_web_app
にアクセスすると、作成したローカルの HTTP トリガー関数が起動します。
関数を Azure にデプロイするための事前準備
ローカルで動作確認したソースを Azure のクラウド環境にデプロイします。
依存関係ファイルを作成
Python ライブラリの依存関係ファイルをソースコードとともにデプロイする必要があります。
# poetry 仮想環境にインストール済みの依存関係を requirements.txt に出力
poetry expor$ poetry export -f requirements.txt -o requirements.txt --without-hashes
プロジェクト内に requirements.txt ファイルが生成されます。
python-dotenv==1.0.1 ; python_version >= "3.11" and python_version < "4.0"
Azure CLI をローカルにインストール
ここでは、Azure CLI を使って関数をデプロイします。
あらかじめローカル PC に Azure CLI をインストールしておきましょう。
macOS では Homebew を使用して、ターミナルから Azure CLI をインストールします。
ターミナル上で以下のコマンドを実行しましょう。
brew update && brew install azure-cli

az コマンドで Azure にログインする
Azure CLI をインストールできたら、ターミナルから Azure にログインします。
下記コマンドを実行すると、ブラウザに Microsoft ログイン画面が表示されます。
az login
ブラウザ上でログイン操作が完了したら、ターミナル上でサブスクリプションの選択を行います。
ターミナルに表示されたサブスクリプションの番号を入力して Enter で OK です。
以下の画像の例でいえば、1
を入力します。

リソースグループを作成する
リソースグループは Azure の複数リソースを管理するための仕組みです。
Google Cloud でいうプロジェクトに似ていると思います。リソースグループ単位で IAM 権限の設定を行ったり、コスト管理したりできます。
Azure Functions はこのリソースグループ配下に作成することになります。
Azure CLI でリソースグループを作成するには以下のコマンドを実行します。
az group create --name <RESOURCE_GROUP_NAME> --location japaneast
ストレージアカウントを作成する
Azure Functions Core Tools を使って Azure Functions リソースを公開する場合、デプロイ時に生成されるパッケージファイルのアップロード先のストレージアカウントを指定しておく必要があります。
あらかじめ下記コマンドで、Azure 上にストレージアカウントを作成しておきましょう。
az storage account create --name <STORAGE_ACCOUNT_NAME> --location japaneast --resource-group <RESOURCE_GROUP_NAME> --sku Standard_LRS
<STORAGE_ACCOUNT_NAME>
はグローバルに一意な名前を指定する必要があります。
すでに使用されている名称は指定できないので注意しましょう。
Azure Functions にデプロイする
Azure Functions リソースを作成する
下記のコマンドのように、関数のランタイムやバージョン、アプリ名を指定して Functions リソースを作成します。
az functionapp create --resource-group <RESOURCE_GROUP_NAME> --consumption-plan-location japaneast --runtime python --runtime-version 3.11 --functions-version 4 --name <APP_NAME> --os-type linux --storage-account <STORAGE_ACCOUNT_NAME>
Azure Functions にデプロイする
最後にローカルで開発した関数を Azure Functions にデプロイします。
func azure functionapp publish <APP_NAME>
<APP_NAME>
には、Azure Functions リソース作成時に指定した値を入力します。
デプロイが完了すると、ターミナルに関数のエンドポイント URL が表示されます。

公開した Functions の動作・実行ログ確認
Functions のエンドポイントにアクセスしてみると、ブラウザ上に関数の返り値の文字列が表示されるのが確認できました。

Azure 関数のポータルから「監視」→「ログ」のタブを選択し、クエリエディタに requests
と記述して実行すると、詳細なアクセスログを確認できます。

コメント