Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Durable Functionsで作るモバイルアプリのサーバーレスなバックエンド for 承認フロー / Serverless Mobile Backend using Durable Functions for approval flow

Durable Functionsで作るモバイルアプリのサーバーレスなバックエンド for 承認フロー / Serverless Mobile Backend using Durable Functions for approval flow

Global Azure Bootcamp 2018@TokyoのLT資料です
https://jazug.connpass.com/event/81865/

Toshinori Sugita

April 20, 2018
Tweet

More Decks by Toshinori Sugita

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. 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

    View Slide

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

    View Slide

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

    View Slide

  8. 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

    View Slide

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

    View Slide

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

    View Slide

  11. つくったアプリ
        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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 外部イベントの待ち受け
    ※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使用)

    View Slide

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

    View Slide

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

    View Slide

  20. 良質な学習リソース
    ● [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しか触ったことがなかったので一からやる分にはユース
    ケースのイメージがつきやすくよかったです

    View Slide

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

    View Slide