DBサーバ作成
公式ドキュメント参照
作成時に設定したパスワードはDBアクセス時に使用する
以下、作成されたDBサーバ概要
サーバ名、サーバー管理者ログイン名はDBアクセス時に使用する
SSL接続を有効に設定している場合は、以下からSSL証明書を取得する
SSL 証明書を取得する
https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem
DBのファイアウォール設定
クライアントツールからのアクセス許可
**+ 現在のクラインとIPアドレスを追加する(xxx.xxx.xxx.xxx)**をクリックすることでIPアドレスが自動的に登録される
Azure Functionsからのアクセス許可
Azure サービスへのアクセスを許可をはいに設定する
クライアントツールからのアクセス
HeidiSQLの場合
ホスト名/IP:DBサーバ概要のサーバ名
ユーザー: DBサーバ概要のサーバー管理者ログイン名
パスワード: 作成時に設定したパスワード
SSL接続を有効にしている場合は、SSL CA証明書にダウンロードしたSSL証明書のパスを設定
今回は、以下のように適当なデータベース、テーブルを作成し、適当なデータを追加済
データベース名: testdb
テーブル名: testtable
Azure Functions(Python)からのDBアクセス
クイック スタート:Python を使用して Azure Database for MySQL に接続してデータを照会する
今回はHTTPトリガー、関数名HttpTrigger1
で作成
実装コード
import logging
import os
import azure.functions as func
import mysql.connector
from mysql.connector import errorcode
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
config = {
'host': os.environ["MARIADB_HOST"],
'user': os.environ["MARIADB_USER"],
'password': os.environ["MARIADB_PASSWORD"],
'database': 'testdb',
'client_flags': [mysql.connector.ClientFlag.SSL],
'ssl_ca': os.environ["MARIADB_SSL_CA"]
}
try:
conn = mysql.connector.connect(**config)
logging.info("Connection established")
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
logging.info("Something is wrong with the user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
logging.info("Database does not exist")
else:
logging.info(err)
else:
cursor = conn.cursor()
cursor.execute("SELECT * FROM testtable;")
rows = cursor.fetchall()
logging.info(f'Read: {cursor.rowcount}, row(s) of data.')
# logging.info all rows
for row in rows:
logging.info(f'Data row = {row}')
return func.HttpResponse(
"This HTTP triggered function executed successfully.",
status_code=200
)
環境変数、その他設定
ファイル構成
xxx
├─ HttpTrigger1
│ ├─ __init__.py
│ ├─ function.json
│ ├─ sample.dat
│ └─ cert
│ └─ BaltimoreCyberTrustRoot.crt.pem
│
├─ local.settings.json
└─ requirements.txt
SSL接続を有効にしている場合は、SSL証明書をHttpTrigger1
以下の任意の場所に格納する
環境変数
local.settings.json
にDBアクセスに必要な値を定義しておく
Pythonコード上からは os.environ["MARIADB_HOST"]
のようにアクセスする
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "python",
"MARIADB_HOST": "<mydemoserver>.mysql.database.azure.com",
"MARIADB_USER": "<myadmin>@<mydemoserver>",
"MARIADB_PASSWORD": "<mypassword>",
"MARIADB_SSL_CA": "HttpTrigger1/cert/BaltimoreCyberTrustRoot.crt.pem"
}
}
local.settings.json
はローカル環境実行用の環境変数のため、
Azure Functionsの構成から以下のようにアプリケーション設定を追加する
追加するアプリケーション設定の値はlocal.settings.json
と同様
パッケージ
requirements.txt
に以下のようにmysql-connector-python
を追加する
# DO NOT include azure-functions-worker in this file
# The Python Worker is managed by Azure Functions platform
# Manually managing azure-functions-worker may cause unexpected issues
azure-functions
mysql-connector-python