Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Durable Functionsで作るモバイルアプリのサーバーレスなバックエンド for 承...
Search
Toshinori Sugita
April 20, 2018
Technology
8.7k
1
Share
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
More Decks by Toshinori Sugita
See All by Toshinori Sugita
GKEを中心としたマルチプロダクト・マルチリージョン対応アプリケーションプラットフォームの継続的改善 / continuous improvement of GKE based application platform
toshi0607
1
170
組織を巻き込む大規模プラットフォーム移行戦略 〜50+サービスのマルチリージョン・マルチプロダクト化で学んだステークホルダー協働の実践〜 / Platform migration strategy engaging all stakeholders
toshi0607
2
6.6k
文系学部卒ソフトウェアエンジニアが Georgia Techコンピューターサイエンス修士課程で直面したもの / What a Liberal Arts Graduate Software Engineer Faced in Georgia Tech's Computer Science Master's Program
toshi0607
4
1.8k
50以上のマイクロサービスを支えるアプリケーションプラットフォームの設計・構築の後悔と進化 #CNDW2024 / regrets and evolution of application platform
toshi0607
5
9.3k
OPA and cloud resources
toshi0607
1
14k
KompalWeather: Serverless Sauna Service with Cloud Run
toshi0607
1
13k
Knativeで作るDIY FaaS / serverless days fukuoka 2019 knative workshop
toshi0607
1
5.3k
Knativeで作るDIY FaaS / serverless days tokyo 2019 knative workshop
toshi0607
5
11k
Knativeへの誘い / Go Go Knative!
toshi0607
4
5.9k
Other Decks in Technology
See All in Technology
生成AI時代に信頼性をどう保ち続けるか - Policy as Code の実践
akitok_
1
490
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
100k
セキュリティ対策、何からはじめる? CloudNative環境の脅威モデリングと リスク評価実践入門 #cloudnativekaigi
varu3
5
1k
クラウドからエッジまで ~ 1,700台を支える監視設計~
optfit
0
110
Gaussian Splattingの実用化 - 映像制作への展開
gpuunite_official
0
200
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
6
1.1k
React Compiler導入の効果と運用の工夫
kakehashi
PRO
3
270
Redmine次期バージョン7.0の注目新機能解説 — UI/UX強化と連携強化を中心に
vividtone
1
170
AI-Assisted Contributions and Maintainer Load - PyCon US 2026
pauloxnet
1
180
オライリーイベント登壇資料「鉄リサイクル・産廃業界におけるAI技術実応用のカタチ」
takarasawa_
0
410
既存プロダクトQAから新規プロダクトQAへ
ryotakahashi
0
160
続 運用改善、不都合な真実 〜 物理制約のない運用改善はほとんど無価値 / 20260518-ssmjp-kaizen-no-value-without-physical-constraints
opelab
2
250
Featured
See All Featured
Between Models and Reality
mayunak
4
290
Exploring anti-patterns in Rails
aemeredith
3
360
Automating Front-end Workflow
addyosmani
1370
200k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
200
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
530
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
190
BBQ
matthewcrist
89
10k
Utilizing Notion as your number one productivity tool
mfonobong
4
300
Rails Girls Zürich Keynote
gr2m
96
14k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
440
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
530
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
120
Transcript
Durable Functionsでつくるモバイル アプリのサーバーレスなバックエンド for 承認フロー 2018/4/21 Global Azure Bootcamp 2018@Tokyo
自己紹介 • 杉田 寿憲 ◦ Toshinori Sugita ◦ toshi0607 ◦
toshi0607 ◦ toshi0607 • Software Engineer@freee ◦ 好評の Windows 版に続いて急遽リリースを決めた Mac 版アプリの開発に、Xamarin.Mac を採用し て大幅な開発効率のアップと機能の標準化を実現。 • 最近の様子 ◦ Ruby > JavaScript >>> Go >>>>>> C# • 『Extensive Xamarin』(共著)発売中!
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
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
Durable Functionsとは? ※https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-functions-sequence
Durable Functionsとは? GAの日も遠くなさそう
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
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
つくったアプリ • スタンプカードアプリ。ただし、スタンプ を押すのにはメールでの承認が必要 • クライアントはXamarin.Forms製のモ バイルアプリ • バックエンドはDurable Functions製
※https://github.com/toshi0607/StampCard
つくったアプリ 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
承認フロー • CalendarDate ◦ Type: 申請ステータス ▪ Status: Reviewing、Approved、Rejected ◦
StampAt: カレンダー1日分の日付
今日のお話 • Durable Functionsが面白そうなので調べてみた • Xamarin.FormsとDurable Functionsでサンプルアプリをつくって みた • 触ってみる上で知っておくと捗りそうなポイント
各関数・バインドの役割 • オーケストレーションクライアント ◦ HttpTriggerやQueue Triggerなどで起動 ◦ オーケストレーターを操作(開始、強制終了) ◦ オーケストレーターの状態(実行中、完了など)をクエリ
◦ オーケストレーターにイベントを送信 • オーケストレーション関数 ◦ OrchestrationTriggerで起動 ◦ Table Strotageを使いながらオーケストレーションの履歴を管理する ◦ 実行履歴をチェックしながら定期的にループしている ◦ 様々な制約がある ◦ 外部イベントで実行の中断(見かけ上)を再開できる • アクティビティ関数 ◦ ActivityTriggerで起動 ◦ 標準仕様に近いFunction ※https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html
デバッグのポイント • オーケストレーターは定期的に再実行される ◦ activityやイベント待受のawaitごとに状態をTable Storageに保存 ◦ 次回実行時にactivityが完了していたり、イベントを受信したりしていたら先に進める オーケストレーターのブレークポイントは条件付きに ログの吐き出しは条件付きに
デバッグのポイント • オーケストレーションの履歴はTable Storageに保存される • オーケストレーターのアクティビティ呼び出し、クライアントからの 呼び出しはQueue Storageを経由する • ログの保存はAzure
Functionに準ずるので、Application Insights の有効・無効に注意する Azure Storage Emulator(azurite for Mac)とAzure Storage Explorerを フル活用
外部イベントの待ち受け ※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使用)
ふりかえり(Good) • Durable Functionsを使うのは便利で楽しいけど、実現するための 仕組みや制約を学ぶことはそれ以上に楽しかった • C#でasync/awaitを書く感覚をもたらしつつ、複雑なアーキテク チャ、ステート・実行環境の制御を隠ぺいしてくれているのは最高 にcool •
クライアントもセットで作ることでより「人の通常操作内でデータの 整合性を保つにはどうすればいいか?」という視点が持てて実感 がわいてよかった
ふりかえり(Challenge) • モバイルからも制御が複雑なバックエンドからも同じデータを触る にあたりトランザクションほしいとか思ったらデータ更新のフロー 見直した方がよいかも • サンプルなのでクライアントはコードビハインドにもりもり書いてみ ようと思って書いてみたらそれなりに後悔した • ステータス変更はプッシュ通知やポーリングなどでスタンプリクエ
ストする人の「更新」クリックに頼らないようにしたい
良質な学習リソース • [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しか触ったことがなかったので一からやる分にはユース ケースのイメージがつきやすくよかったです
ご清聴ありがとうございました! Durable Functionsでつくる モバイルアプリのサーバーレスなバックエンド for 承認フロー