Azure Functions のシナリオ
通常、システムは、一連の重大なイベントに対処できるように構築されます。 Web API の構築、データベースの変更への応答、イベント ストリームやメッセージの処理など、目的を問わず、Azure Functions を使用してそれらを実装できます。
多くの場合、関数は、さまざまなクラウド サービスと連携して多機能な実装を実現します。 以下に示したのは、Azure Functions の代表的なシナリオの例です (ただし、すべてのシナリオを網羅したものではありません)。
記事の冒頭で、使用する開発言語を選択してください。
ファイルのアップロードを処理する
関数を使用して BLOB ストレージ コンテナーのファイルを処理する方法はいくつかあります。 BLOB コンテナーにトリガーを設定するオプションの詳細については、ベスト プラクティスドキュメントの「BLOB の操作」を参照してください。
たとえば、小売ソリューションでは、パートナー システムは製品カタログ情報をファイルとして BLOB ストレージに送信できます。 BLOB トリガー関数を使用して、アップロード時にメイン システムでファイルを検証、変換、処理できます。
次のチュートリアルでは、BLOB トリガー (Event Grid ベース) を使用して BLOB コンテナー内のファイルを処理します。
たとえば、BLOB コンテナーのイベント サブスクリプションによる BLOB トリガーを使用する場合は、次のようになります。
[FunctionName("ProcessCatalogData")]
public static async Task Run([BlobTrigger("catalog-uploads/{name}", Source = BlobTriggerSource.EventGrid, Connection = "<NAMED_STORAGE_CONNECTION>")]Stream myCatalogData, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myCatalogData.Length} Bytes");
using (var reader = new StreamReader(myCatalogData))
{
var catalogEntry = await reader.ReadLineAsync();
while(catalogEntry !=null)
{
// Process the catalog entry
// ...
catalogEntry = await reader.ReadLineAsync();
}
}
}
リアルタイム ストリームとイベント処理
クラウド アプリケーション、IoT デバイス、ネットワーク デバイスから、多くのテレメトリが生成および収集されます。 Azure Functions では、そのデータをホット パスとして準リアルタイムで処理し、分析ダッシュボードで使うために Azure Cosmos DB に格納できます。
関数では、Event Grid などの待機時間の短いイベント トリガーや SignalR などのリアルタイム出力を使用して、ほぼリアルタイムでデータを処理することもできます。
たとえば、イベントをバッチ解除および変換した後に、イベント ハブ トリガーを使用してイベント ハブから読み取ったり、出力バインディングを使用してイベント ハブに書き込んだりします。
[FunctionName("ProcessorFunction")]
public static async Task Run(
[EventHubTrigger(
"%Input_EH_Name%",
Connection = "InputEventHubConnectionString",
ConsumerGroup = "%Input_EH_ConsumerGroup%")] EventData[] inputMessages,
[EventHub(
"%Output_EH_Name%",
Connection = "OutputEventHubConnectionString")] IAsyncCollector<SensorDataRecord> outputMessages,
PartitionContext partitionContext,
ILogger log)
{
var debatcher = new Debatcher(log);
var debatchedMessages = await debatcher.Debatch(inputMessages, partitionContext.PartitionId);
var xformer = new Transformer(log);
await xformer.Transform(debatchedMessages, partitionContext.PartitionId, outputMessages);
}
- 仮想ネットワーク統合を使用する Service Bus トリガー
- Azure Event Hubs、Functions、Azure SQL を使用した大規模なストリーミング
- Azure Event Hubs、Functions、Cosmos DB を使用した大規模なストリーミング
- Azure Event Hubs と Kafka プロデューサー、Functions と Kafka トリガー、および Cosmos DB を使用した大規模なストリーミング
- Azure IoT Hub、Functions、Azure SQL を使用した大規模なストリーミング
- Azure Functions の Azure Event Hubs トリガー
- Azure Functions の Apache Kafka トリガー
機械学習と AI
データ処理に加えて、Azure Functions を使用してモデルに基づいた推論を実行できます。 Azure OpenAI バインド拡張機能を使用すると、Azure OpenAI サービスの機能と動作を関数コードの実行に簡単に統合できます。
関数は OpenAI リソースに接続して、テキストとチャットの入力候補を有効にし、アシスタントを使用し、埋め込みとセマンティック検索を活用します。
関数では、TensorFlow モデルまたは Azure AI サービスを呼び出して、画像のストリームを処理および分類することもできます。
- チュートリアル: Azure OpenAI を使用したテキストの入力候補
- サンプル: テキスト ファイルをアップロードし、OpenAI のさまざまな機能を使用してデータにアクセスする
- サンプル: AI Cognitive Language Service を使用したテキストの要約
- サンプル: Azure OpenAI を使用したテキストの入力候補
- サンプル: モデルにアシスタント スキルを提供する
- サンプル: 埋め込みの生成
- サンプル: セマンティック検索を活用する
- チュートリアル: Azure OpenAI を使用したテキストの入力候補
- サンプル: Azure OpenAI を使用したテキストの入力候補
- サンプル: モデルにアシスタント スキルを提供する
- サンプル: 埋め込みの生成
- サンプル: セマンティック検索を活用する
- チュートリアル: Azure OpenAI を使用したテキストの入力候補
- トレーニング: Azure AI Search のカスタム スキルを作成する
- サンプル: ChatGPT を使用してチャットする
- サンプル: テキスト ファイルをアップロードし、OpenAI のさまざまな機能を使用してデータにアクセスする
- チュートリアル: Azure OpenAI を使用したテキストの入力候補
- トレーニング: Azure AI Search のカスタム スキルを作成する
- サンプル: ChatGPT を使用してチャットする
- サンプル: テキスト ファイルをアップロードし、OpenAI のさまざまな機能を使用してデータにアクセスする
- チュートリアル: Azure OpenAI を使用したテキストの入力候補
- チュートリアル: Python および TensorFlow を使用して Azure Functions で機械学習モデルを適用する
- チュートリアル: PyTorch を使用して事前トレーニング済みの画像分類モデルを Azure Functions にデプロイする
- サンプル: Azure OpenAI を使用したテキストの入力候補
- サンプル: モデルにアシスタント スキルを提供する
- サンプル: 埋め込みの生成
- サンプル: セマンティック検索を活用する
- サンプル: ChatGPT を使用してチャットする
- サンプル: Azure OpenAI と ChatGPT を使用する LangChain
- チュートリアル: Azure OpenAI を使用したテキストの入力候補
- サンプル: Azure OpenAI を使用したテキストの入力候補
- サンプル: モデルにアシスタント スキルを提供する
- サンプル: 埋め込みの生成
- サンプル: セマンティック検索を活用する
スケジュールされたタスクを実行する
Functions では、定義した cron スケジュールに基づいてコードを実行できます。
スケジュールに基づいて実行される関数を Azure portal で作成する方法を確認してください。
たとえば、同じ顧客に複数の通信が送信されないように、金融サービスの顧客データベースを 15 分ごとに分析して重複エントリを検出することができます。
[FunctionName("TimerTriggerCSharp")]
public static void Run([TimerTrigger("0 */15 * * * *")]TimerInfo myTimer, ILogger log)
{
if (myTimer.IsPastDue)
{
log.LogInformation("Timer is running late!");
}
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
// Perform the database deduplication
}
スケーラブルな Web API を構築する
HTTP トリガー関数は HTTP エンドポイントを定義します。 これらのエンドポイントでは、他のサービスに直接、またはバインド拡張機能を使用して接続できる関数コードを実行します。 エンドポイントを Web ベースの API に組み込むことができます。
HTTP トリガー関数のエンドポイントは、GitHub webhook などの webhook 統合として使用することもできます。 このようにして、GitHub イベントからのデータを処理する関数を作成できます。 詳細については、「Azure Functions で Webhook を使用して GitHub イベントを監視する」を参照してください。
例については、以下を参照してください。
[FunctionName("InsertName")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req,
[CosmosDB(
databaseName: "my-database",
collectionName: "my-container",
ConnectionStringSetting = "CosmosDbConnectionString")]IAsyncCollector<dynamic> documentsOut,
ILogger log)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string name = data?.name;
if (name == null)
{
return new BadRequestObjectResult("Please pass a name in the request body json");
}
// Add a JSON document to the output container.
await documentsOut.AddAsync(new
{
// create a random ID
id = System.Guid.NewGuid().ToString(),
name = name
});
return new OkResult();
}
サーバーレス ワークフローを作成する
Functions は、多くの場合、Logic Apps ワークフローなどのサーバーレス ワークフロー トポロジにおけるコンピューティング コンポーネントです。 Durable Functions 拡張機能を使用して、実行時間の長いオーケストレーションを作成することもできます。 詳細については、「Durable Functions の概要」を参照してください。
- クイックスタート: PowerShell を使用して Azure で最初の永続関数を作成する
データベースの変更に対処する
格納されているデータが変更されたときに、ログ記録、監査、または他の何らかの操作を実行することが必要な場合があるプロセスが存在します。 Functions トリガーは、このような操作を開始するためにデータ変更の通知を受けるための方法として適しています。
次に例を示します。
信頼性の高いメッセージ システムを作成する
Functions を Azure メッセージング サービスと共に使用して、高度なイベント ドリブン メッセージング ソリューションを作成できます。
たとえば、一連の関数実行を連結する方法として、Azure Storage キューのトリガーを使用できます。 または、オンライン注文システムの場合は、サービス バスのキューとトリガーを使用します。
次の記事では、ストレージ キューに出力を書き込む方法を示します。
これらの記事では、Azure Service Bus のキューまたはトピックからトリガーする方法を示します。