Azure Functions における Azure Blob Storage のバインドAzure Blob storage bindings for Azure Functions

この記事では、Azure Functions で Azure Blob Storage のバインディングを操作する方法について説明します。This article explains how to work with Azure Blob storage bindings in Azure Functions. Azure Functions は、BLOB のトリガー、入力、出力のバインディングをサポートしています。Azure Functions supports trigger, input, and output bindings for blobs. この記事には、以下の各バインディングのセクションがあります。The article includes a section for each binding:

これは、Azure Functions の開発者向けリファレンス情報です。This is reference information for Azure Functions developers. Azure Functions を初めて使用する場合は、先に次のリソースを参照してください。If you're new to Azure Functions, start with the following resources:

注意

BLOB ストレージ アカウントや高スケールに対して、あるいはコールド スタート遅延を回避したい場合は、Blob ストレージ トリガーではなく、Event Grid トリガーを使用してください。Use the Event Grid trigger instead of the Blob storage trigger for Blob storage accounts, for high scale, or to avoid cold-start delays. 詳しくは、「トリガー」セクションをご覧ください。For more information, see the Trigger section.

パッケージ - Functions 1.xPackages - Functions 1.x

Blob バインディングは Microsoft.Azure.WebJobs NuGet パッケージのバージョン 2.x で提供されます。The Blob storage bindings are provided in the Microsoft.Azure.WebJobs NuGet package, version 2.x. パッケージのソース コードは、azure-webjobs-sdk GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk GitHub repository.

このバインドのサポートは、すべての開発環境で自動的に提供されます。Support for this binding is automatically provided in all development environments. 手動でパッケージをインストールしたり、拡張機能を登録したりする必要はありません。You don't have to manually install the package or register the extension.

Functions 1.x での Azure Storage SDK のバージョンAzure Storage SDK version in Functions 1.x

Functions 1.x では、Storage トリガーとバインドは、Azure Storage SDK のバージョン 7.2.1 (WindowsAzure.Storage NuGet パッケージ) を使用します。In Functions 1.x, the Storage triggers and bindings use version 7.2.1 of the Azure Storage SDK (WindowsAzure.Storage NuGet package). 別のバージョンの Storage SDK を参照し、関数シグネチャで Storage SDK の型にバインドする場合は、Functions ランタイムがその型にバインドできないことを報告することがあります。If you reference a different version of the Storage SDK, and you bind to a Storage SDK type in your function signature, the Functions runtime may report that it can't bind to that type. 解決するには、プロジェクトで WindowsAzure.Storage 7.2.1 を参照していることを確認します。The solution is to make sure your project references WindowsAzure.Storage 7.2.1.

パッケージ - Functions 2.xPackages - Functions 2.x

BLOB ストレージ バインディングは Microsoft.Azure.WebJobs.Extensions.Storage NuGet パッケージ、バージョン 3.x で提供されます。The Blob storage bindings are provided in the Microsoft.Azure.WebJobs.Extensions.Storage NuGet package, version 3.x. パッケージのソース コードは、azure-webjobs-sdk GitHub リポジトリにあります。Source code for the package is in the azure-webjobs-sdk GitHub repository.

次の表に、各開発環境でこのバインディングのサポートを追加する方法を示します。The following table tells how to add support for this binding in each development environment.

開発環境Development environment サポートを追加するバージョン:To add support in
Functions 2.xFunctions 2.x
ローカル開発 - C# クラス ライブラリLocal development - C# class library パッケージをインストールするInstall the package
ローカル開発で - C# スクリプト、JavaScript、F#Local development - C# script, JavaScript, F# 拡張機能を登録するRegister the extension
Portal 開発Portal development 出力バインドの追加時にインストールするInstall when adding output binding

関数アプリ プロジェクトを再発行せずにポータルで既存のバインディング拡張機能を更新する方法については、拡張機能の更新に関するページを参照してください。To learn how to update existing binding extensions in the portal without having to republish your function app project, see Update your extensions.

トリガーTrigger

Blob ストレージ トリガーは、新しいまたは更新された BLOB が検出されたときに関数を開始します。The Blob storage trigger starts a function when a new or updated blob is detected. BLOB のコンテンツは、関数への入力として提供されます。The blob contents are provided as input to the function.

Event Grid トリガーには、BLOB イベントのサポートが組み込まれており、新しいまたは更新された BLOB が検出されたときに関数を開始するために使用できます。The Event Grid trigger has built-in support for blob events and can also be used to start a function when a new or updated blob is detected. 例については、Event Grid を使用したイメージのサイズ変更に関する記事を参照してください。For an example, see the Image resize with Event Grid tutorial.

次のシナリオの場合は、Blob ストレージ トリガーではなく Event Grid を使用してください。Use Event Grid instead of the Blob storage trigger for the following scenarios:

  • BLOB ストレージ アカウントBlob storage accounts
  • 高スケールHigh scale
  • コールド スタート遅延の最小化Minimizing cold-start delay

BLOB ストレージ アカウントBlob storage accounts

BLOB の入力と出力のバインドでは、BLOB ストレージ アカウントがサポートされていますが、BLOB トリガーではサポートされていません。Blob storage accounts are supported for blob input and output bindings but not for blob triggers. Blob Storage のトリガーには、汎用のストレージ アカウントが必要です。Blob storage triggers require a general-purpose storage account.

高スケールHigh scale

高スケールとは、おおまかに言って、100,000 以上の BLOB を含むコンテナー、または 1 秒あたり 100 を超える BLOB の更新が発生するストレージ アカウントと定義できます。High scale can be loosely defined as containers that have more than 100,000 blobs in them or storage accounts that have more than 100 blob updates per second.

コールド スタート遅延Cold-start delay

関数アプリを従量課金プランで使用しているときに、関数アプリがアイドル状態になっている場合、新しい BLOB の処理が最大で 10 分間遅延する可能性があります。If your function app is on the Consumption plan, there can be up to a 10-minute delay in processing new blobs if a function app has gone idle. このコールド スタート遅延を避けるには、Always On が有効な App Service プランに切り替えるか、別のトリガーの種類を使用できます。To avoid this cold-start delay, you can switch to an App Service plan with Always On enabled, or use a different trigger type.

Queue ストレージ トリガーQueue storage trigger

Event Grid 以外の BLOB を処理するための別の方法として、Queue ストレージ トリガーがありますが、それには BLOB イベントのサポートが組み込まれていません。Besides Event Grid, another alternative for processing blobs is the Queue storage trigger, but it has no built-in support for blob events. BLOB を作成または更新するとき、メッセージ キューを作成する必要があります。You would have to create queue messages when creating or updating blobs. それが行われていることを前提とする例については、この記事で後述する BLOB 入力バインドの例をご覧ください。For an example that assumes you've done that, see the blob input binding example later in this article.

トリガー - 例Trigger - example

言語固有の例をご覧ください。See the language-specific example:

トリガー - C# の例Trigger - C# example

次の例は、samples-workitems コンテナーで BLOB が追加または更新されたときにログを書き込む C# 関数を示しています。The following example shows a C# function that writes a log when a blob is added or updated in the samples-workitems container.

[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 のファイル名にアクセスするために関数コードで使用できる、バインディング式を作成します。The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. 詳しくは、後述の「BLOB 名のパターン」をご覧ください。For more information, see Blob name patterns later in this article.

BlobTrigger 属性について詳しくは、トリガー - 属性 に関する記事をご覧ください。For more information about the BlobTrigger attribute, see Trigger - attributes.

トリガー - C# スクリプトの例Trigger - C# script example

次の例は、function.json ファイルの BLOB トリガー バインディングと、バインディングを使用する C# スクリプト (.csx) コードを示しています。The following example shows a blob trigger binding in a function.json file and C# script (.csx) code that uses the binding. 関数は、samples-workitems コンテナーで BLOB が追加または更新されたときにログを書き込みます。The function writes a log when a blob is added or updated in the samples-workitems container.

function.json ファイルのバインディング データを次に示します。Here's the binding data in the function.json file:

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

BLOB トリガー パス samples-workitems/{name} の文字列 {name} は、トリガーする BLOB のファイル名にアクセスするために関数コードで使用できる、バインディング式を作成します。The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. 詳しくは、後述の「BLOB 名のパターン」をご覧ください。For more information, see Blob name patterns later in this article.

function.json ファイル プロパティについて詳しくは、これらのプロパティについて説明している「構成」セクションをご覧ください。For more information about function.json file properties, see the Configuration section explains these properties.

Stream にバインドする C# スクリプト コードを次に示します。Here's C# script code that binds to a Stream:

public static void Run(Stream myBlob, ILogger log)
{
   log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

CloudBlockBlob にバインドする C# スクリプト コードを次に示します。Here's C# script code that binds to a CloudBlockBlob:

#r "Microsoft.WindowsAzure.Storage"

using Microsoft.WindowsAzure.Storage.Blob;

public static void Run(CloudBlockBlob myBlob, string name, ILogger log)
{
    log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name}\nURI:{myBlob.StorageUri}");
}

トリガー - JavaScript の例Trigger - JavaScript example

次の例は、function.json ファイルの BLOB トリガー バインドと、バインドを使用する JavaScript コードを示しています。The following example shows a blob trigger binding in a function.json file and JavaScript code that uses the binding. 関数は、samples-workitems コンテナーで BLOB が追加または更新されたときにログを書き込みます。The function writes a log when a blob is added or updated in the samples-workitems container.

function.json ファイルを次に示します。Here's the function.json file:

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

BLOB トリガー パス samples-workitems/{name} の文字列 {name} は、トリガーする BLOB のファイル名にアクセスするために関数コードで使用できる、バインディング式を作成します。The string {name} in the blob trigger path samples-workitems/{name} creates a binding expression that you can use in function code to access the file name of the triggering blob. 詳しくは、後述の「BLOB 名のパターン」をご覧ください。For more information, see Blob name patterns later in this article.

function.json ファイル プロパティについて詳しくは、これらのプロパティについて説明している「構成」セクションをご覧ください。For more information about function.json file properties, see the Configuration section explains these properties.

JavaScript コードを次に示します。Here's the JavaScript code:

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

トリガー - Java の例Trigger - Java example

次の例は、function.json ファイルの BLOB トリガー バインドと、バインドを使用する Java コードを示しています。The following example shows a blob trigger binding in a function.json file and Java code that uses the binding. 関数は、myblob コンテナーで BLOB が追加または更新されたときにログを書き込みます。The function writes a log when a blob is added or updated in the myblob container.

function.json ファイルを次に示します。Here's the function.json file:

{
    "disabled": false,
    "bindings": [
        {
            "name": "file",
            "type": "blobTrigger",
            "direction": "in",
            "path": "myblob/{name}",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

Java コードを次に示します。Here's the Java code:

@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");
}

トリガー - 属性Trigger - attributes

C# クラス ライブラリで、次の属性を使用して BLOB トリガーを構成します。In C# class libraries, use the following attributes to configure a blob trigger:

  • BlobTriggerAttributeBlobTriggerAttribute

    属性のコンストラクターは、監視するコンテナーを示すパス文字列と、必要に応じて BLOB 名のパターンを受け取ります。The attribute's constructor takes a path string that indicates the container to watch and optionally a blob name pattern. 次に例を示します。Here's an example:

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

    次の例で示すように、Connection プロパティを設定して、使用するストレージ アカウントを指定できます。You can set the Connection property to specify the storage account to use, as shown in the following example:

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

    完全な例については、「トリガー - C# の例」を参照してください。For a complete example, see Trigger - C# example.

  • StorageAccountAttributeStorageAccountAttribute

    使用するストレージ アカウントを指定する別の方法を提供します。Provides another way to specify the storage account to use. コンストラクターは、ストレージ接続文字列を含むアプリ設定の名前を受け取ります。The constructor takes the name of an app setting that contains a storage connection string. 属性は、パラメーター、メソッド、またはクラス レベルで適用できます。The attribute can be applied at the parameter, method, or class level. 次の例では、クラス レベルとメソッド レベルを示します。The following example shows class level and method level:

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

使用するストレージ アカウントは、次の順序で決定されます。The storage account to use is determined in the following order:

  • BlobTrigger 属性の Connection プロパティ。The BlobTrigger attribute's Connection property.
  • BlobTrigger 属性と同じパラメーターに適用された StorageAccount 属性。The StorageAccount attribute applied to the same parameter as the BlobTrigger attribute.
  • 関数に適用される StorageAccount 属性。The StorageAccount attribute applied to the function.
  • クラスに適用される StorageAccount 属性。The StorageAccount attribute applied to the class.
  • 関数アプリの既定のストレージ アカウント ("AzureWebJobsStorage" アプリ設定)。The default storage account for the function app ("AzureWebJobsStorage" app setting).

トリガー - 構成Trigger - configuration

次の表は、function.json ファイルと BlobTrigger 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the BlobTrigger attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a blobTrigger に設定する必要があります。Must be set to blobTrigger. このプロパティは、Azure Portal でトリガーを作成するときに自動で設定されます。This property is set automatically when you create the trigger in the Azure portal.
directiondirection 該当なしn/a in に設定する必要があります。Must be set to in. このプロパティは、Azure Portal でトリガーを作成するときに自動で設定されます。This property is set automatically when you create the trigger in the Azure portal. 例外は、使用方法のセクションに記載しています。Exceptions are noted in the usage section.
namename 該当なしn/a 関数コード内の BLOB を表す変数の名前。The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath 監視するコンテナー。The container to monitor. BLOB 名パターンの場合があります。May be a blob name pattern.
connectionconnection ConnectionConnection このバインドに使用するストレージ接続文字列を含むアプリ設定の名前です。The name of an app setting that contains the Storage connection string to use for this binding. アプリ設定の名前が "AzureWebJobs" で始まる場合は、ここで名前の残りの部分のみを指定できます。If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. たとえば、connection を "MyStorage" に設定した場合、Functions ランタイムは "AzureWebJobsMyStorage" という名前のアプリ設定を探します。For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." connection を空のままにした場合、Functions ランタイムは、アプリ設定内の AzureWebJobsStorage という名前の既定のストレージ接続文字列を使用します。If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

接続文字列は、BLOB ストレージ アカウントではなく汎用ストレージ アカウントに対するものである必要があります。The connection string must be for a general-purpose storage account, not a Blob storage account.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

トリガー - 使用方法Trigger - usage

C# と C# スクリプトでは、トリガーする BLOB に次のパラメーター型を使用できます。In C# and C# script, you can use the following parameter types for the triggering blob:

  • Stream
  • TextReader
  • string
  • Byte[]
  • JSON としてシリアル化可能な POCOA POCO serializable as JSON
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 function.json には "inout" バインド direction、C# クラス ライブラリには FileAccess.ReadWrite が必要です。1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Storage SDK タイプの 1 つにバインドしようとしてエラー メッセージが表示された場合は、適切な Storage SDK バージョンへの参照があることをご確認ください。If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

stringByte[]、または POCO へのバインドが推奨されるのは、BLOB のサイズが小さい場合のみです (BLOB 全体のコンテンツがメモリに読み込まれるため)。Binding to string, Byte[], or POCO is only recommended if the blob size is small, as the entire blob contents are loaded into memory. 通常、Stream 型または CloudBlockBlob 型の使用が推奨されます。Generally, it is preferable to use a Stream or CloudBlockBlob type. 詳しくは、この記事で後述する「コンカレンシーとメモリ使用量」セクションをご覧ください。For more information, see Concurrency and memory usage later in this article.

JavaScript では、context.bindings.<name from function.json> を使用して入力 BLOB データにアクセスします。In JavaScript, access the input blob data using context.bindings.<name from function.json>.

トリガー - BLOB 名のパターンTrigger - blob name patterns

function.jsonpath プロパティまたは BlobTrigger 属性コンストラクターで BLOB 名のパターンを指定することができます。You can specify a blob name pattern in the path property in function.json or in the BlobTrigger attribute constructor. 名前のパターンは、フィルターまたはバインド式にすることができます。The name pattern can be a filter or binding expression. 以下のセクションで、例を示します。The following sections provide examples.

ファイル名と拡張子の取得Get file name and extension

次の例は、BLOB ファイル名と拡張子を別々にバインドする方法を示します。The following example shows how to bind to the blob file name and extension separately:

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

BLOB の名前が original-Blob1.txt の場合、関数コード内の blobname 変数と blobextension 変数の値は original-Blob1txt です。If the blob is named original-Blob1.txt, the values of the blobname and blobextension variables in function code are original-Blob1 and txt.

BLOB 名のフィルターFilter on blob name

次の例は、文字列 "original-" で始まる input コンテナーの BLOB でのみトリガーします。The following example triggers only on blobs in the input container that start with the string "original-":

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

BLOB 名が original-Blob1.txt の場合、関数コード内の name 変数の値は Blob1 です。If the blob name is original-Blob1.txt, the value of the name variable in function code is Blob1.

ファイルの種類のフィルターFilter on file type

次の例は、.png ファイルでのみトリガーします。The following example triggers only on .png files:

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

ファイル名の中かっこのフィルターFilter on curly braces in file names

ファイル名の中かっこを検索するには、2 つの中かっこを使用して中かっこをエスケープします。To look for curly braces in file names, escape the braces by using two braces. 次の例は、名前に中かっこを含む BLOB をフィルター処理します。The following example filters for blobs that have curly braces in the name:

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

BLOB の名前が {20140101}-soundfile.mp3 の場合、関数コード内の name 変数の値は soundfile.mp3 です。If the blob is named {20140101}-soundfile.mp3, the name variable value in the function code is soundfile.mp3.

トリガー - メタデータTrigger - metadata

BLOB トリガーは、いくつかのメタデータ プロパティを提供します。The blob trigger provides several metadata properties. これらのプロパティは、他のバインドのバインド式の一部として、またはコードのパラメーターとして使用できます。These properties can be used as part of binding expressions in other bindings or as parameters in your code. これらの値は、CloudBlob 型と同じセマンティクスを持ちます。These values have the same semantics as the CloudBlob type.

プロパティProperty typeType 説明Description
BlobTrigger string トリガーする BLOB のパス。The path to the triggering blob.
Uri System.Uri プライマリ ロケーションの BLOB URI。The blob's URI for the primary location.
Properties BlobPropertiesBlobProperties Blob のシステム プロパティ。The blob's system properties.
Metadata IDictionary<string,string> BLOB のユーザー定義メタデータ。The user-defined metadata for the blob.

たとえば、次の C# スクリプトと JavaScript の例では、トリガーする BLOBへのパスがログに記録されます (コンテナーを含む)。For example, the following C# script and JavaScript examples log the path to the triggering blob, including the container:

public static void Run(string myBlob, string blobTrigger, ILogger log)
{
    log.LogInformation($"Full blob path: {blobTrigger}");
} 
module.exports = function (context, myBlob) {
    context.log("Full blob path:", context.bindingData.blobTrigger);
    context.done();
};

トリガー - BLOB の配信確認メッセージTrigger - blob receipts

Azure Functions ランタイムでは、BLOB トリガー関数は、同一の新規または更新された BLOB について 2 回以上呼び出されることはありません。The Azure Functions runtime ensures that no blob trigger function gets called more than once for the same new or updated blob. 特定の BLOB バージョンが処理されているかどうかを判断するために、BLOB の配信確認メッセージが維持されます。To determine if a given blob version has been processed, it maintains blob receipts.

Azure Functions では、BLOB の配信確認メッセージは (アプリ設定 AzureWebJobsStorage で指定した) 関数アプリの Azure ストレージ アカウント内の azure-webjobs-hosts というコンテナーに格納されます。Azure Functions stores blob receipts in a container named azure-webjobs-hosts in the Azure storage account for your function app (defined by the app setting AzureWebJobsStorage). BLOB の配信確認メッセージには次の情報が含まれています。A blob receipt has the following information:

  • トリガーされた関数 ("<関数アプリ名>.Functions.<関数名>"。たとえば、"MyFunctionApp.Functions.CopyBlob")The triggered function ("<function app name>.Functions.<function name>", for example: "MyFunctionApp.Functions.CopyBlob")
  • コンテナーの名前The container name
  • BLOB の種類 ("BlockBlob" か "PageBlob")The blob type ("BlockBlob" or "PageBlob")
  • BLOB の名前The blob name
  • ETag (BLOB のバージョン識別子。たとえば、"0x8D1DC6E70A277EF")The ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

BLOB を強制的に再処理する場合は、azure-webjobs-hosts コンテナーからその BLOB の配信確認メッセージを手動で削除します。To force reprocessing of a blob, delete the blob receipt for that blob from the azure-webjobs-hosts container manually.

トリガー - 有害 BLOBTrigger - poison blobs

指定された BLOB に対する BLOB トリガー関数が失敗すると、Azure Functions は既定で最大 5 回その関数を再試行します。When a blob trigger function fails for a given blob, Azure Functions retries that function a total of 5 times by default.

試行が 5 回とも失敗した場合、Azure Functions は webjobs-blobtrigger-poison という名前のストレージ キューにメッセージを追加します。If all 5 tries fail, Azure Functions adds a message to a Storage queue named webjobs-blobtrigger-poison. 有害な BLOB のキュー メッセージは次のプロパティを持つ JSON オブジェクトです。The queue message for poison blobs is a JSON object that contains the following properties:

  • FunctionId (形式: <Function App 名>.Functions.<関数名>)FunctionId (in the format <function app name>.Functions.<function name>)
  • BLOB の種類 ("BlockBlob" か "PageBlob")BlobType ("BlockBlob" or "PageBlob")
  • コンテナー名ContainerName
  • BlobNameBlobName
  • ETag (BLOB のバージョン識別子。たとえば、"0x8D1DC6E70A277EF")ETag (a blob version identifier, for example: "0x8D1DC6E70A277EF")

トリガー - コンカレンシーとメモリ使用量Trigger - concurrency and memory usage

BLOB トリガーはキューを内部的に使用するため、関数の同時呼び出しの最大数が host.json のキュー構成設定によって制御されます。The blob trigger uses a queue internally, so the maximum number of concurrent function invocations is controlled by the queues configuration in host.json. 既定の設定では、コンカレンシーの数は 24 までに制限されています。The default settings limit concurrency to 24 invocations. この制限は、BLOB トリガーを使用する各関数に個別に適用されます。This limit applies separately to each function that uses a blob trigger.

従量課金プランでは、1 つの仮想マシン (VM) の関数アプリのメモリが 1.5 GB に制限されています。The consumption plan limits a function app on one virtual machine (VM) to 1.5 GB of memory. メモリは、同時実行される各関数インスタンスと、Functions ランタイム自体によって使用されます。Memory is used by each concurrently executing function instance and by the Functions runtime itself. BLOB によってトリガーされる関数が BLOB 全体をメモリに読み込む場合、その関数が BLOB 用にのみ使用するメモリの最大量は 24 * 最大 BLOB サイズです。If a blob-triggered function loads the entire blob into memory, the maximum memory used by that function just for blobs is 24 * maximum blob size. たとえば、BLOB によってトリガーされる 3 つの関数を含む関数アプリの場合、既定の設定では、VM あたりの最大コンカレンシー数 3*24 = 72 関数呼び出しとなります。For example, a function app with three blob-triggered functions and the default settings would have a maximum per-VM concurrency of 3*24 = 72 function invocations.

JavaScript 関数は BLOB 全体をメモリに読み込みますが、C# 関数は stringByte[]、または POCO にバインドした場合に BLOB 全体をメモリに読み込みます。JavaScript functions load the entire blob into memory, and C# functions do that if you bind to string, Byte[], or POCO.

トリガー - ポーリングTrigger - polling

監視対象の BLOB コンテナーに 10,000 を超える BLOB が含まれる場合は、Functions ランタイムによりログ ファイルがスキャンされ、新規または変更された BLOB が監視されます。If the blob container being monitored contains more than 10,000 blobs, the Functions runtime scans log files to watch for new or changed blobs. このプロセスによって遅延が発生することがあります。This process can result in delays. 関数は、BLOB が作成されてから数分以上経過しないとトリガーされない可能性があります。A function might not get triggered until several minutes or longer after the blob is created. また、 ストレージ ログは "ベスト エフォート" ベースで作成されます。In addition, storage logs are created on a "best effort" basis. すべてのイベントがキャプチャされる保証はありません。There's no guarantee that all events are captured. ある条件下では、ログが欠落する可能性があります。Under some conditions, logs may be missed. より高速で信頼性の高い BLOB 処理が必要な場合は、BLOB 作成時にキュー メッセージを作成することを検討してください。If you require faster or more reliable blob processing, consider creating a queue message when you create the blob. 次に、BLOB トリガーの代わりにキュー トリガーを使用して BLOB を処理します。Then use a queue trigger instead of a blob trigger to process the blob. 別のオプションは、Event Grid の使用です。「Event Grid を使用して、アップロードされたイメージのサイズ変更を自動化する」のチュートリアルをご覧ください。Another option is to use Event Grid; see the tutorial Automate resizing uploaded images using Event Grid.

入力Input

Blob Storage 入力バインディングを使用して BLOB を読み取ります。Use a Blob storage input binding to read blobs.

入力 - 例Input - example

言語固有の例をご覧ください。See the language-specific example:

入力 - C# の例Input - C# example

次の例は、キュー トリガーと入力 BLOB バインディングを使用する C# 関数です。The following example is a C# function that uses a queue trigger and an input blob binding. キュー メッセージには BLOB の名前が含まれ、関数は BLOB のサイズをログに記録します。The queue message contains the name of the blob, and the function logs the size of the blob.

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read)] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

入力 - C# スクリプトの例Input - C# script example

次の例は、function.json ファイルの BLOB 入出力バインディングと、バインディングを使用する C# スクリプト (.csx) コードを示しています。The following example shows blob input and output bindings in a function.json file and C# script (.csx) code that uses the bindings. 関数は、テキスト BLOB のコピーを作成します。The function makes a copy of a text blob. 関数は、コピーする BLOB の名前を含むキュー メッセージによってトリガーされます。The function is triggered by a queue message that contains the name of the blob to copy. 新しい BLOB の名前は {originalblobname}-Copy です。The new blob is named {originalblobname}-Copy.

function.json ファイルでは、queueTrigger メタデータ プロパティは path プロパティ内の BLOB 名の指定に使用されます。In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

これらのプロパティについては、「構成」セクションを参照してください。The configuration section explains these properties.

C# スクリプト コードを次に示します。Here's the C# script code:

public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

入力 - JavaScript の例Input - JavaScript example

次の例は、function.json ファイルの BLOB 入出力バインドと、そのバインドを使用する JavaScript コードを示しています。The following example shows blob input and output bindings in a function.json file and JavaScript code that uses the bindings. 関数は、BLOB のコピーを作成します。The function makes a copy of a blob. 関数は、コピーする BLOB の名前を含むキュー メッセージによってトリガーされます。The function is triggered by a queue message that contains the name of the blob to copy. 新しい BLOB の名前は {originalblobname}-Copy です。The new blob is named {originalblobname}-Copy.

function.json ファイルでは、queueTrigger メタデータ プロパティは path プロパティ内の BLOB 名の指定に使用されます。In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

これらのプロパティについては、「構成」セクションを参照してください。The configuration section explains these properties.

JavaScript コードを次に示します。Here's the JavaScript code:

module.exports = function(context) {
    context.log('Node.js Queue trigger function processed', context.bindings.myQueueItem);
    context.bindings.myOutputBlob = context.bindings.myInputBlob;
    context.done();
};

入力 - Java の例Input - Java example

次の例は、キュー トリガーと入力 BLOB バインドを使用する Java 関数です。The following example is a Java function that uses a queue trigger and an input blob binding. キュー メッセージには BLOB の名前が含まれ、関数は BLOB のサイズをログに記録します。The queue message contains the name of the blob, and the function logs the size of the blob.

@FunctionName("getBlobSize")
@StorageAccount("AzureWebJobsStorage")
public void blobSize(@QueueTrigger(name = "filename",  queueName = "myqueue-items") String filename,
                    @BlobInput(name = "file", dataType = "binary", path = "samples-workitems/{queueTrigger") byte[] content,
       final ExecutionContext context) {
      context.getLogger().info("The size of \"" + filename + "\" is: " + content.length + " bytes");
 }

Java 関数ランタイム ライブラリで、その値が BLOB に由来するパラメーター上で @BlobInput 注釈を使用します。In the Java functions runtime library, use the @BlobInput annotation on parameters whose value would come from a blob. この注釈は、Java のネイティブ型、POJO、または Optional<T> を使用した null 許容値で使用できます。This annotation can be used with native Java types, POJOs, or nullable values using Optional<T>.

入力 - 属性Input - attributes

C# クラス ライブラリでは、BlobAttributeを使用します。In C# class libraries, use the BlobAttribute.

次の例で示すように、属性のコンストラクターは、BLOB へのパスと、読み取りまたは書き込みを示す FileAccess パラメーターを受け取ります。The attribute's constructor takes the path to the blob and a FileAccess parameter indicating read or write, as shown in the following example:

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read)] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

次の例で示すように、Connection プロパティを設定して、使用するストレージ アカウントを指定できます。You can set the Connection property to specify the storage account to use, as shown in the following example:

[FunctionName("BlobInput")]
public static void Run(
    [QueueTrigger("myqueue-items")] string myQueueItem,
    [Blob("samples-workitems/{queueTrigger}", FileAccess.Read, Connection = "StorageConnectionAppSetting")] Stream myBlob,
    ILogger log)
{
    log.LogInformation($"BlobInput processed blob\n Name:{myQueueItem} \n Size: {myBlob.Length} bytes");
}

StorageAccount 属性を使用して、クラス、メソッド、またはパラメーターのレベルでストレージ アカウントを指定できます。You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. 詳細については、トリガー - 属性をご覧ください。For more information, see Trigger - attributes.

入力 - 構成Input - configuration

次の表は、function.json ファイルと Blob 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a blob に設定する必要があります。Must be set to blob.
directiondirection 該当なしn/a in に設定する必要があります。Must be set to in. 例外は、使用方法のセクションに記載しています。Exceptions are noted in the usage section.
namename 該当なしn/a 関数コード内の BLOB を表す変数の名前。The name of the variable that represents the blob in function code.
pathpath BlobPathBlobPath BLOB へのパス。The path to the blob.
connectionconnection ConnectionConnection このバインドに使用するストレージ接続文字列を含むアプリ設定の名前です。The name of an app setting that contains the Storage connection string to use for this binding. アプリ設定の名前が "AzureWebJobs" で始まる場合は、ここで名前の残りの部分のみを指定できます。If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. たとえば、connection を "MyStorage" に設定した場合、Functions ランタイムは "AzureWebJobsMyStorage" という名前のアプリ設定を探します。For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." connection を空のままにした場合、Functions ランタイムは、アプリ設定内の AzureWebJobsStorage という名前の既定のストレージ接続文字列を使用します。If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

接続文字列は、BLOB ストレージ アカウントではなく汎用ストレージ アカウントに対するものである必要があります。The connection string must be for a general-purpose storage account, not a Blob storage account.
該当なしn/a Access (アクセス)Access 読み取りと書き込みのどちらを行うかを示します。Indicates whether you will be reading or writing.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

入力 - 使用方法Input - usage

C# とC# スクリプトでは、BLOB 入力バインドに次のパラメーター型を使用できます。In C# and C# script, you can use the following parameter types for the blob input binding:

  • Stream
  • TextReader
  • string
  • Byte[]
  • CloudBlobContainer
  • CloudBlobDirectory
  • ICloudBlob1ICloudBlob1
  • CloudBlockBlob1CloudBlockBlob1
  • CloudPageBlob1CloudPageBlob1
  • CloudAppendBlob1CloudAppendBlob1

1 function.json には "inout" バインド direction、C# クラス ライブラリには FileAccess.ReadWrite が必要です。1 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Storage SDK タイプの 1 つにバインドしようとしてエラー メッセージが表示された場合は、適切な Storage SDK バージョンへの参照があることをご確認ください。If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

string または Byte[] へのバインドが推奨されるのは、BLOB のサイズが小さい場合のみです (BLOB 全体のコンテンツがメモリに読み込まれるため)。Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. 通常、Stream 型または CloudBlockBlob 型の使用が推奨されます。Generally, it is preferable to use a Stream or CloudBlockBlob type. 詳しくは、この記事で前述した「コンカレンシーとメモリ使用量」セクションをご覧ください。For more information, see Concurrency and memory usage earlier in this article.

JavaScript では、context.bindings.<name from function.json> を使用して BLOB データにアクセスします。In JavaScript, access the blob data using context.bindings.<name from function.json>.

出力Output

Blob Storage 出力バインディングを使用して BLOB を書き込みます。Use Blob storage output bindings to write blobs.

出力 - 例Output - example

言語固有の例をご覧ください。See the language-specific example:

出力 - C# の例Output - C# example

次の例は、1 つの BLOB トリガーと 2 つの出力 BLOB バインディングを使用するC# 関数です。The following example is a C# function that uses a blob trigger and two output blob bindings. 関数は、sample-images コンテナーのイメージ BLOB の作成によってトリガーされます。The function is triggered by the creation of an image blob in the sample-images container. イメージ BLOB の小規模および中規模サイズのコピーを作成します。It creates small and medium size copies of the image blob.

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{name}")] Stream image, 
    [Blob("sample-images-sm/{name}", FileAccess.Write)] Stream imageSmall, 
    [Blob("sample-images-md/{name}", FileAccess.Write)] Stream imageMedium)
{
    var imageBuilder = ImageResizer.ImageBuilder.Current;
    var size = imageDimensionsTable[ImageSize.Small];

    imageBuilder.Build(image, imageSmall,
        new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);

    image.Position = 0;
    size = imageDimensionsTable[ImageSize.Medium];

    imageBuilder.Build(image, imageMedium,
        new ResizeSettings(size.Item1, size.Item2, FitMode.Max, null), false);
}

public enum ImageSize { ExtraSmall, Small, Medium }

private static Dictionary<ImageSize, (int, int)> imageDimensionsTable = new Dictionary<ImageSize, (int, int)>() {
    { ImageSize.ExtraSmall, (320, 200) },
    { ImageSize.Small,      (640, 400) },
    { ImageSize.Medium,     (800, 600) }
};

出力 - C# スクリプトの例Output - C# script example

次の例は、function.json ファイルの BLOB 入出力バインディングと、バインディングを使用する C# スクリプト (.csx) コードを示しています。The following example shows blob input and output bindings in a function.json file and C# script (.csx) code that uses the bindings. 関数は、テキスト BLOB のコピーを作成します。The function makes a copy of a text blob. 関数は、コピーする BLOB の名前を含むキュー メッセージによってトリガーされます。The function is triggered by a queue message that contains the name of the blob to copy. 新しい BLOB の名前は {originalblobname}-Copy です。The new blob is named {originalblobname}-Copy.

function.json ファイルでは、queueTrigger メタデータ プロパティは path プロパティ内の BLOB 名の指定に使用されます。In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

これらのプロパティについては、「構成」セクションを参照してください。The configuration section explains these properties.

C# スクリプト コードを次に示します。Here's the C# script code:

public static void Run(string myQueueItem, string myInputBlob, out string myOutputBlob, ILogger log)
{
    log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

出力 - JavaScript の例Output - JavaScript example

次の例は、function.json ファイルの BLOB 入出力バインドと、そのバインドを使用する JavaScript コードを示しています。The following example shows blob input and output bindings in a function.json file and JavaScript code that uses the bindings. 関数は、BLOB のコピーを作成します。The function makes a copy of a blob. 関数は、コピーする BLOB の名前を含むキュー メッセージによってトリガーされます。The function is triggered by a queue message that contains the name of the blob to copy. 新しい BLOB の名前は {originalblobname}-Copy です。The new blob is named {originalblobname}-Copy.

function.json ファイルでは、queueTrigger メタデータ プロパティは path プロパティ内の BLOB 名の指定に使用されます。In the function.json file, the queueTrigger metadata property is used to specify the blob name in the path properties:

{
  "bindings": [
    {
      "queueName": "myqueue-items",
      "connection": "MyStorageConnectionAppSetting",
      "name": "myQueueItem",
      "type": "queueTrigger",
      "direction": "in"
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "in"
    },
    {
      "name": "myOutputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}-Copy",
      "connection": "MyStorageConnectionAppSetting",
      "direction": "out"
    }
  ],
  "disabled": false
}

これらのプロパティについては、「構成」セクションを参照してください。The configuration section explains these properties.

JavaScript コードを次に示します。Here's the JavaScript code:

module.exports = function(context) {
    context.log('Node.js Queue trigger function processed', context.bindings.myQueueItem);
    context.bindings.myOutputBlob = context.bindings.myInputBlob;
    context.done();
};

出力 - Java の例Output - Java example

次の例は、Java 関数の BLOB 入力および出力バインドを示しています。The following example shows blob input and output bindings in a Java function. 関数は、テキスト BLOB のコピーを作成します。The function makes a copy of a text blob. 関数は、コピーする BLOB の名前を含むキュー メッセージによってトリガーされます。The function is triggered by a queue message that contains the name of the blob to copy. 新しい BLOB の名前は {originalblobname}-Copy ですThe new blob is named {originalblobname}-Copy

@FunctionName("copyTextBlob")
@StorageAccount("AzureWebJobsStorage")
@BlobOutput(name = "target", path = "samples-workitems/{queueTrigger}-Copy")
public String blobCopy(
    @QueueTrigger(name = "filename", queueName = "myqueue-items") String filename,
    @BlobInput(name = "source", path = "samples-workitems/{queueTrigger}") String content ) {
      return content;
 }

Java 関数ランタイム ライブラリ で、その値が Blob Storage のオブジェクトに書き込まれる関数のパラメーター上で @BlobOutput 注釈を使用します。In the Java functions runtime library, use the @BlobOutput annotation on function parameters whose value would be written to an object in blob storage. パラメーターの型は OutputBinding<T> にする必要があります。T は POJO の Java の任意のネイティブ型です。The parameter type should be OutputBinding<T>, where T is any native Java type of a POJO.

出力 - 属性Output - attributes

C# クラス ライブラリでは、BlobAttributeを使用します。In C# class libraries, use the BlobAttribute.

次の例で示すように、属性のコンストラクターは、BLOB へのパスと、読み取りまたは書き込みを示す FileAccess パラメーターを受け取ります。The attribute's constructor takes the path to the blob and a FileAccess parameter indicating read or write, as shown in the following example:

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

次の例で示すように、Connection プロパティを設定して、使用するストレージ アカウントを指定できます。You can set the Connection property to specify the storage account to use, as shown in the following example:

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

完全な例については、「出力 - C# の例」を参照してください。For a complete example, see Output - C# example.

StorageAccount 属性を使用して、クラス、メソッド、またはパラメーターのレベルでストレージ アカウントを指定できます。You can use the StorageAccount attribute to specify the storage account at class, method, or parameter level. 詳細については、トリガー - 属性をご覧ください。For more information, see Trigger - attributes.

出力 - 構成Output - configuration

次の表は、function.json ファイルと Blob 属性で設定したバインド構成のプロパティを説明しています。The following table explains the binding configuration properties that you set in the function.json file and the Blob attribute.

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a blob に設定する必要があります。Must be set to blob.
directiondirection 該当なしn/a 出力バインディングの場合は out に設定する必要があります。Must be set to out for an output binding. 例外は、使用方法のセクションに記載しています。Exceptions are noted in the usage section.
namename 該当なしn/a 関数コード内の BLOB を表す変数の名前。The name of the variable that represents the blob in function code. $return に設定して、関数の戻り値を参照します。Set to $return to reference the function return value.
pathpath BlobPathBlobPath BLOB へのパス。The path to the blob.
connectionconnection ConnectionConnection このバインドに使用するストレージ接続文字列を含むアプリ設定の名前です。The name of an app setting that contains the Storage connection string to use for this binding. アプリ設定の名前が "AzureWebJobs" で始まる場合は、ここで名前の残りの部分のみを指定できます。If the app setting name begins with "AzureWebJobs", you can specify only the remainder of the name here. たとえば、connection を "MyStorage" に設定した場合、Functions ランタイムは "AzureWebJobsMyStorage" という名前のアプリ設定を探します。For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "AzureWebJobsMyStorage." connection を空のままにした場合、Functions ランタイムは、アプリ設定内の AzureWebJobsStorage という名前の既定のストレージ接続文字列を使用します。If you leave connection empty, the Functions runtime uses the default Storage connection string in the app setting that is named AzureWebJobsStorage.

接続文字列は、BLOB ストレージ アカウントではなく汎用ストレージ アカウントに対するものである必要があります。The connection string must be for a general-purpose storage account, not a Blob storage account.
該当なしn/a Access (アクセス)Access 読み取りと書き込みのどちらを行うかを示します。Indicates whether you will be reading or writing.

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。When you're developing locally, app settings go into the local.settings.json file.

出力 - 使用方法Output - usage

C# と C# スクリプトでは、次の型にバインドして、BLOB を書き込むことができます。In C# and C# script, you can bind to the following types to write blobs:

  • TextWriter
  • out string
  • out Byte[]
  • CloudBlobStream
  • Stream
  • CloudBlobContainer1CloudBlobContainer1
  • CloudBlobDirectory
  • ICloudBlob2ICloudBlob2
  • CloudBlockBlob2CloudBlockBlob2
  • CloudPageBlob2CloudPageBlob2
  • CloudAppendBlob2CloudAppendBlob2

1 function.json には "in" バインド direction、C# クラス ライブラリには FileAccess.Read が必要です。1 Requires "in" binding direction in function.json or FileAccess.Read in a C# class library. ただし、コンテナーへの BLOB のアップロードなどの書き込み操作をおこなうためにランタイムが提供するコンテナー オブジェクトを使うことができます。However, you can use the container object that the runtime provides to do write operations, such as uploading blobs to the container.

2 function.json には "inout" バインド direction、C# クラス ライブラリには FileAccess.ReadWrite が必要です。2 Requires "inout" binding direction in function.json or FileAccess.ReadWrite in a C# class library.

Storage SDK タイプの 1 つにバインドしようとしてエラー メッセージが表示された場合は、適切な Storage SDK バージョンへの参照があることをご確認ください。If you try to bind to one of the Storage SDK types and get an error message, make sure that you have a reference to the correct Storage SDK version.

非同期関数では、out パラメーターの代わりに戻り値または IAsyncCollector を使用します。In async functions, use the return value or IAsyncCollector instead of an out parameter.

string または Byte[] へのバインドが推奨されるのは、BLOB のサイズが小さい場合のみです (BLOB 全体のコンテンツがメモリに読み込まれるため)。Binding to string or Byte[] is only recommended if the blob size is small, as the entire blob contents are loaded into memory. 通常、Stream 型または CloudBlockBlob 型の使用が推奨されます。Generally, it is preferable to use a Stream or CloudBlockBlob type. 詳しくは、この記事で前述した「コンカレンシーとメモリ使用量」セクションをご覧ください。For more information, see Concurrency and memory usage earlier in this article.

JavaScript では、context.bindings.<name from function.json> を使用して BLOB データにアクセスします。In JavaScript, access the blob data using context.bindings.<name from function.json>.

例外とリターン コードExceptions and return codes

バインドBinding リファレンスReference
BLOBBlob BLOB エラー コードBlob Error Codes
BLOB、テーブル、キューBlob, Table, Queue ストレージ エラー コードStorage Error Codes
BLOB、テーブル、キューBlob, Table, Queue トラブルシューティングTroubleshooting

次の手順Next steps