Azure Functions の Azure Blob Storage トリガー

Blob ストレージ トリガーは、新しいまたは更新された BLOB が検出されたときに関数を開始します。 BLOB の内容は、関数への入力として提供されます。

ストレージ コンテナー内の BLOB に対する変更に基づいて関数コードを実行するには、いくつかの方法があります。 次の表を使用して、ニーズに最も適した関数トリガーを判断します。

考慮事項 Blob Storage (Standard) Blob Storage (イベント ベース) Queue Storage Event Grid
Latency 高 (最大 10 分) Medium
ストレージ アカウントの制限 BLOB 専用アカウントはサポートされていません¹ 汎用 v1 はサポートされていません なし 汎用 v1 はサポートされていません
拡張機能のバージョン Any Storage v5.x 以上 Any Any
既存の BLOB の処理 はい いいえ いいえ いいえ
フィルター BLOB 名パターン イベント フィルター N/A イベント フィルター
イベント サブスクリプションが必要 いいえ はい いいえ はい
高スケールのサポート² いいえ はい はい はい
説明 既定のトリガー動作。更新のためにコンテナーへのポーリングを利用します。 詳細については、この記事の例を参照してください。 イベント サブスクリプションから BLOB ストレージ イベントを使用します。 Source パラメーター値 EventGrid が必要です。 詳細については、チュートリアル: イベント サブスクリプションを使用した BLOB コンテナーでの Azure Functions のトリガーに関する記事を参照してください。 コンテナーへの BLOB の追加時に、BLOB 名文字列がストレージ キューに手動で追加されます。 この値は、Queue Storage トリガーによって、同じ関数の Blob Storage 入力バインディングに直接渡されます。 イベント (ストレージ コンテナーからのものに加えて) でトリガーする柔軟性を提供します。 ストレージ以外のイベントでも関数をトリガーする必要がある場合に使用します。 詳細については、「Azure Functions で Event Grid トリガーとバインドを使用する方法」を参照してください。

1 Blob Storage の入力および出力バインドでは、BLOB 専用アカウントがサポートされています。

2 高スケールとは、おおまかに言って、100,000 以上の BLOB を含むコンテナー、または 1 秒あたり 100 を超える BLOB の更新が発生するストレージ アカウントと定義できます。

セットアップと構成の詳細については、概要に関するページをご覧ください。

C# 関数は、次の C# モードのいずれかを使用して作成できます。

  •     インプロセス クラス ライブラリ: Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数。
  • 分離ワーカー プロセス クラス ライブラリ: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 分離ワーカー プロセスは、非 LTS バージョンの .NET および.NET Framework で実行されている C# 関数をサポートするために必要です。
  • C# スクリプト: Azure portal で c# 関数を作成するときに主に使用されます。

次の例は、 コンテナーで BLOB が追加または更新されたときにログを書き込む C# 関数を示しています。

[FunctionName("BlobTriggerCSharp")]        
public static void Run([BlobTrigger("samples-workitems/{name}")] Stream myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

BLOB トリガー パス samples-workitems/{name} の文字列 {name} は、トリガーする BLOB のファイル名にアクセスするために関数コードで使用できる、{name}を作成します。 詳しくは、後述の「BLOB 名のパターン」をご覧ください。

BlobTrigger 属性の詳細については、「属性」を参照してください。

この関数は、myblob コンテナーで BLOB が追加または更新されたときにログを書き込みます。

@FunctionName("blobprocessor")
public void run(
  @BlobTrigger(name = "file",
               dataType = "binary",
               path = "myblob/{name}",
               connection = "MyStorageAccountAppSetting") byte[] content,
  @BindingName("name") String filename,
  final ExecutionContext context
) {
  context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}

次の例は、function.json ファイルの BLOB トリガー バインドと、バインドを使用する JavaScript コードを示しています。 関数は、samples-workitems コンテナーで BLOB が追加または更新されたときにログを書き込みます。

function.json ファイルを次に示します。

{
    "disabled": false,
    "bindings": [
        {
            "name": "myBlob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

BLOB トリガー パス samples-workitems/{name} の文字列 {name} は、トリガーする BLOB のファイル名にアクセスするために関数コードで使用できる、{name}を作成します。 詳しくは、後述の「BLOB 名のパターン」をご覧ください。

function.json ファイル プロパティについて詳しくは、これらのプロパティについて説明している「構成」セクションをご覧ください。

JavaScript コードを次に示します。

module.exports = async function(context) {
    context.log('Node.js Blob trigger function processed', context.bindings.myBlob);
};

次の例は、source BLOB ストレージ コンテナーにファイルが追加されたときに実行される関数を作成する方法を示しています。

関数構成ファイル (function.json) には、blobTrigger で、directionin に設定されたバインドが含まれています。

{
  "bindings": [
    {
      "name": "InputBlob",
      "type": "blobTrigger",
      "direction": "in",
      "path": "source/{name}",
      "connection": "MyStorageAccountConnectionString"
    }
  ]
}

run.ps1 ファイルに関連するコードを次に示します。

param([byte[]] $InputBlob, $TriggerMetadata)

Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"

次の例は、function.json ファイルの BLOB トリガー バインドと、バインドを使用する Python コードを示しています。 関数は、samples-workitemssamples-workitemsで BLOB が追加または更新されたときにログを書き込みます。

function.json ファイルを次に示します。

{
    "scriptFile": "__init__.py",
    "disabled": false,
    "bindings": [
        {
            "name": "myblob",
            "type": "blobTrigger",
            "direction": "in",
            "path": "samples-workitems/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

BLOB トリガー パス samples-workitems/{name} の文字列 {name} は、トリガーする BLOB のファイル名にアクセスするために関数コードで使用できる、{name}を作成します。 詳しくは、後述の「BLOB 名のパターン」をご覧ください。

function.json ファイル プロパティについて詳しくは、これらのプロパティについて説明している「構成」セクションをご覧ください。

Python コードを次に示します。

import logging
import azure.functions as func


def main(myblob: func.InputStream):
    logging.info('Python Blob trigger function processed %s', myblob.name)

属性

インプロセス分離されたワーカー プロセスの C# ライブラリはどちらも、BlobAttribute 属性を使って関数を定義します。 代わりに、C# スクリプトでは、function.json 構成ファイルを使用します。

この属性のコンストラクターは、次のパラメーターを受け取ります。

パラメーター 説明
BlobPath BLOB へのパス。
接続 Azure Blob への接続方法を指定するアプリ設定または設定コレクションの名前。 「接続」を参照してください。
Access (アクセス) 読み取りと書き込みのどちらを行うかを示します。

C# クラス ライブラリの属性のコンストラクターは、監視するコンテナーを示すパス文字列と、必要に応じて BLOB 名のパターンを受け取ります。 次に例を示します。

[FunctionName("ResizeImage")]
public static void Run(
  [BlobTrigger("sample-images/{name}")] Stream image,
  [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageSmall)
{
  ....
}

属性は Connection プロパティを受け取りますが、 Connection を使用してストレージ アカウント接続を指定することもできます。 これは、ライブラリ内の他の関数とは異なるストレージ アカウントを使用する必要がある場合に実行できます。 コンストラクターは、ストレージ接続文字列を含むアプリ設定の名前を受け取ります。 属性は、パラメーター、メソッド、またはクラス レベルで適用できます。 次の例では、クラス レベルとメソッド レベルを示します。

[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
    [FunctionName("StorageTrigger")]
    [StorageAccount("FunctionLevelStorageAppSetting")]
    public static void Run( //...
{
    ...
}

使用するストレージ アカウントは、次の順序で決定されます。

  • トリガーまたはバインド属性の Connection プロパティ。
  • トリガーまたはバインド属性と同じパラメーターに適用された StorageAccount 属性。
  • 関数に適用される StorageAccount 属性。
  • クラスに適用される StorageAccount 属性。
  • AzureWebJobsStorage アプリケーション設定で定義されている、関数アプリの既定のストレージ アカウント。

ローカルで開発する場合は、 コレクション内の local.settings.json ファイルにアプリケーション設定を追加します。

注釈

@BlobTrigger 属性を使用すると、関数をトリガーした BLOB にアクセスできます。 詳細については、「トリガー - 例」を参照してください。

構成

次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。

function.json のプロパティ 説明
type blobTrigger に設定する必要があります。 このプロパティは、Azure Portal でトリガーを作成するときに自動で設定されます。
direction in に設定する必要があります。 このプロパティは、Azure Portal でトリガーを作成するときに自動で設定されます。 例外は、使用方法のセクションに記載しています。
name 関数コード内の BLOB を表す変数の名前。
path 監視するコンテナーBLOB 名パターンの場合があります。
connection Azure Blob への接続方法を指定するアプリ設定または設定コレクションの名前。 「接続」を参照してください。

完全な例については、セクションの例を参照してください。

Metadata

BLOB トリガーは、いくつかのメタデータ プロパティを提供します。 これらのプロパティは、他のバインドのバインド式の一部として、またはコードのパラメーターとして使用できます。 これらの値は、CloudBlob 型と同じセマンティクスを持ちます。

プロパティ Type 説明
BlobTrigger string トリガーする BLOB のパス。
Uri System.Uri プライマリ ロケーションの BLOB URI。
Properties BlobProperties Blob のシステム プロパティ。
Metadata IDictionary<string,string> BLOB のユーザー定義メタデータ。

次の例では、コンテナーを含むトリガーとなる BLOB へのパスをログに記録しています。

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 

Metadata

BLOB トリガーは、いくつかのメタデータ プロパティを提供します。 これらのプロパティは、他のバインドのバインド式の一部として、またはコードのパラメーターとして使用できます。

プロパティ 説明
blobTrigger トリガーする BLOB のパス。
uri プライマリ ロケーションの BLOB URI。
properties Blob のシステム プロパティ。
metadata BLOB のユーザー定義メタデータ。

次の例に示すように、指定した context オブジェクトの bindingData プロパティからメタデータを取得できます。この場合、コンテナーを含め、トリガーとなる BLOB (blobTrigger) へのパスがログに記録されます。

module.exports = async function (context, myBlob) {
    context.log("Full blob path:", context.bindingData.blobTrigger);
};

Metadata

メタデータは、$TriggerMetadata パラメーターを介して使用できます。

使用

BLOB トリガーでサポートされるバインドの種類は、拡張機能パッケージのバージョンと、関数アプリで使用される C# モダリティによって異なります。 詳細については、「バインドの種類」を参照してください。

string または Byte[] へのバインドが推奨されるのは、BLOB のサイズが小さい場合のみです。 これが推奨されるのは、BLOB 全体の内容がメモリに読み込まれるためです。 ほとんどの BLOB では、Stream 型または BlobClient 型を使用します。 詳細については、「コンカレンシーとメモリ使用量」を参照してください。

Storage SDK タイプの 1 つにバインドしようとしてエラー メッセージが表示された場合は、適切な Storage SDK バージョンへの参照があることを確認してください。

StorageAccountAttribute を使用して、使用するストレージ アカウントを指定することもできます。 これは、ライブラリ内の他の関数とは異なるストレージ アカウントを使用する必要がある場合に実行できます。 コンストラクターは、ストレージ接続文字列を含むアプリ設定の名前を受け取ります。 属性は、パラメーター、メソッド、またはクラス レベルで適用できます。 次の例では、クラス レベルとメソッド レベルを示します。

[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
    [FunctionName("BlobTrigger")]
    [StorageAccount("FunctionLevelStorageAppSetting")]
    public static void Run( //...
{
    ....
}

使用するストレージ アカウントは、次の順序で決定されます。

  • BlobTrigger 属性の Connection プロパティ。
  • BlobTrigger 属性と同じパラメーターに適用された StorageAccount 属性。
  • 関数に適用される StorageAccount 属性。
  • クラスに適用される StorageAccount 属性。
  • AzureWebJobsStorage アプリケーション設定で定義されている、関数アプリの既定のストレージ アカウント。

@BlobTrigger 属性を使用すると、関数をトリガーした BLOB にアクセスできます。 詳細については、「トリガー - 例」を参照してください。

<NAME>context.bindings.<NAME> で定義されている値と一致する context.bindings.<NAME> を使用して BLOB データにアクセスします。

function.json ファイルのバインドの name パラメーターで指定されている名前と一致するパラメーターを使用して、BLOB データにアクセスします。

InputStream に型指定したパラメーターを使用して BLOB データにアクセスします。 詳細については、「トリガー - 例」を参照してください。

接続

connection プロパティは、アプリを Azure BLOB に接続する方法を指定する環境構成への参照です。 次が指定される場合があります。

  • 接続文字列を含むアプリケーション設定の名前
  • まとめて ID ベースの接続を定義する、複数のアプリケーション設定の共有プレフィックスの名前。

構成された値が、1 つの設定に完全一致し、プレフィックスがその他の設定とも一致する場合は、完全一致が使用されます。

接続文字列

接続文字列を取得するには、「ストレージ アカウント アクセス キーを管理する」の手順に従います。 接続文字列は、BLOB ストレージ アカウントではなく汎用ストレージ アカウントに対するものである必要があります。

この接続文字列は、バインディング構成の connection プロパティで指定した値と同じ名前のアプリケーション設定に格納する必要があります。

アプリ設定の名前が "AzureWebJobs" で始まる場合は、ここで名前の残りの部分のみを指定できます。 たとえば、connection を "MyStorage" に設定した場合、Functions ランタイムは "AzureWebJobsMyStorage" という名前のアプリ設定を探します。connection を空のままにした場合、Functions ランタイムは、アプリ設定内の AzureWebJobsStorage という名前の既定のストレージ接続文字列を使用します。

ID ベースの接続

バージョン 5.x 以上の拡張機能を使用する場合は、シークレットを含む接続文字列の代わりに、アプリで Azure Active Directory ID を使用することができます。 これを行うには、トリガーおよびバインド構成の connection プロパティにマップされる共通のプレフィックスに設定を定義します。

connection を "AzureWebJobsStorage" に設定する場合は、「connection」を参照してください。 その他のすべての接続では、拡張機能に次のプロパティが必要です。

プロパティ 環境変数テンプレート 説明 値の例
Blob Service の URI <CONNECTION_NAME_PREFIX>__serviceUri1 HTTPS スキームを使用して接続している BLOB サービスのデータ プレーン URI。 https://<storage_account_name>.blob.core.windows.net

1 をエイリアスとして使用できます。 接続構成が BLOB トリガーによって使用される場合、blobServiceUri には queueServiceUri も指定する必要があります。 以下を参照してください。

serviceUri 形式は、全体の接続構成が BLOB、キュー、テーブル間で使用される場合は、使用できません。 URI 自体は BLOB サービスのみを指定できます。 別の方法として、サービスごとに専用の URI を指定して、1 つの接続を使用できるようにすることができます。 両方のバージョンが指定された場合、マルチサービス形式が使用されます。 複数のサービス用の接続を構成するには、<CONNECTION_NAME_PREFIX>__serviceUri の代わりに次を設定します。

プロパティ 環境変数テンプレート 説明 値の例
Blob Service の URI <CONNECTION_NAME_PREFIX>__blobServiceUri HTTPS スキームを使用して接続している BLOB サービスのデータ プレーン URI。 https://<storage_account_name>.blob.core.windows.net
Queue Service URI (BLOB トリガーに必要2) <CONNECTION_NAME_PREFIX>__queueServiceUri HTTPS スキームを使用したキュー サービスのデータ プレーン URI。 この値は、BLOB トリガーにのみ必要です。 https://<storage_account_name>.queue.core.windows.net

2 BLOB トリガーは、複数回にわたる再試行の失敗を、有害な BLOB をキューに書き込むことで処理します。 serviceUri 形式では、AzureWebJobsStorage 接続が使用されます。 ただし、blobServiceUri を指定する場合は、queueServiceUri でキュー サービス URI も指定する必要があります。 BLOB サービスと同じストレージ アカウントからサービスを使用することをお勧めします。 また、トリガーでは、ストレージ キュー データ共同作成者のようなロールを割り当てることによって、構成されたキュー サービスのメッセージを読み書きできるようにする必要があります。

接続をカスタマイズするには、プロパティを追加設定します。 「ID ベース接続に共通のプロパティ」を参照してください。

Azure Functions サービスでホストされている場合、ID ベースの接続では、マネージド ID が使用されます。 ユーザー割り当て ID を credential および clientID プロパティで指定できますが、システム割り当て ID が既定で使用されます。 リソース ID を使用したユーザー割り当て ID の構成はサポートされていないことに注意してください。 ローカル開発などの他のコンテキストで実行する場合は、代わりに開発者 ID が使用されますが、カスタマイズすることもできます。 ID ベースの接続によるローカル開発に関するページをご覧ください。

ID にアクセス許可を付与する

使用されている ID が何であれ、目的のアクションを実行するためのアクセス許可が必要です。 ほとんどの Azure では、これはそれらのアクセス許可を提供する組み込みロールまたはカスタム ロールを使って、Azure RBAC でロールを割り当てる必要があることを意味します。

重要

すべてのコンテキストに必要ではない一部のアクセス許可がターゲット サービスによって公開される場合があります。 可能であれば、最小限の特権の原則に従い、必要な特権だけを ID に付与します。 たとえば、アプリがデータ ソースからの読み取りのみを行う必要がある場合は、読み取りアクセス許可のみを持つロールを使用します。 サービスへの書き込みも可能なロールを割り当てることは、読み取り操作に対するアクセス許可が過剰になるため、不適切です。 同様に、ロールの割り当てが、読み取る必要のあるリソースだけに限定されていることを確認する必要があります。

実行時に BLOB コンテナーへのアクセスを提供するロールの割り当てを作成する必要があります。 所有者のような管理ロールでは十分ではありません。 次の表は、通常の操作で Blob Storage の拡張機能を使用するときに推奨される組み込みロールを示しています。 アプリケーションでは、記述したコードに基づいて追加のアクセス許可が必要になる場合があります。

[バインドの種類] 組み込みロールの例
トリガー ストレージ BLOB データ所有者およびストレージ キュー データ共同作成者1

AzureWebJobsStorage 接続にも追加のアクセス許可を付与する必要があります。2
入力バインド ストレージ BLOB データ閲覧者
出力バインド ストレージ BLOB データ所有者

1 BLOB トリガーは、複数回にわたる再試行の失敗を、接続によって指定されたストレージ アカウント上のキューに有害な BLOB を書き込むことにより処理します。

2 AzureWebJobsStorage 接続は、トリガーを有効にする BLOB やキューのために内部的に使用されます。 ID ベースの接続を使用するように構成されている場合は、既定の要件を超える追加のアクセス許可が必要になります。 これらは、ストレージ BLOB データ所有者ストレージ キュー データ共同作成者、およびストレージ アカウント共同作成者の各ロールによって満たされます。 詳細については、「ID を使用してホスト ストレージに接続する」を参照してください。

BLOB 名のパターン

pathpath プロパティまたは BlobTrigger 属性コンストラクターで BLOB 名のパターンを指定することができます。 名前のパターンは、フィルターまたはバインド式にすることができます。 以下のセクションで、例を示します。

ヒント

名前パターンでは、コンテナー名に競合回避モジュールを含めることはできません。

ファイル名と拡張子の取得

次の例は、BLOB ファイル名と拡張子を別々にバインドする方法を示します。

"path": "input/{blobname}.{blobextension}",

BLOB の名前が original-Blob1.txt の場合、関数コード内の 変数と blobextension 変数の値は blobextensiontxt です。

BLOB 名のフィルター

次の例は、文字列 "original-" で始まる input コンテナーの BLOB でのみトリガーします。

"path": "input/original-{name}",

BLOB 名が original-Blob1.txt の場合、関数コード内の 変数の値は Blob1.txt です。

ファイルの種類のフィルター

次の例は、 .png ファイルでのみトリガーします。

"path": "samples/{name}.png",

ファイル名の中かっこのフィルター

ファイル名の中かっこを検索するには、2 つの中かっこを使用して中かっこをエスケープします。 次の例は、名前に中かっこを含む BLOB をフィルター処理します。

"path": "images/{{20140101}}-{name}",

BLOB の名前が -soundfile.mp3 の場合、関数コード内の name 変数の値は name です。

ポーリングと待ち時間

ポーリングは、ログの検査と定期的なコンテナー スキャンの実行のハイブリッドとして機能します。 BLOB は、間隔の間で使用される継続トークンを使用して、一度に 10,000 のグループ単位でスキャンされます。 関数アプリを従量課金プランで使用しているときに、関数アプリがアイドル状態になっている場合、新しい BLOB の処理が最大で 10 分間遅延する可能性があります。

警告

ストレージ ログは "ベスト エフォート" ベースで作成されます。 すべてのイベントがキャプチャされる保証はありません。 ある条件下では、ログが欠落する可能性があります。

より高速で信頼性の高い BLOB 処理が必要な場合は、代わりに次のいずれかの戦略を実装する必要があります。

BLOB の配信確認メッセージ

Azure Functions ランタイムでは、BLOB トリガー関数は、同一の新規または更新された BLOB について 2 回以上呼び出されることはありません。 特定の BLOB バージョンが処理されているかどうかを判断するために、BLOB の配信確認メッセージが維持されます。

Azure Functions では、BLOB の配信確認メッセージは (アプリ設定 で指定した) 関数アプリの Azure ストレージ アカウント内の azure-webjobs-hosts というコンテナーに格納されます。 BLOB の配信確認メッセージには次の情報が含まれています。

  • トリガーされた関数 (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>。例: MyFunctionApp.Functions.CopyBlob)
  • コンテナーの名前
  • BLOB の種類 (BlockBlob または PageBlob)。
  • BLOB の名前
  • ETag (BLOB のバージョン識別子。例: 0x8D1DC6E70A277EF)

BLOB を強制的に再処理する場合は、azure-webjobs-hosts コンテナーからその BLOB の配信確認メッセージを手動で削除します。 再処理がすぐに行われない場合がありますが、後で必ず行われます。 すぐに再処理するには、azure-webjobs-hosts/blobscaninfo 内の scaninfo BLOB を更新できます。 LatestScan プロパティの後に最後に変更されたタイムスタンプを持つすべての BLOB が再びスキャンされます。

有害な BLOB

指定された BLOB に対する BLOB トリガー関数が失敗すると、Azure Functions は既定で最大 5 回その関数を再試行します。

試行が 5 回とも失敗した場合、Azure Functions は webjobs-blobtrigger-poison という名前のストレージ キューにメッセージを追加します。 再試行回数の最大値の設定は変更可能です。 同じ MaxDequeueCount 設定は、有害な BLOB の処理と有害キュー メッセージの処理に使用されます。 有害な BLOB のキュー メッセージは次のプロパティを持つ JSON オブジェクトです。

  • FunctionId (<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME> の形式)
  • BlobType (BlockBlob または PageBlob)
  • コンテナー名
  • BlobName
  • ETag (BLOB のバージョン識別子。例: 0x8D1DC6E70A277EF)

コンカレンシーとメモリ使用量

BLOB トリガーはキューを内部的に使用するため、関数の同時呼び出しの最大数が host.json のキュー構成設定によって制御されます。 既定の設定では、コンカレンシーの数は 24 までに制限されています。 この制限は、BLOB トリガーを使用する各関数に個別に適用されます。

Note

バージョン 5.0.0 以降の Storage 拡張機能を使用しているアプリの場合、host.js のキューの構成はキュー トリガーにのみ適用されます。 BLOB トリガーのコンカレンシーは、代わりに host.js の BLOB 構成によって制御されます。

従量課金プランでは、1 つの仮想マシン (VM) の関数アプリのメモリが 1.5 GB に制限されています。 メモリは、同時実行される各関数インスタンスと、Functions ランタイム自体によって使用されます。 BLOB によってトリガーされる関数が BLOB 全体をメモリに読み込む場合、その関数が BLOB 用にのみ使用するメモリの最大量は 24 * 最大 BLOB サイズです。 たとえば、BLOB によってトリガーされる 3 つの関数を含む関数アプリの場合、既定の設定では、VM あたりの最大コンカレンシー数 3*24 = 72 関数呼び出しとなります。

JavaScript と Java の関数では BLOB 全体がメモリに読み込まれますが、C# 関数では string、または Byte[] にバインドした場合にこれが行われます。

host.json プロパティ

host.json ファイルには、BLOB トリガーの動作を制御する設定が含まれています。 使用可能な設定の詳細については、「host.json 設定」を参照してください。

次のステップ