Azure serverless!! azure functionsでサーバーを意識しない開発
-
Upload
yuki-hattori -
Category
Engineering
-
view
1.112 -
download
0
Transcript of Azure serverless!! azure functionsでサーバーを意識しない開発
Azure ServerlessAzure Functionsでサーバーを意識しない開発
日本マイクロソフト
アプリケーションソリューションアーキテクト
服部 佑樹
Functions のアプリケーション開発
2
複数言語での開発
パッケージ管理
アプリの計画と作成 コーディング アプリの拡張オーケストレーション
統合管理
何のサービスと連携させるか決定し、バインディング・トリガーを定義します
最初のFunctions Appを作成します
Functions独自のプロキシ機能やAPI Managementを用いて関数のコードからRESTfulなAPIへ拡張します
Azureのサービスやその他のサービス・アプリと連携し、Functionsを機能の一部として組み込んでいきます
オンラインエディタやローカル環境のエディタで開発します
多様な言語から開発言語を選びます
パッケージの管理や環境変数を設定します
Bindings 環境変数 RESTful API
AutomationLogic Apps
Application Insights
Azureのサービス
Azure外のサービス
ソースコードマネジメント
Gitを用いてコードを管理します
ローカル開発も容易になります
ソース管理
Proxies
Azure Functions
イベント駆動の「機能」実行プラットフォーム
柔軟で強力なサーバーレス スクリプト実行環境
インフラを抽象化し設計者はビジネス、開発者はコードに注力可能
業務要件に応じたスケーリングが可能
HTTP APIのエンドポイントとして公開可能
対応プログラミング言語
C#, Javascript, F#, Python, PHP, Batch, Bash, PowerShell
ファイル作成やPush通知を容易にするバインディングの機能をもつ
トリガー , スケジュール , HTTP (Webhook) , キュー, etc.
3
(*参考)サーバーレスアーキテクチャ
サーバを自前で用意せず、マネージドサービスを活用してシステムを構築する
サーバーレスアーキテクチャの利点
① ビジネスロジックに注力
コンピューティングに注力しない
OSレイヤー以下を抽象化しサーバーを意識させない
自動的にスケールし、任意の処理が実行できる
② コストの低さ
利用開始のコストは低く、簡単に体験できる
4
Functions のプログラミングコンセプト
トリガー
イベントをトリガーにコードを実行するサーバーレス開発基盤
バインディング
バインディングの仕組みで他のサービスとの接続を容易にします。
Blob や OneDrive 上のファイル、Push通知などを Function App 内で操
作できます
アプリケーション内でサービスへの接続や参照を省略可能にします。
5
バインディング
6
バインディング サービス トリガー インプットアウトプッ
ト
スケジュール Azure Functions ✔
HTTP (REST または Webhook)
Azure Functions ✔ ✔
Blob Storage Azure Storage (Azure Storage) ✔ ✔ ✔
イベント Azure Event Hubs ✔ ✔
キュー Azure Storage (Azure Storage) ✔ ✔
キューとトピック Azure Service Bus ✔ ✔
Storage テーブル Azure Storage (Azure Storage) ✔ ✔
SQL テーブル Azure Mobile Apps ✔ ✔
NoSQL DB Azure DocumentDB ✔ ✔
プッシュ通知 Azure Notification Hub ✔
Twilio SMS テキスト Twilio ✔
SendGrid 電子メール SendGrid ✔
SaaS (Preview) Box ✔ ✔ ✔
Dropbox ✔ ✔ ✔
File System ✔ ✔ ✔
FTP ✔ ✔ ✔
OneDrive ✔ ✔ ✔
OneDrive for Business ✔ ✔ ✔
SFTP ✔ ✔ ✔
Google Drive ✔ ✔
Azure Functions では、トリガーとバインドを使
用して、Azure やその他のサービスで発生したイ
ベントに応答するコードを記述できます。
トリガーとバインドは、関数を呼び出す方法と、
その関数で処理するデータを定義する宣言型の方
法です。 トリガーは、関数を呼び出す方法を定
義します。
参考
Azure Functions でのトリガーとバインドの概念
外部テーブルバインディング
7
バインディング コネクター トリガー インプット アウトプット
外部テーブル(Preview)
DB2 ✔ ✔
Dynamics 365 for Operations ✔ ✔
Dynamics 365 ✔ ✔
Dynamics NAV ✔ ✔
Google Sheets ✔ ✔
Informix ✔ ✔
Dynamics 365 for Financials ✔ ✔
MySQL ✔ ✔
Oracle Database ✔ ✔
Common Data Service ✔ ✔
Salesforce ✔ ✔
SharePoint ✔ ✔
SQL Server ✔ ✔
Teradata ✔ ✔
UserVoice ✔ ✔
Zendesk ✔ ✔
Functionsから外部テーブルを操作することが
可能です。
テーブルバインディングは、外部API接続を活
用してサードパーティのSaaSプロバイダーと
の認証を行います。
参考
Azure Functions 外部テーブル バインディン
グ (プレビュー)
代表的なバインディングHTTP
SSL通信(HTTPS)にも対応し、簡単に作成可能
Logic Appsとの組み合わせなどで、ワークフローを自動化
WebHooks
WebHooks をリッスンするエンドポイントを簡単に作成可能
ASP.NET のWebHooks libraryを使えば、バラエティに富んだトークンベースの検証機能を利用可能
タイマー
cronの表現方法で記述可能
SaaS
DropboxやGoogle Driveとの連携で既存の処理を自動化
Google Spread Sheetとの連携で簡易的な業務処理
外部テーブル
MySQLやOracleの既存DB資産に連携可能
8
プロキシ機能(Preview)
従来
Functionsで複数のAPIを作ることは出来ても、それをマネージする手間があった
RESTfulなAPIを例えば作るとしたらAPI Managementなどの他の仕組みを利用する必要があった
新機能
Azure Functions側に軽量なAPIマネジメントのサービスが追加された
これでFunctionsだけでRESTなAPIを用意することができるようになります。
9
スロット機能(Preview)
10
App Service Plan
sample1.azurewebsites.net
sample2.azurewebsites.net
sample3.azurewebsites.net
devスロットsample2-dev.azurewebsites.net
testスロットsample2-test.azurewebsites.net
prodスロットsample2-prod.azurewebsites.net
stagingスロットsample2-staging.azurewebsites.net
環境に合わせてデプロイメントスロットを変更できます。
利用シナリオ例
サムネイルのリサイジング(非同期のバックグラウンド処理)
Notification Hubと合わせたPush API
毎夜で日付の古い Blob を Cool Blob Storage に移動
Logic Apps や Microsoft Flow 単体では難しい処理を実行
ログの整形やスクレイピング
CQRSパターンの実装、Webhookの対応
同様の事は VM上でも実装可能ではあるが、処理に注力したい、イベント駆動したい場合にFunctionsは有用
11
Azure Functionsの位置づけ
Web Apps
MobileApps
APIManagement
APIApps
LogicApps
NotificationHubs
Content DeliveryNetwork (CDN)
MediaServices
HDInsight MachineLearning
StreamAnalytics
DataFactory
EventHubs
MobileEngagement
BiztalkServices
HybridConnections
ServiceBus
StorageQueues SQL
Database
DocumentDB
RedisCache
Search
Tables
SQL DataWarehouse
CloudServices
Batch Remote App
ServiceFabric
Visual Studio
ApplicationInsights
Azure SDK
Team Project
ActiveDirectory
Multi-FactorAuthentication
Automation
Portal
Key Vault
Store /Marketplace
VM Image Gallery& VM Depot
SECURITY & MANAGEMENT PLATFORM SERVICES
Backup
StorSimple
SiteRecovery
Import/Export
Azure AD Connect Health
AD PrivilegedIdentity Mngt
OperationalInsights
HYBRID OPERATIONS
Azure
Functions
12
Azure Functions は App Servicesの一つです
App Servicesの中での位置づけ
App Services
Azure の アプリケーションプラットフォーム
オートスケール/ロードバランシング
OSとフレームワークの迅速なパッチ対応
多種多様な言語とフレームワーク
DevOpsに適した環境
サービス管理の容易さ
API App / API Management
クラウドとオンプレミスでの API の開発、ホスト、および使用を容易にする機能を提供
Logic Apps
複雑なビジネス プロセスを簡素化および実装
Azure Functions
小規模なコード (関数) をクラウドで手軽に実行できるソリューション
Web サイトと Web アプリケーションをホストするために最適化された、完全に管理されたコンピューティング プ
ラットフォーム
Web Apps
サインイン、プッシュ通知、データ同期機能などをモバイル アプリケーションに追加
Mobile Apps
13
Functionsのアーキテクチャ
Functions ランタイム
WebJobs Core SDK
WebJobsExtension
Language Provider
Language Provider
WebJobsExtension
Functionsプログラミングインタフェース
Web Apps
トリ
ガー
インプット バインディング
アウトプット バインディング
14
(*参考)Azure FunctionsとWeb Jobsの違い
15
Functions Web Jobs
ホスティングモデル スケーリング 構成不要のスケーリング App Service プランによるスケーリング
価格 従量課金プランまたは App Service プラン App Service プラン
ホスティングFunction Appがwebフロントエンドも含みすべてをマネージする
Web/Mobile/API appのバックグラウンドで動く、
実行の種類 トリガー、(タイマー トリガーによる) スケジュール トリガー、継続的、スケジュール
プログラミングモデル
トリガー イベント
タイマー、Azure DocumentDB、Azure Event Hub、HTTP/webhook (GitHub、Slack)、Azure App Service Mobile Apps、Azure Notification Hubs、Azure Service Bus、Azure Storage
Azure Storage、Azure Service Bus
開発環境より多様な開発環境(Web portal, VSCode, dynamically builds itself)
従来の開発環境(Visual Studio, NuGet, MSBuild)
HTTP(S)のサポート ○ ☓
関数(Def)の数 存在するのは一つの関数 多くの関数が一つのクラスに存在
対応言語C# / F# / JavaScript(Preview : ウィンドウ スクリプト / PowerShell / Bash / PHP / Python )
C# / JavaScript / ウィンドウ スクリプト / PowerShell / Bash / PHP / Python
共通の機能
機能指向プログラム
外部ライブラリ利用可能
WebJobs SDK Extensionをサポート
local開発・デバッグが可能
WebJobsのダッシュボードが使用可能
Functions開発のことはじめ
小さく始める
• まずは、既存のサービスの1機能(APIやバックグラウンドプロセス)を置き換えてみる
• 既存の環境で、特定の用途にしか使わない機能をアウトソースしてみる
推奨される運用方法
• 1関数につき、「1個の処理」を定義する
• 何回処理を実行しても同じ結果が返る
• 処理は早く終わらせる(Timeoutは300sです。)
16
Functionsのディレクトリ構造
17
D:\Home├─data│ ├─Functions│ │ ├─sampledata
│ ├─secrets├─LogFiles│ ├─Application│ │ └─Functions│ │ ├─Function│ │ └─Host│ └─SiteExtensions│ └─Functions├─site
│ └─wwwroot│ ├─BlobTriggerCSharp1│ │ ├─function.json│ │ └─run.csx│ ├─host.json│ ││ ├─<C#なFunction App>
│ │ ├─run.csx│ │ ├─project.json│ │ ├─function.json│ │ └─bin│ │ └─xxxx.dll│ ││ ├─<node.jsなFunction App>│ │ ├─index.js│ │ ├─function.json│ │ └─node_modules│ │ └─ <packages>
{"bindings": [
{"name": "myTimer","type": "timerTrigger","direction": "in","schedule": "0 * * * * *"
},{
"type": "apiHubFile","name": "output","path": "path/{file}","connection": "onedrive_ONEDRIVE","direction": "out"
}],"disabled": false
}
{
"frameworks": {
"net46":{
"dependencies": {
"iTextSharp": "5.5.9"
}
}
}
}
project.json function.json
run.csx
HTTPトリガー等で使用するAPIキーを格納
各 Function App のスクリプト等を格納
定義と実行スクリプトを格納
バインディング/パッケージの定義情報
Azure Functionsの料金プラン
従量課金プラン
コストは、メモリ サイズと、関数アプリ内のすべての関数の合計実行時間によって決まります。
スケールの必要に応じて、インスタンスが動的に追加されたり削除されたりします。
関数を並行して実行することで、要求の処理に必要な合計時間を最小限に抑えます。
▶コンピューティング ニーズが断続的であったり、ジョブの実行時間が短い場合に適しています。
App Service プラン
Basic / Standard / Premiumの階層があり、VMの利用時間に合わせた料金決定
スケールはVMの設定に基づき、Function Appは専用の VM 上で実行されます。
専用 VM は App Service アプリとFunction Appに割り当てられ、常に使用できます。
▶既存コードが VM上で動いているが使用率が低い場合、継続的に関数を実行する場合に適しています
18
従量課金プランの実行時のスケール
スケール コントローラー
構成されたトリガーに基づいてコンピューティングのニーズを評価し、スケールアウト/インのタイミングを判
断します。
スケールアウト
継続的にメモリ要件とトリガー固有のデータ ポイントのヒントを処理します。
スケーリングの単位は、Function Appです。
この場合、スケールアウトは関数アプリのインスタンスの追加を意味します。
スケールイン
スケールイン時にはFunction Appのインスタンスが削除されます。
関数が何も実行されていない場合、インスタンスの数は最終的に 0 にスケールダウンされます。
19
本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。
本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。
すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うことは、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではありません。
Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給される場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。
© 2017 Microsoft Corporation. All rights reserved.
Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。
その他、記載されている会社名および製品名は、一般に各社の商標です。