「Azure Functions」上でPythonアプリケーションを構築できるが、その際に、Dockerイメージを利用することもできる。
今回は、Dockerコンテナを利用したPythonによるAzure Functionsアプリを作成してみたので、その手順を共有する。
前提条件
下記サイトの手順に従って、Azure Portalのアカウントを作成済であること。
https://qiita.com/qt-luigi/items/53341070a7fd4de802f9
また、下記サイトの手順に従って、ローカル環境で動作するための環境構築が完了していること。
さらに、下記サイトの手順に従って、Docker Hubアカウントを作成済であること。
やってみたこと
ローカル環境でのAzure Functions動作検証
ローカル環境で、Dockerコンテナを利用したPythonによるAzure Functionsアプリを作成し、動作検証を行う。その手順は、以下の通り。
1) コマンドプロンプトで、Dockerコンテナを利用したPythonによるAzure Functionsアプリを作成するためのフォルダに移動し、Python仮想環境を作成しアクティブ化する。
2) コマンドプロンプトで「func init –worker-runtime python –docker」コマンドを実行し、Docker上で動作するPython v2 関数プロジェクトを作成する。
3) コマンドプロンプトで「func new –name HttpExample –template “HTTP trigger”」コマンドを指定し、Enterキーを押下する。
以下のように、認証レベルを質問されるので、「ANONYMOUS」を選択し、HTTPトリガーを利用した関数「HttpExample」を追加する。
4) 3)の実行が終わると、以下のようなソースコードが作成されることが確認できる。
5) 作成されたソースコードのうち、「Dockerfile」の内容は、以下の通り。
# To enable ssh & remote debugging on app service change the base image to the one below # FROM mcr.microsoft.com/azure-functions/python:4-python3.11-appservice FROM mcr.microsoft.com/azure-functions/python:4-python3.11 ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true COPY requirements.txt / RUN pip install -r /requirements.txt COPY . /home/site/wwwroot
上記以外のソースコードは、以下の記事の「ローカル環境でのAzure Functions動作検証」に記載した内容と同じ内容となる。
6) 別のコマンドプロンプトでazuriteを実行しつつ、コマンドプロンプトで「func start」コマンドを実行する。
7) ブラウザ上で「http://localhost:7071/api/HttpExample」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。
8) あらかじめDocker Desktopを起動しておき、コマンドプロンプトで「docker build –tag
9) 8)のコマンドを実行後、以下のように、赤枠のDockerイメージが作成されたことが確認できる。
10) コマンドプロンプトで「docker run -p 8081:80 -it
11) 10)のコマンドを実行後、以下のように、赤枠のDockerコンテナが起動されたことが確認できる。
12) ブラウザ上で「http://localhost:8081/api/HttpExample」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。なお、8081は、dockerコマンド起動時に利用したポート番号を表している。
13) docker runコマンドの実行を終了するには、Ctrl+Cを押下する。
Docker HubへのDockerイメージの保存
Azure Functionsから作成したDockerイメージを参照できるよう、DockerイメージをDocker Hubに保存する。その手順は、以下の通り。
1) Docker Hubにログインするため、コマンドプロンプトで「docker login」コマンドを実行する。
2) Docker Hubのユーザー名・パスワードを順次入力すると、以下のように、Docker Hubにログインできる。
3) コマンドプロンプトで「docker push
5) Docker Hubを確認すると、以下のように、作成したDockerイメージがDocker Hubに保存されたことが確認できる。
Azure PortalでAzure Functionsの作成と動作検証
Dockerコンテナを利用した場合も、Pythonで動作するAzure Functionsの作成は、Azure Portal上で行える。その手順は、以下の通り。
1) Azure Portalにログインし、「関数アプリ」を選択する。
2) 新規で関数アプリを作成するため、「作成」ボタンを押下する。
3) 今回はDockerコンテナを利用するため、「Container Apps 環境」を選択し「選択」ボタンを押下する。
5) ストレージアカウントを指定し、それ以外の各項目を入力後、「監視」タブを選択する。
6) Application Insightsを有効にし、「デプロイ」タブを選択する。
8) 「クイックスタートイメージを使用する」のチェックを外し、「イメージ」に作成したDockerイメージを「
9) 作成するFunctionsの内容を確認し、「作成」ボタンを押下する。
11) 完了すると以下の画面が表示されるため、「リソースに移動」ボタンを押下する。
12) 関数アプリが作成され、以下の画面が表示されることが確認できる。ここでURL確認のため、「HttpExample」関数のリンクを押下する。
13) 以下の画面が表示されるため、「関数のURLの取得」ボタンを押下する。
14) _master (ホスト キー)のURLをコピーし、ブラウザ上でこのURLにアクセスする。
15) ブラウザ上でコピーしたURLにアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。
16) 出力されたログを確認するには、「監視」メニューから「Application Insights」を選択する。
17) 以下の画面が表示されるため、「azureFuncPython」リンクを押下する。
18) 以下の画面が表示されるため、「ログ」メニューを押下する。
19) 過去1時間分のトレースログを確認すると、以下のようにトレースログが表示され、function_app.py内の文言「Python HTTP trigger function processed a request.」がログに出力されていることが確認できる。
要点まとめ
- 「Azure Functions」上でPythonアプリケーションを構築できるが、その際に、Dockerイメージを利用することもできる。