はじめに
Azure FunctionsのQueue Storageを利用した、あるFunctionから別のFunctionを呼び出す手順を示します。
ソースコード → https://github.com/momotaro98/azure-functions-queue-storage-sample
対象者
- これからAzure Functionsを利用したサービスを作成したい人
- Azure FunctionsでのQueue Storageの使い方がよくわかっていない人
前提条件
- 本記事で記載の実装はC#です。Azure内の設定はその他の言語でも共通です
- Azureのアカウントを所持
- Azure Functionsアプリケーションは生成済み
事前準備
Azure FunctionsにてQueue Storageを利用するには下記の内容を行う必要があります。
- Azure StorageにてQueue Storageを作成する
- Microsoft Azure Storage Exploreを利用してキューを確認する
Azure StorageにてQueue Storageを作成する
① Azure Portal画面から"Storage Accounts"を選択
② 生成済みのAzure Functionsのアプリと紐付いているStorage Accountを選択する
③ "Queues"を選択し、"+Queue"ボタンから作成したい名前のキューを作る
Microsoft Azure Storage Exploreを利用してキューを確認する
作成したテーブルのコンテンツへアクセスするには、Microsoft Azure Storage Explore(無料)というMicrosoftが提供する、専用のクライアントアプリを利用する必要があります。(Windows, Mac, Linux3つともアプリ有り)
アプリをダウンロードし、Queuesに作成したキューがあるかを確認します。
Queue StorageバインドでFunctionから別Functionを呼び出す
本記事は時間トリガー型のFunctionがQueueトリガーのFunctionを発火するといった構成の2つのFunctionを記述します。
呼び出すFunction
Queue Storageを用いて別のFunctionを呼び出す側のFunctionにて、"Outpus"へQueue Storageを設定します。
実装
{
"bindings": [
{
"name": "myTimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 */5 * * * *"
},
{
"type": "queue",
"name": "outputQueueItem",
"queueName": "sample-queue",
"connection": "AzureWebJobsDashboard",
"direction": "out"
}
],
"disabled": false
}
using System;
public static void Run(TimerInfo myTimer, ICollector<string> outputQueueItem, TraceWriter log)
{
// Call CalledFunction by using queue
outputQueueItem.Add("queue-string");
}
呼び出されるFunction
Queue Storageを用いて呼び出される側のFunctionを作成します。
下記図のように新規Function作成にて"QueueTrigger"のFunction形式を選択し、"Queue name"にはStorage Accountsで作成したキュー名を指定します。
実装
呼び出されるFunctionの実装です。
{
"bindings": [
{
"name": "myQueueItem",
"type": "queueTrigger",
"direction": "in",
"queueName": "sample-queue",
"connection": "AzureWebJobsDashboard"
}
],
"disabled": false
}
using System;
public static void Run(string myQueueItem, TraceWriter log)
{
log.Info($"C# Queue trigger function processed: {myQueueItem}");
}
実行
Functionの呼び出し側である、CallerFunction
実行します。
C# Queue trigger function processed: queue-string
呼び出し側がキューへあずけたqueue-string
をトリガーとして呼び出され側のFunctionが実行されることが確認できました。
おわりに
Function間のやり取りは今後Durable Functionと呼ばれるプラットフォームが展開されていくようです。
https://docs.microsoft.com/en-us/azure/azure-functions/durable-functions-overview
こちらの動向もおさえていきたいです。