Azure Functionsアプリで、バインディングを設定することで、さまざまなサービスを関数に結び付ける方法を見ていこう。
前回はVisual Studio 2017(以下、VS 2017)を利用して、Azure Functionsアプリ(以下、Functionsアプリ)を開発する際の基本的な流れを見た。今回は、Azure Functionsが提供するバインディング機構の基本的な使い方を見てみよう。
Azure Functionsにおけるバインディングとは、アプリが実行する関数に対する入力と出力をAzure上のサービスやサードパーティーのサービスと結び付けることだ。関数は自分が引き受けられる正しい入力を受け取れば、それを何らかの形で加工/整形して、出力を行う。入力元や出力先がどんなサービスかは関知しない。このような仕組みにすることで、関数をシンプルなものとしたまま、他のサービスと組み合わせて柔軟な処理を行えるようにすることが、バインディングが果たす役割となる。
Azure Functionsでどのようなトリガー/入力バインディング/出力バインディングが利用できるかについては「Azure Functions の開発者向けガイド」を参照されたい。本稿では、Azureが提供するストレージサービスを利用する関数を作ってみよう。
今回作成するFunctionsアプリは、Azureのストレージアカウントが提供するキューにファイル名を指定すると、同じくAzureのストレージアカウントが提供するBLOBコンテナからその名前のファイルについての情報を表示したり、別のコンテナにコピーしたりするものとする。
よって、今回はキューをトリガーとする関数を持つFunctionsアプリプロジェクトを作成する。ただしその前に、Azureポータル上であらかじめこのプロジェクトで使用するストレージアカウント(例:insidernetazfuncst)を作成する(ただし、ストレージアカウントはユニークである必要があるので、insidernetazfuncstストレージアカウントと同じアカウント名は使用できない)。ストレージアカウントを作成したら、取りあえずこのFunctionsアプリで使用するキューを作成しておこう。
同様な手順で、この後でコピー元のファイルを置いておくBLOBコンテナ(incontainerコンテナ)と、ファイルのコピー先となるBLOBコンテナ(outcontainerコンテナ)も作成しておこう。
なお、myqueue-items/incontainer/outcontainerといった名前は、Azureポータル上でFunctionsアプリを作成し、そこでバインディングを作成したときにデフォルトで与えられる名前に合わせたものだ。
準備が整ったら、VS 2017で新規にFunctionsアプリプロジェクトを作成する。ここでは、BlobCopyFuncAppプロジェクトとしよう。プロジェクトを作成したら、ソリューションエクスプローラーで[BlobCopyFuncApp]プロジェクトを右クリックして、コンテキストメニューから[追加]−[新しい項目]を選択して、[新しい項目の追加]ダイアログで[Azure Function]を選択する(プロジェクトの新規作成から関数の追加までの細かな手順は前回を参照)。これにより、[新しい Azure 関数]ダイアログが表示される。
ここでは左側のペーンで[Queue trigger]を選択して、[Connection]欄には「AzureWebJobsStorage」と入力する。[Path]欄はそのままにしておく(上で作成したキューと同じ名前になっている)。
プロジェクトの作成後には、local.settings.jsonファイルを開いて、AzureWebJobsStorageプロパティに、このFunctionsアプリで作成するストレージアカウントの接続文字列を設定しておくのも忘れないようにしよう。以下はVS 2017のCloud Explorerを利用して、接続文字列を設定しているところだ。
生成直後の関数のコードは次のようになっている。
namespace BlobCopyFuncApp
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run(
[QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")]
string myQueueItem,
TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
}
}
}
属性を除けば、実際に実行される関数(Runメソッド)はそれほど難しいものではない。単にmyQueueItemの内容をログに出力するだけのものだ。ただし、これらのパラメーターの値は関数の実行時にランタイムによって設定される。そして、入出力バインディングを設定すると、バインディングに対応したパラメーターが関数に追加され、そのパラメーターを使用して関数に渡す値、関数の戻り値を渡す先を多様に設定できるようになる。
なお、Runメソッドに付加されている[FunctionName]属性は、Azure Functionのランタイムでこの関数の名前を識別するために使用される。myQueueItemパラメーターに付加されている属性については次ページで取り上げよう。
ここまできたら、そのままデバッグ実行を開始してみよう。コンソールウィンドウが開いたら、VS 2017のCloud Explorerで「myqueue-items」キューを開いて、キューにメッセージを追加してみる。すると、関数が実行され、キューに追加したメッセージが処理されたことがコンソールに表示される。
ここまでが前回のおおよそのおさらいとなっている(前回はBLOBにファイルをアップロードすると、メッセージが表示されるようになっていた点は異なるが、大まかな流れは同様だ)。動作が確認できたところで、デバッグ実行を終了して、VS 2017でバインディングを行ってみよう。
Copyright© Digital Advantage Corp. All Rights Reserved.