Azure Functions あれこれ
JAZUG札幌支部(きたあず) 第17回勉強会
2018/01/27
Yasuaki Matsuda
自己紹介
札幌在住、.NET系の開発がお仕事
JAZUG札幌支部のスタッフ
2016年~2017年 Microsoft MVP Award を受賞
カテゴリはMicrosoft Azure
Blog:http://vnext-y-blog.azurewebsites.net/
Twitter:@DarkCrash3
Facebook:vnext.y
GitHub:darkcrash
Mvp:profile
Copyright© 2015, JAZUG All Rights Reserved.
2
3
JAZUG 札幌支部(きたあず)
■正式名称
Japan Azure User Group 札幌支部 / 略称:きたあず
■活動概要
Cloudにちょっと興味のあるゆるふわな方から実ビジネスで
使用される方まで学べる勉強会を開催しています。
■Webサイト
http://kitaazu.azurewebsites.net/
きたあずちゃん
(@kitaazu_chan)
今日のお伝えしたいこと
Azure Functions の概要
Visual Studio 2017
Visual Studio Code
あれこれ
Copyright© 2015, JAZUG All Rights Reserved.
4
Microsoft Azure
概要
Copyright© 2015, JAZUG All Rights Reserved.
5
Microsoft Azure
Microsoft が提供している
パブリッククラウドサービス
42
7
https://azure.microsoft.com/ja-jp/regions/
Copyright© 2015, JAZUG All Rights Reserved.
8
Copyright© 2015, JAZUG All Rights Reserved.
9
Azure Functions
概要
Copyright© 2015, JAZUG All Rights Reserved.
10
Azure Functions
2016/11/15 GA!
サーバーレス
課金は、実行・リソース
単位となる
実装が必要
テンプレートがある
Copyright© 2015, JAZUG All Rights Reserved.
11
サーバーレスといってる部分
サーバーのインスタンスが常駐しない
何かのトリガーで実際に動く(プロセスが起動する)
Http Webhook Timer Blob Queue EventHub
トリガー、入力、出力は管理される
Functionsはその入出力に実装をするという感じ
起動に時間がかかるので、
応答速度を求めるものには向いていない
Copyright© 2015, JAZUG All Rights Reserved.
12
Azure Functions の価格
Copyright© 2015, JAZUG All Rights Reserved.
13詳しくは公式を参照してね
https://azure.microsoft.com/ja-jp/pricing/details/functions/
Azure Functions の価格リソース使用量
Copyright© 2015, JAZUG All Rights Reserved.
14詳しくは公式を参照してね
https://azure.microsoft.com/ja-jp/pricing/details/functions/
Functions では、ギガバイト秒 (GB 秒) 単位での実際のリソー
ス使用量に基づいて課金されます。実際のリソース使用量は、
平均メモリ サイズ (GB) に関数の実行にかかった時間 (秒) を乗
じて計算されます。関数によって使用されたメモリは、128
MB 単位で切り上げて測定されます。最大メモリ サイズは
1,536 MB です。実行時間は 100 ミリ秒単位で切り上げて計算
されます。1 つの関数の実行の最小実行時間は 100 ミリ秒、最
小メモリは 128 MB です。Functions の価格には、月間
400,000 GB 秒の無料提供が含まれています。
Copyright© 2015, JAZUG All Rights Reserved.
15
TriggerInput
Function Signature
Output
Application config
外部サービスのキーなど
外部サービス
(Storage, Cognitive etc...)
Function Body
Trigger, Input, Output
はfunction.jsonで決める
Visual Studio 2017
概要
Copyright© 2015, JAZUG All Rights Reserved.
16
Visual Studio 2017
Copyright© 2015, JAZUG All Rights Reserved.
17
Visual Studio 2017
Copyright© 2015, JAZUG All Rights Reserved.
18
Visual Studio 2017 Installer
Copyright© 2015, JAZUG All Rights Reserved.
19
Visual Studio Code
概要
Copyright© 2015, JAZUG All Rights Reserved.
20
Copyright© 2015, JAZUG All Rights Reserved.
21
Visual Studio Code
ローカルデバッグ
以下をサポート
JavaScriptベースのFunctions
C#ベースのFunctions (NEW 2018-01-25)
JavaベースのFunctions
新規プロジェクト、新規Functions作成
Azure Function Apps の操作
作成、削除、開始、停止、再開、そして、デプロイ
JSONインテリセンス function.json host.json proxies.json
Copyright© 2015, JAZUG All Rights Reserved.
22
Copyright© 2015, JAZUG All Rights Reserved.
23
Visual Studio 2017
テンプレート
Timer Trigger
Visual Studio 2017 のテンプレート
Copyright© 2015, JAZUG All Rights Reserved.
25
Visual Studio 2017 のテンプレート
Copyright© 2015, JAZUG All Rights Reserved.
26
Visual Studio 2017 のテンプレート
Copyright© 2015, JAZUG All Rights Reserved.
27
CRON式
{second} {minute} {hour} {day} {month} {day-of-week}
Visual Studio 2017 のテンプレート
Copyright© 2015, JAZUG All Rights Reserved.
28
Visual Studio 2017 のテンプレート
Copyright© 2015, JAZUG All Rights Reserved.
29
Azure へのデプロイ
Visual Studio 2017 から
Copyright© 2015, JAZUG All Rights Reserved.
30
Visual Studio 2017 からAzureにDeploy
Copyright© 2015, JAZUG All Rights Reserved.
31
Visual Studio 2017 からAzureにDeploy
Copyright© 2015, JAZUG All Rights Reserved.
32
Visual Studio 2017 からAzureにDeploy
Copyright© 2015, JAZUG All Rights Reserved.
33
Visual Studio 2017 からAzureにDeploy
Copyright© 2015, JAZUG All Rights Reserved.
34
Visual Studio 2017 からAzureにDeploy
Copyright© 2015, JAZUG All Rights Reserved.
35
リモートデバッグ
Copyright© 2015, JAZUG All Rights Reserved.
36
リモートデバッグ
サーバーエクスプローラー
もしくはCloud Explorer
から、デバッガーのアタッチ
Copyright© 2015, JAZUG All Rights Reserved.
37
リモートデバッグ
リモートデバッグで
変数を書き換え
ポータルのログが
異なる結果となっている
ことを確認できる
Azureで動いているものが
書き変わったと
Copyright© 2015, JAZUG All Rights Reserved.
38
スケールアウトと
スケールアップ
多数の操作でどうなるか
スケールアウトとスケールアップ
Triggerによって自動的に開始される。並列で動作する。
よって、スケーリングを意識する場面がない。
スケーリングからも解放!
実装は、128MB 100ms単位でカウントされていることを意識
しておけばいいと思われる
メモリ、時間共に切り上げ
Copyright© 2015, JAZUG All Rights Reserved.
40
Azure Functions の使い方
Functions を含むアーキテクチャ 1
Copyright© 2015, JAZUG All Rights Reserved.
42
https://azure.microsoft.com/ja-jp/solutions/architecture/mobile-app-social-with-authentication/
Azure Functions を使用して、サー
バーレスなバックグラウンド処理を行
います。たとえば、コンテナーに新し
い BLOB が追加されると、Azure
Functions によって自動的にサイズ
が変更されます。別の Azure
Functions は、バックグラウンドの複
数の画像を削除するために、キュー
のメッセージをリッスンすることがで
きます。
Functions を含むアーキテクチャ 2
Copyright© 2015, JAZUG All Rights Reserved.
43
https://azure.microsoft.com/ja-jp/solutions/architecture/mobile-app-social-with-authentication/
Azure Functions は、Web サイトからユーザー クリックスト
リーム データを取り込んで、Azure Cosmos DB から既存の
ユーザー履歴を読み取ります。これらのデータはその後、
Machine Learning Web サービスを通して実行されるか、
Redis Cache でコールド スタート データと一緒に使用されて、
製品アフィニティ スコアを取得します。
製品アフィニティ スコアは、パーソナライズされたプランのロ
ジックと一緒に使用され、ユーザーに提案すべき最も関連性
の高いプランを決定します。
Event Grid Preview
サーバーレスの味方
Copyright© 2015, JAZUG All Rights Reserved.
44
Event Grid Preview
2017/8/16のBlogでアナウンスされたサービス
https://azure.microsoft.com/ja-jp/blog/introducing-azure-event-grid-an-event-service-for-modern-applications/
記事にあるように、サーバーレス向け (Functions, Logic Apps)
AMQPを実装するEvent Hubとは異なり、シンプルなWeb API、Web
Hookを利用する
送信側、受信側を1対多、多対1などにできる。
イベントのフィルター処理、再配信、高速(数百万イベント/秒)
シンプルなこともあってリソースをあまり使わない
100万回あたり、30.60- 無料枠 100,000回の操作
Preview中は半額(上記)
Copyright© 2015, JAZUG All Rights Reserved.
45
Function Proxy
Copyright© 2015, JAZUG All Rights Reserved.
46
Function Proxy
Copyright© 2015, JAZUG All Rights Reserved.
47
指定したURLをプ
ロキシする。
ルートテンプレー
トによるURLの変
更が可能
Bot Service
Functions Bot
https://azure.microsoft.com/ja-jp/services/bot-service/
Copyright© 2015, JAZUG All Rights Reserved.
48
Cosmos DB
Copyright© 2015, JAZUG All Rights Reserved.
49
Linux で関数 (プレビュー)
Copyright© 2015, JAZUG All Rights Reserved.
50
Linux で関数 (プレビュー)
https://docs.microsoft.com/ja-jp/azure/azure-
functions/functions-create-function-linux-custom-image
Docker Image を作成し、Docker Hub または、レジストリに
アップロード
Linux App Service プランを作り、デプロイする
Copyright© 2015, JAZUG All Rights Reserved.
51
以前に作ってみたもの
Demonstration
Power BI のストリーミングデータセットへ
Copyright© 2015, JAZUG All Rights Reserved.
52
Copyright© 2015, JAZUG All Rights Reserved.
53
Power BI のストリーミングデータセット
Copyright© 2015, JAZUG All Rights Reserved.
54
構成
Copyright© 2015, JAZUG All Rights Reserved.
55
Timer Trigger
(Per 5 sec)
Twitter
(API + Tweetinvi)
Power BI
(ストリーミングデータセット)
Dashboard
Text Analytics
Translator Text
(API + Swagger)
Push
(Web API)
Copyright© 2015, JAZUG All Rights Reserved.
56
このFunctionには、状態によって動きを変える必要がある
・多重起動しないこと
・前回実行時までに検索したツイートの情報を保持する必
要がある
ステートフルにならないか・・・
そこで・・・・
Durable Functions (preview)
Copyright© 2015, JAZUG All Rights Reserved.
57
Durable Functions の概要 (プレビュー)
https://docs.microsoft.com/ja-jp/azure/azure-
functions/durable-functions-overview
パターン #1: 関数チェーン
パターン #2: ファンアウト/ファンイン
パターン #3: 非同期 HTTP API
パターン #4: ステートフル シングルトン
パターン #5: 人による操作
Copyright© 2015, JAZUG All Rights Reserved.
58
Durable Functions の概要 (プレビュー)
パターン #1: 関数チェーン
Copyright© 2015, JAZUG All Rights Reserved.
59
Durable Functions の概要 (プレビュー)
パターン #1: 関数チェーン
Copyright© 2015, JAZUG All Rights Reserved.
60
Durable Functions の概要 (プレビュー)
パターン #2: ファンアウト/ファンイン
Copyright© 2015, JAZUG All Rights Reserved.
61
Durable Functions の概要 (プレビュー)
パターン #2: ファンアウト/ファンイン
Copyright© 2015, JAZUG All Rights Reserved.
62
Durable Functions の概要 (プレビュー)
パターン #3: 非同期 HTTP API
Copyright© 2015, JAZUG All Rights Reserved.
63
Durable Functions の概要 (プレビュー)
パターン #3: 非同期 HTTP API
Copyright© 2015, JAZUG All Rights Reserved.
64
Durable Functions の概要 (プレビュー)
パターン #4: ステートフル シングルトン
Copyright© 2015, JAZUG All Rights Reserved.
65
Durable Functions の概要 (プレビュー)
パターン #4: ステートフル シングルトン
Copyright© 2015, JAZUG All Rights Reserved.
66
Durable Functions の概要 (プレビュー)
パターン #5: 人による操作
Copyright© 2015, JAZUG All Rights Reserved.
67
Durable Functions の概要 (プレビュー)
パターン #5: 人による操作
Copyright© 2015, JAZUG All Rights Reserved.
68
Durable Functions の概要 (プレビュー)
ステートレスなFunctionsにステートフルな拡張
提供されるオーケストレーター関数というものを使う
コードは async await を利用することでシンプルになる
膨大な時間のかかる大きな関数を作らなくてすむ
タイムアウトの問題を回避できる
Copyright© 2015, JAZUG All Rights Reserved.
69
Durable Functions の概要 (プレビュー)
ほかにも、外部イベント待機で、リソース消費を抑えるなど。
https://docs.microsoft.com/ja-jp/azure/azure-functions/durable-
functions-external-events
functionsを触った人だと、なるほどと思えるものがある
Copyright© 2015, JAZUG All Rights Reserved.
70
Functions 振り返ってみると
ポータルでスクリプトを書いていただけの初期から、数年で大
きな進化をしている。
ローカルデバッグも可能。開発環境が充実してきた
Proxy、Durable(プレビュー)を組み合わせると
複雑な処理や外部サービスにも、ステートフルなAPIで作りやすく
なった
静的リソースも扱えるので、html css js も扱える。
SPAとの相性がかなりよさそう。
従量課金でスタートすると、1000円以下の料金で始められる
手軽さ
Copyright© 2015, JAZUG All Rights Reserved.
71
Azure App Service を試す
https://azure.microsoft.com/ja-jp/try/app-service/
Copyright© 2015, JAZUG All Rights Reserved.
72
きたあず、JAZUGについて
きたあずサイト
https://kitaazu.azurewebsites.net/
きたあずFacebookグループ
https://www.facebook.com/groups/jazugsapporo/
Jazug Facebook グループ
https://www.facebook.com/groups/jazug/
Copyright© 2015, JAZUG All Rights Reserved.
73
ご清聴ありがとうございました
Copyright© 2015, JAZUG All Rights Reserved.
74

Azure Functions あれこれ