次の方法で共有


Azure Functions のシナリオ

多くの場合、一連の重要なイベントに対応するシステムを構築します。 Web API の構築、データベースの変更への応答、イベント ストリームやメッセージの処理のいずれを行う場合でも、Azure Functions を使用してこれらのシステムを実装できます。

多くの場合、関数は、さまざまなクラウド サービスと連携して多機能な実装を実現します。 次の一覧は、Azure Functions の一般的な (ただし、網羅的ではない) シナリオを示しています。

記事の冒頭で、使用する開発言語を選択してください。

ファイルのアップロードを処理する

関数を活用して、Blob Storage コンテナーとの間でファイルを処理することができます。 BLOB コンテナーにトリガーを設定するオプションの詳細については、ベスト プラクティスドキュメントの「BLOB の操作」を参照してください。

たとえば、小売ソリューションでは、パートナー システムは製品カタログ情報をファイルとして BLOB ストレージに送信できます。 BLOB によってトリガーされる関数を使用して、ファイルをアップロードするときに、ファイルを検証し、変換し、メイン システムに処理できます。

Azure Functions を使用したファイルアップロード プロセスの図。

次のチュートリアルでは、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 などのリアルタイム出力を使用して、ほぼリアルタイムでデータを処理することもできます。

Azure Functions を使用したリアルタイム ストリーム プロセスの図。

たとえば、イベント ハブ トリガーを使用してイベント ハブから読み取り、出力バインドを使用して、イベントをデバッチして変換した後でイベント ハブに書き込むことができます。

[FunctionName("ProcessorFunction")]
public static async Task Run(
    [EventHubTrigger(
        "%Input_EH_Name%",
        Connection = "InputEventHubConnectionSetting",
        ConsumerGroup = "%Input_EH_ConsumerGroup%")] EventData[] inputMessages,
    [EventHub(
        "%Output_EH_Name%",
        Connection = "OutputEventHubConnectionSetting")] 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);
}

機械学習と AI

Azure Functions は、クラウドでホストされるインテリジェント アプリケーションの構築を効率化するために、AI および Azure サービスと統合するサーバーレス コンピューティング リソースを提供します。 Functions プログラミング モデルを使用すると、リモート モデル コンテンツ プロトコル (MCP) サーバーを作成してホストし、さまざまな AI ツールを実装できます。 詳細については、 ツールおよび MCP サーバーを参照してください。

Azure OpenAI バインド拡張機能を使用すると、取得拡張生成 (RAG) などの Azure OpenAI サービスの AI 機能と動作を関数コードの実行に統合できます。 詳細については、「 検索拡張生成」を参照してください。

関数では、TensorFlow モデルまたは Azure AI サービスを呼び出して、画像のストリームを処理および分類することもできます。

Azure Functions を使用した機械学習と AI プロセスの図。

詳細については、「 Azure Functions での AI ツールとモデルの使用」を参照してください。

スケジュールされたタスクを実行する

Functions では、定義した cron スケジュールに基づいてコードを実行できます。

スケジュールに従って実行される関数を Azure portal で作成するを参照してください。

たとえば、同じ顧客に複数の通信が送信されないように、15 分ごとに金融サービスの顧客データベースで重複するエントリを分析できます。

関数がビジネス ロジックに基づいてエントリを 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 イベントを監視する」を参照してください。

Azure Functions を使用した HTTP 要求の処理の図。

例については、次のコード スニペットを参照してください。

[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();
}

サーバーレス ワークフローを作成する

関数は、多くの場合、Logic Apps ワークフローなどのサーバーレス ワークフロー トポロジのコンピューティング コンポーネントとして機能します。 Durable Functions 拡張機能を使用して、実行時間の長いオーケストレーションを作成することもできます。 詳細については、「Durable Functions の概要」を参照してください。

Azure Functions を使用した一連の特定のサーバーレス ワークフローの組み合わせ図。

データベースの変更に対処する

一部のプロセスでは、保存されたデータが変更されたときに、ログ記録、監査、またはその他の操作を実行する必要があります。 Functions トリガーは、このような操作を開始するためにデータ変更の通知を受けるための方法として適しています。

データベースの変更に対応するために使用される関数の図。

信頼性の高いメッセージ システムを作成する

Functions を Azure メッセージング サービスと共に使用して、高度なイベント ドリブン メッセージング ソリューションを作成できます。

たとえば、一連の関数実行を連結する方法として、Azure Storage キューのトリガーを使用できます。 または、オンライン注文システムの場合は、サービス バスのキューとトリガーを使用します。

信頼性の高いメッセージ システムでの Azure Functions の図。

次の記事では、ストレージ キューに出力を書き込む方法を示します。

これらの記事では、Azure Service Bus キューまたはトピックからトリガーする方法について説明します。

次のステップ