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
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
190
組織を巻き込む大規模プラットフォーム移行戦略 〜50+サービスのマルチリージョン・マルチプロダクト化で学んだステークホルダー協働の実践〜 / Platform migration strategy engaging all stakeholders
toshi0607
2
7.7k
文系学部卒ソフトウェアエンジニアが Georgia Techコンピューターサイエンス修士課程で直面したもの / What a Liberal Arts Graduate Software Engineer Faced in Georgia Tech's Computer Science Master's Program
toshi0607
4
2.1k
50以上のマイクロサービスを支えるアプリケーションプラットフォームの設計・構築の後悔と進化 #CNDW2024 / regrets and evolution of application platform
toshi0607
5
9.7k
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.4k
Knativeで作るDIY FaaS / serverless days tokyo 2019 knative workshop
toshi0607
5
11k
Knativeへの誘い / Go Go Knative!
toshi0607
4
6k
Other Decks in Technology
See All in Technology
第3回しろおびセキュリティスポンサーセッション
log0417
0
140
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
130
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
280
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
440
モバイルアプリ開発概論2026
recruitengineers
PRO
1
300
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
120
Cursor Meetup Sapporo - Cursor物語 続編
cocacola917
0
120
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
もう一度考える SRE チームの作り方・育て方 / Rethinking SRE #1: Building and Growing SRE Teams
rrreeeyyy
5
980
Retriever と Reranker、結局どうする?
kazuaki
2
660
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
JavaScript 研修 (2026)
recruitengineers
PRO
0
260
Featured
See All Featured
A Tale of Four Properties
chriscoyier
163
24k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Are puppies a ranking factor?
jonoalderson
1
3.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
エンジニアに許された特別な時間の終わり
watany
108
250k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.5k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
650
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
New Earth Scene 8
popppiees
3
2.5k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
290
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 承認フロー