Azure Functions における HTTP と Webhook のバインドAzure Functions HTTP and webhook bindings

この記事では、Azure Functions で HTTP バインドを使用する方法について説明します。This article explains how to work with HTTP bindings in Azure Functions. Azure Functions は、HTTP のトリガーと出力バインドをサポートしています。Azure Functions supports HTTP triggers and output bindings.

HTTP トリガーは webhook に応答するようにカスタマイズすることができます。An HTTP trigger can be customized to respond to webhooks. webhook トリガーは JSON ペイロードのみを受け入れ、JSON を検証します。A webhook trigger accepts only a JSON payload and validates the JSON. webhook トリガーには特別なバージョンがあり、そのバージョンでは特定のプロバイダー (GitHub や Slack など) の webhook の処理が容易になります。There are special versions of the webhook trigger that make it easier to handle webhooks from certain providers, such as GitHub and Slack.

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

ヒント

HTTP または webhook のバインディングを使用する予定がある場合は、不適切な HttpClient のインスタンス化によって生じるおそれのあるポートの枯渇を防止してください。If you plan to use the HTTP or WebHook bindings, plan to avoid port exhaustion that can be caused by improper instantiation of HttpClient. 詳細については、「Improper Instantiation antipattern (不適切なインスタンス化の防止策)」の記事を参照してください。For more information, review the article Improper Instantiation antipattern.

トリガーTrigger

HTTP トリガーでは、HTTP 要求で関数を呼び出すことができます。The HTTP trigger lets you invoke a function with an HTTP request. HTTP トリガーを使用して、サーバーなしの API を構築し、webhook に応答することができます。You can use an HTTP trigger to build serverless APIs and respond to webhooks.

既定では、HTTP トリガーは要求に HTTP 200 OK 状態コードおよび空の本文で応答します。By default, an HTTP trigger responds to the request with an HTTP 200 OK status code and an empty body. 応答を変更するには、HTTP 出力バインドを構成します。To modify the response, configure an HTTP output binding.

トリガー - 例Trigger - example

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

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

次の例は、クエリ文字列または HTTP 要求の本文で nameパラメーターを探すプリコンパイル済み C# 関数を示しています。The following example shows a precompiled C# function that looks for a name parameter either in the query string or the body of the HTTP request.

[FunctionName("HttpTriggerCSharp")]
public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, 
    TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

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

次の例は、function.json ファイルのトリガー バインドと、そのバインドが使用される C# スクリプト関数を示しています。The following example shows a trigger binding in a function.json file and a C# script function that uses the binding. この関数は、クエリ文字列または HTTP 要求の本文で name パラメーターを探します。The function looks for a name parameter either in the query string or the body of the HTTP request.

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

{
    "name": "req",
    "type": "httpTrigger",
    "direction": "in",
    "authLevel": "function"
},

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

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

using System.Net;
using System.Threading.Tasks;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info($"C# HTTP trigger function processed a request. RequestUri={req.RequestUri}");

    // parse query parameter
    string name = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
        .Value;

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    // Set name to query string or body data
    name = name ?? data?.name;

    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

HttpRequestMessage の代わりにカスタム オブジェクトにバインドできます。You can bind to a custom object instead of HttpRequestMessage. このオブジェクトは、JSON として解析され、要求の本文から作成されます。This object is created from the body of the request, parsed as JSON. 同様に、型は HTTP 応答出力バインディングに渡すことができ、200 のステータス コードと共に、応答本文として返されます。Similarly, a type can be passed to the HTTP response output binding and returned as the response body, along with a 200 status code.

using System.Net;
using System.Threading.Tasks;

public static string Run(CustomObject req, TraceWriter log)
{
    return "Hello " + req?.name;
}

public class CustomObject {
     public String name {get; set;}
}
}

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

次の例は、function.json ファイルのトリガー バインドと、そのバインドが使用される F# 関数を示しています。The following example shows a trigger binding in a function.json file and an F# function that uses the binding. この関数は、クエリ文字列または HTTP 要求の本文で name パラメーターを探します。The function looks for a name parameter either in the query string or the body of the HTTP request.

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

{
    "name": "req",
    "type": "httpTrigger",
    "direction": "in",
    "authLevel": "function"
},

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

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

open System.Net
open System.Net.Http
open FSharp.Interop.Dynamic

let Run(req: HttpRequestMessage) =
    async {
        let q =
            req.GetQueryNameValuePairs()
                |> Seq.tryFind (fun kv -> kv.Key = "name")
        match q with
        | Some kv ->
            return req.CreateResponse(HttpStatusCode.OK, "Hello " + kv.Value)
        | None ->
            let! data = Async.AwaitTask(req.Content.ReadAsAsync<obj>())
            try
                return req.CreateResponse(HttpStatusCode.OK, "Hello " + data?name)
            with e ->
                return req.CreateErrorResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
    } |> Async.StartAsTask

次の例に示すように、NuGet を使用して FSharp.Interop.Dynamic および Dynamitey アセンブリを参照する project.json ファイルが必要です。You need a project.json file that uses NuGet to reference the FSharp.Interop.Dynamic and Dynamitey assemblies, as shown in the following example:

{
  "frameworks": {
    "net46": {
      "dependencies": {
        "Dynamitey": "1.0.2",
        "FSharp.Interop.Dynamic": "3.0.0"
      }
    }
  }
}

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

次の例は、function.json ファイルのトリガー バインドと、そのバインドを使用する JavaScript 関数を示しています。The following example shows a trigger binding in a function.json file and a JavaScript function that uses the binding. この関数は、クエリ文字列または HTTP 要求の本文で name パラメーターを探します。The function looks for a name parameter either in the query string or the body of the HTTP request.

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

{
    "name": "req",
    "type": "httpTrigger",
    "direction": "in",
    "authLevel": "function"
},

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

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

module.exports = function(context, req) {
    context.log('Node.js HTTP trigger function processed a request. RequestUri=%s', req.originalUrl);

    if (req.query.name || (req.body && req.body.name)) {
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "Hello " + (req.query.name || req.body.name)
        };
    }
    else {
        context.res = {
            status: 400,
            body: "Please pass a name on the query string or in the request body"
        };
    }
    context.done();
};

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

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

webhook - C# の例Webhook - C# example

次の例は、一般的な JSON 要求への応答で HTTP 200 を送信するプリコンパイル済み C# 関数を示しています。The following example shows a precompiled C# function that sends an HTTP 200 in response to a generic JSON request.

[FunctionName("HttpTriggerCSharp")]
public static HttpResponseMessage Run([HttpTrigger(AuthorizationLevel.Anonymous, WebHookType = "genericJson")] HttpRequestMessage req)
{
    return req.CreateResponse(HttpStatusCode.OK);
}

webhook - C# スクリプトの例Webhook - C# script example

次の例は、function.json ファイルの webhook トリガー バインドと、そのバインドが使用される C# スクリプト関数を示しています。The following example shows a webhook trigger binding in a function.json file and a C# script function that uses the binding. この関数は、GitHub の問題に対するコメントをログに記録します。The function logs GitHub issue comments.

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

{
    "webHookType": "github",
    "name": "req",
    "type": "httpTrigger",
    "direction": "in",
},

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

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

#r "Newtonsoft.Json"

using System;
using System.Net;
using System.Threading.Tasks;
using Newtonsoft.Json;

public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
    string jsonContent = await req.Content.ReadAsStringAsync();
    dynamic data = JsonConvert.DeserializeObject(jsonContent);

    log.Info($"WebHook was triggered! Comment: {data.comment.body}");

    return req.CreateResponse(HttpStatusCode.OK, new {
        body = $"New GitHub comment: {data.comment.body}"
    });
}

webhook - F# の例Webhook - F# example

次の例は、function.json ファイルの webhook トリガー バインドと、そのバインドが使用される F# 関数を示しています。The following example shows a webhook trigger binding in a function.json file and an F# function that uses the binding. この関数は、GitHub の問題に対するコメントをログに記録します。The function logs GitHub issue comments.

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

{
    "webHookType": "github",
    "name": "req",
    "type": "httpTrigger",
    "direction": "in",
},

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

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

open System.Net
open System.Net.Http
open FSharp.Interop.Dynamic
open Newtonsoft.Json

type Response = {
    body: string
}

let Run(req: HttpRequestMessage, log: TraceWriter) =
    async {
        let! content = req.Content.ReadAsStringAsync() |> Async.AwaitTask
        let data = content |> JsonConvert.DeserializeObject
        log.Info(sprintf "GitHub WebHook triggered! %s" data?comment?body)
        return req.CreateResponse(
            HttpStatusCode.OK,
            { body = sprintf "New GitHub comment: %s" data?comment?body })
    } |> Async.StartAsTask

webhook - JavaScript の例Webhook - JavaScript example

次の例は、function.json ファイルの webhook トリガー バインドと、そのバインドが使用される JavaScript 関数を示しています。The following example shows a webhook trigger binding in a function.json file and a JavaScript function that uses the binding. この関数は、GitHub の問題に対するコメントをログに記録します。The function logs GitHub issue comments.

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

{
    "webHookType": "github",
    "name": "req",
    "type": "httpTrigger",
    "direction": "in",
},

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

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

```

```javascript
module.exports = function (context, data) {
    context.log('GitHub WebHook triggered!', data.comment.body);
    context.res = { body: 'New GitHub comment: ' + data.comment.body };
    context.done();
};

トリガー - 属性Trigger - attributes

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

属性のコンストラクターのパラメーターに承認レベルと許容される HTTP メソッドを設定できます。また、webhook の種類とルートのテンプレートに対応するプロパティがあります。You can set the authorization level and allowable HTTP methods in attribute constructor parameters, and there are properties for webhook type and route template. これらの設定の詳細については、「トリガー - 構成」を参照してください。For more information about these settings, see Trigger - configuration. メソッド シグネチャでの HttpTrigger 属性を次に示します。Here's an HttpTrigger attribute in a method signature:

[FunctionName("HttpTriggerCSharp")]
public static HttpResponseMessage Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, WebHookType = "genericJson")] HttpRequestMessage req)
{
    ...
}

完全な例については、トリガー - プリコンパイル済み C# の例に関する記事をご覧ください。For a complete example, see Trigger - precompiled C# example.

トリガー - 構成Trigger - configuration

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

function.json のプロパティfunction.json property 属性のプロパティAttribute property 説明Description
typetype 該当なしn/a 必須 - httpTrigger に設定する必要があります。Required - must be set to httpTrigger.
directiondirection 該当なしn/a 必須 - in に設定する必要があります。Required - must be set to in.
namename 該当なしn/a 必須 - 要求または要求本文の関数コードで使用される変数名。Required - the variable name used in function code for the request or request body.
authLevelauthLevel AuthLevelAuthLevel 関数を呼び出すために、要求にどのキーが存在する必要があるかを決定します。Determines what keys, if any, need to be present on the request in order to invoke the function. 承認レベルは、次のいずれかの値になります。The authorization level can be one of the following values:
  • anonymous—API キーは必要ありません。anonymous—No API key is required.
  • function—関数固有の API キーが必要です。function—A function-specific API key is required. 何も指定されなかった場合は、これが既定値になります。This is the default value if none is provided.
  • admin—マスター キーが必要です。admin—The master key is required.
詳しくは、承認キーに関するセクションをご覧ください。For more information, see the section about authorization keys.
methodsmethods メソッドMethods 関数が応答する HTTP メソッドの配列。An array of the HTTP methods to which the function responds. 指定しない場合、関数はすべての HTTP メソッドに応答します。If not specified, the function responds to all HTTP methods. HTTP エンドポイントのカスタマイズ」をご覧ください。See customize the http endpoint.
routeroute RouteRoute 関数がどの要求 URL に応答するかを制御するルート テンプレートを定義します。Defines the route template, controlling to which request URLs your function responds. 何も指定しなかった場合の既定値は <functionname> です。The default value if none is provided is <functionname>. 詳しくは、「HTTP エンドポイントのカスタマイズ」をご覧ください。For more information, see customize the http endpoint.
webHookTypewebHookType WebHookTypeWebHookType 指定したプロバイダーの webhook レシーバーとして機能する HTTP トリガーを構成します。Configures the HTTP trigger to act as a webhook receiver for the specified provider. このプロパティを設定する場合は、methods プロパティを設定しないでください。Don't set the methods property if you set this property. webhook の種類は、次のいずれかの値になります。The webhook type can be one of the following values:
  • genericJson—特定のプロバイダー用のロジックを持たない汎用 webhook エンドポイントです。genericJson—A general-purpose webhook endpoint without logic for a specific provider. この設定では、要求が、HTTP POST を使用していてコンテンツの種類が application/json であるものだけに制限されます。This setting restricts requests to only those using HTTP POST and with the application/json content type.
  • github—関数は GitHub webhook に応答します。github—The function responds to GitHub webhooks. GitHub webhook に対して authLevel プロパティを使用しないでください。Do not use the authLevel property with GitHub webhooks. 詳しくは、この記事で後述する「GitHub webhook」セクションをご覧ください。For more information, see the GitHub webhooks section later in this article.
  • slack—関数は Slack webhook に応答します。slack—The function responds to Slack webhooks. Slack webhook に対して authLevel プロパティを使用しないでください。Do not use the authLevel property with Slack webhooks. 詳しくは、この記事で後述する「Slack webhook」セクションをご覧ください。For more information, see the Slack webhooks section later in this article.

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

C# および F# の関数では、トリガー入力の型を HttpRequestMessage 型かカスタム型として宣言できます。For C# and F# functions, you can declare the type of your trigger input to be either HttpRequestMessage or a custom type. HttpRequestMessage を選択した場合は、要求オブジェクトへのフル アクセスが取得されます。If you choose HttpRequestMessage, you get full access to the request object. カスタム型 の場合、関数は JSON 要求本文を解析して、オブジェクトのプロパティを設定しようとします。For a custom type, Functions tries to parse the JSON request body to set the object properties.

JavaScript 関数の場合、Functions ランタイムは request オブジェクトではなく、要求本文を提供します。For JavaScript functions, the Functions runtime provides the request body instead of the request object. 詳しくは、JavaScript トリガーの例をご覧ください。For more information, see the JavaScript trigger example.

GitHub webhookGitHub webhooks

GitHub webhook に応答するには、まず、HTTP トリガーで関数を作成し、webHookType プロパティを github に設定します。To respond to GitHub webhooks, first create your function with an HTTP Trigger, and set the webHookType property to github. 次に、その URL と API キーを GitHub リポジトリの [webhook の追加] ページにコピーします。Then copy its URL and API key into the Add webhook page of your GitHub repository.

例については、「GitHub webhook でトリガーされる関数の作成」を参照してください。For an example, see Create a function triggered by a GitHub webhook.

Slack webhookSlack webhooks

Slack webhook では、指定しなくてもトークンが自動的に生成されます。そのため、Slack によって生成されたトークンで、関数固有のキーを構成する必要があります。The Slack webhook generates a token for you instead of letting you specify it, so you must configure a function-specific key with the token from Slack. 承認キー」をご覧ください。See Authorization keys.

HTTP エンドポイントのカスタマイズCustomize the HTTP endpoint

既定では、HTTP トリガーまたは WebHook の関数を作成する際に、次の形式のルートを使用して関数のアドレスを指定できます。By default when you create a function for an HTTP trigger, or WebHook, the function is addressable with a route of the form:

http://<yourapp>.azurewebsites.net/api/<funcname> 

HTTP トリガーの入力バインドで省略可能な route プロパティを使用すると、このルートをカスタマイズできます。You can customize this route using the optional route property on the HTTP trigger's input binding. たとえば、次の function.json ファイルでは HTTP トリガーの route プロパティを定義します。As an example, the following function.json file defines a route property for an HTTP trigger:

{
    "bindings": [
    {
        "type": "httpTrigger",
        "name": "req",
        "direction": "in",
        "methods": [ "get" ],
        "route": "products/{category:alpha}/{id:int?}"
    },
    {
        "type": "http",
        "name": "res",
        "direction": "out"
    }
    ]
}

この構成を使用すると、元のルートではなく、次のルートを使用して関数のアドレスを指定できるようになります。Using this configuration, the function is now addressable with the following route instead of the original route.

http://<yourapp>.azurewebsites.net/api/products/electronics/357

これにより、関数のコードはアドレス内で categoryid という 2 つのパラメーターをサポートできます。パラメーターでは任意の Web API ルート制約を使用できます。This allows the function code to support two parameters in the address, category and id. You can use any Web API Route Constraint with your parameters. 次の C# 関数コードは両方のパラメーターを使用します。The following C# function code makes use of both parameters.

public static Task<HttpResponseMessage> Run(HttpRequestMessage req, string category, int? id, 
                                                TraceWriter log)
{
    if (id == null)
        return  req.CreateResponse(HttpStatusCode.OK, $"All {category} items were requested.");
    else
        return  req.CreateResponse(HttpStatusCode.OK, $"{category} item with id = {id} has been requested.");
}

同じルート パラメーターを使用する Node.js 関数コードを次に示します。Here is Node.js function code that uses the same route parameters.

module.exports = function (context, req) {

    var category = context.bindingData.category;
    var id = context.bindingData.id;

    if (!id) {
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: "All " + category + " items were requested."
        };
    }
    else {
        context.res = {
            // status: 200, /* Defaults to 200 */
            body: category + " item with id = " + id + " was requested."
        };
    }

    context.done();
} 

既定では、すべての関数のルートには api というプレフィックスが付きます。By default, all function routes are prefixed with api. host.json ファイルで http.routePrefix プロパティを使用すると、このプレフィックスをカスタマイズまたは削除できます。You can also customize or remove the prefix using the http.routePrefix property in your host.json file. 次の例では、host.json ファイル内でプレフィックスに空の文字列を使用することで、api ルート プレフィックスを削除します。The following example removes the api route prefix by using an empty string for the prefix in the host.json file.

{
    "http": {
    "routePrefix": ""
    }
}

承認キーAuthorization keys

HTTP トリガーを使用すると、セキュリティを強化するためにキーを利用できます。HTTP triggers let you use keys for added security. 標準的な HTTP トリガーは、それらを API キーとして使用できます。キーは、要求内に存在する必要があります。A standard HTTP trigger can use these as an API key, requiring the key to be present on the request. webhook はキーを使用して、プロバイダーで何がサポートされているかに応じてさまざまな方法で要求を承認することができます。Webhooks can use keys to authorize requests in a variety of ways, depending on what the provider supports.

キーは関数アプリの一部として Azure に格納され、保存中は暗号化されます。Keys are stored as part of your function app in Azure and are encrypted at rest. キーを表示するには、新しいキーを作成するか、キーを新しい値にロールし、ポータル内でいずれかの関数に移動して、[管理] を選択します。To view your keys, create new ones, or roll keys to new values, navigate to one of your functions in the portal and select "Manage."

キーには、次の 2 つの種類があります。There are two types of keys:

  • ホスト キー: これらのキーは、関数アプリ内のすべての関数で共有されます。Host keys: These keys are shared by all functions within the function app. API キーとして使用した場合は、関数アプリ内のすべての関数がアクセスできます。When used as an API key, these allow access to any function within the function app.
  • 関数キー: これらのキーは、それらが定義されている特定の関数にのみ適用されます。Function keys: These keys apply only to the specific functions under which they are defined. API キーとして使用した場合は、その関数だけがアクセスできます。When used as an API key, these only allow access to that function.

各キーには、参照用に名前が付けられており、関数レベルおよびホスト レベルで "default" という名前の既定のキーがあります。Each key is named for reference, and there is a default key (named "default") at the function and host level. 関数キーが、ホスト キーよりも優先されます。Function keys take precedence over host keys. 2 つのキーが同じ名前で定義されている場合は、関数キーが使用されます。When two keys are defined with the same name, the function key is always used.

マスター キーは "_master" という名前の既定のホスト キーであり、関数アプリごとに定義されています。The master key is a default host key named "_master" that is defined for each function app. このキーを取り消すことはできません。This key cannot be revoked. このキーによって、ランタイム API に対する管理アクセスが可能になります。It provides administrative access to the runtime APIs. バインド JSON で "authLevel": "admin" を使用するには、要求内にこのキーが存在する必要があります。他のキーである場合は、承認エラーになります。Using "authLevel": "admin" in the binding JSON requires this key to be presented on the request; any other key results in authorization failure.

重要

マスター キーは管理者特権を付与するものであるため、このキーを第三者と共有したり、ネイティブ クライアント アプリケーションで配布したりしないでください。Due to the elevated permissions granted by the master key, you should not share this key with third parties or distribute it in native client applications. 管理者承認レベルを選択する場合は注意が必要です。Use caution when choosing the admin authorization level.

API キーの承認API key authorization

既定では、HTTP トリガーには HTTP 要求内の API キーが必要です。By default, an HTTP trigger requires an API key in the HTTP request. そのため、HTTP 要求は、通常は次のようになります。So your HTTP request normally looks like the following:

https://<yourapp>.azurewebsites.net/api/<function>?code=<ApiKey>

キーは、上記のように code という名前のクエリ文字列変数に含めることも、x-functions-key HTTP ヘッダーに含めることもできます。The key can be included in a query string variable named code, as above, or it can be included in an x-functions-key HTTP header. キーの値には、関数のために定義されている任意の関数キーまたは任意のホスト キーを指定できます。The value of the key can be any function key defined for the function, or any host key.

匿名要求を許可できます。この要求ではキーが不要です。You can allow anonymous requests, which do not require keys. マスター キーを使用するように要求することもできます。You can also require that the master key be used. 既定の承認レベルを変更するには、バインド JSON の authLevel プロパティを使用します。You change the default authorization level by using the authLevel property in the binding JSON. 詳しくは、「トリガー - 構成」をご覧ください。For more information, see Trigger - configuration.

キーと webhookKeys and webhooks

webhook の承認は、HTTP トリガーの一部である webhook レシーバー コンポーネントによって処理されますが、そのメカニズムは webhook の種類によって異なります。Webhook authorization is handled by the webhook receiver component, part of the HTTP trigger, and the mechanism varies based on the webhook type. ただし、各メカニズムはキーに依存します。Each mechanism does, however rely on a key. 既定では、"default" という名前の関数キーが使用されます。By default, the function key named "default" is used. 別のキーを使用するには、次のいずれかの方法で、要求と共にキー名を送信するように webhook プロバイダーを構成します。To use a different key, configure the webhook provider to send the key name with the request in one of the following ways:

  • クエリ文字列: プロバイダーが clientid クエリ文字列パラメーターでキー名を渡します (https://<yourapp>.azurewebsites.net/api/<funcname>?clientid=<keyname> など)。Query string: The provider passes the key name in the clientid query string parameter, such as https://<yourapp>.azurewebsites.net/api/<funcname>?clientid=<keyname>.
  • 要求ヘッダー: プロバイダーが x-functions-clientid ヘッダーでキー名を渡します。Request header: The provider passes the key name in the x-functions-clientid header.

トリガー - host.json のプロパティTrigger - host.json properties

host.json ファイルには、HTTP トリガーの動作を制御する設定が含まれています。The host.json file contains settings that control HTTP trigger behavior.

{
    "http": {
        "routePrefix": "api",
        "maxOutstandingRequests": 20,
        "maxConcurrentRequests": 10,
        "dynamicThrottlesEnabled": false
    }
}
プロパティProperty 既定値Default 説明Description
routePrefixroutePrefix apiapi すべてのルートに適用されるルート プレフィックス。The route prefix that applies to all routes. 既定のプレフィックスを削除するには、空の文字列を使用します。Use an empty string to remove the default prefix.
maxOutstandingRequestsmaxOutstandingRequests -1-1 特定の時点で保持される未処理の要求の最大数。The maximum number of outstanding requests that are held at any given time. この制限には、キューに格納され、まだ実行が開始されていない要求と、処理中の実行が含まれます。This limit includes requests that are queued but have not started executing, as well as any in progress executions. この制限を超える受信要求は、429 "Too Busy" 応答で拒否されます。Any incoming requests over this limit are rejected with a 429 "Too Busy" response. これにより、呼び出し元は時間ベースの再試行戦略を採用でき、要求の最大待機時間の制御にも役立ちます。That allows callers to employ time-based retry strategies, and also helps you to control maximum request latencies. この設定は、スクリプト ホストの実行パス内で発生するキューのみを制御します。This only controls queuing that occurs within the script host execution path. ASP.NET 要求キューなどの他のキューは有効なままで、この設定の影響を受けません。Other queues such as the ASP.NET request queue will still be in effect and unaffected by this setting. 既定値は unbounded です。The default is unbounded.
maxConcurrentRequestsmaxConcurrentRequests -1-1 並列で実行される HTTP 関数の最大数。The maximum number of http functions that will be executed in parallel. これにより同時実行を制御でき、リソース使用率の管理に役立ちます。This allows you to control concurrency, which can help manage resource utilization. たとえば、多くのシステム リソース (メモリ、CPU、ソケット) を消費する HTTP 関数があった場合、同時実行率が高すぎると問題が発生します。For example, you might have an http function that uses a lot of system resources (memory/cpu/sockets) such that it causes issues when concurrency is too high. または、サードパーティのサービスに対して要求を送信する関数があり、その呼び出し速度を制限する必要がある場合です。Or you might have a function that makes outbound requests to a third party service, and those calls need to be rate limited. このような場合は、調整を適用することができます。In these cases, applying a throttle here can help. 既定値は unbounded です。The default is unbounded.
dynamicThrottlesEnableddynamicThrottlesEnabled falsefalse この設定を有効にすると、要求処理パイプラインが、システム パフォーマンス カウンター (接続、スレッド、プロセス、メモリ、CPU など) を定期的にチェックし、カウンターのいずれかが組み込まれた上限閾値 (80%) を超えた場合は、カウンターが正常なレベルに戻るまで要求は 429 "Too Busy" 応答で拒否されます。When enabled, this setting causes the request processing pipeline to periodically check system performance counters like connections/threads/processes/memory/cpu/etc. and if any of those counters are over a built-in high threshold (80%), requests will be rejected with a 429 "Too Busy" response until the counter(s) return to normal levels.

出力Output

HTTP 要求送信者に応答するには、HTTP 出力バインドを使用します。Use the HTTP output binding to respond to the HTTP request sender. このバインドには、HTTP トリガーが必要です。このバインドを使用すると、トリガーの要求に関連付けられている応答をカスタマイズすることができます。This binding requires an HTTP trigger and allows you to customize the response associated with the trigger's request. HTTP 出力バインドが指定されない場合、HTTP トリガーは HTTP 200 OK と空の本文を返します。If an HTTP output binding is not provided, an HTTP trigger returns HTTP 200 OK with an empty body.

出力 - 構成Output - configuration

プリコンパイル済み C# の場合、出力固有のバインド構成プロパティはありません。For precompiled C#, there are no output-specific binding configuration properties. HTTP 応答を送信するには、関数が型 HttpResponseMessage または Task<HttpResponseMessage> を戻すようにします。To send an HTTP response, make the function return type HttpResponseMessage or Task<HttpResponseMessage>.

他の言語では、HTTP 出力バインドは、次の例に示すように、function.json の bindings 配列の JSON オブジェクトとして定義されます。For other languages, an HTTP output binding is defined as a JSON object in the bindings array of function.json, as shown in the following example:

{
    "name": "res",
    "type": "http",
    "direction": "out"
}

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

プロパティProperty 説明Description
typetype http に設定する必要があります。Must be set to http.
directiondirection out に設定する必要があります。Must be set to out.
namename 応答の関数コードで使用される変数名。The variable name used in function code for the response.

出力 - 使用方法Output - usage

HTTP または webhook の呼び出し元に応答するために、出力パラメーターを使用できます。You can use the output parameter to respond to the HTTP or webhook caller. また、言語標準の応答パターンを使用することもできます。You can also use the language-standard response patterns. 応答の例については、トリガーの例およびwebhook の例をご覧ください。For example responses, see the trigger example and the webhook example.

次のステップNext steps