コース
Azure Functions は、Microsoft のサーバーレス コンピュート サービスの一部です。イベントに応じて小さなコード片を実行でき、サーバーの管理は不要です。
たとえば、HTTP リクエストの受信時、ストレージへのファイルのアップロード時、あるいはスケジュールされた時刻に、関数を実行できます。
「サーバーレス」とは、サーバーが存在しないという意味ではありません。インフラ管理を Azure が担うという意味です。プロビジョニング、スケーリング、メンテナンスは Azure が裏側で処理します。
本ガイドでは、基礎となる要素――トリガー、バインディング、ホスティング オプション――を解説し、手を動かすための簡単な例も紹介します。
Azure Functions とは?
Azure Function とは、選択したイベントでトリガーされて実行される小さなコード片のことです。ロジックは自分で書き、残りは Azure が面倒を見てくれます。
このモデルを定義するのは、次の 3 つの考え方です。
- イベント駆動の実行により、常時ではなく、何かが起きたときだけコードが動きます。
- 自動スケーリングにより、需要に応じて Azure がコンピュート リソースを増減します。
- 従量課金制により、一部のホスティング プランではコードが実際に実行された時間に対してのみ支払います。
理想的には、1 つの関数は 1 つの仕事を担います。例えば画像のリサイズやメッセージ処理です。Function App は 1 つ以上の関数を格納するコンテナーで、構成やデプロイなど、内部のすべての関数に共通する設定を管理します。
Azure Functions の仕組み
関数のライフサイクルは、おおむね次の単純なパターンに従います。
- ファイルのアップロードや HTTP 呼び出しなどのイベントが発生する。
- トリガーがイベントを検出し、直ちに関数を開始する。
- 関数がコードを実行する。
- バインディングが、必要な入力の読み取りや出力の送信のために関数を他のサービスに接続する。
- このプロセスの背後にあるコンピュート リソースは Azure が管理し、もちろん選択したホスティング プランに基づいて制御される。
この流れは、言語やホスティング オプションに関わらず概ね同じです。変わるのはトリガー、コード、そしてバインディングだけです。
Azure Functions のトリガー
すべての関数には必ず 1 つのトリガーがあります。トリガーは関数の開始方法を定義します。知っておくべき代表的な種類は次のとおりです。
- HTTP トリガー:HTTP リクエストを受け取ったときに関数を実行します。API 構築で一般的です。
- タイマー トリガー:スケジュールに従って関数を実行します。例えば毎時や 1 日 1 回など。
- Blob Storage トリガー:Azure Blob Storage にファイルが追加・変更されたときに関数を実行します。
- キュー トリガー:新しいメッセージがキューに届いたときに関数を実行します。
- Event Hub トリガー:イベントのストリームに応答して関数を実行します。大量データに有用です。
- Cosmos DB トリガー:Cosmos DB コンテナーでドキュメントが作成・更新されたときに、Change Feed を利用して関数を実行します。
- Service Bus トリガー:Azure Service Bus のキューまたはトピックからのメッセージに応答して関数を実行します。エンタープライズ メッセージングやシステムの疎結合で一般的です。
- Durable Functions:サーバーレス環境で状態を持つ関数を書ける拡張機能で、複雑な多段ワークフローをオーケストレーションできます。
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
24 時間フル稼働の Web サーバーを用意せずに、受信した HTTP リクエストを処理できます。
ファイルと画像の処理
ストレージにファイルが到着したタイミングで関数を起動し、リサイズや変換、スキャンなどを行えます。
スケジュール実行
クリーンアップ、レポート、リマインダーなどをタイマーで実行し、常時稼働の専用サーバーを不要にします。
データ処理パイプライン
到着したメッセージやイベントを、段階的に処理していきます。
IoT とイベント処理
センサーやデバイスからの大量データをストリーミングで取り扱えます。
バックグラウンド タスク
メール送信のような遅延しがち・たまに発生する処理をオフロードし、メイン アプリケーションをブロックしないようにします。
Azure Functions の監視とトラブルシューティング
関数を公開したら、その動作状況を可視化する必要があります。
たとえば、各実行で何が起きたかを記録するログを確認でき、デバッグに非常に役立ちます。Azure のツールである Application Insights では、パフォーマンス、リクエスト、失敗を一元的に追跡できます。
関数が完了しなかった理由とタイミングを把握するため、呼び出し失敗も追跡してください。パフォーマンス監視は、問題化する前に遅い関数を特定するのにも役立ちます。もちろん、失敗した実行が自動再試行されるようにリトライ動作も構成できます。
まとめ
Azure Functions は、基盤のサーバーを管理することなく、イベントに応じてコードを実行する方法を提供します。トリガーは関数の開始タイミングを決め、バインディングは追加の統合コードなしで他サービスとの接続を容易にします。
単純なテスト関数から本番稼働のワークロードへ進むにつれ、ホスティングとスケーリングの選択がより重要になります。適切なプランはコストだけでなく、速度や信頼性にも影響します。
FAQs
Azure Functions とは何ですか?
イベントに応じて小さなコード片を実行でき、サーバーを自分で管理する必要がないサーバーレス サービスです。
Azure Function をトリガーするものは何ですか?
HTTP リクエスト、タイマー、ファイルのアップロード、キュー メッセージなどのイベントです。
トリガーとバインディングの違いは何ですか?
トリガーは関数を開始します。バインディングは入力や出力のために他サービスへ接続します。
コールドスタートとは何ですか?
アイドル状態の後、関数が起動する際に発生する短い遅延のことです。
Azure Functions がサポートする言語はどれですか?
C#、JavaScript/TypeScript、Python、Java、PowerShell です。