Azure Functions(V2) Binding Tips

この記事は、NEXTSCAPE クラウドインテグレーション事業本部 Advent Calendar 2018 17日目の記事です。

こんにちは。最近は HoloLens 開発チームの茨木です。
ネタは Azure Functions です。Functions は HoloLens アプリのAPIとしてもよく使ってます。
この記事では、いくつかのTipsをご紹介します。主に HttpTrigger なのですが。

HTTPヘッダを読む

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    var token = req.Headers["id_token"].FirstOrDefault();
}

HTTPヘッダに書いて返す

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
{
    req.HttpContext.Response.Headers.Add("MyAppToken", "i-am-goodness-user");
}

Microsoft.AspNetCore.Http.HttpRequest なので、なんでもアリですね。

URLをカスタマイズする

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "hoge/moge/index.html")] HttpRequest req,
    ILogger log)
{}

ASP.NET でお馴染みですね。

URLをパラメーターとして分解して、変数に入れてもらう

public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "GetData/{hoge}/{moge}")] HttpRequest req,
    string hoge,
    string moge,
    ILogger log)
{
    log.LogInformation($"hoge={hoge}, moge={moge}");
}

URLをパラメーターとして分解して、変数に入れてもらって、そのままBlobを読む

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "GetData/{hoge}/{moge}")] HttpRequest req,
    string hoge,
    string moge,
    [Blob("BlobContainerName" + "/{hoge}/{moge}.png", FileAccess.Read)] Stream image,
    ILogger log)
{
    log.LogInformation($"hoge={hoge}, moge={moge}");
}

Azure Storage とバインドすると、なかなかすごい事ができます。

ちょっとしたTipsでしたが、このくらいできる事を知っておくと、実際のケースで自然と応用案も出てくるのではないでしょうか。
Azure Functions はいいぞ!