「Azure Functions」は、Azureで「サーバーレスコンピューティング」もしくは「FaaS(Function as a Service)」と呼ばれるアーキテクチャを実現します。
開発部門の担当者が煩雑に感じることは、構築するアプリケーションにしたがって、サーバー、ストレージ、ミドルウェアや開発言語の選択のほか、必要な費用の予測をしなければならないことでしょう。システムの稼働後に、ストレージの容量が不足したり、ネットワークの負荷が大きかったりすれば、最適化しなければなりません。
プログラムを書くことに専念したくても、開発担当者にはやらなければならないことがたくさんあります。しかし、Azure Functionsを使えば、開発者は実行環境やインフラストラクチャーのことを考えずに、必要なコードの記述に集中できます。
ここではAzure Functions登場の背景、Azure Functionsの特長、実現できることなどについて解説します。
Azure Functions、サーバーレスコンピューティングの背景
まず、Azure Functionsのようなサービスが登場した背景です。
クラウドサービスの普及によって、インフラストラクチャーやプラットフォームの利用で、従量課金制が進みました。その結果、生まれたアーキテクチャが「マイクロサービス」です。マイクロサービスはコンポーネントを細かく分割し、プログラムを簡易化するとともに、利用した分だけ費用を請求して保守コストを削減します。
このマイクロサービスがさらに進んだ形がFaaSです。必要最小限のコンポーネント(マイクロサービス)をさらに細分化して、「関数」や「機能」いわゆる英語の「Functions」の単位で処理を実行し、課金します。
PaaS(Platform as a Service)では、インフラストラクチャーやミドルウェアが稼働している時間は課金されます。しかし、FaaSの場合、トリガーによってリクエストやイベントが発生したときだけに課金され、それ以外には費用が発生しません。スケーリングも自動化されています。
つまりトリガーとして関数や機能を処理しない場合には、サーバーへのアクセスを必要としないことから「サーバーレスコンピューティング」と言われます。
Azure Functionsとは
このように関数や機能を実行するときだけ課金するAzureの拡張機能が、Azure Functionsです。
Azure Functionsランタイムは、オープンソースとしてGitHubで提供されています。単純なAPIやマイクロサービスを構築するときに優れたソリューションで、以下のような活用シーンがあります。
- IoT(Internet of Things:モノのインターネット)の操作
- 画像や注文などのデータ処理
- スケジュールによるタスク処理
- ファイルの保守
- システムの統合
Azure Functionsでは、以下のような機能を利用できます。
言語を選択して関数を記述
Azure Functionsでは、C#、Java、JavaScript、PowerShell、Pythonなどの開発言語が利用可能です。従量課金制で、コードを実行した時間で利用料金が計算されます。
お気に入りのライブラリを利用して柔軟に開発
.NET開発のパッケージマネージャー「NuGet」、Node.jsのパッケージを管理する「NPM(Node Package Manager)」をサポートしているため、お気に入りのライブラリを使用できます。また、関数はポータル内で直接作成するほかに、GitHubやAzure DevOps Servicesなどサポートされている開発ツールを使ってコードのデプロイができます。Azureだけでなく、その他のSaaSで提供されているサービスも活用可能です。
セキュリティの統合
アクセス権限の認可を行うOAuthプロトコルにより、Azure Active Directory、Facebook、Google、Twitter、Microsoftアカウントなどで、HTMLで処理する関数の保護ができます。
Azure Functionsのテンプレート
Azure Functionsでは、あらかじめよく使われる処理をテンプレートとして用意しました。コードの実行を開始する「トリガー」と、データ入出力の要素を関連付けてコードを単純化する「バインド」をサポートしています。以下がテンプレートです。
HTTPTrigger |
HTTP要求を送信することで、コードの実行をトリガー。 |
TimerTrigger |
事前に定義されたスケジュールで、クリーンアップなどバッチタスクを実行。 |
CosmosDBTrigger |
Azure Cosmos DBのドキュメントが、NoSQLデータベースのコレクションに追加もしくは更新されたときに処理。 |
BlobTrigger |
Azure Storage BLOBがコンテナーに追加されたときに処理。画像のサイズ変更に利用。 |
QueueTrigger |
Azure Storageキューに対して、メッセージが配信されたときに応答。 |
EventGridTrigger |
Azure Event Gridのサブスクリプションに配信されたイベントに対して応答。サーバーレスで自動サムネイル生成機能を追加可能。 |
EventHubTrigger |
Azureイベントハブに送信されたイベントに応答。アプリケーションの計測実装(インストルメンテーション)、IoT、ユーザーエクスペリエンスやワークフロー処理に有効。 |
ServiceBusQueueTrigger |
メッセージキューから、コードを他のAzureのサービス、オンプレミスのサービスに接続。 |
ServiceBusTopicTrigger |
階層(トピック)を更新することで、コードを他の Azureサービスまたはオンプレミスのサービスに接続 |
Azure Functions作成までの基本的な操作の流れ
Azure Functionsを作成するまでの基本的な操作の流れは以下のようになります。とても簡単で、シンプルなインターフェースです。
Azureポータルにログインする
Azureアカウントで、以下の Azure Portalにサインインします。
https://portal.azure.com
リソースグループを作成する
そのままFunction Appを作成することも可能ですが、リソースグループを作成しておくと、グループに所属しているFunction Appが不要になったときに、まとめて削除できます。そこで、リソースグループを作成します。
1)画面の左側にあるAzure portalのメニューから「リソースグループ」を選択し、作業ウィンドウの上部にある「+追加」をクリックします。
2)リソースグループの設定メニューが表示されます。以下を設定します。
- リソースグループ名
- サブスクリプション
- リソースグループの場所
3)作業ウィンドウに入力した名称のリソースグループが表示されます。
Function Appを作成する
次に、Function Appを作成します。
1)画面の左側にあるAzure portalのメニューから「+リソースの作成」をクリックします。
2)新規の作業ウィンドウで「Compute」「Function App」をクリックします。
3)Function Appの設定メニューで以下の項目を設定します。
- アプリ名
- サブスクリプション
- リソースグループ:新規作成、既存のものを使用
- OS:Windows、Linux
- ホスティングプラン
- 場所
- ランタイムスタック
- ストレージ:新規作成、既存のものを使用
- Application Insights
4)上記の入力を確認して、設定画面下部の「作成」をクリックします。
Function Appのプロビジョニングとデプロイが実行されます。
5)右上の通知アイコンを選択します。しばらくすると「展開が成功しました」というメッセージが表示されます。
6)メッセージの下部に「リソースに移動」「ダッシュボードにピン留めする」という2つのボタンが表示されています。
・「リソースに移動」
新しい関数アプリを確認できます。
・「ダッシュボードにピン留めする」
作成した関数アプリに、ダッシュボードから簡単に戻ることができるようになります。
関数を作成する
これまでの作業によってFunction Appは作成できましたが、関数が設定されていないため中身のない状態です。ここでは初歩的な関数作成の流れを例に挙げます。
1)作業メニューの左側から、作成したアプリ名をクリックします。
2)アプリ名の下に表示されるメニューから「関数」の右側にある「+」をクリックします。
3)「Azure Functions–作業の開始」の1「開発環境を選択する」画面で、「ポータル内」をクリックします。次に画面下部の「続行」をクリックします。
4)「Azure Functions–作業の開始」の2「関数の作成」画面で、「webhook + API」をクリックします。次に、「作成」をクリックします。
・「戻る」をクリックすると、前の画面に戻ってやり直すことができます。
まとめ
サーバーレスコンピューティングもしくは「FaaS(Function as a Service)」は、クラウドサービスを展開する各社それぞれがサービスを提供しています。Azure Functionsに対応するAWS(Amazon Web Services)のサービスは「AWS Lambda」です。Google Cloud Platformの場合は「Google Cloud Functions」になります。
IT分野の調査企業ガートナーでは、十分なPoC(Proof of Concept)が必要であるとしながらも、サーバーレスは革新的技術であり、急速に進化していると見解を述べています。コスト削減はもちろん開発の高速化を実現するサーバーレス、FaaSは注目すべき分野です。