Azure Functions でのトリガーとバインドの概念Azure Functions triggers and bindings concepts

この記事では、Azure Functions のトリガーとバインドの概念的な概要を説明します。This article is a conceptual overview of triggers and bindings in Azure Functions. ここでは、すべてのバインドとすべてのサポートされている言語に共通する機能について説明します。Features that are common to all bindings and all supported languages are described here.

概要Overview

トリガーは、関数を呼び出す方法を定義します。A trigger defines how a function is invoked. 1 つの関数には 1 つのトリガーしか含められません。A function must have exactly one trigger. トリガーにはデータが関連付けられていて、通常そのデータは、その関数をトリガーしたペイロードです。Triggers have associated data, which is usually the payload that triggered the function.

入出力バインドによって、コード内からデータに接続する宣言型の方法が提供されます。Input and output bindings provide a declarative way to connect to data from within your code. バインドは省略可能で、関数は複数の入出力バインドを持つことができます。Bindings are optional and a function can have multiple input and output bindings.

トリガーとバインドを使用すると、操作するサービスの詳細をハードコードする必要がなくなります。Triggers and bindings let you avoid hardcoding the details of the services that you're working with. 関数は、関数パラメーターでデータ (キュー メッセージの内容など) を受信します。Your function receives data (for example, the content of a queue message) in function parameters. 関数の戻り値、out パラメーター、またはコレクター オブジェクトを使用して、(たとえば、キュー メッセージを作成するために) データを送信します。You send data (for example, to create a queue message) by using the return value of the function, an out parameter, or a collector object.

Azure Portal を使用して関数を開発する場合、トリガーとバインドは function.json ファイルに構成されます。When you develop functions by using the Azure portal, triggers and bindings are configured in a function.json file. ポータルではこの構成のために UI が提供されますが、詳細エディターに切り替えることで直接ファイルを編集できます。The portal provides a UI for this configuration but you can edit the file directly by changing to the Advanced editor.

Visual Studio を使用してクラス ライブラリを作成して関数を開発する場合は、メソッドとパラメーターを属性で修飾してトリガーとバインドを構成します。When you develop functions by using Visual Studio to create a class library, you configure triggers and bindings by decorating methods and parameters with attributes.

サポートされるバインディングSupported bindings

次の表は、Azure Functions の 2 つのメジャー バージョンのランタイムでサポートされているバインディングを示します。The following table shows the bindings that are supported in the two major versions of the Azure Functions runtime.

typeType 1.x1.x 2.x2.x トリガーTrigger 入力Input 出力Output
Blob StorageBlob Storage 11
Cosmos DBCosmos DB
Event GridEvent Grid
Event HubsEvent Hubs
外部ファイル 2External File2
外部テーブル 2External Table2
HTTPHTTP 11
Microsoft Graph
Excel テーブル
Microsoft Graph
Excel tables
Microsoft Graph
OneDrive ファイル
Microsoft Graph
OneDrive files
Microsoft Graph
Outlook メール
Microsoft Graph
Outlook email
Microsoft Graph
Events
Microsoft Graph
Events
Microsoft Graph
Auth トークン
Microsoft Graph
Auth tokens
Mobile AppsMobile Apps
Notification HubsNotification Hubs
Queue StorageQueue storage 11
SendGridSendGrid
Service BusService Bus
Table StorageTable storage 11
TimerTimer
TwilioTwilio
WebhookWebhooks

1 2.x では、HTTP、Timer、および Azure Storage を除くすべてのバインドを登録する必要があります。1 In 2.x, all bindings except HTTP, Timer, and Azure Storage must be registered. バインディング拡張機能を登録する」を参照してください。See Register binding extensions.

2 実験的 — サポート対象外で、将来破棄される可能性があります。2 Experimental — not supported and might be abandoned in the future.

どのバインディングがプレビューでどのバインディングが実稼働環境で承認されているかについては、サポートされている言語に関する記事をご覧ください。For information about which bindings are in preview or are approved for production use, see Supported languages.

バインディング拡張機能を登録するRegister binding extensions

Azure Functions ランタイムのバージョン 2.x では、関数アプリで使用するバインディング拡張機能を明示的に登録する必要があります。In version 2.x of the Azure Functions runtime, you must explicitly register the binding extensions that you use in your function app.

拡張機能は、パッケージ名が通常 microsoft.azure.webjobs.extensions で始まる NuGet パッケージとして配信されます。Extensions are delivered as NuGet packages, where the package name typically starts with microsoft.azure.webjobs.extensions. バインディング拡張機能をインストールおよび登録する方法は、次に示す関数の開発方法によって異なります。The way you install and register binding extensions depends on how you develop your functions:

バージョン 2.x には、拡張機能としては提供されない一連のコア バインディングがあります。There is a core set of bindings in version 2.x that are not provided as extensions. HTTP、タイマ、および Azure Storage のトリガーとバインディングでは拡張機能を登録する必要はありません。You do not need to register extensions for the following triggers and bindings: HTTP, timer, and Azure Storage.

Functions ランタイムのバージョン 2.x を使用するように関数アプリを設定する方法については、Azure Functions ランタイム バージョンをターゲットにする方法に関するページを参照してください。For information about how to set a function app to use version 2.x of the Functions runtime, see How to target Azure Functions runtime versions. Functions ランタイムのバージョン 2.x は現在、プレビューの段階です。Version 2.x of the Functions runtime is currently in preview.

このセクションで示されているパッケージ バージョンは、例としてのみ提供されています。The package versions shown in this section are provided only as examples. 関数アプリの他の依存関係に特定の拡張機能のどのバージョンが必要かを特定するには、NuGet.org のサイトを確認してください。Check the NuGet.org site to determine which version of a given extension are required by the other dependencies in your function app.

Visual Studio または VS Code を使用したローカルでの C# 開発Local C# development using Visual Studio or VS Code

Visual Studio または Visual Studio Code を使用して C# で関数をローカルに開発する場合は、単純に拡張機能のための NuGet パッケージを追加する必要があります。When you use Visual Studio or Visual Studio Code to locally develop functions in C#, you simply need to add the NuGet package for the extension.

  • Visual Studio: NuGet Package Manager ツールを使用します。Visual Studio: Use the NuGet Package Manager tools. 次の Install-Package コマンドは、パッケージ マネージャー コンソールから Azure Cosmos DB 拡張機能をインストールします。The following Install-Package command installs the Azure Cosmos DB extension from the Package Manager Console:

    Install-Package Microsoft.Azure.WebJobs.Extensions.CosmosDB -Version 3.0.0-beta6 
    
  • Visual Studio Code: .NET CLI で、次のように dotnet add package コマンドを使用してコマンド プロンプトからパッケージをインストールできます。Visual Studio Code: You can install packages from the command prompt using the dotnet add package command in the .NET CLI, as follows:

    dotnet add package Microsoft.Azure.WebJobs.Extensions.CosmosDB --version 3.0.0-beta6 
    

ローカル開発の Azure Functions Core ToolsLocal development Azure Functions Core Tools

ローカルで関数を開発するときは、ターミナルまたはコマンド プロンプトから Azure Functions Core Tools を使って、必要な拡張機能をインストールできます。When you develop functions locally, you can install the extensions you need by using the Azure Functions Core Tools from the Terminal or from a command prompt. 次の func extensions install コマンドは、Azure Cosmos DB バインド拡張機能をインストールします。The following func extensions install command installs the Azure Cosmos DB binding extension:

func extensions install --package Microsoft.Azure.WebJobs.Extensions.CosmosDB --version <target_version>

<taget_version> をパッケージの特定のバージョンに置き換えます。Replace <taget_version> with a specific version of the package. 有効なバージョンは、NuGet.org の個々のパッケージ ページに記載されています。Valid versions are listed on the individual package pages at NuGet.org.

Azure Portal 開発Azure portal development

関数を作成するか、または既存の関数にバインディングを追加する場合は、追加されるトリガーまたはバインディング用の拡張機能に登録が必要になるとメッセージが表示されます。When you create a function or add a binding to an existing function, you are prompted when the extension for the trigger or binding being added requires registration.

インストールされる特定の拡張機能に関する警告が表示されたら、[インストール] をクリックして拡張機能を登録します。After a warning appears for the specific extension being installed, click Install to register the extension. 各拡張機能は、特定の関数アプリごとに 1 回だけインストールする必要があります。You need only install each extension one time for a given function app.

注意

ポータル内のインストール プロセスは、従量課金プランで最大 10 分かかります。The in-portal installation process can take up to 10 minutes on a consumption plan.

トリガーとバインディングの例Example trigger and binding

Azure Queue Storage に新しいメッセージが表示されるたびに Azure Table Storage に新しい行を書き込むとします。Suppose you want to write a new row to Azure Table storage whenever a new message appears in Azure Queue storage. このシナリオは、Azure Queue Storage トリガーと Azure Table Storage の出力バインドを使用して実装できます。This scenario can be implemented using an Azure Queue storage trigger and an Azure Table storage output binding.

このシナリオ用の function.json ファイルを次に示します。Here's a function.json file for this scenario.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "myqueue-items",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    },
    {
      "name": "$return",
      "type": "table",
      "direction": "out",
      "tableName": "outTable",
      "connection": "MY_TABLE_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

bindings 配列の最初の要素は、Queue Storage トリガーです。The first element in the bindings array is the Queue storage trigger. type および direction プロパティは、トリガーを識別します。The type and direction properties identify the trigger. name プロパティは、キュー メッセージの内容を受信する関数パラメーターを識別します。The name property identifies the function parameter that receives the queue message content. 監視するキューの名前は queueName に含まれ、接続文字列は connection で識別されるアプリ設定に含まれています。The name of the queue to monitor is in queueName, and the connection string is in the app setting identified by connection.

bindings 配列の 2 番目の要素は、Azure Table Storage の出力バインドです。The second element in the bindings array is the Azure Table Storage output binding. type および direction プロパティは、バインドを識別します。The type and direction properties identify the binding. name プロパティは、その関数が (この場合は関数戻り値を使用して) 新しいテーブル行を提供する方法を指定します。The name property specifies how the function provides the new table row, in this case by using the function return value. テーブルの名前は tableName に含まれ、接続文字列は connection で識別されるアプリ設定に含まれています。The name of the table is in tableName, and the connection string is in the app setting identified by connection.

Azure ポータルで function.json の内容を表示して編集するには、関数の [統合] タブにある [詳細エディター] オプションをクリックします。To view and edit the contents of function.json in the Azure portal, click the Advanced editor option on the Integrate tab of your function.

注意

connection の値は、接続文字列自体ではなく、接続文字列を含むアプリ設定の名前です。The value of connection is the name of an app setting that contains the connection string, not the connection string itself. "function.json にサービス シークレットを含めない" というベスト プラクティスを適用するために、バインドでは、アプリ設定に格納された接続文字列を使用します。Bindings use connection strings stored in app settings to enforce the best practice that function.json does not contain service secrets.

このトリガーとバインドで動作する C# のスクリプト コードを次に示します。Here's C# script code that works with this trigger and binding. キュー メッセージの内容を提供するパラメーターの名前が order であることに注意してください。function.jsonname プロパティ値が order であるため、この名前が必要になります。Notice that the name of the parameter that provides the queue message content is order; this name is required because the name property value in function.json is order

#r "Newtonsoft.Json"

using Newtonsoft.Json.Linq;

// From an incoming queue message that is a JSON object, add fields and write to Table storage
// The method return value creates a new row in Table Storage
public static Person Run(JObject order, TraceWriter log)
{
    return new Person() { 
            PartitionKey = "Orders", 
            RowKey = Guid.NewGuid().ToString(),  
            Name = order["Name"].ToString(),
            MobileNumber = order["MobileNumber"].ToString() };  
}

public class Person
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Name { get; set; }
    public string MobileNumber { get; set; }
}

同じ function.json ファイルを JavaScript 関数でも使用できます。The same function.json file can be used with a JavaScript function:

// From an incoming queue message that is a JSON object, add fields and write to Table Storage
// The second parameter to context.done is used as the value for the new row
module.exports = function (context, order) {
    order.PartitionKey = "Orders";
    order.RowKey = generateRandomId(); 

    context.done(null, order);
};

function generateRandomId() {
    return Math.random().toString(36).substring(2, 15) +
        Math.random().toString(36).substring(2, 15);
}

クラス ライブラリでは、同じトリガーとバインディング情報 (—キュー名とテーブル名、ストレージ アカウント、入力と出力の関数パラメーター—) が function.json ファイルではなく、属性によって提供されます。In a class library, the same trigger and binding information — queue and table names, storage accounts, function parameters for input and output — is provided by attributes instead of a function.json file. 次に例を示します。Here's an example:

 public static class QueueTriggerTableOutput
 {
     [FunctionName("QueueTriggerTableOutput")]
     [return: Table("outTable", Connection = "MY_TABLE_STORAGE_ACCT_APP_SETTING")]
     public static Person Run(
         [QueueTrigger("myqueue-items", Connection = "MY_STORAGE_ACCT_APP_SETTING")]JObject order, 
         TraceWriter log)
     {
         return new Person() {
                 PartitionKey = "Orders",
                 RowKey = Guid.NewGuid().ToString(),
                 Name = order["Name"].ToString(),
                 MobileNumber = order["MobileNumber"].ToString() };
     }
 }

 public class Person
 {
     public string PartitionKey { get; set; }
     public string RowKey { get; set; }
     public string Name { get; set; }
     public string MobileNumber { get; set; }
 }

バインドの方向Binding direction

すべてのトリガーとバインドには、function.json ファイルに direction プロパティがあります。All triggers and bindings have a direction property in the function.json file:

  • トリガーの場合、方向は常に in ですFor triggers, the direction is always in
  • 入出力バインドは inout を使用しますInput and output bindings use in and out
  • 一部のバインドは、特殊な方向の inout をサポートしてします。Some bindings support a special direction inout. inout を使用する場合、[統合] タブで使用できるのは詳細エディターのみです。If you use inout, only the Advanced editor is available in the Integrate tab.

クラス ライブラリの属性を使用してトリガーとバインドを構成した場合、その方向は属性コンストラクターで提供されるか、またはパラメーター型から推論されます。When you use attributes in a class library to configure triggers and bindings, the direction is provided in an attribute constructor or inferred from the parameter type.

関数戻り値の使用Using the function return value

戻り値がある言語では、その戻り値に出力バインディングをバインドできます。In languages that have a return value, you can bind an output binding to the return value:

  • C# クラス ライブラリでは、メソッド戻り値に出力バインディング属性を適用します。In a C# class library, apply the output binding attribute to the method return value.
  • その他の言語では、function.json 内の name プロパティを $return に設定します。In other languages, set the name property in function.json to $return.

複数の項目を書き込む必要がある場合は、戻り値の代わりにコレクター オブジェクトを使用します。If you need to write more than one item, use a collector object instead of the return value. 複数の出力バインディングが存在する場合は、そのうちの 1 つにのみ戻り値を使用します。If there are multiple output bindings, use the return value for only one of them.

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

C# の例C# example

出力バインディングに戻り値を使用する C# コードと非同期の例を次に示します。Here's C# code that uses the return value for an output binding, followed by an async example:

[FunctionName("QueueTrigger")]
[return: Blob("output-container/{id}")]
public static string Run([QueueTrigger("inputqueue")]WorkItem input, TraceWriter log)
{
    string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
    log.Info($"C# script processed queue message. Item={json}");
    return json;
}
[FunctionName("QueueTrigger")]
[return: Blob("output-container/{id}")]
public static Task<string> Run([QueueTrigger("inputqueue")]WorkItem input, TraceWriter log)
{
    string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
    log.Info($"C# script processed queue message. Item={json}");
    return Task.FromResult(json);
}

C# スクリプトの例C# script example

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

{
    "name": "$return",
    "type": "blob",
    "direction": "out",
    "path": "output-container/{id}"
}

C# スクリプト コードと非同期の例を次に示します。Here's the C# script code, followed by an async example:

public static string Run(WorkItem input, TraceWriter log)
{
    string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
    log.Info($"C# script processed queue message. Item={json}");
    return json;
}
public static Task<string> Run(WorkItem input, TraceWriter log)
{
    string json = string.Format("{{ \"id\": \"{0}\" }}", input.Id);
    log.Info($"C# script processed queue message. Item={json}");
    return Task.FromResult(json);
}

F# の例F# example

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

{
    "name": "$return",
    "type": "blob",
    "direction": "out",
    "path": "output-container/{id}"
}

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

let Run(input: WorkItem, log: TraceWriter) =
    let json = String.Format("{{ \"id\": \"{0}\" }}", input.Id)   
    log.Info(sprintf "F# script processed queue message '%s'" json)
    json

JavaScript の例JavaScript example

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

{
    "name": "$return",
    "type": "blob",
    "direction": "out",
    "path": "output-container/{id}"
}

JavaScript では、戻り値は context.done の 2 番目のパラメーターに入ります。In JavaScript, the return value goes in the second parameter for context.done:

module.exports = function (context, input) {
    var json = JSON.stringify(input);
    context.log('Node.js script processed queue message', json);
    context.done(null, json);
}

dataType プロパティのバインドBinding dataType property

.NET では、パラメーター型を使用して、入力データのデータ型を定義します。In .NET, use the parameter type to define the data type for input data. たとえば、キュー トリガーのテキストにバインドするには string を、バイナリとして読み取るにはバイト配列を、POCO オブジェクトを逆シリアル化するにはカスタム型を使用します。For instance, use string to bind to the text of a queue trigger, a byte array to read as binary and a custom type to deserialize to a POCO object.

JavaScript などの動的に型指定される言語の場合は、function.json ファイルの dataType プロパティを使用します。For languages that are dynamically typed such as JavaScript, use the dataType property in the function.json file. たとえば、バイナリ形式で HTTP 要求のコンテンツを読み取るには、dataTypebinary に設定します。For example, to read the content of an HTTP request in binary format, set dataType to binary:

{
    "type": "httpTrigger",
    "name": "req",
    "direction": "in",
    "dataType": "binary"
}

dataType のその他のオプションは、streamstring です。Other options for dataType are stream and string.

バインド式とパターンBinding expressions and patterns

トリガーとバインドの最も強力な機能の 1 つは、バインド式です。One of the most powerful features of triggers and bindings is binding expressions. function.json ファイルおよび関数パラメーターとコードでは、さまざまなソースの値に解決される式を使用できます。In the function.json file and in function parameters and code, you can use expressions that resolve to values from various sources.

ほとんどの式は、それを中かっこで囲むことによって識別されます。Most expressions are identified by wrapping them in curly braces. たとえば、キュー トリガー関数では、{queueTrigger} はキュー メッセージ テキストに解決されます。For example, in a queue trigger function, {queueTrigger} resolves to the queue message text. BLOB 出力バインディングの path プロパティが container/{queueTrigger} であり、その関数がキュー メッセージ HelloWorld によってトリガーされる場合は、HelloWorld という名前の BLOB が作成されます。If the path property for a blob output binding is container/{queueTrigger} and the function is triggered by a queue message HelloWorld, a blob named HelloWorld is created.

バインディング式の種類Types of binding expressions

バインディング式 - アプリ設定Binding expressions - app settings

ベスト プラクティスとしては、シークレットや接続文字列は、構成ファイルではなくアプリ設定を使用して管理する必要があります。As a best practice, secrets and connection strings should be managed using app settings, rather than configuration files. これにより、これらのシークレットへのアクセスが制限され、function.json などのファイルをパブリックなソース管理リポジトリに格納することが安全になります。This limits access to these secrets and makes it safe to store files such as function.json in public source control repositories.

環境に基づいて構成を変更するときには、アプリ設定も常に役立ちます。App settings are also useful whenever you want to change configuration based on the environment. たとえば、テスト環境で、別のキューや Blob Storage コンテナーを監視することもできます。For example, in a test environment, you may want to monitor a different queue or blob storage container.

アプリ設定のバインディング式は、他のバインディング式とはさまざまに区別されます。これらは中かっこではなく、パーセント記号で囲まれます。App setting binding expressions are identified differently from other binding expressions: they are wrapped in percent signs rather than curly braces. たとえば、BLOB 出力バインディング パスが %Environment%/newblob.txt であり、Environment アプリ設定値が Development である場合は、BLOB が Development コンテナー内に作成されます。For example if the blob output binding path is %Environment%/newblob.txt and the Environment app setting value is Development, a blob will be created in the Development container.

関数がローカルに実行されている場合、アプリ設定値は local.settings.json ファイルから来ます。When a function is running locally, app setting values come from the local.settings.json file.

トリガーとバインディングの connection プロパティは特殊なケースであり、値をアプリ設定 (パーセント記号なし) として自動的に解決することに注意してください。Note that the connection property of triggers and bindings is a special case and automatically resolves values as app settings, without percent signs.

次の例は、アプリ設定 %input-queue-name% を使用してトリガーの対象となるキューを定義する Azure Queue Storage トリガーです。The following example is an Azure Queue Storage trigger that uses an app setting %input-queue-name% to define the queue to trigger on.

{
  "bindings": [
    {
      "name": "order",
      "type": "queueTrigger",
      "direction": "in",
      "queueName": "%input-queue-name%",
      "connection": "MY_STORAGE_ACCT_APP_SETTING"
    }
  ]
}

クラス ライブラリでも同じ方法を使用できます。You can use the same approach in class libraries:

[FunctionName("QueueTrigger")]
public static void Run(
    [QueueTrigger("%input-queue-name%")]string myQueueItem, 
    TraceWriter log)
{
    log.Info($"C# Queue trigger function processed: {myQueueItem}");
}

バインディング式 - トリガー ファイル名Binding expressions - trigger file name

BLOB トリガーの path は、他のバインディングや関数コード内のトリガー BLOB の名前を参照するために使用できるパターンにすることができます。The path for a Blob trigger can be a pattern that lets you refer to the name of the triggering blob in other bindings and function code. このパターンにはまた、どの BLOB が関数呼び出しをトリガーできるかを指定するフィルター条件を含めることもできます。The pattern can also include filtering criteria that specify which blobs can trigger a function invocation.

たとえば、次の BLOB トリガーのバインディングでは、path パターンは sample-images/{filename} です。これは、filename という名前のバインディング式を作成します。For example, in the following Blob trigger binding, the path pattern is sample-images/{filename}, which creates a binding expression named filename:

{
  "bindings": [
    {
      "name": "image",
      "type": "blobTrigger",
      "path": "sample-images/{filename}",
      "direction": "in",
      "connection": "MyStorageConnection"
    },
    ...

その後、出力バインディングで式 filename を使用して、作成される BLOB の名前を指定できます。The expression filename can then be used in an output binding to specify the name of the blob being created:

    ...
    {
      "name": "imageSmall",
      "type": "blob",
      "path": "sample-images-sm/{filename}",
      "direction": "out",
      "connection": "MyStorageConnection"
    }
  ],
}

関数コードは、filename をパラメーター名として使用して、この同じ値にアクセスできます。Function code has access to this same value by using filename as a parameter name:

// C# example of binding to {filename}
public static void Run(Stream image, string filename, Stream imageSmall, TraceWriter log)  
{
    log.Info($"Blob trigger processing: {filename}");
    // ...
} 

バインド式とパターンを使用するのと同じ機能がクラス ライブラリの属性に適用されます。The same ability to use binding expressions and patterns applies to attributes in class libraries. 次の例では、属性コンストラクター パラメーターは前の function.json の例と同じ path 値です。In the following example, the attribute constructor parameters are the same path values as the preceding function.json examples:

[FunctionName("ResizeImage")]
public static void Run(
    [BlobTrigger("sample-images/{filename}")] Stream image,
    [Blob("sample-images-sm/{filename}", FileAccess.Write)] Stream imageSmall,
    string filename,
    TraceWriter log)
{
    log.Info($"Blob trigger processing: {filename}");
    // ...
}

また、拡張機能などのファイル名の一部のための式を作成することもできます。You can also create expressions for parts of the file name such as the extension. 式を使用する方法および BLOB パス文字列内のパターンの詳細については、ストレージ BLOB バインディングのリファレンスに関するページを参照してください。For more information on how to use expressions and patterns in the Blob path string, see the Storage blob binding reference.

バインディング式 - トリガー メタデータBinding expressions - trigger metadata

トリガーによって提供されるデータ ペイロード (関数をトリガーしたキュー メッセージの内容など) に加え、多くのトリガーは追加のメタデータ値を提供します。In addition to the data payload provided by a trigger (such as the content of the queue message that triggered a function), many triggers provide additional metadata values. これらの値は、C# および F# で入力パラメーターとして使用したり、JavaScript で context.bindings オブジェクトのプロパティとして使用したりできます。These values can be used as input parameters in C# and F# or properties on the context.bindings object in JavaScript.

たとえば、Azure Queue Storage トリガーは、以下のプロパティをサポートしています。For example, an Azure Queue storage trigger supports the following properties:

  • QueueTrigger - 有効な文字列の場合はメッセージの内容をトリガーしますQueueTrigger - triggering message content if a valid string
  • DequeueCountDequeueCount
  • ExpirationTimeExpirationTime
  • IDId
  • InsertionTimeInsertionTime
  • NextVisibleTimeNextVisibleTime
  • PopReceiptPopReceipt

これらのメタデータ値は、function.json ファイルのプロパティでアクセスできます。These metadata values are accessible in function.json file properties. たとえば、キュー トリガーを使用していて、読み取る BLOB の名前がキュー メッセージに含まれているとします。For example, suppose you use a queue trigger and the queue message contains the name of a blob you want to read. 次の例に示すように、function.json ファイルで、BLOB path プロパティの queueTrigger メタデータ プロパティを使用できます。In the function.json file, you can use queueTrigger metadata property in the blob path property, as shown in the following example:

  "bindings": [
    {
      "name": "myQueueItem",
      "type": "queueTrigger",
      "queueName": "myqueue-items",
      "connection": "MyStorageConnection",
    },
    {
      "name": "myInputBlob",
      "type": "blob",
      "path": "samples-workitems/{queueTrigger}",
      "direction": "in",
      "connection": "MyStorageConnection"
    }
  ]

各トリガーのメタデータ プロパティの詳細については、対応するリファレンス記事を参照してください。Details of metadata properties for each trigger are described in the corresponding reference article. 例については、キュー トリガー メタデータに関するセクションを参照してください。For an example, see queue trigger metadata. ドキュメントは、ポータルの [統合] タブの、バインド構成領域の下の [ドキュメント] セクションでも参照できます。Documentation is also available in the Integrate tab of the portal, in the Documentation section below the binding configuration area.

バインディング式 - JSON ペイロードBinding expressions - JSON payloads

トリガー ペイロードが JSON である場合は、同じ関数および関数コードで、他のバインディング用の構成内のそのプロパティを参照できます。When a trigger payload is JSON, you can refer to its properties in configuration for other bindings in the same function and in function code.

次の例は、JSON での BLOB 名を受信する Webhook 関数の function.json ファイルを示しています: {"BlobName":"HelloWorld.txt"}The following example shows the function.json file for a webhook function that receives a blob name in JSON: {"BlobName":"HelloWorld.txt"}. BLOB 入力バインディングが BLOB を読み取り、HTTP 出力バインディングが HTTP 応答で BLOB コンテンツを返します。A Blob input binding reads the blob, and the HTTP output binding returns the blob contents in the HTTP response. BLOB 入力バインディングが BlobName プロパティ ("path": "strings/{BlobName}") を直接参照することによって BLOB 名を取得していることに注意してください。Notice that the Blob input binding gets the blob name by referring directly to the BlobName property ("path": "strings/{BlobName}")

{
  "bindings": [
    {
      "name": "info",
      "type": "httpTrigger",
      "direction": "in",
      "webHookType": "genericJson"
    },
    {
      "name": "blobContents",
      "type": "blob",
      "direction": "in",
      "path": "strings/{BlobName.FileName}.{BlobName.Extension}",
      "connection": "AzureWebJobsStorage"
    },
    {
      "name": "res",
      "type": "http",
      "direction": "out"
    }
  ]
}

C# および F# でこれが機能するには、次の例に示すように、逆シリアル化されるフィールドを定義するクラスが必要です。For this to work in C# and F#, you need a class that defines the fields to be deserialized, as in the following example:

using System.Net;

public class BlobInfo
{
    public string BlobName { get; set; }
}

public static HttpResponseMessage Run(HttpRequestMessage req, BlobInfo info, string blobContents)
{
    if (blobContents == null) {
        return req.CreateResponse(HttpStatusCode.NotFound);
    } 

    return req.CreateResponse(HttpStatusCode.OK, new {
        data = $"{blobContents}"
    });
}

JavaScript では、JSON の逆シリアル化が自動的に実行されます。In JavaScript, JSON deserialization is automatically performed.

module.exports = function (context, info) {
    if ('BlobName' in info) {
        context.res = {
            body: { 'data': context.bindings.blobContents }
        }
    }
    else {
        context.res = {
            status: 404
        };
    }
    context.done();
}

ドット表記Dot notation

JSON ペイロード内のいくつかのプロパティがプロパティを持つオブジェクトである場合は、ドット表記を使用してこれらを直接参照できます。If some of the properties in your JSON payload are objects with properties, you can refer to those directly by using dot notation. たとえば、次のような JSON があるとします。For example, suppose your JSON looks like this:

{"BlobName": {
  "FileName":"HelloWorld",
  "Extension":"txt"
  }
}

FileNameBlobName.FileName として直接参照できます。You can refer directly to FileName as BlobName.FileName. この JSON 形式では、前の例の path プロパティは次のようになります。With this JSON format, here's what the path property in the preceding example would look like:

"path": "strings/{BlobName.FileName}.{BlobName.Extension}",

C# では、次の 2 つのクラスが必要になります。In C#, you would need two classes:

public class BlobInfo
{
    public BlobName BlobName { get; set; }
}
public class BlobName
{
    public string FileName { get; set; }
    public string Extension { get; set; }
}

バインディング式 - GUID を作成するBinding expressions - create GUIDs

{rand-guid} バインド式は GUID を作成します。The {rand-guid} binding expression creates a GUID. function.json ファイル内の次の BLOB パスは、50710cb5-84b9-4d87-9d83-a03d6976a682.txt などの名前を持つ BLOB を作成します。The following blob path in a function.json file creates a blob with a name like 50710cb5-84b9-4d87-9d83-a03d6976a682.txt.

{
  "type": "blob",
  "name": "blobOutput",
  "direction": "out",
  "path": "my-output-container/{rand-guid}"
}

バインディング式 - 現在の時刻Binding expressions - current time

バインド式 DateTimeDateTime.UtcNow に解決されます。The binding expression DateTime resolves to DateTime.UtcNow. function.json ファイル内の次の BLOB パスは、2018-02-16T17-59-55Z.txt などの名前を持つ BLOB を作成します。The following blob path in a function.json file creates a blob with a name like 2018-02-16T17-59-55Z.txt.

{
  "type": "blob",
  "name": "blobOutput",
  "direction": "out",
  "path": "my-output-container/{DateTime}"
}

実行時のバインドBinding at runtime

C# やその他の .NET 言語では、function.json の宣言型のバインドと属性ではなく、命令型のバインド パターンを使用できます。In C# and other .NET languages, you can use an imperative binding pattern, as opposed to the declarative bindings in function.json and attributes. 命令型のバインドは、設計時ではなくランタイム時にバインド パラメーターを計算する必要がある場合に便利です。Imperative binding is useful when binding parameters need to be computed at runtime rather than design time. 詳細については、C# 開発者向けリファレンスまたはC# スクリプト開発者向けリファレンスを参照してください。To learn more, see the C# developer reference or the C# script developer reference.

function.json ファイル スキーマfunction.json file schema

function.json ファイル スキーマは http://json.schemastore.org/function から入手できます。The function.json file schema is available at http://json.schemastore.org/function.

バインド エラーの処理Handling binding errors

Azure Functions のトリガーとバインディングはさまざまな Azure サービスと通信します。Azure Functions triggers and bindings communicate with various Azure services. これらのサービスと統合する際、基になる Azure サービスの API からのエラーが発生する場合があります。When integrating with these services, you may have errors raised that originate from the APIs of the underlying Azure services. エラーは、REST またはクライアント ライブラリを使用して、関数コードから他のサービスと通信しようとした場合に発生することもあります。Errors can also occur when you try to communicate with other services from your function code by using REST or client libraries. データの損失を防ぎ、関数を適切に動作させるには、いずれのソースからのエラーも処理することが重要です。To avoid loss of data and ensure good behavior of your functions, it is important to handle errors from either source.

ほとんどのトリガーでは、関数の実行時にエラーが発生した場合に組み込み再試行がありません。For most triggers, there is no built-in retry when errors occur during function execution. 再試行がサポートされている 2 つのトリガーは、Azure Queue Storage と Azure Blob Storage です。The two triggers that have retry support are Azure Queue storage and Azure Blob storage. 既定では、これらのトリガーは最大 5 回再試行されます。By default, these triggers are retried up to five times. 5 回目の再試行後に、両方のトリガーが特別な有害キューにメッセージを書き込みます。After the fifth retry, both triggers write a message to a special poison queue.

関数でエラーが発生したときにトリガー情報の損失を防ぐために、関数コードで、try-catch ブロックを使用してエラーを受け取ることをお勧めします。To prevent loss of trigger information should an error occur in your function, we recommend that you use try-catch blocks in your function code to catch any errors. エラーが発生したときに、トリガーによって関数に渡される情報が特別な "有害" メッセージ キューに書き込まれます。When an error occurs, write the information passed into the function by the trigger to a special "poison" message queue. この方法は、Blob ストレージ トリガーによって使用されるものと同じです。This approach is the same one used by the Blob storage trigger.

この方法では、エラーにより失われた可能性のあるトリガー イベントをキャプチャし、他の関数を使用してこれらを後で再試行して、格納されている情報を使って有害キューからのメッセージを処理できます。In this way, you can capture trigger events that could be lost due to errors and retry them at a later time using another function to process messages from the poison queue using the stored information.

Functions でサポートされているさまざまなサービスに関連するすべてのエラー トピックへのリンクについては、概要トピック「Azure Functions error handling (Azure Functions のエラー処理)」の「Binding error codes (バインド エラー コード)」セクションを参照してください。For links to all relevant error topics for the various services supported by Functions, see the Binding error codes section of the Azure Functions error handling overview topic.

次の手順Next steps

特定のバインドの詳細については、以下の記事を参照してください。For more information on a specific binding, see the following articles: