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

この記事では、Azure Functions で Azure Table Storage のバインドを使用する方法について説明します。This article explains how to work with Azure Table storage bindings in Azure Functions. Azure Functions は、Azure Table ストレージの入力および出力のバインドをサポートしています。Azure Functions supports input and output bindings for Azure Table storage.

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

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

Table ストレージ バインディングは Microsoft.Azure.WebJobs NuGet パッケージ、バージョン 2.x で提供されます。The Table 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.x 以降Packages - Functions 2.x and higher

Table ストレージ バインディングは Microsoft.Azure.WebJobs.Extensions.Storage NuGet パッケージ、バージョン 3.x で提供されます。The Table 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.

次の方法を使用して、推奨される開発環境にサポートを追加します。Add support in you preferred development environment using the following methods.

開発環境Development environment アプリケーションの種類Application type サポートを追加するにはTo add support
Visual StudioVisual Studio C# クラス ライブラリC# class library NuGet パッケージをインストールするInstall the NuGet package
Visual Studio CodeVisual Studio Code コアツールに基づくBased on core tools 拡張機能バンドルを登録するRegister the extension bundle

Azure Tools 拡張機能 をインストールすることをお勧めします。Installing the Azure Tools extension is recommended.
その他のエディター/IDEAny other editor/IDE コアツールに基づくBased on core tools 拡張機能バンドルを登録するRegister the extension bundle
Azure portalAzure Portal ポータルでのみオンラインOnline only in portal バインドを追加するときにインストールするInstalls when adding a binding

関数アプリを再発行せずに、既存のバインディング拡張機能を更新するには、拡張機能の更新に関するページを参照してください。See Update your extensions to update existing binding extensions without having to republish your function app.

入力Input

Azure Table Storage の入力バインドを使用して、Azure Storage アカウントのテーブルを読み取ります。Use the Azure Table storage input binding to read a table in an Azure Storage account.

1 つのエンティティOne entity

次の例は、1 つのテーブル行を読み取る C# 関数を示しています。The following example shows a C# function that reads a single table row. キューに送信されるすべてのメッセージについて、関数がトリガーされます。For every message send to the queue, the function will be triggered.

行キー値 "{queueTrigger}" は、行キーがキュー メッセージ文字列から取得されることを示します。The row key value "{queueTrigger}" indicates that the row key comes from the queue message string.

public class TableStorage
{
    public class MyPoco
    {
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        public string Text { get; set; }
    }

    [FunctionName("TableInput")]
    public static void TableInput(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "MyPartition", "{queueTrigger}")] MyPoco poco, 
        ILogger log)
    {
        log.LogInformation($"PK={poco.PartitionKey}, RK={poco.RowKey}, Text={poco.Text}");
    }
}

IQueryableIQueryable

次の例は、MyPoco クラスが TableEntity から派生した複数のテーブル行を読み取る C# 関数を示しています。The following example shows a C# function that reads multiple table rows where the MyPoco class derives from TableEntity.

public class TableStorage
{
    public class MyPoco : TableEntity
    {
        public string Text { get; set; }
    }

    [FunctionName("TableInput")]
    public static void TableInput(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "MyPartition")] IQueryable<MyPoco> pocos, 
        ILogger log)
    {
        foreach (MyPoco poco in pocos)
        {
            log.LogInformation($"PK={poco.PartitionKey}, RK={poco.RowKey}, Text={poco.Text}");
        }
    }
}

CloudTableCloudTable

IQueryableFunctions v2 ランタイムではサポートされていません。IQueryable isn't supported in the Functions v2 runtime. 代わりに、Azure Storage SDK で CloudTable メソッド パラメーターを使用してテーブルを読み取ります。An alternative is to use a CloudTable method parameter to read the table by using the Azure Storage SDK. Azure Functions ログ テーブルにクエリを実行する関数の例:Here's an example of a function that queries an Azure Functions log table:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Table;
using System;
using System.Threading.Tasks;

namespace FunctionAppCloudTable2
{
    public class LogEntity : TableEntity
    {
        public string OriginalName { get; set; }
    }
    public static class CloudTableDemo
    {
        [FunctionName("CloudTableDemo")]
        public static async Task Run(
            [TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, 
            [Table("AzureWebJobsHostLogscommon")] CloudTable cloudTable,
            ILogger log)
        {
            log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");

            TableQuery<LogEntity> rangeQuery = new TableQuery<LogEntity>().Where(
                TableQuery.CombineFilters(
                    TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, 
                        "FD2"),
                    TableOperators.And,
                    TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.GreaterThan, 
                        "t")));

            // Execute the query and loop through the results
            foreach (LogEntity entity in 
                await cloudTable.ExecuteQuerySegmentedAsync(rangeQuery, null))
            {
                log.LogInformation(
                    $"{entity.PartitionKey}\t{entity.RowKey}\t{entity.Timestamp}\t{entity.OriginalName}");
            }
        }
    }
}

CloudTable オブジェクトの使用方法の詳細については、Azure Table ストレージの概要ページをご覧ください。For more information about how to use CloudTable, see Get started with Azure Table storage.

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

入力 - 属性と注釈Input - attributes and annotations

C# クラス ライブラリでは、以下の属性を使用してテーブル入力バインディングを構成します。In C# class libraries, use the following attributes to configure a table input binding:

  • TableAttributeTableAttribute

    この属性のコンストラクターは、テーブル名、パーティション キー、および行キーを受け取ります。The attribute's constructor takes the table name, partition key, and row key. 属性は、次の例のように、out パラメーターまたは関数の戻り値で使用できます。The attribute can be used on an out parameter or on the return value of the function, as shown in the following example:

    [FunctionName("TableInput")]
    public static void Run(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "Http", "{queueTrigger}")] MyPoco poco, 
        ILogger log)
    {
        ...
    }
    

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

    [FunctionName("TableInput")]
    public static void Run(
        [QueueTrigger("table-items")] string input, 
        [Table("MyTable", "Http", "{queueTrigger}", Connection = "StorageConnectionAppSetting")] MyPoco poco, 
        ILogger log)
    {
        ...
    }
    

    完全な例については、「入力 - C# の例」を参照してください。For a complete example, see Input - 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("TableInput")]
        [StorageAccount("FunctionLevelStorageAppSetting")]
        public static void Run( //...
    {
        ...
    }
    

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

  • Table 属性の Connection プロパティ。The Table attribute's Connection property.
  • Table 属性と同じパラメーターに適用された StorageAccount 属性。The StorageAccount attribute applied to the same parameter as the Table 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).

入力 - 構成Input - configuration

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

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a table に設定する必要があります。Must be set to table. このプロパティは、Azure Portal でバインドを作成するときに自動で設定されます。This property is set automatically when you create the binding in the Azure portal.
directiondirection 該当なしn/a in に設定する必要があります。Must be set to in. このプロパティは、Azure Portal でバインドを作成するときに自動で設定されます。This property is set automatically when you create the binding in the Azure portal.
namename 該当なしn/a 関数コード内のテーブルまたはエンティティを表す変数の名前。The name of the variable that represents the table or entity in function code.
tableNametableName TableNameTableName テーブルの名前。The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey 省略可能。Optional. 読み取るテーブル エンティティのパーティション キー。The partition key of the table entity to read. このプロパティを使用する方法のガイダンスについては、「使用方法」セクションを参照してください。See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey 省略可能。Optional. 読み取るテーブル エンティティの行キー。The row key of the table entity to read. このプロパティを使用する方法のガイダンスについては、「使用方法」セクションを参照してください。See the usage section for guidance on how to use this property.
taketake TakeTake 省略可能。Optional. JavaScript で読み取るエンティティの最大数。The maximum number of entities to read in JavaScript. このプロパティを使用する方法のガイダンスについては、「使用方法」セクションを参照してください。See the usage section for guidance on how to use this property.
filterfilter AssertFilter 省略可能。Optional. JavaScript のテーブル入力の OData フィルター式。An OData filter expression for table input in JavaScript. このプロパティを使用する方法のガイダンスについては、「使用方法」セクションを参照してください。See the usage section for guidance on how to use this property.
connectionconnection 接続Connection このバインドに使用するストレージ接続文字列を含むアプリ設定の名前です。The name of an app setting that contains the Storage connection string to use for this binding. この設定には、"AzureWebJobs" というプレフィックスが付加されたアプリ設定または接続文字列名を指定できます。The setting can be the name of an "AzureWebJobs" prefixed app setting or connection string name. たとえば、設定名が "AzureWebJobsMyStorage" の場合、ここでは "MyStorage" を指定できます。For example, if your setting name is "AzureWebJobsMyStorage", you can specify "MyStorage" here. Functions ランタイムでは、"AzureWebJobsMyStorage" という名前のアプリ設定が自動的に検索されます。The Functions runtime will automatically look for an app setting that 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.

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

入力 - 使用方法Input - usage

  • 1 行の読み取りRead one row in

    partitionKeyrowKey を設定します。Set partitionKey and rowKey. メソッド パラメーター T <paramName> を使用して、テーブル データにアクセスします。Access the table data by using a method parameter T <paramName>. C# スクリプトでは、paramNamefunction.jsonname プロパティで指定された値です。In C# script, paramName is the value specified in the name property of function.json. 通常、T は、ITableEntity を実装する型か、TableEntity から派生する型です。T is typically a type that implements ITableEntity or derives from TableEntity. filter および take プロパティは、このシナリオでは使用しません。The filter and take properties are not used in this scenario.

  • 1 つ以上の行の読み取りRead one or more rows

    メソッド パラメーター IQueryable<T> <paramName> を使用して、テーブル データにアクセスします。Access the table data by using a method parameter IQueryable<T> <paramName>. C# スクリプトでは、paramNamefunction.jsonname プロパティで指定された値です。In C# script, paramName is the value specified in the name property of function.json. T は、ITableEntity を実装する型か、TableEntity から派生する型にする必要があります。T must be a type that implements ITableEntity or derives from TableEntity. 必要なフィルター処理があれば、IQueryable メソッドを使用して実行します。You can use IQueryable methods to do any filtering required. partitionKeyrowKeyfiltertake の各プロパティは、このシナリオでは使用しません。The partitionKey, rowKey, filter, and take properties are not used in this scenario.

    注意

    IQueryableFunctions v2 ランタイムではサポートされていません。IQueryable isn't supported in the Functions v2 runtime. 代わりに、Azure Storage SDK で CloudTable paramName メソッド パラメーターを使用して、テーブルを読み取ります。An alternative is to use a CloudTable paramName method parameter to read the table by using the Azure Storage SDK. CloudTable にバインドしようとしてエラー メッセージが表示された場合は、適切な Storage SDK バージョンへの参照があることをご確認ください。If you try to bind to CloudTable and get an error message, make sure that you have a reference to the correct Storage SDK version.

出力Output

Azure Table Storage の出力バインドを使用して、Azure Storage アカウントのテーブルにエンティティを書き込みます。Use an Azure Table storage output binding to write entities to a table in an Azure Storage account.

注意

この出力バインドでは、既存のエンティティの更新はサポートされていません。This output binding does not support updating existing entities. 既存のエンティティを更新するには、Azure Storage SDKTableOperation.Replace 操作を使ってください。Use the TableOperation.Replace operation from the Azure Storage SDK to update an existing entity.

次の例は、HTTP トリガーを使用して 1 つのテーブル行を書き込む C# 関数を示しています。The following example shows a C# function that uses an HTTP trigger to write a single table row.

public class TableStorage
{
    public class MyPoco
    {
        public string PartitionKey { get; set; }
        public string RowKey { get; set; }
        public string Text { get; set; }
    }

    [FunctionName("TableOutput")]
    [return: Table("MyTable")]
    public static MyPoco TableOutput([HttpTrigger] dynamic input, ILogger log)
    {
        log.LogInformation($"C# http trigger function processed: {input.Text}");
        return new MyPoco { PartitionKey = "Http", RowKey = Guid.NewGuid().ToString(), Text = input.Text };
    }
}

出力 - 属性と注釈Output - attributes and annotations

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

この属性のコンストラクターは、テーブル名を受け取ります。The attribute's constructor takes the table name. 属性は、次の例のように、out パラメーターまたは関数の戻り値で使用できます。The attribute can be used on an out parameter or on the return value of the function, as shown in the following example:

[FunctionName("TableOutput")]
[return: Table("MyTable")]
public static MyPoco TableOutput(
    [HttpTrigger] dynamic input, 
    ILogger log)
{
    ...
}

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

[FunctionName("TableOutput")]
[return: Table("MyTable", Connection = "StorageConnectionAppSetting")]
public static MyPoco TableOutput(
    [HttpTrigger] dynamic input, 
    ILogger log)
{
    ...
}

完全な例については、「出力 - 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 Input - attributes.

出力 - 構成Output - configuration

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

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a table に設定する必要があります。Must be set to table. このプロパティは、Azure Portal でバインドを作成するときに自動で設定されます。This property is set automatically when you create the binding in the Azure portal.
directiondirection 該当なしn/a out に設定する必要があります。Must be set to out. このプロパティは、Azure Portal でバインドを作成するときに自動で設定されます。This property is set automatically when you create the binding in the Azure portal.
namename 該当なしn/a テーブルまたはエンティティを表す関数コードに使用される変数の名前。The variable name used in function code that represents the table or entity. $return に設定して、関数の戻り値を参照します。Set to $return to reference the function return value.
tableNametableName TableNameTableName テーブルの名前。The name of the table.
partitionKeypartitionKey PartitionKeyPartitionKey 書き込むテーブル エンティティのパーティション キー。The partition key of the table entity to write. このプロパティを使用する方法のガイダンスについては、「使用方法」セクションを参照してください。See the usage section for guidance on how to use this property.
rowKeyrowKey RowKeyRowKey 書き込むテーブル エンティティの行キー。The row key of the table entity to write. このプロパティを使用する方法のガイダンスについては、「使用方法」セクションを参照してください。See the usage section for guidance on how to use this property.
connectionconnection 接続Connection このバインドに使用するストレージ接続文字列を含むアプリ設定の名前です。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 ランタイムは "MyStorage" という名前のアプリ設定を探します。For example, if you set connection to "MyStorage", the Functions runtime looks for an app setting that is named "MyStorage". 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.

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

出力 - 使用方法Output - usage

メソッド パラメーター ICollector<T> paramName または IAsyncCollector<T> paramName を使用して出力テーブル エンティティにアクセスします。T には、PartitionKey および RowKey のプロパティが含まれています。Access the output table entity by using a method parameter ICollector<T> paramName or IAsyncCollector<T> paramName where T includes the PartitionKey and RowKey properties. 多くの場合、これらのプロパティには ITableEntity の実装や TableEntity の継承が伴います。These properties are often accompanied by implementing ITableEntity or inheriting TableEntity.

代わりに、Azure Storage SDK で CloudTable メソッド パラメーターを使用してテーブルに書き込みます。Alternatively you can use a CloudTable method parameter to write to the table by using the Azure Storage SDK. CloudTable にバインドしようとしてエラー メッセージが表示された場合は、適切な Storage SDK バージョンへの参照があることをご確認ください。If you try to bind to CloudTable and get an error message, make sure that you have a reference to the correct Storage SDK version.

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

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

次のステップNext steps