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.

これは、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-only storage accounts are not supported. Blob ストレージのトリガーとバインドには、汎用のストレージ アカウントが必要です。Blob storage triggers and bindings require a general-purpose storage account.

トリガーTrigger

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

注意

従量課金プランで BLOB トリガーを使用していると、関数アプリがアイドル状態になったあと、新しい BLOB の処理が最大で 10 分遅延する場合があります。When you're using a blob trigger on a Consumption plan, there can be up to a 10-minute delay in processing new blobs after a function app has gone idle. 関数アプリが実行されると、BLOB は直ちに処理されます。After the function app is running, blobs are processed immediately. この初期段階の遅延を避けるために、次のオプションのいずれかを検討してください。To avoid this initial delay, consider one of the following options:

トリガー - 例Trigger - example

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

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

次の例は、BLOB が samples-workitems コンテナーで追加または更新されたときにログを書き込むプリコンパイル済み C# コードを示しています。The following example shows precompiled C# code 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, TraceWriter log)
{
    log.Info($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}

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

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

次の例は、function.json ファイルの BLOB トリガー バインディングと、バインディングを使用する C# スクリプト コードを示しています。The following example shows a blob trigger binding in a function.json file and C# script 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",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

構成のセクションで、これらのプロパティについて説明します。The configuration section explains these properties.

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

public static void Run(Stream myBlob, TraceWriter log)
{
   log.Info($"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, TraceWriter log)
{
    log.Info($"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",
            "connection":"MyStorageAccountAppSetting"
        }
    ]
}

これらのプロパティについては、「構成」セクションを参照してください。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();
};

トリガー - 属性Trigger - attributes

プリコンパイル済み C# 関数では、次の属性を使用して BLOB トリガーを構成します。For precompiled C# functions, use the following attributes to configure a blob trigger:

  • NuGet パッケージ Microsoft.Azure.WebJobs で定義された BlobTriggerAttributeBlobTriggerAttribute, defined in NuGet package Microsoft.Azure.WebJobs

    属性のコンストラクターは、監視するコンテナーを示すパス文字列と、必要に応じて 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 - precompiled C# example.

  • NuGet パッケージ Microsoft.Azure.WebJobs で定義された StorageAccountAttributeStorageAccountAttribute, defined in NuGet package Microsoft.Azure.WebJobs

    使用するストレージ アカウントを指定する別の方法を提供します。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-only storage account.

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

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

C# および C# スクリプトでは、Stream paramName のようなメソッド パラメーターを使用して BLOB データにアクセスします。In C# and C# script, access the blob data by using a method parameter such as Stream paramName. C# スクリプトでは、paramNamefunction.jsonname プロパティで指定された値です。In C# script, paramName is the value specified in the name property of function.json. 次の型のいずれにでもバインドできます。You can bind to any of the following types:

  • TextReader
  • Stream
  • ICloudBlob (function.json に "inout" バインド方向が必要)ICloudBlob (requires "inout" binding direction in function.json)
  • CloudBlockBlob (function.json に "inout" バインド方向が必要)CloudBlockBlob (requires "inout" binding direction in function.json)
  • CloudPageBlob (function.json に "inout" バインド方向が必要)CloudPageBlob (requires "inout" binding direction in function.json)
  • CloudAppendBlob (function.json に "inout" バインド方向が必要)CloudAppendBlob (requires "inout" binding direction in function.json)

前述のように、これらの型の一部は、function.jsoninout バインド方向を必要とします。As noted, some of these types require an inout binding direction in function.json. この方向は Azure Portal の標準のエディターではサポートされていないため、詳細エディターを使用する必要があります。This direction is not supported by the standard editor in the Azure portal, so you must use the advanced editor.

テキスト BLOB がある場合は、string 型にバインドできます。If text blobs are expected, you can bind to the string type. BLOB 全体のコンテンツがメモリに読み込まれるため、これが推奨されるのは、BLOB のサイズが小さい場合のみです。This 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.

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

トリガー - 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.

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.

ファイル名と拡張子の取得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 value of the blobname and blobextension variables in function code are original-Blob1 and txt.

トリガー - メタデータ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 Type 説明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.

トリガー - 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 - polling for large containers

監視対象の 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 & output

Blob Storage の入力および出力バインディングを使用して、BLOB の読み取りと書き込みを行います。Use Blob storage input and output bindings to read and write blobs.

入力と出力 - 例Input & output - example

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

入力と出力 - C# の例Input & output - C# example

次の例は、1 つの BLOB トリガーと 2 つの出力の BLOB バインディングを使用するプリコンパイル済み C# 関数です。The following example is a precompiled 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# のスクリプトの例Input & output - C# script example

次の例は、function.json ファイルの BLOB 入出力バインドと、バインドを使用する C# スクリプト コードを示しています。The following example shows blob input and output bindings in a function.json file and C# script 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, TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
    myOutputBlob = myInputBlob;
}

入力と出力 - JavaScript の例Input & 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();
};

入力と出力 - 属性Input & output - attributes

プリコンパイル済み C# 関数では、NuGet パッケージ Microsoft.Azure.WebJobs で定義されている BlobAttribute を使用します。For precompiled C# functions, use the BlobAttribute, which is defined in NuGet package Microsoft.Azure.WebJobs.

次の例で示すように、属性のコンストラクターは、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 Input & output - precompiled 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.

入力と出力 - 構成Input & 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 入力バインディングの場合は in に、出力バインディングの場合は out に設定する必要があります。Must be set to in for an input binding or 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-only 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 & output - usage

プリコンパイル済みの C# および C# スクリプトでは、Stream paramName のようなメソッド パラメーターを使用して BLOB にアクセスします。In precompiled C# and C# script, access the blob by using a method parameter such as Stream paramName. C# スクリプトでは、paramNamefunction.jsonname プロパティで指定された値です。In C# script, paramName is the value specified in the name property of function.json. 次の型のいずれにでもバインドできます。You can bind to any of the following types:

  • out string
  • TextWriter
  • TextReader
  • Stream
  • ICloudBlob (function.json に "inout" バインド方向が必要)ICloudBlob (requires "inout" binding direction in function.json)
  • CloudBlockBlob (function.json に "inout" バインド方向が必要)CloudBlockBlob (requires "inout" binding direction in function.json)
  • CloudPageBlob (function.json に "inout" バインド方向が必要)CloudPageBlob (requires "inout" binding direction in function.json)
  • CloudAppendBlob (function.json に "inout" バインド方向が必要)CloudAppendBlob (requires "inout" binding direction in function.json)

前述のように、これらの型の一部は、function.jsoninout バインド方向を必要とします。As noted, some of these types require an inout binding direction in function.json. この方向は Azure Portal の標準のエディターではサポートされていないため、詳細エディターを使用する必要があります。This direction is not supported by the standard editor in the Azure portal, so you must use the advanced editor.

テキスト BLOB を読み取る場合は、string 型にバインドすることができます。If you are reading text blobs, you can bind to a string type. BLOB 全体のコンテンツがメモリに読み込まれるため、この型が推奨されるのは、BLOB のサイズが小さい場合のみです。This type 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.

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

次のステップNext steps