Azure Functions における Azure Blob Storage のバインドの概要

Azure Functions はトリガーとバインドを使用して Azure Storage と統合されます。 Blob Storage との統合により、BLOB データの変更に対応し、値の読み取りと書き込も行う関数を作成することができます。

アクション 種類
Blob Storage データが変更されたときに関数を実行する トリガー
関数で Blob Storage データを読み取る 入力バインド
関数で Blob Storage データを書き込めるようにする 出力バインド

拡張機能のインストール

インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モードによって異なります。

関数は分離された C# ワーカー プロセスで実行されます。 詳しくは、「分離ワーカー プロセスにおける C# Azure Functions の実行のガイド」をご覧ください。

拡張機能の機能性は、拡張機能のバージョンによって異なります。

このバージョンでは、シークレットではなく ID を使用して接続する機能が導入されています。 マネージド ID を使用して関数アプリを構成するチュートリアルについては、ID ベースの接続を使用した関数アプリの作成に関 するチュートリアルを参照してください

このバージョンでは、Azure.Storage.Blobs からの型にバインドできます。 これらの新しい型がWindowsAzure.StorageおよびMicrosoft.Azure.Storageとどのように異なるか、またそれらを移行する方法については、Azure.Storage.Blobs の移行ガイドに関するページを参照してください。

Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs NuGet パッケージ、バージョン 5.x 以降をインストールすることでパッケージに拡張機能を追加します。

.NET CLI の使用

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs

注意

Azure BLOB、Azure キュー、Azure テーブルでは、個別の拡張機能が使用され、個別に参照されるようになりました。 たとえば、.NET 分離プロセス アプリの 3 つのサービスすべてに対してトリガーとバインドを使用するには、次のパッケージをプロジェクトに追加する必要があります。

以前、拡張機能は Microsoft.Azure.Functions.Worker.Extensions.Storage、バージョン 4.x としてまとめて出荷されました。 この同じパッケージには 5.x バージョンもあり、BLOB とキューのみの分割パッケージを参照します。 このため、パッケージ参照を古いバージョンからアップグレードする場合は、新しい Microsoft.Azure.Functions.Worker.Extensions.Tables NuGet パッケージを追加で参照する必要がある場合があります。 また、このような新しい分割パッケージを参照するとき、結合されたストレージ パッケージの古いバージョンを参照していないことを確認してください。同じバインディングの 2 つの定義による競合の発生を防止できます。

F# を使用してアプリケーションを記述する場合、アプリのスタートアップ構成の一部としてこの拡張機能を構成することもできます。 ConfigureFunctionsWorkerDefaults() または ConfigureFunctionsWebApplication() の呼び出しで、IFunctionsWorkerApplication パラメーターを受け取るデリゲートを追加します。 次に、そのデリゲートの本文内でオブジェクトの ConfigureBlobStorageExtension() を呼び出します。

let hostBuilder = new HostBuilder()
hostBuilder.ConfigureFunctionsWorkerDefaults(fun (context: HostBuilderContext) (appBuilder: IFunctionsWorkerApplicationBuilder) ->
    appBuilder.ConfigureBlobStorageExtension() |> ignore
) |> ignore

バンドルのインストール

BLOB ストレージのバインドは、host.json プロジェクト ファイルで指定される拡張機能バンドルの一部です。 このバンドルは、バインドのバージョンを変更するために、またはバンドルがまだインストールされていない場合に変更が必要になることがあります。 詳細については、「拡張機能のバンドル」を参照してください。

このバージョンでは、シークレットではなく ID を使用して接続する機能が導入されています。 マネージド ID を使用して関数アプリを構成するチュートリアルについては、ID ベースの接続を使用した関数アプリの作成に関 するチュートリアルを参照してください

このバージョンの拡張機能は、host.json ファイルで次のコードを追加するか、または置き換えることによって、プレビュー拡張機能バンドル v3 から追加できます。

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[3.3.0, 4.0.0)"
    }
}

詳細については、ユーザーの更新に関するページを参照してください。

バインドの種類

.NET でサポートされるバインドの種類は、拡張機能のバージョンと C# 実行モードの両方によって異なります。これは次のいずれかになります。

分離ワーカー プロセス クラス ライブラリでコンパイルされた C# 関数は、ランタイムから分離されたプロセスで実行されます。

バージョンを選択すると、モードとバージョンのバインドの種類の詳細が表示されます。

分離ワーカー プロセスでは、下の表に従ってパラメーターの型がサポートされています。

BLOB トリガー

BLOB トリガーは、次の型にバインドできます。

Type 説明
string BLOB コンテンツを表す文字列。 BLOB コンテンツが単純なテキストのときに使用します。
byte[] BLOB コンテンツのバイト数。
JSON シリアル化可能な型 BLOB に JSON データが含まれているとき、Functions は JSON データを単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。
Stream1 BLOB コンテンツの入力ストリーム。
BlobClient1
BlockBlobClient1
PageBlobClient1
AppendBlobClient1
BlobBaseClient1
BLOB に接続されているクライアント。 この型のセットには BLOB の処理に対する最大限の制御機能が備わっています。接続に十分なアクセス許可がある場合は、BLOB への書き戻しに使用できます。

1 これらの型を使用するには、Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 以降SDK 型バインドの一般的な依存関係に関する記事を参照する必要があります。

BLOB 入力バインディング

関数で 1 つの BLOB を処理するとき、BLOB 入力バインドは次の型にバインドできます。

Type 説明
string BLOB コンテンツを表す文字列。 BLOB コンテンツが単純なテキストのときに使用します。
byte[] BLOB コンテンツのバイト数。
JSON シリアル化可能な型 BLOB に JSON データが含まれているとき、Functions は JSON データを単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。
Stream1 BLOB コンテンツの入力ストリーム。
BlobClient1
BlockBlobClient1
PageBlobClient1
AppendBlobClient1
BlobBaseClient1
BLOB に接続されているクライアント。 この型のセットには BLOB の処理に対する最大限の制御機能が備わっています。接続に十分なアクセス許可がある場合は、それへの書き戻しに使用できます。

関数で 1 つのコンテナーの複数の BLOB を処理するとき、BLOB 入力バインドは次の型にバインドできます。

Type 説明
T[] または List<T> (T は単一の BLOB 入力バインドの型のいずれか) 複数の BLOB の配列またはリスト。 各エントリは、コンテナーの 1 つの BLOB を表します。 これらの型によって実装される IEnumerable<T> などの任意のインターフェイスにバインドすることもできます。
BlobContainerClient1 コンテナーに接続されているクライアント。 この型にはコンテナーの処理に対する最大限の制御機能が備わっています。接続に十分なアクセス許可がある場合は、それへの書き込みに使用できます。

1 これらの型を使用するには、Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 以降SDK 型バインドの一般的な依存関係に関する記事を参照する必要があります。

BLOB 出力バインディング

関数で 1 つの BLOB に書き込むとき、BLOB 出力バインドは次の型にバインドできます。

Type 説明
string BLOB コンテンツを表す文字列。 BLOB コンテンツが単純なテキストのときに使用します。
byte[] BLOB コンテンツのバイト数。
JSON シリアル化可能な型 JSON BLOB の内容を表すオブジェクト。 Functions は、Plain Old CLR Object (POCO) 型を JSON データにシリアル化しようとします。

関数で複数の BLOB に書き込むとき、BLOB 出力バインドは次の型にバインドできます。

Type 説明
T[] (T は単一の BLOB 出力バインドの型のいずれか) 複数の BLOB の内容を含む配列。 各エントリは、1 つの BLOB の内容を表します。

その他の出力シナリオでは、 Azure.Storage.Blobs から型を直接作成して使用します。

host.json 設定

このセクションでは、このバインディングを使用する関数で使用できる関数アプリの構成設定について説明します。 これらの設定は、拡張機能バージョン 5.0.0 以上を使用している場合にのみ適用されます。 次の host.json ファイルの例には、このバインドのバージョン 2.x 以降の設定のみが含まれています。 バージョン 2.x 以降のバージョンでの関数アプリ構成設定の詳細については、「Azure Functions の host.json のリファレンス」を参照してください。

Note

このセクションは、5.0.0 より前の拡張機能のバージョンには適用されません。 それらの以前のバージョンでは、BLOB に対する関数アプリ規模の構成設定はありません。

{
    "version": "2.0",
    "extensions": {
        "blobs": {
            "maxDegreeOfParallelism": 4,
            "poisonBlobThreshold": 1
        }
    }
}
プロパティ Default 説明
maxDegreeOfParallelism 8 * (使用可能なコアの数) 特定の関数アプリ内で、BLOB によってトリガーされるすべての関数について、同時呼び出しに許可される数を表す整数。 許容される最小値は 1 です。
poisonBlobThreshold 5 有害キューに移動する前に、メッセージの処理を試行する回数 (整数)。 許容される最小値は 1 です。

次のステップ