Courses
Azure Functions は、Microsoft のサーバーレスコンピューティングサービスの一部です。イベントに応じて小さなコード片を実行でき、サーバーの管理は不要です。
たとえば、HTTP リクエストの到着時、ストレージへのファイルのアップロード時、あるいはスケジュールされた時刻に関数を実行できます。
「サーバーレス」とはサーバーが存在しないという意味ではありません。インフラは Azure が管理してくれるということです。プロビジョニング、スケーリング、メンテナンスは Azure が裏側で処理します。
このガイドでは、トリガー、バインディング、ホスティングオプション、そして手を動かすためのサンプルという基本要素を取り上げます。
Azure Functions とは?
Azure Function は、選択したイベントでトリガーされたときに実行される小さなコード片です。基本的にはロジックだけを書けば、残りは Azure が処理してくれます。
このモデルを定義するのは次の3つの考え方です。
- イベント駆動の実行により、常時ではなく、何かが起きたときだけコードが動きます。
- 自動スケーリングにより、需要に応じて Azure がコンピュートリソースを追加・削除します。
- 従量課金制の料金モデルにより、ホスティングプランによってはコードが実際に動作した時間に対してのみ支払います。
単一の関数は、画像のリサイズやメッセージ処理のような 1 つの小さな仕事を担うのが理想的です。Function App は 1 つ以上の関数を格納するコンテナで、内部のすべての関数に共通する設定(構成やデプロイ)を管理します。
Azure Functions の仕組み
関数のライフサイクルは、次のような単純なパターンに従います。
- ファイルのアップロードや HTTP 呼び出しなどのイベントが発生する。
- トリガーがイベントを検知し、関数を即座に開始する。
- 関数がコードを実行する。
- バインディングが関数を他のサービスに接続し、必要な入力の読み取りや出力の送信を行う。
- この処理の背後にあるコンピュートリソースは Azure が管理し、もちろん選択したホスティングプランに基づきます。
このフローは、言語や(多くのステップにおいて)ホスティングオプションに関係なく同じです。変わるのはトリガー、コード、バインディングだけです。
Azure Functions のトリガー
すべての関数はトリガーを 1 つだけ持ちます。トリガーは関数の起動方法を定義します。知っておくべき代表的な種類は次のとおりです。
- HTTP トリガー:HTTP リクエストを受け取ったときに関数を実行します。API 構築によく使われます。
- タイマートリガー:スケジュールに基づいて関数を実行します。例:毎時、毎日など。
- Blob ストレージ トリガー:Azure Blob Storage にファイルが追加・変更されたときに関数を実行します。
- キュートリガー:新しいメッセージがキューに到着したときに関数を実行します。
- Event Hubs トリガー:イベントのストリームに応じて関数を実行します。大量データに有用です。
Azure Functions のバインディング
トリガーとバインディングは混同されがちですが、見た目が似ていても役割はまったく異なります。トリガーは関数を起動し、バインディングはデータの読み取りや送信によって関数をデータに接続します。
入力バインディング
ここでは、独自の統合コードを書かずに関数へデータを与えられます。たとえば、バインディングを宣言するだけで、関数が自動的にデータベースのレコードを読み取ることができます。
出力バインディング
関数の結果を別の場所へ送ることができます。たとえば、処理済みメッセージをキューに書き込むために出力バインディングを使えます。
例を挙げると:Blob Storage トリガーで画像のアップロード時に関数を開始し、出力バインディングでリサイズ画像を別のストレージコンテナーに保存します。こうすることで、手動のストレージクライアントコードは不要になります。
最初の Azure Function を作成する方法
以下は、挨拶文を返す非常にシンプルな HTTP トリガー関数の例です。フローは次のとおりです。
- Function App を作成します。これは Azure における関数のコンテナです。
- ランタイムを選び、使用する開発言語を選択します。
- Function App 内に新しい関数を追加するため、関数を作成します。
- HTTP トリガーを選択して、Web リクエストに応答できるようにします。
- リクエストから名前を読み取り「Hello, [name].」を返すといった簡単な機能を追加します。
- 組み込みのテストツールを使うか、ブラウザからリクエストを送信して関数を実行・テストします。
- Azure にデプロイして公開します。
このパターンを示すために、あえて小さな例にしました。あとは自由に応用してください。
Azure Functions がサポートする言語
Azure Functions は次のような多くの言語をサポートしています。
- C#
- JavaScript/TypeScript
- Python
- Java
- PowerShell
サポート状況や開発モデルは言語やバージョンによって異なる場合があります。そのため、新規プロジェクトを始める前に、最新のAzure ドキュメントを確認することをおすすめします。これらの詳細は頻繁に変わります。
Azure Functions のホスティングオプション
すべての Azure Function が同じ実行方式というわけではありません。そのため Azure には複数のホスティングプランがあり、ユースケースに応じて異なるトレードオフがあります。主なトレードオフは次のとおりです。
- スケーリング:一部のプランは自動かつ即時にスケールし、その他はより手動のコントロールを要します。
- 起動挙動:一部のプランは関数を「ウォーム」状態に保ち、すぐに実行可能にします。その他はオンデマンドで起動します。
- ネットワーキング:一部のプランはプライベート仮想ネットワークへの接続など高度なネットワーク機能をサポートしますが、そうでないものもあります。
- コスト:料金モデルは、実行ごとの従量課金から月額固定費まで大きく異なります。
Azure Functions におけるスケーリングとコールドスタート
本番運用で関数を使う際に重要となる概念が 2 つあります。
自動スケーリング
Azure が関数の負荷を監視し、需要が増えればコンピュートインスタンスを追加し、需要が下がれば削除します。手動管理は不要です。
コールドスタート
最近実行されていない関数は、新しいリクエストを処理する前に起動のための時間を要することがあります。この遅延がコールドスタートです。一部のホスティングプランは、前述のとおりインスタンスをウォームに保つことでこれを低減または回避します。
Azure Functions の一般的なユースケース
イベント駆動モデルは、日常的に遭遇する多くの課題に適合します。特に次のような場面です。
API と Webhook
常時稼働のフル機能 Web サーバーを用意せずに、受信する HTTP リクエストを処理します。
ファイル・画像処理
ファイルがストレージに到着したときに関数をトリガーし、リサイズ、変換、スキャンなどを行います。
スケジュールジョブ
常時稼働の専用サーバーを用意せずに、タイマーでクリーンアップ、レポート、リマインダーを実行します。
データ処理パイプライン
到着したメッセージやイベントを、段階的に処理します。
IoT とイベント処理
ストリームで流入する大量のセンサー/デバイスデータを処理します。
バックグラウンド処理
メール送信のような遅い処理やたまの処理をオフロードし、メインアプリケーションをブロックしないようにします。
Azure Functions の監視とトラブルシューティング
関数を公開したら、その動作状況を可視化する必要があります。
たとえば、各実行で何が起きたかを記録するログを確認でき、デバッグに非常に便利です。また Azure のツールである Application Insights を確認すれば、パフォーマンス、リクエスト、失敗を一元的に追跡できます。
呼び出し失敗も追跡し、関数が完了しなかった原因とタイミングを把握してください。パフォーマンス監視は、問題化する前に遅い関数を特定するのにも役立ちます。もちろん、失敗した実行を自動的に再試行するようリトライ動作を構成することも可能です。
まとめ
Azure Functions は、基盤となるサーバーを管理せずに、イベントに応じてコードを実行する手段を提供します。トリガーは関数の開始タイミングを決め、バインディングは追加の統合コードなしで他サービスとの接続を容易にします。
シンプルなテスト関数から本番運用に移行するにつれて、ホスティングとスケーリングの選択はより重要になります。適切なプランはコストだけでなく、速度や信頼性にも影響します。
FAQs
Azure Functions とは何ですか?
イベントに応じて小さなコード片を実行でき、サーバーを管理する必要のないサーバーレスサービスです。
Azure Function をトリガーするものは何ですか?
HTTP リクエスト、タイマー、ファイルのアップロード、キューメッセージなどのイベントです。
トリガーとバインディングの違いは何ですか?
トリガーは関数を開始します。バインディングは、入力や出力のために他サービスへ接続します。
コールドスタートとは何ですか?
アイドル状態の後に関数が起動する際に発生する短い遅延のことです。
Azure Functions がサポートする言語はどれですか?
C#、JavaScript/TypeScript、Python、Java、PowerShell です。