チュートリアル: 入力として Azure Blob Storage を使う Python 関数
このチュートリアルでは、次のタスクを実行して、入力として Azure Blob Storage を使う Python 関数の構成方法を説明します:
- Visual Studio Code を使って Python 関数プロジェクトを作成します。
- コードを変更してストレージ BLOB 入力の関数バインドを追加します。
- Visual Studio Code を使ってその関数をローカルで実行します。
- Azure CLI を使ってサービス コネクタで Azure 関数とストレージ BLOB との接続を作成します。
- Visual Studio を使ってその関数をデプロイします。
このチュートリアルでの関数プロジェクト コンポーネントの概要:
プロジェクト コンポーネント | 選択/ソリューション |
---|---|
ソース サービス | Azure 関数 |
対象サービス | Azure Storage Blob |
関数バインド | HTTP トリガー、入力としてのストレージ BLOB |
ローカルでのプロジェクトの認証方法 | Connection String |
クラウドでの関数の認証方法 | システム割り当てマネージド ID |
警告
Microsoft では、使用可能な最も安全な認証フローを使用することをお勧めします。 この手順で説明されている認証フローでは、アプリケーションで非常に高い信頼度が要求されるため、他のフローには存在しないリスクが伴います。 このフローは、マネージド ID など、より安全なフローが実行可能ではない場合にのみ使用してください。
前提条件
- サポートされているプラットフォームのいずれかに Visual Studio Code をインストールします。
- Azure CLI。 Azure Cloud Shell 内で使用するか、それをローカルにインストールしてください。
- Azure Storage アカウントとストレージ BLOB。 Azure Storage アカウントがない場合は、それを作成してください。
- このガイドは、「Azure Functions 開発者ガイド」で示されている概念と、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 (関数名を指定してください) | 「BlobStorageInputFunc 」と入力します。 |
承認レベル | Anonymous を選択します。この場合、すべてのユーザーが関数のエンドポイントを呼び出すことができます。 |
HTTP トリガーを使う Python 関数プロジェクトが作成されました。
BLOB ストレージ入力のバインドを追加する
バインド属性は、特定の関数の function.json ファイルで定義されます。 バインドを作成するには、関数フォルダー内の function.json
ファイルを右クリック (macOS では Ctrl を押しながらクリック) して、[バインドの追加] を選択します。 プロンプトに従って、新しいバインドの次のバインド プロパティを定義します。
Prompt | 値 | 説明 |
---|---|---|
Select binding direction (バインド方向を選択する) | in |
このバインドは入力バインドです。 |
Select binding with direction... (方向を使用してバインドを選択する...) | Azure Blob Storage |
このバインドは Azure Storage BLOB バインドです。 |
コードでこのバインドの特定に使用する名前 | inputBlob |
コードで参照されているバインド パラメーターを識別する名前。 |
BLOB の読み取り元のストレージ アカウント内のパス | testcontainer/test.txt |
関数で入力として読み取る BLOB のパスです。 Hello, World! という内容の、test.txt という名前のファイルを準備します。 testcontainer という名前のコンテナーを作成し、そこにそのファイルをアップロードします。 |
Select setting from "local.setting.json" ("local.setting.json" から設定を選択する) | Create new local app settings |
関数で入力として読み取る、ストレージ アカウントを選びます。 Visual Studio Code でローカル プロジェクト接続のためその接続文字列が取得されます。 |
バインドが正常に追加されたことを確認するには、次のようにします。
BlobStorageInputFunc/function.json
ファイルを開き、type: blob
とdirection: in
を含む新しいバインドがこのファイルに追加されたことを確認します。local.settings.json
ファイルを開き、ストレージ アカウントの接続文字列を含む新しいキーと値のペア<your-storage-account-name>_STORAGE: <your-storage-account-connection-string>
がこのファイルに追加されたことを確認します。
バインドが追加されたら、BlobStorageInputFunc/__init__.py
を次の Python ファイルに置き換えて、そのバインドを使うように関数コードを更新します。
import logging
import azure.functions as func
def main(req: func.HttpRequest, inputBlob: bytes) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
return func.HttpResponse('The triggered function executed successfully. And read blob content: {}'.format(inputBlob))
関数をローカルで実行する
関数をローカルで実行し BLOB 入力を確認するには、このチュートリアルに従ってください。
- ストレージへの接続を求めるメッセージが表示されたら、Azure 関数リソースの作成時に使ったストレージ アカウントを選びます。 これは Azure 関数ランタイムで内部で使われ、入力に使うのと必ずしも同じではありません。
- ローカルで関数を開始するには、
<kbd>
F5</kbd>
キーを押すか、左側のアクティビティ バーにある [実行とデバッグ] アイコンを選びます。 - その関数で BLOB を読み取り可能であることを確認するには、Visual Studio Code の [ワークスペース] でその関数の
Execute Function Now...
を右クリックし、その関数の応答をチェックします。 応答メッセージに、その BLOB ファイルの内容が含まれている必要があります。
サービス コネクタを使って接続を作成する
先ほどはプロジェクトを実行し、ローカルで関数を確認しました。ローカル プロジェクトは接続文字列を使ってストレージ BLOB に接続されています。
次は、クラウドへのデプロイ後にその関数で BLOB を読み取れるように、Azure 関数と Azure Blob Storage との接続を構成する方法を説明します。 クラウド環境でシステム割り当てマネージド ID を使って認証する方法を示します。
- ローカル プロジェクトで
function.json
ファイルを開き、bindings
でconnection
プロパティの値をMyBlobInputConnection
に変更します。 - 次の Azure CLI コマンドを実行して Azure 関数と Azure Storage との接続を作成します。
az functionapp connection create storage-blob --source-id "<your-function-resource-id>" --target-id "<your-storage-blob-resource-id>" --system-identity --customized-keys AZURE_STORAGEBLOB_RESOURCEENDPOINT=MyBlobInputConnection__serviceUri
--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}/blobServices/default
システム割り当てマネージド ID で、サービス コネクタを使った Azure 関数と Azure Blob Storage との接続が作成されました。
サービス コネクタにより、その関数のアプリ設定で MyBlobInputConnection__serviceUri
変数が構成されて (これは関数バインド ランタイムでストレージへの接続に使われる)、その関数で BLOB ストレージからデータを読み取れるようになりました。 詳しくは、「Service Connector を使用して Azure Functions をサービスに接続する方法」をご覧ください。
関数を Azure にデプロイする
これで、関数を Azure にデプロイし、ストレージ BLOB 入力のバインドが機能することを確認できるようになりました。
- このチュートリアルに従って関数を Azure にデプロイします。
- その関数で BLOB を読み取り可能であることを確認するには、Visual Studio Code の [リソース] ビューでその関数の
Execute Function Now...
を右クリックし、その関数の応答をチェックします。 応答メッセージに、その BLOB ファイルの内容が含まれている必要があります。
トラブルシューティング
No such host is known (<account-name>.blob.core.windows.net:443)
など、ストレージ ホストに関連するエラーがある場合は、Azure Storage への接続に使う接続文字列にその BLOB エンドポイントが含まれているかどうかを確認する必要があります。 含まれていない場合は、Azure portal で Azure Storage に移動し、Access keys
ブレードから接続文字列をコピーし、その値を置き換えてください。
プロジェクトをローカルで開始するときにこのエラーが発生した場合は、local.settings.json
ファイルを確認してください。
クラウドに関数をデプロイするときにこのエラーが発生した場合は (この場合、関数のデプロイは通常は Syncing triggers
で失敗する)、関数のアプリ設定を確認してください。
リソースをクリーンアップする
このプロジェクトを引き続き使う予定がない場合は、前に作成した関数アプリ リソースを削除してください。
次のステップ
サービス コネクタの概念と、それを使って Azure Functions を他のクラウド サービスに接続する方法について詳しくは、以下の記事をご覧ください。