Skip to main content
“試してみた”で終わらない
サーバーレスアプリケーションの実践開発
2018/01/19 Engineer Lab Fukuoka
株式会社オルターブース 松村 優大
松村 優大 (MLBお兄さん)
• 株式会社オルターブース
• 業務執行役員/CTA
• Microsoft MVP (for VSDT)
2
本日のテーマ
• AIの実現を支援するサーバーレスコンピューティング
• 設計や開発におけるアーキテクチャの重要性
• “試してみた”からもう一歩踏み込む
3
“サーバーレスコンピューティング”
という言葉
4
クラウドベンダー各社で大体同じ
Azure
サーバー、インフラストラクチャ、オペレーティング システムを抽象化したもの
AWS
サーバーのプロビジョニング、スケーリング、および管理は必要ありません
GCP
サーバー管理にまつわる複雑さを解消する、コンピューティングの新しいパラダイム
5
https://azure.microsoft.com/ja-jp/overview/serverless-computing/
https://aws.amazon.com/jp/serverless/
https://cloud.google.com/serverless/?hl=ja
ユーザー的には…
PaaS ≒ Serverless
6
“試してみた”で終わらない
• オルターブースでは自社サービスと受託開発に
サーバーレスの仕組みを投入している
• サーバーレスを採用する理由
• クラウドのリソース間で連携する必要がある
• 稼働時間が限られるエンドポイントがある
• 負荷分散のため
• テストの容易さ
7
“試してみた”で終わらない
• オルターブースでは自社サービスと受託開発に
サーバーレスの仕組みを投入している
• サーバーレスを採用する理由
• クラウドのリソース間で連携する必要がある
• 稼働時間が限られるエンドポイントがある
• 負荷分散のため
• テストの容易さ
8
“試してみた”で終わらない
• オルターブースでは自社サービスと受託開発に
サーバーレスの仕組みを投入している
• サーバーレスを採用する理由
• クラウドのリソース間で連携する必要がある
• 稼働時間が限られるエンドポイントがある
• 負荷分散のため
• テストの容易さ
9
Azureのサーバーレスサービス
10
Azure Functions
11
イベントドリブン型の関数単位のコードを実行
できるサービス。実行時間に対する従量課金プ
ランが提供されている。
Webhookをはじめ、Azure内外のサービスと連
携することができる。(SendGridやTwilioなど)
C#, Node.js, F#が正式サポート。
Java, Python, PHP等がプレビューでサポート。
Logic Apps
12
• コードレスなワークフローを実現
• 使用したリソース料金のみ
• IFTTTみたいなアレ(多数のコネクタ)
2つのサーバーレスサービスの使い分け
Logic Appsで良いとき
• やりたいことがシンプル
• 入力と出力のコネクタが
存在する
• コーディングが苦手
Functionsが良いとき
• 特殊な処理を行いたい
• 複雑な条件分岐
• パッケージを使いたい
• npm
• NuGet
• composer
13
“試してみた”で終わらない
• オルターブースでは自社サービスと受託開発に
サーバーレスの仕組みを投入している
• サーバーレスを採用する理由
• クラウドのリソース間で連携する必要がある
• 稼働時間が限られるエンドポイントがある
• 負荷分散のため
• テストの容易さ
14
クラウドのリソース間連携
例)Webページにアップロードされたファイルをストレージに
保存し、ファイル情報をDBに書き込み、処理が終わるとメール
で通知する。
15
全ての処理が終わるまで
リクエストが終わらない
クラウドのリソース間連携
例)Webページにアップロードされたファイルをストレージに
保存し、ファイル情報をDBに書き込み、処理が終わるとメール
で通知する。
16
アップロードが終われば
リクエストが終わる
じきに後続の処理が終わる
サーバーレスアプリケーションを
開発する上で考慮すべきこと
17
状態管理
サーバーレスアプリケーション側の状態(State)は、
サーバーレスアプリケーション側で管理・更新すべき。
18
状態管理
サーバーレスアプリケーション側の状態(State)は、
サーバーレスアプリケーション側で管理・更新すべき。
19
Webアプリケーションが処理内で
状態を知ることができる範囲
状態管理
サーバーレスアプリケーション側の状態(State)は、
サーバーレスアプリケーション側で管理・更新すべき。
20
Webアプリケーションが処理内で
状態を知ることができる範囲
Webアプリケーションは
処理の完了を待たない
状態管理
サーバーレスアプリケーション側の状態(State)は、
サーバーレスアプリケーション側で管理・更新すべき。
21
Webアプリケーションが処理内で
状態を知ることができる範囲
Webアプリケーションは
処理の完了を待たない
状態や結果の通知
処理エラーを検知する
• ログをApplication Insightsに集約する
• エラーログは運用に昇華させる
• Webhook, メール, OMS, etc.
22
処理エラーへの対処
• リトライできる仕組みを用意する
• https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-host-json
• 失敗したことをユーザーが把握できるようにする
23
処理エラーへの対処
• リトライできる仕組みを用意する
• https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-host-json
• 失敗したことをユーザーが把握できるようにする
24
認証と認可
• 場面:API(Webhook)をホストする
• 認証:リソースにアクセスできるか
• 認可:エンドポイントを実行して良いか
• 対策:API ManagementやAPI Gatewayを前面に配置
25
ウォームアップ
一定時間の実行が無いとアイドル状態になる。
困ること
アイドル状態での起動には時間がかかる。
対策
事前に“モーニングコール”を行う。
または常時接続できる価格プランにする。
26
開発環境の整備
27
ローカル開発環境 (C#)
• Visual Studio 2017
• Azure SDK
• Extension - Azure Functions and Web Jobs Tools
• ローカルエミュレータ(一例)
• Storage Emulator
• Cosmos DB Emulator
• BotFramework Emulator
28
ローカル開発環境 (nodejs)
• Visual Studio Code
• npm: azure-functions-core-tools
• アプリケーション開発サイクルの完結
• プロジェクト作成/デバッグ/デプロイ
• ローカルエミュレータ
• C#, F#も開発できる
29https://docs.microsoft.com/ja-jp/azure/azure-functions/functions-run-local
$ func templates list
C# Templates:
BlobTrigger
HttpTrigger
QueueTrigger
TimerTrigger
JavaScript Templates:
BlobTrigger
HttpTrigger
QueueTrigger
TimerTrigger
まとめ
30
• (単純に)サーバーレスにしたい!
⇒開発者の自己満足
• サービスの品質や満足度を高めるための手段
• コスト(費用)を下げる目的でのサーバーレス採用は
コスト(開発/運用)が上がる可能性あり
• サーバーレスを含め、PaaSでアーキテクチャを構成す
ることが重要 (VMの強制再起動は嫌ですよね?
31
ご清聴ありがとうございました。
32