20
Azure Serverless Azure Functionsでサーバーを意識しない開発 日本マイクロソフト アプリケーションソリューションアーキテクト 服部 佑樹

Azure serverless!! azure functionsでサーバーを意識しない開発

Embed Size (px)

Citation preview

Page 1: Azure serverless!! azure functionsでサーバーを意識しない開発

Azure ServerlessAzure Functionsでサーバーを意識しない開発

日本マイクロソフト

アプリケーションソリューションアーキテクト

服部 佑樹

Page 2: Azure serverless!! azure functionsでサーバーを意識しない開発

Functions のアプリケーション開発

2

複数言語での開発

パッケージ管理

アプリの計画と作成 コーディング アプリの拡張オーケストレーション

統合管理

何のサービスと連携させるか決定し、バインディング・トリガーを定義します

最初のFunctions Appを作成します

Functions独自のプロキシ機能やAPI Managementを用いて関数のコードからRESTfulなAPIへ拡張します

Azureのサービスやその他のサービス・アプリと連携し、Functionsを機能の一部として組み込んでいきます

オンラインエディタやローカル環境のエディタで開発します

多様な言語から開発言語を選びます

パッケージの管理や環境変数を設定します

Bindings 環境変数 RESTful API

AutomationLogic Apps

Application Insights

Azureのサービス

Azure外のサービス

ソースコードマネジメント

Gitを用いてコードを管理します

ローカル開発も容易になります

ソース管理

Proxies

Page 3: Azure serverless!! azure functionsでサーバーを意識しない開発

Azure Functions

イベント駆動の「機能」実行プラットフォーム

柔軟で強力なサーバーレス スクリプト実行環境

インフラを抽象化し設計者はビジネス、開発者はコードに注力可能

業務要件に応じたスケーリングが可能

HTTP APIのエンドポイントとして公開可能

対応プログラミング言語

C#, Javascript, F#, Python, PHP, Batch, Bash, PowerShell

ファイル作成やPush通知を容易にするバインディングの機能をもつ

トリガー , スケジュール , HTTP (Webhook) , キュー, etc.

3

Page 4: Azure serverless!! azure functionsでサーバーを意識しない開発

(*参考)サーバーレスアーキテクチャ

サーバを自前で用意せず、マネージドサービスを活用してシステムを構築する

サーバーレスアーキテクチャの利点

① ビジネスロジックに注力

コンピューティングに注力しない

OSレイヤー以下を抽象化しサーバーを意識させない

自動的にスケールし、任意の処理が実行できる

② コストの低さ

利用開始のコストは低く、簡単に体験できる

4

Page 5: Azure serverless!! azure functionsでサーバーを意識しない開発

Functions のプログラミングコンセプト

トリガー

イベントをトリガーにコードを実行するサーバーレス開発基盤

バインディング

バインディングの仕組みで他のサービスとの接続を容易にします。

Blob や OneDrive 上のファイル、Push通知などを Function App 内で操

作できます

アプリケーション内でサービスへの接続や参照を省略可能にします。

5

Page 6: Azure serverless!! azure functionsでサーバーを意識しない開発

バインディング

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 でのトリガーとバインドの概念

Page 7: Azure serverless!! 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 外部テーブル バインディン

グ (プレビュー)

Page 8: Azure serverless!! 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

Page 9: Azure serverless!! azure functionsでサーバーを意識しない開発

プロキシ機能(Preview)

従来

Functionsで複数のAPIを作ることは出来ても、それをマネージする手間があった

RESTfulなAPIを例えば作るとしたらAPI Managementなどの他の仕組みを利用する必要があった

新機能

Azure Functions側に軽量なAPIマネジメントのサービスが追加された

これでFunctionsだけでRESTなAPIを用意することができるようになります。

9

Page 10: Azure serverless!! azure functionsでサーバーを意識しない開発

スロット機能(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

環境に合わせてデプロイメントスロットを変更できます。

Page 11: Azure serverless!! azure functionsでサーバーを意識しない開発

利用シナリオ例

サムネイルのリサイジング(非同期のバックグラウンド処理)

Notification Hubと合わせたPush API

毎夜で日付の古い Blob を Cool Blob Storage に移動

Logic Apps や Microsoft Flow 単体では難しい処理を実行

ログの整形やスクレイピング

CQRSパターンの実装、Webhookの対応

同様の事は VM上でも実装可能ではあるが、処理に注力したい、イベント駆動したい場合にFunctionsは有用

11

Page 12: Azure serverless!! azure functionsでサーバーを意識しない開発

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の一つです

Page 13: Azure serverless!! azure functionsでサーバーを意識しない開発

App Servicesの中での位置づけ

App Services

Azure の アプリケーションプラットフォーム

オートスケール/ロードバランシング

OSとフレームワークの迅速なパッチ対応

多種多様な言語とフレームワーク

DevOpsに適した環境

サービス管理の容易さ

API App / API Management

クラウドとオンプレミスでの API の開発、ホスト、および使用を容易にする機能を提供

Logic Apps

複雑なビジネス プロセスを簡素化および実装

Azure Functions

小規模なコード (関数) をクラウドで手軽に実行できるソリューション

Web サイトと Web アプリケーションをホストするために最適化された、完全に管理されたコンピューティング プ

ラットフォーム

Web Apps

サインイン、プッシュ通知、データ同期機能などをモバイル アプリケーションに追加

Mobile Apps

13

Page 14: Azure serverless!! azure functionsでサーバーを意識しない開発

Functionsのアーキテクチャ

Functions ランタイム

WebJobs Core SDK

WebJobsExtension

Language Provider

Language Provider

WebJobsExtension

Functionsプログラミングインタフェース

Web Apps

トリ

ガー

インプット バインディング

アウトプット バインディング

14

Page 15: Azure serverless!! azure functionsでサーバーを意識しない開発

(*参考)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のダッシュボードが使用可能

Page 16: Azure serverless!! azure functionsでサーバーを意識しない開発

Functions開発のことはじめ

小さく始める

• まずは、既存のサービスの1機能(APIやバックグラウンドプロセス)を置き換えてみる

• 既存の環境で、特定の用途にしか使わない機能をアウトソースしてみる

推奨される運用方法

• 1関数につき、「1個の処理」を定義する

• 何回処理を実行しても同じ結果が返る

• 処理は早く終わらせる(Timeoutは300sです。)

16

Page 17: Azure serverless!! azure functionsでサーバーを意識しない開発

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 のスクリプト等を格納

定義と実行スクリプトを格納

バインディング/パッケージの定義情報

Page 18: Azure serverless!! azure functionsでサーバーを意識しない開発

Azure Functionsの料金プラン

従量課金プラン

コストは、メモリ サイズと、関数アプリ内のすべての関数の合計実行時間によって決まります。

スケールの必要に応じて、インスタンスが動的に追加されたり削除されたりします。

関数を並行して実行することで、要求の処理に必要な合計時間を最小限に抑えます。

▶コンピューティング ニーズが断続的であったり、ジョブの実行時間が短い場合に適しています。

App Service プラン

Basic / Standard / Premiumの階層があり、VMの利用時間に合わせた料金決定

スケールはVMの設定に基づき、Function Appは専用の VM 上で実行されます。

専用 VM は App Service アプリとFunction Appに割り当てられ、常に使用できます。

▶既存コードが VM上で動いているが使用率が低い場合、継続的に関数を実行する場合に適しています

18

Page 19: Azure serverless!! azure functionsでサーバーを意識しない開発

従量課金プランの実行時のスケール

スケール コントローラー

構成されたトリガーに基づいてコンピューティングのニーズを評価し、スケールアウト/インのタイミングを判

断します。

スケールアウト

継続的にメモリ要件とトリガー固有のデータ ポイントのヒントを処理します。

スケーリングの単位は、Function Appです。

この場合、スケールアウトは関数アプリのインスタンスの追加を意味します。

スケールイン

スケールイン時にはFunction Appのインスタンスが削除されます。

関数が何も実行されていない場合、インスタンスの数は最終的に 0 にスケールダウンされます。

19

Page 20: Azure serverless!! azure functionsでサーバーを意識しない開発

本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoftは絶えず変化する市場に対応しなければならないため、ここに記載した情報に対していかなる責務を負うものではなく、提示された情報の信憑性については保証できません。

本書は情報提供のみを目的としています。 Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるものではありません。

すべての当該著作権法を遵守することはお客様の責務です。Microsoftの書面による明確な許可なく、本書の如何なる部分についても、転載や検索システムへの格納または挿入を行うことは、どのような形式または手段(電子的、機械的、複写、レコーディング、その他)、および目的であっても禁じられています。これらは著作権保護された権利を制限するものではありません。

Microsoftは、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。Microsoftから書面によるライセンス契約が明確に供給される場合を除いて、本書の提供はこれらの特許、商標、著作権、またはその他の知的財産へのライセンスを与えるものではありません。

© 2017 Microsoft Corporation. All rights reserved.

Microsoft, Windows, その他本文中に登場した各製品名は、Microsoft Corporation の米国およびその他の国における登録商標または商標です。

その他、記載されている会社名および製品名は、一般に各社の商標です。