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

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

GitHub: https://github.com/Azure-Samples/azure-serverless-workshop-team-assistant/tree/lang/jp/6-scheduler-bot

概要

このモジュールでは Azure ファンクションと Logic Apps を使って Google カレンダーより複数メンバーの共通空き時間を取得する機能を実装します。

Azure ファンクション部分

取得した予定の共通の空きを検索するロジックを実装しています。

Logic Apps 部分

Google カレンダーより予定を取得するロジックを実装しています。

中身の解析

Azure ファンクションに渡すデータ

Azure ファンクションでは最終的に以下のコードで予定を解析しています。つまり body にカレンダーが配列で入り、各カレンダーにスケジュールのイベントがさらに配列で入っています。この形式がポイントで、Logic Apps ではこのデータを作って Azure ファンクションを呼び出すことになります。

image

Logic Apps でデータの作成

Logic Apps では以下の手順で期待されるデータを作っています。

1. 変数として schedules 配列を作成。これが実際にファンクションに引き渡される。

2. Google カレンダーを取得した後、各イベントを schedules の配列アイテムとして追加。これでファンクションで期待されるデータが完成。

Foreach ループのポイント

Logic Apps で Foreach ループを使う際、いくつかポイントがあります。

- ループの元となるアイテムを作成する。今回は split を利用。
- item() でループされているオブジェクトが取得可能。今回はメールアドレスの文字列。

わたっているデータや型を正しくイメージできることが大事です。

注意点

最後に注意点をいくつか。

- Google カレンダーで複数ユーザーの予定を見るためには、事前に Logic Apps で認証したユーザーのカレンダーに、対象カレンダーを追加しておく必要がある。
- ボットにユーザーの一覧を渡す際、スペースを入れない。これは Split 時にスペースの削除を考慮していないため。
- 時刻の扱い。日本時間で計算したいので元のコードから別途考慮が必要。

まとめ

この章でようやく Serverless のキーテクノロジーである Azure ファンクションと Logic Apps 同時に活用しましたが、このような連携が多くなるのが Serverless の特徴かなと思っています。重要な点はどのようにデータを受け渡すかですが、ストレージやイベントハブなど疎結合にできる技術を使えばより柔軟に構成が可能です。是非細かく機能を実装して、多くのモジュールをうまく連携してみてください。

中村 憲一郎