以下のサイトを参考(そのままコピペ)にして、Functionsで受け付けた情報をAzure Storage キューに書き込み出来るようになりました。
Functions を使用して Azure Storage キューにメッセージを追加する
ちょっとステップアップして、非同期テーブル書き込み処理を実現してみました。
1.HTTPのGETリクエストのパラメータをAzure Storage キューに書き込み
2.Azure Storage キューをトリガーにAzure Storage テーブルに書き込み
1.HTTPのGETリクエストのパラメータをAzure Storage キューに書き込み
<参考にした手順はこちら>
Functions を使用して Azure Storage キューにメッセージを追加する
1. Azure ポータルから関数アプリ(Functions)を作成し、HTTPトリガーのテンプレートを利用すると自動でコードが作成される
3. 出力から「+新しい出力」をAzure Queue Storageを選択
4. 便利なのでStorage Explorerをインストール(接続するときは接続文字列を使うと便利、ストレージ表示名は接続文字列を入力すると自動補完してくれた
5. HTTP Triger1のコードに以下を追加
実行するとHTTPのGETリクエストのクエリパラメータをキューに保存される。
- ブラウザを打鍵した結果
- Storage Explorerの内容
<一部抜粋>
public static async Task Run(HttpRequest req, ICollector outputQueueItem, ILogger log)
outputQueueItem.Add(name);
<全量>
#r "Newtonsoft.Json"
using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
public static async Task<IActionResult> Run(HttpRequest req, ICollector<string> outputQueueItem, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
// パラメーターを使用してキュー メッセージを作成するコードを追加
outputQueueItem.Add(name);
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
2.Azure Storage キューをトリガーにAzure Storage テーブルに書き込み
1. 関数(Azure Queue Storage trigger)の追加を行う
※キュー名はINPUTとするトリガーキューの名前なので、先ほどHTTP Trigger1で出力したキュー名を指定する必要有り
2. 統合>出力からAzure Table Storageを選択
3. Storage Explorerからテーブル「outTable」を作成
using System;
public static void Run(string myQueueItem, ICollector<Person> outputTable, ILogger log)
{
log.LogInformation($"C# Queue trigger function processed: {myQueueItem}");
log.LogInformation($"Adding Person entity {myQueueItem}");
outputTable.Add(
new Person() {
PartitionKey = "Test",
RowKey = $"{myQueueItem}"}
);
}
public class Person
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
}
5. 実行するとHTTPのGETリクエストのクエリパラメータがキューに保存されて、DBに格納される。キューの情報は取り出したら自動で削除してくれるっぽい
- ブラウザを打鍵した結果
- Storage Explorerの内容