Azure Serverless ワークショップ Deep Dive : モジュール 5
前回に続いて、今回はモジュール 5 の Deep Dive です。
モジュール 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 をコードから利用可能。
2. index.js を開き、req の使われ方を確認。HttpRequest オブジェクトのため、body を含んでおり、req.body でデータにアクセス可能。
3. 次のバインディングは方向が out で名前が res。
4. コード内では結果を返す際に利用。req は関数の引数で渡ってきていたため直接アクセスしているが、res は context に含まれる形。
5. 3 つ目は CosmosDB に対する出力用のバインディング。CosmosDB 関連の設定を含み、名前が outputDocument。接続文字列は votingbot_DOCUMENTDB となっており、local.settings.json から値を取得できる仕組み。
6. バインディングの仕組みがあるため、CosmosDB に対するデータの書き込みは 1 行。非常にシンプルに記述が可能。
7. バインディングは入力または出力には利用が容易だが、このサンプルでは削除処理はメインのコード内で処理している。DeleteVotingNode の index.json を開いて冒頭のモジュール読みこみを確認。接続文字列は共通のため、設定ファイルより読みこまれる process.env から取得。
8. 作成した client オブジェクトを使って削除処理を実行。
CosmosDB での確認
Azure ポータルから CosmosDB の中身も確認できます。レコード作成のトラブルシューティングにも使えるのでポータルからも操作を確認してください。
まとめ
バインディングを理解できると Azure ファンクションを使いこなすことが出来ます。非常に多くのバインディングをサポートしていますので色々試してください。
中村 憲一郎