Slide 1

Slide 1 text

Durable Functionsでつくるモバイル アプリのサーバーレスなバックエンド for 承認フロー 2018/4/21 Global Azure Bootcamp 2018@Tokyo

Slide 2

Slide 2 text

自己紹介 ● 杉田 寿憲 ○ Toshinori Sugita ○ toshi0607 ○ toshi0607 ○ toshi0607 ● Software Engineer@freee ○ 好評の Windows 版に続いて急遽リリースを決めた Mac 版アプリの開発に、Xamarin.Mac を採用し て大幅な開発効率のアップと機能の標準化を実現。 ● 最近の様子 ○ Ruby > JavaScript >>> Go >>>>>> C# ● 『Extensive Xamarin』(共著)発売中!

Slide 3

Slide 3 text

今日のお話 ● Durable Functionsが面白そうなので調べてみた ● Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた ● 触ってみる上で知っておくと捗りそうなポイント

Slide 4

Slide 4 text

今日のお話 ● Durable Functionsが面白そうなので調べてみた ● Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた ● 触ってみる上で知っておくと捗りそうなポイント

Slide 5

Slide 5 text

Durable Functionsとは? ● Azure Functions(、Azure WebJobs)のステートを管理する拡張機能 ● コードでワークフロー(チェーン、並列実行、非同期管理などなど) を実装 ● 役割の異なる3つのバインド(orchestrationClient、orchestrationTrigger、 activityTrigger)とAzure Storage(Queue、Table、BLOB)でワークフローを 制御 ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-overview

Slide 6

Slide 6 text

Durable Functionsとは? ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-sequence

Slide 7

Slide 7 text

Durable Functionsとは? GAの日も遠くなさそう

Slide 8

Slide 8 text

AWS(AWS Lambda)では? ● AWS Step Functionsがある(Azure Logic Appsぽい?) ● Amazonステートメント言語(json形式)でステートマシンを記述 ● ステートにはLambda、アクティビティ(ワーカースクリプト)、エラー処 理、反復処理などを記述し、ワークフローを組み立てる ※https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html

Slide 9

Slide 9 text

今日のお話 ● Durable Functionsが面白そうなので調べてみた ● Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた ● 触ってみる上で知っておくと捗りそうなポイント

Slide 10

Slide 10 text

つくったアプリ ● スタンプカードアプリ。ただし、スタンプ を押すのにはメールでの承認が必要 ● クライアントはXamarin.Forms製のモ バイルアプリ ● バックエンドはDurable Functions製 ※https://github.com/toshi0607/StampCard

Slide 11

Slide 11 text

つくったアプリ     Backend ● Microsoft.NET.Sdk.Functions ● Microsoft.Azure.WebJobs.Extensions.DurableTask ● Microsoft.Azure.WebJobs.Extensions.SendGrid ● Microsoft.Azure.Mobile.Client ※https://github.com/toshi0607/StampCard     MobileClient ● Xamarin.Forms ● Syncfusion.SfCalendar.XForms ● Microsoft.Azure.Mobile.Client

Slide 12

Slide 12 text

承認フロー ● CalendarDate ○ Type: 申請ステータス ■ Status: Reviewing、Approved、Rejected ○ StampAt: カレンダー1日分の日付

Slide 13

Slide 13 text

今日のお話 ● Durable Functionsが面白そうなので調べてみた ● Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた ● 触ってみる上で知っておくと捗りそうなポイント

Slide 14

Slide 14 text

各関数・バインドの役割 ● オーケストレーションクライアント ○ HttpTriggerやQueue Triggerなどで起動 ○ オーケストレーターを操作(開始、強制終了) ○ オーケストレーターの状態(実行中、完了など)をクエリ ○ オーケストレーターにイベントを送信 ● オーケストレーション関数 ○ OrchestrationTriggerで起動 ○ Table Strotageを使いながらオーケストレーションの履歴を管理する ○ 実行履歴をチェックしながら定期的にループしている ○ 様々な制約がある ○ 外部イベントで実行の中断(見かけ上)を再開できる ● アクティビティ関数 ○ ActivityTriggerで起動 ○ 標準仕様に近いFunction ※https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html

Slide 15

Slide 15 text

デバッグのポイント ● オーケストレーターは定期的に再実行される ○ activityやイベント待受のawaitごとに状態をTable Storageに保存 ○ 次回実行時にactivityが完了していたり、イベントを受信したりしていたら先に進める オーケストレーターのブレークポイントは条件付きに ログの吐き出しは条件付きに

Slide 16

Slide 16 text

デバッグのポイント ● オーケストレーションの履歴はTable Storageに保存される ● オーケストレーターのアクティビティ呼び出し、クライアントからの 呼び出しはQueue Storageを経由する ● ログの保存はAzure Functionに準ずるので、Application Insights の有効・無効に注意する Azure Storage Emulator(azurite for Mac)とAzure Storage Explorerを フル活用

Slide 17

Slide 17 text

外部イベントの待ち受け ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-external-events ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-timers とはいえ必要な時はタイムアウトも忘れずに (DurableOrchestrationContextのCreateTimer使用)

Slide 18

Slide 18 text

ふりかえり(Good) ● Durable Functionsを使うのは便利で楽しいけど、実現するための 仕組みや制約を学ぶことはそれ以上に楽しかった ● C#でasync/awaitを書く感覚をもたらしつつ、複雑なアーキテク チャ、ステート・実行環境の制御を隠ぺいしてくれているのは最高 にcool ● クライアントもセットで作ることでより「人の通常操作内でデータの 整合性を保つにはどうすればいいか?」という視点が持てて実感 がわいてよかった

Slide 19

Slide 19 text

ふりかえり(Challenge) ● モバイルからも制御が複雑なバックエンドからも同じデータを触る にあたりトランザクションほしいとか思ったらデータ更新のフロー 見直した方がよいかも ● サンプルなのでクライアントはコードビハインドにもりもり書いてみ ようと思って書いてみたらそれなりに後悔した ● ステータス変更はプッシュ通知やポーリングなどでスタンプリクエ ストする人の「更新」クリックに頼らないようにしたい

Slide 20

Slide 20 text

良質な学習リソース ● [Advent Calendar 2017 Day1] Durable Functions ことはじめ ○ まずはポータルでひととおり動かすのが楽でした ○ プレビューかつ日々開発が進んでいるのですでに雰囲気違うかもしれません ● Durable Functions の概要 (プレビュー) ○ 公式ドキュメントの整備され具合がすごいです ○ パターンごとのサンプル実装を動かすのもよかったです ● Azure/azure-functions-durable-extension ○ OSSなのでコードは読み放題です ○ issueへの回答もめちゃくちゃ速かったです ● Azure Serverless Computing Cookbook ○ 2017年8月発売ながら(申し訳程度に)Durable Functionsにも言及 ○ FunctionsのHttpTriggerしか触ったことがなかったので一からやる分にはユース ケースのイメージがつきやすくよかったです

Slide 21

Slide 21 text

ご清聴ありがとうございました! Durable Functionsでつくる モバイルアプリのサーバーレスなバックエンド for 承認フロー