サーバレス・アーキテクチャとは
クラウドを活用したアプリケーションのスタイルの1つに「サーバレス・アーキテクチャ」がある。従来のアプリケーションの場合、常駐型のサーバにアプリケーション本体が展開されており、クライアントからのリクエストを受け付けるという形のアーキテクチャが一般的である。この方式は安定してサービスを提供できる反面、システムの規模が大きくなるに従ってアプリケーションサーバ自体の構築や運用管理が複雑になりやすいという課題がある。
それに対し、管理するべきアプリケーションサーバ自体を省略し、クラウド上で必要な時に必要な分のリソースだけを確保してプログラムを動かすというのがサーバレス・アーキテクチャの考え方になる。具体的には、クライアントからのリクエストをはじめとするさまざまなトリガーで起動するイベント駆動型のプロセスを用意し、アプリケーションサーバに代わってバックエンドのサービスを提供する。実行プロセスは必要に応じて起動され、処理が完了したら終了する。リソースの管理はクラウド側に任せることができるため、スケーラビリティやアベイラビリティのための複雑な仕組みを自前で管理しなくてもいいという強みがある。
Azure Functionsとは
Microsoft Azureの場合、「Azure Functions」がサーバレスのアプリケーションを作成・展開するためのサービスとなる。Azure Functionsはイベント駆動型のコンピューティング・プラットフォームで、指定されたイベントをトリガーとしてインスタンスを起動し、「関数(Function)」と呼ばれる処理を実行する。関数部分は、JavaやC#をはじめとするさまざまプログラミング言語で記述できる。関数は、ConmosDBなどのバックエンドのサービスともシームレスに連携できるようになっている。
2020年8月現在、Azure Functionsでは以下のプログラミング言語がサポートされている。
- C#
- F#
- JavaScript
- Java
- Python
- PowerShell
また、トリガとして指定されるイベントや、サポートしている入力および出力のバインディングは以下の通りである。
種類 | トリガー | 入力 | 出力 |
---|---|---|---|
HTTPとWebhook | ○ | ○ | ○ |
タイマー | ○ | ||
Blob Storage | ○ | ○ | ○ |
Queue Storage | ○ | ○ | |
Table Storage | ○ | ○ | |
CosmosDB | ○ | ○ | ○ |
Event Grid | ○ | ○ | |
Event Hubs | ○ | ○ | |
IoT Hub | ○ | ○ | |
Service Bus | ○ | ○ | |
SignalR | ○ | ○ | |
Microsoft Graph Excel テーブル | ○ | ○ | ○ |
Microsoft Graph OneDrive ファイル | ○ | ○ | ○ |
Microsoft Graph Outlook メール | ○ | ||
Microsoft Graph イベント | ○ | ○ | ○ |
Microsoft Graph Auth トークン | ○ | ||
SendGrid | ○ | ||
Twilio | ○ |
サービスの利用料金体系としては、使用したリソースの分だけ課金される従量課金プランのほかに、あらかじめインスタンスがオンライン状態で待機しているPremiumプランと、App Serviceのプラン内で関数が実行されるApp Serviceプランがある。
従量課金プランはトリガに応じてインスタンスが作成されて関数が実行されるのに対し、PremiumプランやApp Serviceプランではあらかじめ作成されたインスタンスがスタンバイしており、Functionはその中で実行される。したがって、後者2つのプランは厳密にはサーバレスとは少し違うが、その分レスポンスが速いというメリットがある。なお、従量課金プランについては一定時間まで無料で利用できる枠もある。料金体系に関する詳細は「Azure Functions の価格」を参照いただきたい。
現状、Azure Functionsの従量課金プランにおけるアプリケーションの起動はあまり早くない。そのため、バッチ処理のようなレスポンス時間をあまり気にしなくてもよいアプリケーションや、初期段階でアクセス量の見込みが立てられないようなケースでは従量課金プランを、Web APIのようなレスポンス時間が重要になるアプリケーションではPremiumやApp Servieプランを選択するのがいいだろう。
関数アプリの作成
それでは、早速Azure Functionsを使ってみよう。まずはAzure Functionsでサービスを展開する上での基本となる関数アプリを作成する。それぞれの関数は、この関数アプリ内で実行される。関数アプリは、Azureポータルの「リソースの作成」メニューから作成できる。
次のように関数アプリの作成画面が表示されるので、リソースグループやアプリ名などの設定を行う。今回は関数をJavaで記述したいので、ランタイムスタックは「Java」を、バージョンは「11」を選択する。
[次:ホスティング]ボタンをクリックして、ホスティング環境の設定を行う。関数アプリには必ずストレージアカウントをひもづける必要がある。下図のように、関数アプリの作成と同時に新規でストレージアカウントを作成することも可能。オペレーティングシステムは「Windows」、プランは「消費量(サーバレス)」とした。「消費量(サーバレス)」というのは前述の従量課金プランのことだ。
「監視」と「タグ」の設定はとりあえずデフォルトのままでよい。[確認と作成]ボタンをクリックすると次のように設定の確認画面が表示されるので、問題なければ[作成]ボタンをクリックして関数アプリの作成を実施しよう。
関数アプリの作成に成功すると、次のように作成されたリソースの一覧が表示される。[リソースに移動]ボタンから、作成された関数アプリの詳細設定画面に移動できる。
関数アプリの詳細画面では、次のように公開用のベースURLのほかに、関数の実行回数などのステータスを確認できる。
次回は、Javaを使って関数を作成し、この関数アプリにデプロイする方法を解説したい。