チュートリアル: Azure Table Storage 出力を使用して Python 関数を構成する
このチュートリアルでは、次のタスクを実行して、Azure Table Storage を出力バインドとして使用するように Python 関数を構成する方法について説明します。
- Visual Studio Code を使って Python 関数プロジェクトを作成します。
- ストレージ テーブルの出力関数バインドを追加します。
- Visual Studio Code を使ってその関数をローカルで実行します。
- Azure CLI を使ってサービス コネクタで Azure 関数とストレージ テーブルとの接続を作成します。
- Visual Studio を使って関数をデプロイします。
このチュートリアルでの関数プロジェクト コンポーネントの概要:
プロジェクト コンポーネント | 選択/ソリューション |
---|---|
ソース サービス | Azure 関数 |
対象サービス | Azure Storage Table |
関数バインド | HTTP トリガー、出力としてのストレージ テーブル |
ローカルでのプロジェクトの認証方法 | Connection String |
クラウドでの関数の認証方法 | Connection String |
警告
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フローでは、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、マネージド ID など、より安全なフローが実行可能ではない場合にのみ使用してください。
前提条件
- サポートされているプラットフォームのいずれかに Visual Studio Code をインストールします。
- Azure CLI Azure Cloud Shell 内で使用するか、それをローカルにインストールしてください。
- Azure Storage アカウントとストレージ テーブル。 ストレージ アカウントがない場合は作成してください。
- このガイドは、「Azure Functions 開発者ガイド」で示されている概念と、Azure Functions でのサービスへの接続方法を理解していることが前提となっています。
Python 関数プロジェクトを作成する
ローカルの Azure Functions プロジェクトを作成するチュートリアルに従い、プロンプトで次の情報を指定します:
Prompt | [選択] |
---|---|
言語を選択する | Python を選択します。 (v1 プログラミング言語モデル) |
仮想環境を作成する Python インタープリターを選択してください | 任意の Python インタープリターを選択します。 オプションが表示されない場合は、Python バイナリの完全パスを入力してください。 |
Select a template for your project's first function (プロジェクトの最初の関数のテンプレートを選択してください) | HTTP trigger を選択します。 |
Provide a function name (関数名を指定してください) | 「TableStorageOutputFunc 」と入力します。 |
承認レベル | Anonymous を選択します。この場合、すべてのユーザーが関数のエンドポイントを呼び出すことができます。 |
HTTP トリガーを使って Python 関数プロジェクトを作成しました。
ストレージ テーブルの出力バインドを追加する
バインド属性は、特定の関数の function.json ファイルで定義されます。 バインドを作成するには、関数フォルダー内の function.json
ファイルを右クリック (macOS では Ctrl を押しながらクリック) して、[バインドの追加] を選択します。 プロンプトに従って、新しいバインドの次のバインド プロパティを定義します。
Prompt | 値 | 説明 |
---|---|---|
Select binding direction (バインド方向を選択する) | out |
バインドは出力バインドです。 |
Select binding with direction... (方向を使用してバインドを選択する...) | Azure Table Storage |
バインドは Azure Storage テーブル バインドです。 |
コードでこのバインドの特定に使用する名前 | outMessage |
コードで参照されているバインド パラメーターを識別する名前。 |
データの書き込み先のストレージ アカウント内にあるテーブルの名前です | testTable |
関数が出力として書き込むテーブル名。 ストレージ アカウントに testTable という名前のテーブルがない場合は作成します。 |
Select setting from "local.setting.json" ("local.setting.json" から設定を選択する) | Create new local app settings |
関数が出力として書き込むストレージ アカウントを選びます。 Visual Studio Code はローカル プロジェクト接続の接続文字列を取得します。 |
バインドが正常に追加されたことを確認するには:
TableStorageOutputFunc/function.json
ファイルを開き、type: table
とdirection: out
を含む新しいバインドがこのファイルに追加されたことを確認します。local.settings.json
ファイルを開き、ストレージ アカウントの接続文字列を含む新しいキーと値のペア<your-storage-account-name>_STORAGE: <your-storage-account-connection-string>
がこのファイルに追加されたことを確認します。
バインドが追加されたら、TableStorageOutputFunc/__init__.py
を次の Python ファイルに置き換えて、そのバインドを使うように関数コードを更新します。
import logging
import uuid
import json
import azure.functions as func
def main(req: func.HttpRequest, outMessage: func.Out[str]) -> func.HttpResponse:
rowKey = str(uuid.uuid4())
data = {
"Name": "Output binding message",
"PartitionKey": "message",
"RowKey": rowKey
}
outMessage.set(json.dumps(data))
return func.HttpResponse(f"Message created with the rowKey: {rowKey}")
関数をローカルで実行する
関数をローカルで実行してテーブル出力を確認するには、このチュートリアルに従ってください。
- ストレージ アカウントへの接続を求めるプロンプトが表示されたら、Azure 関数リソースの作成時に選んだストレージ アカウントを選びます。 この値は、Azure 関数ランタイムに使われます。 これは必ずしも出力に使うストレージ アカウントと同じではありません。
- ローカルで関数を開始するには、
<kbd>
F5</kbd>
キーを押すか、左側のアクティビティ バーにある [実行とデバッグ] アイコンを選びます。 - 関数からテーブルに書き込むことができることを確認するには、Visual Studio Code の [ワークスペース] ビューで関数の
Execute Function Now...
を右クリックし、関数の応答を確認します。 応答メッセージには、テーブルに書き込まれたrowKey
が含まれているはずです。
サービス コネクタを使って接続を作成する
前回の手順では、ローカルで関数プロジェクトを確認しました。 次は、クラウド内の Azure 関数と Azure ストレージ テーブル間に接続を構成し、クラウドへのデプロイ後に関数がストレージ BLOB に書き込むことができるようにする方法について説明します。
- ローカル プロジェクトで
function.json
ファイルを開き、bindings
でconnection
プロパティの値をAZURE_STORAGETABLE_CONNECTIONSTRING
に変更します。 - 次の Azure CLI コマンドを実行して Azure 関数と Azure Storage との接続を作成します。
az functionapp connection create storage-table --source-id "<your-function-resource-id>" --target-id "<your-storage-table-resource-id>" --secret
--source-id
の書式:/subscriptions/{subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.Web/sites/{site}
--target-id
の形式:/subscriptions/{subscription}/resourceGroups/{target_resource_group}/providers/Microsoft.Storage/storageAccounts/{account}/tableServices/default
関数のアプリ設定で AZURE_STORAGETABLE_CONNECTIONSTRING
変数を構成するサービス コネクタ リソースを作成しました。 このアプリ設定は、ストレージに接続する関数バインドによって使われます。これにより、関数はストレージ テーブルに書き込むことができるようになります。 詳細については、「Service Connector を使用して Azure Functions をサービスに接続する方法」を参照してください。
関数を Azure にデプロイする
関数を Azure にデプロイし、ストレージ テーブルの出力バインドが機能することを確認できるようになりました。
- この Azure Functions チュートリアルに従って関数を Azure にデプロイしてください。
- 関数からテーブルに書き込むことができることを確認するには、Visual Studio Code の [リソース] ビューで関数の
Execute Function Now...
を右クリックし、関数の応答を確認します。 応答メッセージには、先ほど関数によってテーブルに書き込まれたrowKey
が含まれているはずです。
トラブルシューティング
No such host is known (<account-name>.table.core.windows.net:443)
など、ストレージ ホストに関連するエラーがある場合は、Azure Storage への接続に使う接続文字列にそのテーブル エンドポイントが含まれているかどうかを確認する必要があります。 含まれていない場合は、Azure Storage ポータルに移動し、Access keys
ブレードから接続文字列をコピーし、その値を置き換えてください。
プロジェクトをローカルで開始するときにこのエラーが発生した場合は、local.settings.json
ファイルを確認してください。
クラウドに関数をデプロイするときにこれが発生する場合は (この場合、関数のデプロイは通常は Syncing triggers
で失敗します)、関数のアプリ設定を確認してください。
リソースをクリーンアップする
このプロジェクトを引き続き使う予定がない場合は、前に作成した関数アプリ リソースを削除してください。
次のステップ
サービス コネクタの概念と、それを使って Azure Functions を他のクラウド サービスに接続する方法について詳しくは、以下の記事をご覧ください。