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
Azure Functionsで始めるサーバーレス アーキテクチャ
Search
TonyTonyKun
December 10, 2017
Technology
0
290
Azure Functionsで始めるサーバーレス アーキテクチャ
JAZUG 6周年総会のセッション資料です。
TonyTonyKun
December 10, 2017
Tweet
Share
More Decks by TonyTonyKun
See All by TonyTonyKun
Azure App Service on Linux の Sidecar に Phi-3 を配置してインテリジェントなアプリケーションを作ってみよう/jazug-anniv14
thara0402
0
800
サイクルガードサービス AlterLock の問い合わせ対応業務に Azure OpenAI Service を活用した話/jazug46
thara0402
0
800
Microsoft Ignite 2023 現地参加レポート/ignite2023
thara0402
0
220
Azure Container Apps で .NET 7 アプリを Blue-Green デプロイしてみよう!/jazug12
thara0402
0
1.6k
Azure Synapse Analytics 入門/jazug11
thara0402
0
680
Azure Bicep で始める Infrastructure as Code/ace0917
thara0402
0
420
Introduction to Azure Synapse Analytics/ace0416
thara0402
0
470
Azure Kubernetes Service を活用したマイクロサービス開発/clouddev
thara0402
0
430
Azure Kubernetes Service を活用したマイクロサービス開発/Ignite-osaka
thara0402
0
440
Other Decks in Technology
See All in Technology
Amazon Personalizeのレコメンドシステム構築、実際何するの?〜大体10分で具体的なイメージをつかむ〜
kniino
1
100
SSMRunbook作成の勘所_20241120
koichiotomo
2
130
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
200
BLADE: An Attempt to Automate Penetration Testing Using Autonomous AI Agents
bbrbbq
0
300
なぜ今 AI Agent なのか _近藤憲児
kenjikondobai
4
1.4k
これまでの計測・開発・デプロイ方法全部見せます! / Findy ISUCON 2024-11-14
tohutohu
3
370
OCI 運用監視サービス 概要
oracle4engineer
PRO
0
4.8k
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
【令和最新版】AWS Direct Connectと愉快なGWたちのおさらい
minorun365
PRO
5
750
iOSチームとAndroidチームでブランチ運用が違ったので整理してます
sansantech
PRO
0
130
Platform Engineering for Software Developers and Architects
syntasso
1
520
隣接領域をBeyondするFinatextのエンジニア組織設計 / beyond-engineering-areas
stajima
1
270
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Facilitating Awesome Meetings
lara
50
6.1k
GitHub's CSS Performance
jonrohan
1030
460k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Automating Front-end Workflow
addyosmani
1366
200k
What's in a price? How to price your products and services
michaelherold
243
12k
RailsConf 2023
tenderlove
29
900
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
109
49k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Transcript
Azure Functions で始める サーバーレス アーキテクチャ 2016.09.03 JAZUG 6周年総会
⾃⼰紹介 名前 Twitter : @TonyTonyKun(トニー) 仕事 C# で業務アプリケーションを開発しています。 Azure を活⽤して
ASP.NET で作っています。 Blog ROMANCE DAWN for the new world http://gooner.hateblo.jp/ Copyright© 2016, JAZUG All Rights Reserved. 2
⼤事なお知らせ このセッションは、2016/09/03 時点の情報を基にしています。 まだ Public Preview です。(Runtime Version 0.5) 最新情報は
Web で。 Copyright© 2016, JAZUG All Rights Reserved. 3
Goal Azure Functions の機能をざっくりと知る Azure Functions の使いどころが分かる Copyright© 2016, JAZUG
All Rights Reserved. 4
What is Serverless? 最近よく聞く話題だけど・・・ Copyright© 2016, JAZUG All Rights Reserved.
5
Serverless Architectures (Martin FowlerのBlog) Backend as a Service Single Page
Application なアプリやモバイルアプリから利⽤するクラウド上の バックエンドサービス(ストレージや認証とか) Function as a Service ⾃分で書いたコードがイベント駆動で実⾏されるステートレスなサービス 発端は、AWS の Lambda がリリースされたこと その後、他のクラウドベンダーも相次いでリリースしたサーバーレス 環境は、後者の FaaS のこと Google の Cloud Functions IBM の OpenWhisk Microsoft の Azure Functions Copyright© 2016, JAZUG All Rights Reserved. 6 http://martinfowler.com/articles/serverless.html
What is Serverless Computing? Exploring Azure Functions. ( Scott Hanselman
のBlog ) サーバーレスとは、サーバーがないという意味ではない ⾃分でサーバーを管理する必要がないということ PaaS のように聞こえるかもしれないけど、それよりも⾼いレベル PaaS は Web アプリをデプロイして、常にサーバーを意識するけど、サー バーレスは、コードをアップロードし、イベント駆動で実⾏される Copyright© 2016, JAZUG All Rights Reserved. 7 http://www.hanselman.com/blog/WhatIsServerlessComputingExploringAzureFunctions.aspx https://blogs.msdn.microsoft.com/visualstudio_jpn/2016/09/01/whatisserverlesscomputingexploringazurefunctions/
Azure Functions Overview 概要と特徴 Copyright© 2016, JAZUG All Rights Reserved.
8
Azure Functions とは? サーバーレスアーキテクチャ サーバーの構築や保守は必要ない API を公開するだけのためにアプリを作る必要がない 運⽤や課⾦のコストを節約できる イベント駆動型サービス トリガーが発⽕したときだけ処理が実⾏される
Copyright© 2016, JAZUG All Rights Reserved. 9
ブラウザで簡単にコードが書ける Copyright© 2016, JAZUG All Rights Reserved. 10
さまざまな Trigger と Binding をサポート① Copyright© 2016, JAZUG All Rights
Reserved. 11 Type Service Trigger Input Output Schedule Azure Functions ✔ HTTP (REST or WebHook) Azure Functions ✔ ✔ Blob Storage Azure Storage ✔ ✔ ✔ Queues Azure Storage ✔ ✔ Queues Azure Service Bus Queue ✔ ✔ Topics Azure Service Bus Topic ✔ ✔ Tables Azure Storage ✔ ✔ Tables Azure Mobile Apps Easy Tables ✔ ✔ No-SQL DB Azure DocumentDB ✔ ✔ Streams Azure Event Hubs ✔ ✔ Push Notifications Azure Notification Hubs ✔
さまざまな Trigger と Binding をサポート② Copyright© 2016, JAZUG All Rights
Reserved. 12 Type Service Trigger Input Output SaaS File BOX ✔ ✔ Dropbox ✔ ✔ FTP ✔ ✔ Google Drive ✔ ✔ One Drive (for Business) ✔ ✔ SFTP ✔ ✔ SaaS Table DB2 ✔ ✔ Dynamics CRM Online ✔ ✔ Excel ✔ ✔ Google Sheets ✔ ✔ Informix ✔ ✔
さまざまな Trigger と Binding をサポート③ Copyright© 2016, JAZUG All Rights
Reserved. 13 Type Service Trigger Input Output SaaS Table Salesforce ✔ ✔ SharePoint ✔ ✔ SQL Server ✔ ✔ Mail SendGrid ✔ SMS Twilio ✔
複数の開発⾔語をサポート メイン C# Node / JavaScript その他(⼀部の Trigger や Binding
のみ対応) F# Python PHP Batch Bash PowerShell Copyright© 2016, JAZUG All Rights Reserved. 14
2つの課⾦モデル Dynamic App Service Plan メモリサイズ(GB単位) × 実⾏時間(秒単位) 実⾏回数 毎⽉無料枠があって、それを超えると課⾦される
サーバーレスアーキテクチャらしいモデル 最近、⽇本のデータセンターでも使えるようになった Classic App Service Plan 従来の課⾦モデル(Free, Basic, Standard, Premium) Web Apps にデプロイしたアプリと共存させるときに使う Functions ⾃体には課⾦されない、Web Jobs に近いイメージ Copyright© 2016, JAZUG All Rights Reserved. 15
モニタリングとログ Invocation Log Copyright© 2016, JAZUG All Rights Reserved. 16
モニタリングとログ Live Event Stream Azure Web Apps のサポートツールと同じ仕組み https://support-bay.scm.azurewebsites.net/Support.functionsmetrics/#/{site name}/{function
name} Copyright© 2016, JAZUG All Rights Reserved. 17
Azure App Service に追加されたサービス Web Jobs を拡張したサービス 実⾏環境は Web Apps
なので、同じ機 能が使える App Settings Connection Strings Advanced Tools / App Service Editor Remote Debug 便利かつ⾃由度の⾼いサービス Copyright© 2016, JAZUG All Rights Reserved. 18
Demo Hello world Copyright© 2016, JAZUG All Rights Reserved. 19
Trigger & Bindings トリガーとバインディングの構成 Copyright© 2016, JAZUG All Rights Reserved.
20
簡単に管理できるけど、⼀部の項⽬しか構成できない Azure Portal の Standard Editor Copyright© 2016, JAZUG All
Rights Reserved. 21
Azure Portal の Advanced Editor Copyright© 2016, JAZUG All Rights
Reserved. 22 function.json を編集できるので、詳細な構成ができる
HTTP Trigger https://{site name}.azurewebsites.net/api/{function name} name .csx のコードで使う変数名 authLevel Function:Function
Key admin:Master Key anonymous:認証なし Copyright© 2016, JAZUG All Rights Reserved. 23
WebHook Trigger https://{site name}.azurewebsites.net/api/{function name} name .csx のコードで使う変数名 webHookType genericJson
Github API Key 認証は必須 Copyright© 2016, JAZUG All Rights Reserved. 24
API Key HTTP Trigger と WebHook Trigger で API Key
を要求できる クエリ⽂字列:code HTTP ヘッダー:x-functions-key API Key ⾃体は、D:¥home¥data¥Functions¥secrets に定義されている Function Key 無効なファンクションはトリガーできない ファンクションごと or 共通の API Key Master Key 無効なファンクションもトリガーできる すべてのファンクションで共通の API Key Copyright© 2016, JAZUG All Rights Reserved. 25
Azure Storage Queue Trigger Copyright© 2016, JAZUG All Rights Reserved.
26 引数へのバインド string byte[] JObject CloudQueueMessage など myqueue-items
Azure Storage Queue Output Binding Copyright© 2016, JAZUG All Rights
Reserved. 27 引数へのバインド string byte[] JObject CloudQueueMessage ICollector<T> など outqueue
Azure Storage Blob Input Binding Copyright© 2016, JAZUG All Rights
Reserved. 28 引数へのバインド string Stream JObject CloudBlockBlob など incontainer
Blob Trigger を利⽤する際の注意事項 トリガーが監視する Blob コンテナに10,000を超える Blob が含 まれる場合は、リアルタイムに発⽕しないことがある 数分またはそれ以上経過しないとトリガーされない可能性あり
すべてのイベントがキャプチャされる保証はない トリガーのリアルタイム性と信頼性の制限が許容できない場合 は、Queue トリガーと組み合わせることを推奨している Copyright© 2016, JAZUG All Rights Reserved. 29 https://azure.microsoft.com/ja-jp/documentation/articles/functions-bindings-storage/ https://feedback.azure.com/forums/355860-azure-functions/suggestions/13282098-should-be- support-real-time-storage-blob-triggers
Timer Trigger {second} {minute} {hour} {day} {month} {day of the
week} 6つのフィールドを含む CRON 式 {second} フィールドを省略してはダメ hh:mm:ss 形式も可能 タイムゾーンは UTC で指定する runOnStartup すぐに実⾏するかどうか Copyright© 2016, JAZUG All Rights Reserved. 30
Timer Trigger 10分ごとに実⾏する場合 すぐに実⾏し、毎⽇0時(JST)に実⾏する場合 ⽉曜から⾦曜の17時(JST)に実⾏する場合 Copyright© 2016, JAZUG All Rights
Reserved. 31 "schedule": "0 */10 * * * *“ "schedule": "0 0 15 * * * “ "runOnStartup": true "schedule": "0 0 8 * * 1-5“ "schedule": "00:10:00“
How .csx works .NET Compiler Platform Scripting API Copyright© 2016,
JAZUG All Rights Reserved. 32
名前空間のインポート よく使う名前空間は、⾃動的にインポートされている System.Linq Microsoft.Azure.WebJobs など 必要に応じて、using を追加する Copyright© 2016, JAZUG
All Rights Reserved. 33
アプリケーション設定の取得 環境変数から取得することが可能 パスワードなどはコードに埋め込まない ConfigurationManager.AppSettings[“key”] でも可能 Copyright© 2016, JAZUG All Rights
Reserved. 34
外部アセンブリの参照 よく使う .NET のアセンブリは、⾃動的に参照されている System.Net.Http.dll Microsoft.Azure.WebJobs.dll など 必要に応じて、#r “AssemblyName” で参照できる
Newtonsoft.Json.dll のように、.NET に含まれていなくても、使えるア センブリもある プライベート アセンブリは、bin フォルダにアップロードする “D:¥home¥site¥wwwroot¥{function name}¥bin” に配置する #r “MyAssembly.dll“ で参照できる Copyright© 2016, JAZUG All Rights Reserved. 35
NuGet ライブラリの参照 project.json ファイルをアップロードする ランタイムがパッケージを取得し、アセンブ リに参照が⾃動的に追加される #r “AssemblyName” を追加する必要はない using
を追加するだけでOK アップロードする⽅法 App Service Editor ( Visual Studio Online ) Advanced Tools ( Kudu ) FTP Copyright© 2016, JAZUG All Rights Reserved. 36
.csx コードの再利⽤ 別の .csx ファイルで定義されたコードを利⽤できる # load で .csx ファイルの相対パスを指定する
#load "myhelper.csx“ #load "..¥myhelper.csx" Copyright© 2016, JAZUG All Rights Reserved. 37
Conclusion まとめ Copyright© 2016, JAZUG All Rights Reserved. 38
まとめ サーバーレス アーキテクチャを活⽤していこう トリガーが発⽕したときのロジックだけに集中できる 1つの API のためにアプリを作ってデプロイする必要なし 運⽤や課⾦のコストを節約できる Feedback は、こちらへ
https://feedback.azure.com/forums/355860-azure-functions Copyright© 2016, JAZUG All Rights Reserved. 39
参考資料 Azure Functions の概要 https://azure.microsoft.com/ja-jp/documentation/articles/functions-overview/ Introducing Azure Functions https://channel9.msdn.com/Events/Build/2016/B858 Azure
Functions Under the Hood https://channel9.msdn.com/Events/Build/2016/T692 Azure Functions overview and under the hood https://channel9.msdn.com/Events/de-code/2016/DEV-017 https://buchizo.wordpress.com/2016/06/04/azure-functions-overview-and-under- the-hood/ オープンソース https://github.com/azure/azure-webjobs-sdk-script Copyright© 2016, JAZUG All Rights Reserved. 40