Azure Python

Azure Functions上で動作するPythonアプリケーションで環境変数を利用してみた

Azure Functions上で動作するアプリケーションにおいて、環境変数を定義し利用することができる。

今回は、Azure Functions上で動作するPythonアプリケーションにおいて、SQL Databaseへの接続情報を環境変数として定義してみたので、その手順を共有する。

前提条件

下記サイトの手順に従って、Azure Functions上で動作しマネージドIDを利用してSQL Databaseに接続するPythonアプリケーションの作成が完了していること。

Azure Functions上で動作するPythonアプリケーションでマネージドIDを利用してSQL Databaseに接続してみたAzure Functions上で動作するPythonアプリケーションにおいて、マネージドIDを利用すると、データベースに接続するための...

やってみたこと

  1. local.settings.jsonへの環境変数定義
  2. ローカル上でのAzure Functions動作検証
  3. Azure Functionsの環境変数定義
  4. Azure上でのAzure Functions動作検証

local.settings.jsonへの環境変数定義

local.settings.jsonへの環境変数定義や暗号化/復号化を、Azure Functions Core Tools のコマンドを用いて行える。その手順は、以下の通り。

1) local.settings.jsonの配置場所は、以下の通り。
local.settings.jsonへの環境変数定義_1

2) 変更前のlocal.settings.jsonの値は、以下の通り。

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

3) local.settings.jsonの値は、Azure Functions Core Tools の「func settings list –showValue」コマンドによっても確認できる。
local.settings.jsonへの環境変数定義_3

4)「func settings add “ENV” “local”」コマンドによって、以下のように、local.settings.jsonに環境変数ENV=localの値を追加できる。
local.settings.jsonへの環境変数定義_4

5) 同様に、func settings addコマンドにより、他に必要な環境変数を追加する。
local.settings.jsonへの環境変数定義_5_1

なお、「DRIVER_NAME」の値は、以下の画面赤枠の、SQL Serverドライバ名から取得できる。
local.settings.jsonへの環境変数定義_5_2

6) 追加した値を確認した結果は、以下の通り。
local.settings.jsonへの環境変数定義_6

7) この時点でlocal.settings.jsonの値を確認した結果は、以下の通り。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "ENV": "local",
    "DRIVER_NAME": "{ODBC Driver 17 for SQL Server}",
    "SERVER_NAME": "azure-db-purinit.database.windows.net",
    "DATABASE_NAME": "azureSqlDatabase",
    "USER_ID": "purinit@azure-db-purinit",
    "PASSWORD": "(設定したパスワード)",
    "AUTH": "ActiveDirectoryMsi"
  },
  "ConnectionStrings": {}
}

8)「func settings encrypt」コマンドによって、local.settings.jsonの値を暗号化できる。
local.settings.jsonへの環境変数定義_8

9) 暗号化したlocal.settings.jsonの値を確認した結果は、以下の通り。

{
  "IsEncrypted": true,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "CfDJ8LSmyxluVh5AkwQC3VuxDYc/T82FHtQ4lELsX+KywXWdCOWWIlgOCMBjAR0Btfm9Vo1URw/Fhj4zRI9vju7WuDUsHkzhTPuJgBKlc7RQ2jnWcU4mZXSAjT9BAiBvgIdOmA==",
    "AzureWebJobsStorage": "CfDJ8LSmyxluVh5AkwQC3VuxDYdeKqkehRxY5fKrknLUfrxrYKG4Ouun03rmrSwQlrB7gRxQvX7VcO7eIG5q4qtaDvurmnCJ7s8s9E+f23j9mgWi0QgjoZOfx30lwXp+Ye/q3j5lDHhxWzbDA7CRr52INWk=",
    "ENV": "CfDJ8LSmyxluVh5AkwQC3VuxDYcZ4d0INcsQuZINSen12T1yqpKjSueqXS6B8f5qOrt0LjwVNF7E/uFPJi/QbmRKbDEePkpWKpiZ3c8mNNVKg5/D61qpLvubNwiz6Uhu8vOFJw==",
    "DRIVER_NAME": "CfDJ8LSmyxluVh5AkwQC3VuxDYcn8ubyyoRmaGZyG7mT/VBSmiOag4C9onMSZAgv5ZmxiLsSQ9y2R37AvoqHggy0hquQ3/5xuaFoRgJZ1yw2vCL6p6gxaB4glYNxxuMtrvuUNUG7eVuvdTf2086qZ9VW0eI=",
    "SERVER_NAME": "CfDJ8LSmyxluVh5AkwQC3VuxDYeDbwZy3cCGR+pigT8MhzDpCrxEFk0p5igD4GWnuwB8gAVPsf3o8usGIGyyesedzJWMGmn7UWsKh9Un4iDsmtnNMd1fH54agKcHgaOAkupqgo8ZzJzvVTU4vTFXkWjJqrAsUoOfizmmXenwLUOyP9sR",
    "DATABASE_NAME": "CfDJ8LSmyxluVh5AkwQC3VuxDYfh5pxdzHMeIR8Ouz0U0P3E4/F9n6vSFoXF0u3wM1JA9JHCP2TR3Bp96PgltwOlG9D/xORxkFMjcz5YqS3b6GzEtZ9YvNGkUkk5pWoy3Y6rC4K+sVS8vSIP/68/Z+OZ0+8=",
    "USER_ID": "CfDJ8LSmyxluVh5AkwQC3VuxDYduwplRntl7FjU3iizNDNPUq0gaBHkR4F1PSOZvTCJu70xWc1f04i6TU61tMHxPX6fiPR+MefXkBFv4nZCUSIdXXJtgWmFjZvDyOkte3JJVoFoQlAPbQwKtX8pBLcu66SM=",
    "PASSWORD": "CfDJ8LSmyxluVh5AkwQC3VuxDYdaD5HCj0sBMQMy/yETkYWn814CQzAafkvhgvjQdbgT+Q43+TDcslunXgn+PbDO8N8K+T8M7U0MT0tFOGnshxmUxQwJfNed5bhzkJfirRpHKw==",
    "AUTH": "CfDJ8LSmyxluVh5AkwQC3VuxDYeZrsgz7cfgqrPm8dKLcY6CRrrMbaGrkBaNIRFZoHa2qrLKV4g504SXAwEGhZev/lLL4cmOz1XSAL8AMCrAiHGQzeTousUtb/epDukqG5lzEymPR2hIoAUjcgoQo5kHwqs="
  },
  "ConnectionStrings": {}
}

10)「func settings list –showValue」コマンドを利用すると、今まで通り、暗号化する前の設定値の確認ができる。
local.settings.jsonへの環境変数定義_10

11)「func settings decrypt」コマンドによって、local.settings.jsonの値を復号化できる。
local.settings.jsonへの環境変数定義_11

12) 復号化したlocal.settings.jsonの値を確認した結果は、以下の通り。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "ENV": "local",
    "DRIVER_NAME": "{ODBC Driver 17 for SQL Server}",
    "SERVER_NAME": "azure-db-purinit.database.windows.net",
    "DATABASE_NAME": "azureSqlDatabase",
    "USER_ID": "purinit@azure-db-purinit",
    "PASSWORD": "(設定したパスワード)",
    "AUTH": "ActiveDirectoryMsi"
  },
  "ConnectionStrings": {}
}



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

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

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

1) PythonによるAzure Functionsアプリの構成は、以下の通り。このうち赤枠の「function_app.py」を修正する。
ローカル上でのAzure Functions動作検証_1

2) 修正後の「function_app.py」の内容は、以下の通り。

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

app = func.FunctionApp(http_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.')
    
    # SQL Database接続情報
    ENV = os.getenv('ENV')
    DRIVER_NAME = os.getenv('DRIVER_NAME')
    SERVER_NAME = os.getenv('SERVER_NAME')
    DATABASE_NAME = os.getenv('DATABASE_NAME')
    USER_ID = os.getenv('USER_ID')
    PASSWORD = os.getenv('PASSWORD')
    AUTH = os.getenv('AUTH')
    
    # SQL Databaseに接続し、データを取得し表示
    if ENV == 'local':
        conn = pyodbc.connect('DRIVER=' + DRIVER_NAME 
                  + ';SERVER=' + SERVER_NAME
                  + ';DATABASE=' + DATABASE_NAME 
                  + ';UID=' + USER_ID
                  + ';PWD=' + PASSWORD + ';')
    else:
        conn = pyodbc.connect('DRIVER=' + DRIVER_NAME 
                  + ';SERVER=' + SERVER_NAME
                  + ';DATABASE=' + DATABASE_NAME 
                  + ';Authentication=' 
                  + AUTH + ';Encrypt=yes;')
    cursor = conn.cursor()
    cursor.execute('SELECT name, sex FROM dbo.USER_DATA WHERE id = 1')
    for row in cursor:
        logging.info(row[0])
        logging.info(row[1])
    
    # SQL Database接続後に処理を終了する
    cursor.close()
    conn.close()

    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
        )

3) local.settings.jsonを暗号化した状態で動作検証するため、「func settings encrypt」コマンドを実行する。
ローカル上でのAzure Functions動作検証_3

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

Enterキー押下後
ローカル上でのAzure Functions動作検証_4_2

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

ローカル上でのAzure Functions動作検証_5_2

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

7) コンソール上には、以下の赤枠部分に、USER_DATAテーブルから取得した値の表示が確認できる。
ローカル上でのAzure Functions動作検証_7_1

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

Azure Functionsの環境変数定義

Azure Functionsの環境変数定義は、Azure Portalから行える。その手順は、以下の通り。

1) Azure Portalにログインし、環境変数を設定するAzure Functionsを選択し、「設定」メニューから「環境変数」を選択する。
Azure Functionsの環境変数定義_1

2) 環境変数を追加するため、「追加」ボタンを押下する。
Azure Functionsの環境変数定義_2

3) 環境変数ENV=azureの値を設定するため、以下のように指定し「適用」ボタンを押下する。
Azure Functionsの環境変数定義_3_1

Azure Functionsの環境変数定義_3_2

4) 同様に、他に必要な環境変数を追加する。環境変数追加後に値を確認するには、以下のように「値を表示する」ボタンを押下する。
Azure Functionsの環境変数定義_4

5) 以下のように、環境変数の各値が確認できる。ここでこの環境変数を反映するため、「適用」ボタンを押下する。
Azure Functionsの環境変数定義_5

6) 以下のダイアログを表示されるため、「確認」ボタンを押下する。
Azure Functionsの環境変数定義_6_1

Azure Functionsの環境変数定義_6_2

なお、「DRIVER_NAME」の値は、以下の画面赤枠のドライバ名から取得できる。
Azure Functionsの環境変数定義_6_3



ウズウズカレッジJavaコースはわかりやすい動画教材と充実した就業サポートで優良企業を目指せるプログラミングスクールだったJavaは、世界中で広く使われていて、現在の需要が高く将来性もある開発言語になります。 https://www.acrovision....

Azure上でのAzure Functions動作検証

Azure上でのAzure Functions動作検証は、「ローカル上でのAzure Functions動作検証」で修正した「function_app.py」を用いて確認できる。Azure上にAzure Functionsアプリをデプロイして確認した結果は、以下の通り。

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

2) このときのアクセスログを確認すると、以下の赤枠部分に、USER_DATAテーブルから取得した値の表示が確認できる。
Azure上でのAzure Functions動作検証_2_1

Azure上でのAzure Functions動作検証_2_2

なお、Azure Functions動作検証手順は、以下の記事の「Azure上でのAzure Functions動作検証」を参照のこと。

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

要点まとめ

  • Azure Functions上で、環境変数を定義できる。
  • Azure Functionsをローカルで動作する際の環境変数はlocal.settings.jsonで定義でき、local.settings.jsonの暗号化/復号化も行える。