Azure Serverless ワークショップ Deep Dive : モジュール 5

前回に続いて、今回はモジュール 5  の Deep Dive です。

GitHub: https://github.com/Azure-Samples/azure-serverless-workshop-team-assistant/tree/lang/jp/5-voting-service

モジュール 5 は v1 が付きと無しがありますが、v1 は Windows 環境のみでサポートされる Azure ファンクション v1 の CLI 対応です。ここではマルチプラットフォームである v2 を対象にします。

概要

このモジュールでは投票を行える機能を実装します。以下の絵にあるように、合計 5 つ投票系のファンクションを作成し、Squire ボットに連携する仕組みです。

アーキテクチャ

注意点

今日の時点で確認した限り、CosmosDB の拡張モジュール導入に日本語 UI 環境では失敗します。こちらのモジュールは英語 UI に切り替えて試してください。

プログラムの解析

基本的にはコマンドを実行して、コードをコピーしていけば動作しますが、いくつかポイントを見ていきます。

バインディング

あまり触れてきませんでしたが、Azure ファンクションの特徴の 1 つにバインディングがあります。バインディングは外部サービスなどの連携に利用される技術で、 function.json ファイルで定義され、index.json などメインのコードから利用できます。

1. CreateVotingNode の function.json を開き、内容を確認。はじめのバインディングは、方向が in で名前が req と指定されており、タイプが httpTrigger となっている。これはファンクションが Http リクエストでトリガーされることを示しており、req をコードから利用可能。

image

2. index.js を開き、req の使われ方を確認。HttpRequest オブジェクトのため、body を含んでおり、req.body でデータにアクセス可能。

image

3. 次のバインディングは方向が out で名前が res。

image

4. コード内では結果を返す際に利用。req は関数の引数で渡ってきていたため直接アクセスしているが、res は context に含まれる形。

image

5. 3 つ目は CosmosDB に対する出力用のバインディング。CosmosDB 関連の設定を含み、名前が outputDocument。接続文字列は votingbot_DOCUMENTDB となっており、local.settings.json から値を取得できる仕組み。

image

6. バインディングの仕組みがあるため、CosmosDB に対するデータの書き込みは 1 行。非常にシンプルに記述が可能。

image

7. バインディングは入力または出力には利用が容易だが、このサンプルでは削除処理はメインのコード内で処理している。DeleteVotingNode の index.json を開いて冒頭のモジュール読みこみを確認。接続文字列は共通のため、設定ファイルより読みこまれる process.env から取得。

image

8. 作成した client オブジェクトを使って削除処理を実行。

image

CosmosDB での確認

Azure ポータルから CosmosDB の中身も確認できます。レコード作成のトラブルシューティングにも使えるのでポータルからも操作を確認してください。

まとめ

バインディングを理解できると Azure ファンクションを使いこなすことが出来ます。非常に多くのバインディングをサポートしていますので色々試してください。

中村 憲一郎