Azure基本

Azure Functions上で動作するPythonアプリケーションを作成してみた

Azureが提供するサービスに、さまざまなイベントによって駆動し、サーバーの構築や保守をすることなくプログラムを実行できる「Azure Functions」というものがある。

Azure Functionsについての詳細は、以下のサイトを参照のこと。
https://www.fenet.jp/dotnet/column/tool/1486/

今回は、Pythonで動作するAzure FunctionsをAzure portal上で作成し、サンプルプログラムを作成してみたので、その手順を共有する。

前提条件

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

やってみたこと

  1. Azure PortalでAzure Functionsの作成
  2. ローカル環境で動作するための環境構築
  3. ローカル環境でのAzure Functions動作検証
  4. Azure上でのAzure Functions動作検証

Azure PortalでAzure Functionsの作成

Pythonで動作するAzure Functionsの作成は、Azure Portal上で行える。その手順は、以下の通り。

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

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

3) 今回は従量課金プランを利用するため、「消費」を選択し「選択」ボタンを押下する。
Azure PortalでAzure Functionsの作成_3

4) 関数アプリを作成するための、以下の画面が表示される。
Azure PortalでAzure Functionsの作成_4

5) ランタイムスタックにPythonを選択し、それ以外の各項目を入力後、「Storage」タブを選択する。
Azure PortalでAzure Functionsの作成_5

6) ストレージアカウントを指定し、それ以外の各項目を入力後、「ネットワーク」タブを選択する。
Azure PortalでAzure Functionsの作成_6

7) パブリックアクセスを有効にし、「監視」タブを選択する。
Azure PortalでAzure Functionsの作成_7

8) ログ取得を行うため、Application Insightsを有効にし、「デプロイ」タブを選択する。
Azure PortalでAzure Functionsの作成_8

9) 継続的デプロイは無効、基本認証を有効にし、「確認および作成」ボタンを押下する。
Azure PortalでAzure Functionsの作成_9

10) 作成するFunctionsの内容を確認し、「作成」ボタンを押下する。
Azure PortalでAzure Functionsの作成_10

11) デプロイ中の画面は、以下の通り。
Azure PortalでAzure Functionsの作成_11

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

13) 関数アプリが作成され、以下の画面が表示されることが確認できる。
Azure PortalでAzure Functionsの作成_13



「Envader」はLinuxコマンドやDatabase SQL等のスキルを、環境構築不要で習得できる学習サイトだった「Envader」は、ITエンジニアとしてよく使うLinuxコマンドやDatabase SQL等のスキルを、解説を読んだ上で、問題を解き...

ローカル環境で動作するための環境構築

ローカル環境でAzure Functionsの動作確認を行うための環境構築は、以下の通り。

1) Python 3.11をインストールする。

1-1) 以下のサイトにアクセスし、「Windows installer (64-bit)」を押下し、Python3.11.9をダウンロードする。
https://www.python.org/downloads/windows/

ローカル環境で動作するための環境構築_1_1

1-2) ダウンロードした「python-3.11.9-amd64.exe」をダブルクリックする。
ローカル環境で動作するための環境構築_1_2

1-3) 以下の画面が表示されるため、各チェックボックスにチェックを入れ「Install Now」ボタンを押下する。
ローカル環境で動作するための環境構築_1_3

1-4) インストール完了すると以下の画面が表示されるため、「Close」ボタンを押下する。
ローカル環境で動作するための環境構築_1_4

1-5) コマンドプロンプト上で「python –version」コマンドを実行すると、インストールされたPythonのバージョンを確認できる。
ローカル環境で動作するための環境構築_1_5

2) その他、以下のサイトに記載のAzure CLI、Azurite ストレージ エミュレーター、Azure Functions Core Toolsのインストールを行う。
https://learn.microsoft.com/ja-jp/azure/azure-functions/create-first-function-cli-python?tabs=windows%2Cbash%2Cazure-cli%2Cbrowser

2-1) Azure CLIは、以下のサイトにアクセスし、「Azure CLIの最新のMSI (64ビット)」を押下し、ダウンロードする。
https://learn.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli

ローカル環境で動作するための環境構築_2_1

2-2)「azure-cli-2.67.0-x64.msi」をダブルクリックする。
ローカル環境で動作するための環境構築_2_2

2-3) 以下の画面が表示されるため、ライセンスを確認し、チェックボックスにを入れ、「Install」ボタンを押下する。
ローカル環境で動作するための環境構築_2_3

2-4) インストール完了すると以下の画面が表示されるため、「Finish」ボタンを押下する。
ローカル環境で動作するための環境構築_2_4

2-5) コマンドプロンプトで「az –version」コマンドを実行すると、インストールされたazure-cliのバージョンが確認できる。
ローカル環境で動作するための環境構築_2_5

2-6) Azurite ストレージ エミュレーターは、以下のサイトにアクセスし「Download Node.js」ボタンを押下し、node.jsをダウンロードするところから始める。
https://nodejs.org/en

ローカル環境で動作するための環境構築_2_6

2-7)「node-v22.12.0-x64.msi」をダブルクリックする。
ローカル環境で動作するための環境構築_2_7

2-8) 以下の画面が表示されるため、「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_8

2-9) ライセンスの内容を確認し、チェックボックスにチェックを入れ「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_9

2-10) そのまま「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_10

2-11) そのまま「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_11

2-12) チェックボックスにチェックを入れ、「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_12

2-13)「Install」ボタンを押下する。
ローカル環境で動作するための環境構築_2_13

2-14) インストールが完了すると以下の画面が表示されるため、「Finish」ボタンを押下する。
ローカル環境で動作するための環境構築_2_14

2-15) コマンドプロンプトで「node -v」「npm -v」コマンドを実行すると、以下のように、node,npmのバージョンを確認できる。
ローカル環境で動作するための環境構築_2_15

2-16) ストレージ エミュレーター(azurite)のインストールを行うため、コマンドプロンプトで「npm install -g azurite」コマンドを実行する。
ローカル環境で動作するための環境構築_2_16

2-17) azuriteのログ出力を行うためのフォルダ(下図では「C:\work\azure\python\azurite」)を作成する。
ローカル環境で動作するための環境構築_2_17

2-18) ストレージ エミュレーター(azurite)の実行は、以下のように、「azurite –silent –location (ログ出力先フォルダ) –debug (出力ログのパス)」コマンドの実行により行える。
ローカル環境で動作するための環境構築_2_18_1

また、azuriteコマンドを終了するには、Ctrl+Cを押下する。
ローカル環境で動作するための環境構築_2_18_2

2-19) Azure Functions Core Toolsは、以下のサイトにアクセスし「v4.x – Windows 64 ビット」リンクを押下する。
https://learn.microsoft.com/ja-jp/azure/azure-functions/create-first-function-cli-python?tabs=windows%2Cbash%2Cazure-cli%2Cbrowser

ローカル環境で動作するための環境構築_2_19

2-20)「func-cli-x64.msi」をダブルクリックする。
ローカル環境で動作するための環境構築_2_20

2-21) 以下の画面が表示されるので、「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_21

2-22) ライセンスを確認し、チェックボックスにチェックを入れ、「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_22

2-23) そのまま「Next」ボタンを押下する。
ローカル環境で動作するための環境構築_2_23

2-24)「Install」ボタンを押下する。
ローカル環境で動作するための環境構築_2_24

2-25) インストールが完了すると以下の画面が表示されるため、「Finish」ボタンを押下する。
ローカル環境で動作するための環境構築_2_25

2-26) コマンドプロンプトで「func –version」コマンドを実行すると、以下のように、Azure Functions Core Toolsのバージョンを確認できる。
ローカル環境で動作するための環境構築_2_26



株式会社ベアフォスターホールディングスでスキルチェンジできました私はこれまで、Javaを中心としたシステム開発を行ってきましたが、将来的には、Pythonを利用したAI(人工知能)開発を行いたいと思う...

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

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

1) PythonによるAzure Functionsアプリを作成するためのフォルダ(下図では「C:\work\azure\python\azureFuncPython」)を作成する。
ローカル環境でのAzure Functions動作検証_1

2) コマンドプロンプトで1)のフォルダに移動し、Python仮想環境を作成するコマンド「py -m venv .venv」を実行する。
ローカル環境でのAzure Functions動作検証_2_1

上記コマンドを実行すると、以下のように、.venvフォルダが作成されていることが確認できる。
ローカル環境でのAzure Functions動作検証_2_2

3) コマンドプロンプトで「.venv\scripts\activate」を実行し、仮想環境をアクティブ化する。
ローカル環境でのAzure Functions動作検証_3_1

Enterキー押下後は、以下の画面表示となる。
ローカル環境でのAzure Functions動作検証_3_2

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

5) コマンドプロンプトで「func new –name HttpExample –template “HTTP trigger” –authlevel “anonymous”」コマンドを実行し、HTTPトリガーを利用した関数「HttpExample」を追加する。
ローカル環境でのAzure Functions動作検証_5

なお、認証レベルANONYMOUSは、認証なしでHTTPトリガーを利用した関数「HttpExample」にアクセスするためのオプションである。

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

7) そのままFunctionを実行するとエラーになるため、「function_app.py」を以下のように修正する。(コメントアウトされている部分が修正前ソースコード。)

import azure.functions as func
import datetime
import json
import logging

#app = func.FunctionApp()
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)

#@app.route(route="HttpExample", auth_level=func.AuthLevel.Anonymous)
@app.route(route="HttpExample")
def HttpExample(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    name = req.params.get('name')
    if not name:
        try:
            req_body = req.get_json()
        except ValueError:
            pass
        else:
            name = req_body.get('name')

    if name:
        return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

その他、作成されたソースコードの内容は、以下の通り。

●host.json

{
  "version": "2.0",
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

●local.settings.json

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true"
  }
}

●requirements.txt

# Do not include azure-functions-worker in this file
# The Python Worker is managed by the Azure Functions platform
# Manually managing azure-functions-worker may cause unexpected issues

azure-functions

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

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

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

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

11)「func start」コマンドの実行を終了するには、Ctrl+Cを押下する。
ローカル環境でのAzure Functions動作検証_11



「DroidKit」はAndroid端末のデータ復元や画面ロック解除等が行える便利なツールだった「DroidKit」は、画面ロック解除、FRPバイパス、データ復元、システム修復、および4つのより効果的なツールを含んでいて、ほぼすべて...

Azure上でのAzure Functions動作検証

Azure上に、PythonによるAzure Functionsアプリをデプロイし、動作検証を行う。その手順は、以下の通り。

1) Azure上にAzure Functionsアプリをデプロイするため、「az login –tenant (既定のディレクトリのテナントID)」コマンドを実行し、Azure環境にログインする。
Azure上でのAzure Functions動作検証_1

2) 以下の画面が表示されるため、アカウントを選択し「続行」ボタンを押下する。
Azure上でのAzure Functions動作検証_2

3) そのまま、Enterキーを押下する。
Azure上でのAzure Functions動作検証_3

4) 以下のように、Azure環境にログインされたことが確認できる。
Azure上でのAzure Functions動作検証_4_1

なお、az loginコマンドを実行した場合は、以下のようなエラーメッセージが表示されたため、上記1)~4)の手順を実行している。
Azure上でのAzure Functions動作検証_4_2

5) 以下のように、Azure Functionsアプリのデプロイ先となるAzure Functionsが、起動していることを確認する。
Azure上でのAzure Functions動作検証_5

6) コマンドプロンプトで「func azure functionapp publish 」コマンドを実行し、Azure Functionsアプリを指定したFunctionにデプロイする。
Azure上でのAzure Functions動作検証_6

7) デプロイ中の画面表示は、以下の通り。
Azure上でのAzure Functions動作検証_7

8) デプロイが完了すると、以下のような画面表示となる。
Azure上でのAzure Functions動作検証_8

9) 以下のように、デプロイしたAzure Functions 関数で、関数「HttpExample」が表示されていることが確認できる。
Azure上でのAzure Functions動作検証_9

10) アプリファイルを見ると、以下のように、デプロイしたソースコードの表示が確認できる。
Azure上でのAzure Functions動作検証_10

11) ブラウザ上で「https://azurefuncpython.azurewebsites.net/api/httpexample」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが返却されることが確認できる。
Azure上でのAzure Functions動作検証_11

12) ブラウザ上で「https://azurefuncpython.azurewebsites.net/api/httpexample?name=purinit」にアクセスすると、以下のように、function_app.pyで定義していたHttpResponseが、nameの値を置き換え返却されることが確認できる。
Azure上でのAzure Functions動作検証_12

13) 出力されたログを確認するには、「監視」メニューから「ログ」を選択する。
Azure上でのAzure Functions動作検証_13

14) 以下の画面が表示されるため、右上の「×」を押下し「Log Analyticsへようこそ」の画面を閉じる。
Azure上でのAzure Functions動作検証_14

15) 以下の画面が表示されるため、「必ずクエリハブを表示する」をオフにし、右上の「×」を押下し「クエリ パック」の画面を閉じる。
Azure上でのAzure Functions動作検証_15

16) 例えば過去1時間分のトレースログを見るには、時間の範囲を「過去1時間」に設定し、クエリ「traces | order by timestamp」を指定の上、「実行」ボタンを押下する。
Azure上でのAzure Functions動作検証_16

17) 以下のようにトレースログが表示され、function_app.py内の文言「Python HTTP trigger function processed a request.」がログに出力されていることが確認できる。
Azure上でのAzure Functions動作検証_17

要点まとめ

  • Azureが提供するサービスに、さまざまなイベントによって駆動し、サーバーの構築や保守をすることなくプログラムを実行できる「Azure Functions」というものがある。
  • Pythonで動作するAzure Functionsを作成や(ローカル環境・Azure環境での)実行は、Azureの公式サイトの手順に従って、実施することができる。