Azure Functions における Azure Blob Storage の出力バインド

出力バインドを使用すると、Azure 関数内で Blob Storage データを変更および削除できます。

セットアップと構成の詳細については、概要を参照してください。

次の例は、1 つの BLOB トリガーと 2 つの出力 BLOB バインディングを使用するC# 関数です。 関数は、sample-images コンテナーのイメージ BLOB の作成によってトリガーされます。 イメージ BLOB の小規模および中規模サイズのコピーを作成します。

using System.Collections.Generic;
using System.IO;
using Microsoft.Azure.WebJobs;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;

public class ResizeImages
{
    [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)
    {
        IImageFormat format;

        using (Image<Rgba32> input = Image.Load<Rgba32>(image, out format))
        {
            ResizeImage(input, imageSmall, ImageSize.Small, format);
        }

        image.Position = 0;
        using (Image<Rgba32> input = Image.Load<Rgba32>(image, out format))
        {
            ResizeImage(input, imageMedium, ImageSize.Medium, format);
        }
    }

    public static void ResizeImage(Image<Rgba32> input, Stream output, ImageSize size, IImageFormat format)
    {
        var dimensions = imageDimensionsTable[size];

        input.Mutate(x => x.Resize(dimensions.Item1, dimensions.Item2));
        input.Save(output, format);
    }

    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# クラス ライブラリでは、BlobAttributeを使用します。

次の例で示すように、属性のコンストラクターは、BLOB へのパスと、読み取りまたは書き込みを示す FileAccess パラメーターを受け取ります。

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

次の例で示すように、Connection プロパティを設定して、使用するストレージ アカウントを指定できます。

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

完全な例については、「出力 - 例」を参照してください。

StorageAccount 属性を使用して、クラス、メソッド、またはパラメーターのレベルでストレージ アカウントを指定できます。 詳細については、トリガー - 属性をご覧ください。

構成

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

function.json のプロパティ 属性のプロパティ 説明
type 該当なし blob に設定する必要があります。
direction 該当なし 出力バインディングの場合は out に設定する必要があります。 例外は、使用方法のセクションに記載しています。
name 該当なし 関数コード内の BLOB を表す変数の名前。 $return に設定して、関数の戻り値を参照します。
path BlobPath BLOB コンテナーへのパス。
connection 接続 このバインドに使用するストレージ接続文字列を含むアプリ設定の名前です。 アプリ設定の名前が "AzureWebJobs" で始まる場合は、ここで名前の残りの部分のみを指定できます。 たとえば、connection を "MyStorage" に設定した場合、Functions ランタイムは "AzureWebJobsMyStorage" という名前のアプリ設定を探します。 connection を空のままにした場合、Functions ランタイムは、アプリ設定内の AzureWebJobsStorage という名前の既定のストレージ接続文字列を使用します。

接続文字列は、BLOB のみのストレージ アカウントではなく汎用ストレージ アカウントに対するものである必要があります。

バージョン 5.x またはそれ以降の拡張機能を使用している場合は、接続文字列の代わりに、接続を定義する構成セクションへの参照を指定できます。 「接続」を参照してください。
該当なし Access (アクセス) 読み取りと書き込みのどちらを行うかを示します。

ローカルで開発している場合、アプリ設定は local.settings.json ファイルに保存されます。

使用法

Default

次の型にバインドして BLOB を書き込むことができます。

  • TextWriter
  • out string
  • out Byte[]
  • CloudBlobStream
  • Stream
  • CloudBlobContainer1
  • CloudBlobDirectory
  • ICloudBlob2
  • CloudBlockBlob2
  • CloudPageBlob2
  • CloudAppendBlob2

1function.json には "in" バインド direction、C# クラス ライブラリには FileAccess.Read が必要です。 ただし、コンテナーへの BLOB のアップロードなどの書き込み操作をおこなうためにランタイムが提供するコンテナー オブジェクトを使うことができます。

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

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

string または Byte[] へのバインドが推奨されるのは、BLOB のサイズが小さい場合のみです (BLOB 全体のコンテンツがメモリに読み込まれるため)。 通常、Stream 型または CloudBlockBlob 型の使用が推奨されます。 詳しくは、この記事で前述した「コンカレンシーとメモリ使用量」セクションをご覧ください。

その他の型

ストレージ拡張機能の 5.0.0 またはそれ以降のバージョンを使用するアプリでは、Azure SDK for .NET の型を使用することもできます。 このバージョンでは、次の型を優先して、レガシ CloudBlobContainerCloudBlobDirectoryICloudBlobCloudBlockBlobCloudPageBlobCloudAppendBlob 型のサポートがなくなります。

1function.json には "in" バインド direction、C# クラス ライブラリには FileAccess.Read が必要です。 ただし、コンテナーへの BLOB のアップロードなどの書き込み操作をおこなうためにランタイムが提供するコンテナー オブジェクトを使うことができます。

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

これらの型を使用する例については、拡張機能の GitHub リポジトリに関するページを参照してください。 これらの異なる新しい型と、それらを移行する方法については、Azure.Storage.Blobs の移行ガイドに関するページを参照してください。

例外とリターン コード

バインド リファレンス
BLOB BLOB エラー コード
BLOB、テーブル、キュー ストレージ エラー コード
BLOB、テーブル、キュー トラブルシューティング

次のステップ