Azure基本

Azure Functions上で動作するDockerコンテナを利用したPythonアプリケーションを作成してみた

「Azure Functions」上でPythonアプリケーションを構築できるが、その際に、Dockerイメージを利用することもできる。

今回は、Dockerコンテナを利用したPythonによるAzure Functionsアプリを作成してみたので、その手順を共有する。

前提条件

下記サイトの手順に従って、Azure Portalのアカウントを作成済であること。
https://qiita.com/qt-luigi/items/53341070a7fd4de802f9

また、下記サイトの手順に従って、ローカル環境で動作するための環境構築が完了していること。

Azure Functions上で動作するPythonアプリケーションを作成してみたAzureが提供するサービスに、さまざまなイベントによって駆動し、サーバーの構築や保守をすることなくプログラムを実行できる「Azure ...

さらに、下記サイトの手順に従って、Docker Hubアカウントを作成済であること。

Docker Hubアカウントを作成しDockerイメージを保存してみたDockerイメージを保存・共有する場所のことをDockerレジストリといい、Docker公式のDockerレジストリとして、よく使われ...

やってみたこと

  1. ローカル環境でのAzure Functions動作検証
  2. Docker HubへのDockerイメージの保存
  3. Azure PortalでAzure Functionsの作成と動作検証

ローカル環境でのAzure Functions動作検証

ローカル環境で、Dockerコンテナを利用したPythonによるAzure Functionsアプリを作成し、動作検証を行う。その手順は、以下の通り。

1) コマンドプロンプトで、Dockerコンテナを利用したPythonによるAzure Functionsアプリを作成するためのフォルダに移動し、Python仮想環境を作成しアクティブ化する。
ローカル環境でのAzure Functions動作検証_1

2) コマンドプロンプトで「func init –worker-runtime python –docker」コマンドを実行し、Docker上で動作するPython v2 関数プロジェクトを作成する。
ローカル環境でのAzure Functions動作検証_2

3) コマンドプロンプトで「func new –name HttpExample –template “HTTP trigger”」コマンドを指定し、Enterキーを押下する。
ローカル環境でのAzure Functions動作検証_3_1

以下のように、認証レベルを質問されるので、「ANONYMOUS」を選択し、HTTPトリガーを利用した関数「HttpExample」を追加する。
ローカル環境でのAzure Functions動作検証_3_2

ローカル環境でのAzure Functions動作検証_3_3

4) 3)の実行が終わると、以下のようなソースコードが作成されることが確認できる。
ローカル環境でのAzure Functions動作検証_4

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動作検証」に記載した内容と同じ内容となる。

Azure Functions上で動作するPythonアプリケーションを作成してみたAzureが提供するサービスに、さまざまなイベントによって駆動し、サーバーの構築や保守をすることなくプログラムを実行できる「Azure ...

6) 別のコマンドプロンプトでazuriteを実行しつつ、コマンドプロンプトで「func start」コマンドを実行する。
ローカル環境でのAzure Functions動作検証_6_1

ローカル環境でのAzure Functions動作検証_6_2

7) ブラウザ上で「http://localhost:7071/api/HttpExample」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。
ローカル環境でのAzure Functions動作検証_7

8) あらかじめDocker Desktopを起動しておき、コマンドプロンプトで「docker build –tag /azurefunctionsimage:v1.0.0 .」コマンドを実行すると、Dockerコンテナを利用したPythonによるAzure FunctionsアプリのDockerイメージが作成できる。
ローカル環境でのAzure Functions動作検証_8

9) 8)のコマンドを実行後、以下のように、赤枠のDockerイメージが作成されたことが確認できる。
ローカル環境でのAzure Functions動作検証_9

10) コマンドプロンプトで「docker run -p 8081:80 -it /azurefunctionsimage:v1.0.0」コマンドを実行すると、作成したDockerイメージからDockerコンテナを起動できる。
ローカル環境でのAzure Functions動作検証_10_1

ローカル環境でのAzure Functions動作検証_10_2

11) 10)のコマンドを実行後、以下のように、赤枠のDockerコンテナが起動されたことが確認できる。
ローカル環境でのAzure Functions動作検証_11

12) ブラウザ上で「http://localhost:8081/api/HttpExample」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。なお、8081は、dockerコマンド起動時に利用したポート番号を表している。
ローカル環境でのAzure Functions動作検証_12

13) docker runコマンドの実行を終了するには、Ctrl+Cを押下する。
ローカル環境でのAzure Functions動作検証_13



「MiniTool Partition Wizard」はパーティション分割・統合・バックアップ・チェックを直感的に行える便利ツールだったハードディスクの記憶領域を論理的に分割し、分割された個々の領域のことを、パーティションといいます。 例えば、以下の図の場合、C/D...

Docker HubへのDockerイメージの保存

Azure Functionsから作成したDockerイメージを参照できるよう、DockerイメージをDocker Hubに保存する。その手順は、以下の通り。

1) Docker Hubにログインするため、コマンドプロンプトで「docker login」コマンドを実行する。
Docker HubへのDockerイメージの保存_1

2) Docker Hubのユーザー名・パスワードを順次入力すると、以下のように、Docker Hubにログインできる。
Docker HubへのDockerイメージの保存_2

3) コマンドプロンプトで「docker push /azurefunctionsimage:v1.0.0」コマンドを実行すると、作成したDockerイメージがDocker Hubに保存される。
Docker HubへのDockerイメージの保存_3

4) 3)のコマンドが終了すると、以下の状態になる。
Docker HubへのDockerイメージの保存_4

5) Docker Hubを確認すると、以下のように、作成したDockerイメージがDocker Hubに保存されたことが確認できる。
Docker HubへのDockerイメージの保存_5

サラリーマン型フリーランスSEという働き方でお金の不安を解消しよう先日、「サラリーマン型フリーランスSE」という働き方を紹介するYouTube動画を視聴しましたので、その内容をご紹介します。 「サ...

Azure PortalでAzure Functionsの作成と動作検証

Dockerコンテナを利用した場合も、Pythonで動作するAzure Functionsの作成は、Azure Portal上で行える。その手順は、以下の通り。

1) Azure Portalにログインし、「関数アプリ」を選択する。
Azure PortalでAzure Functionsの作成と動作検証_1

2) 新規で関数アプリを作成するため、「作成」ボタンを押下する。
Azure PortalでAzure Functionsの作成と動作検証_2

3) 今回はDockerコンテナを利用するため、「Container Apps 環境」を選択し「選択」ボタンを押下する。
Azure PortalでAzure Functionsの作成と動作検証_3

4) 各項目を入力後、「Storage」タブを選択する。
Azure PortalでAzure Functionsの作成と動作検証_4

5) ストレージアカウントを指定し、それ以外の各項目を入力後、「監視」タブを選択する。
Azure PortalでAzure Functionsの作成と動作検証_5

6) Application Insightsを有効にし、「デプロイ」タブを選択する。
Azure PortalでAzure Functionsの作成と動作検証_6

7)「デプロイ」タブの初期表示は、以下の通り。
Azure PortalでAzure Functionsの作成と動作検証_7

8) 「クイックスタートイメージを使用する」のチェックを外し、「イメージ」に作成したDockerイメージを「/azurefunctionsimage:v1.0.0」の形式で指定し、それ以外の各項目を入力後、「確認および作成」ボタンを押下する。
Azure PortalでAzure Functionsの作成と動作検証_8

9) 作成するFunctionsの内容を確認し、「作成」ボタンを押下する。
Azure PortalでAzure Functionsの作成と動作検証_9

10) デプロイ中の画面は、以下の通り。
Azure PortalでAzure Functionsの作成と動作検証_10

11) 完了すると以下の画面が表示されるため、「リソースに移動」ボタンを押下する。
Azure PortalでAzure Functionsの作成と動作検証_11

12) 関数アプリが作成され、以下の画面が表示されることが確認できる。ここでURL確認のため、「HttpExample」関数のリンクを押下する。
Azure PortalでAzure Functionsの作成と動作検証_12

13) 以下の画面が表示されるため、「関数のURLの取得」ボタンを押下する。
Azure PortalでAzure Functionsの作成と動作検証_13

14) _master (ホスト キー)のURLをコピーし、ブラウザ上でこのURLにアクセスする。
Azure PortalでAzure Functionsの作成と動作検証_14

15) ブラウザ上でコピーしたURLにアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。
Azure PortalでAzure Functionsの作成と動作検証_15

16) 出力されたログを確認するには、「監視」メニューから「Application Insights」を選択する。
Azure PortalでAzure Functionsの作成と動作検証_16

17) 以下の画面が表示されるため、「azureFuncPython」リンクを押下する。
Azure PortalでAzure Functionsの作成と動作検証_17

18) 以下の画面が表示されるため、「ログ」メニューを押下する。
Azure PortalでAzure Functionsの作成と動作検証_18

19) 過去1時間分のトレースログを確認すると、以下のようにトレースログが表示され、function_app.py内の文言「Python HTTP trigger function processed a request.」がログに出力されていることが確認できる。
Azure PortalでAzure Functionsの作成と動作検証_19

要点まとめ

  • 「Azure Functions」上でPythonアプリケーションを構築できるが、その際に、Dockerイメージを利用することもできる。