Share via


チュートリアル: 出力として Azure Table Storage を使う Python 関数

このチュートリアルでは、次のタスクを実行して、出力としてストレージ テーブルを使う Python 関数の構成方法を説明します。

  • Visual Studio Code を使って Python 関数プロジェクトを作成します。
  • ストレージ テーブルの出力関数バインドを追加します。
  • Visual Studio Code を使ってその関数をローカルで実行します。
  • Azure CLI を使ってサービス コネクタで Azure 関数とストレージ テーブルとの接続を作成します。
  • Visual Studio を使って関数をデプロイします。

このチュートリアルでの関数プロジェクト コンポーネントの概要:

プロジェクト コンポーネント 選択とソリューション
ソース サービス Azure 関数
対象サービス Azure Storage Table
関数バインド HTTP トリガー、出力としてのストレージ テーブル
ローカルでのプロジェクトの認証方法 Connection String
クラウドでの関数の認証方法 Connection String

前提条件

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 はローカル プロジェクト接続の接続文字列を取得します。

バインドが正常に追加されたことを確認するには:

  1. TableStorageOutputFunc/function.json ファイルを開き、type: tabledirection: out を含む新しいバインドがこのファイルに追加されたことを確認します。
  2. 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}")

関数をローカルで実行する

関数をローカルで実行してテーブル出力を確認するには、このチュートリアルに従ってください。

  1. ストレージ アカウントへの接続を求めるプロンプトが表示されたら、Azure 関数リソースの作成時に選んだストレージ アカウントを選びます。 この値は、Azure 関数ランタイムに使われます。 これは必ずしも出力に使うストレージ アカウントと同じではありません。
  2. ローカルで関数を開始するには、<kbd>F5 </kbd> キーを押すか、左側のアクティビティ バーにある [実行とデバッグ] アイコンを選びます。
  3. 関数からテーブルに書き込むことができることを確認するには、Visual Studio Code の [ワークスペース] ビューで関数の Execute Function Now... を右クリックし、関数の応答を確認します。 応答メッセージには、テーブルに書き込まれた rowKey が含まれているはずです。

サービス コネクタを使って接続を作成する

前回の手順では、ローカルで関数プロジェクトを確認しました。 次は、クラウド内の Azure 関数と Azure ストレージ テーブル間に接続を構成し、クラウドへのデプロイ後に関数がストレージ BLOB に書き込むことができるようにする方法について説明します。

  1. ローカル プロジェクトで function.json ファイルを開き、bindingsconnection プロパティの値を AZURE_STORAGETABLE_CONNECTIONSTRING に変更します。
  2. 次の Azure CLI コマンドを実行して Azure 関数と Azure ストレージとの接続を作成します。
az functionapp connection create storage-table --source-id "<your-function-resource-id>" --target-id "<your-storage-table-resource-id>" --secret
  • --source-id の形式: /subscriptions/{subscription}/resourceG roups/{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 にデプロイし、ストレージ テーブルの出力バインドが機能することを確認できるようになりました。

  1. この Azure Functions チュートリアルに従って関数を Azure にデプロイしてください。
  2. 関数からテーブルに書き込むことができることを確認するには、Visual Studio Code の [リソース] ビューで関数の Execute Function Now... を右クリックし、関数の応答を確認します。 応答メッセージには、先ほど関数によってテーブルに書き込まれた rowKey が含まれているはずです。

トラブルシューティング

No such host is known (<acount-name>.table.core.windows.net:443) など、ストレージ ホストに関連するエラーがある場合は、Azure Storage への接続に使う接続文字列にそのテーブル エンドポイントが含まれているかどうかを確認する必要があります。 含まれていない場合は、Azure Storage ポータルに移動し、Access keys ブレードから接続文字列をコピーし、その値を置き換えてください。

プロジェクトをローカルで開始するときにこのエラーが発生した場合は、local.settings.json ファイルを確認してください。

クラウドに関数をデプロイするときにこれが発生する場合は (この場合、関数のデプロイは通常は Syncing triggers で失敗します)、関数のアプリ設定を確認してください。

リソースをクリーンアップする

このプロジェクトを引き続き使う予定がない場合は、先ほど作成した関数アプリ リソースを削除します。

  1. Azure portal で、その関数アプリ リソースを開き、[削除] を選びます。
  2. そのアプリ名を入力し、[削除] を選んで確定します。

次のステップ

サービス コネクタの概念と、それを使って Azure Functions を他のクラウド サービスに接続する方法の詳細については、以下の記事を参照してください。