Azure Functions と Azure Cosmos DB を使用して非構造化データを格納する

Azure Cosmos DB は、非構造化 JSON データを格納するうえで最適な手段です。 Azure Cosmos DB は、Azure Functions と連携させると、リレーショナル データベースにデータを格納する場合よりもはるかに少ないコードですばやく簡単にデータを格納することができます。

Note

現時点で、Azure Cosmos DB トリガー、入力バインディング、出力バインディングは、SQL API アカウントと Graph API アカウントにのみ使用できます。

Azure Functions では、入力および出力バインディングによって、関数から外部サービス データに接続する宣言方法が提供されます。 この記事では、Azure Cosmos DB ドキュメント内に非構造化データを格納する出力バインディングを追加するように既存の関数を更新する方法について説明します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

このトピックでは、「Azure Portal で初めての関数を作成する」で作成したリソースを使用して作業を開始します。 リソースの作成が済んでいない場合は、作成手順に従って Function App をすぐに作成してください。

Azure Cosmos DB アカウントを作成する

出力バインディングを作成する前に、SQL API を使用する Azure Cosmos DB アカウントが必要です。

  1. Azure portal のメニューまたは [ホーム] ページで、 [リソースの作成] を選択します。

  2. Azure Cosmos DB を検索します。 [作成]>[Azure Cosmos DB] を選択します。

  3. [Azure Cosmos DB アカウントの作成] ページで、 Azure Cosmos DB for NoSQL セクション内の [作成] オプションを選択します。

    Azure Cosmos DB には、いくつかの API が用意されています:

    • NoSQL (ドキュメント データ用)
    • PostgreSQL
    • MongoDB (ドキュメント データ用)
    • Apache Cassandra
    • テーブル
    • Apache Gremlin (グラフ データ用)

    NoSQL 用 API の詳細については、「Azure Cosmos DB へようこそ」を参照してください。

  4. [Azure Cosmos DB アカウントの作成] ページで、新しい Azure Cosmos DB アカウントの基本的な設定を入力します。

    設定 説明
    サブスクリプション サブスクリプション名 この Azure Cosmos DB アカウントに使用する Azure サブスクリプションを選択します。
    リソース グループ リソース グループ名 リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの一意の名前を入力します。
    アカウント名 一意の名前 自分の Azure Cosmos DB アカウントを識別するための名前を入力します。 指定した名前に documents.azure.com が付加されて URI が作成されるので、一意の名前を使用してください。 名前に含めることができるのは、英小文字、数字、ハイフン (-) のみです。 3 から 44 文字にする必要があります。
    場所 ユーザーに最も近いリージョン Azure Cosmos DB アカウントをホストする地理的な場所を選択します。 データに最も高速にアクセスできるよう、お客様のユーザーに最も近い場所を使用します。
    容量モード プロビジョニング スループットまたはサーバーレス プロビジョニング スループット モードでアカウントを作成するには、 [Provisioned throughput](プロビジョニング スループット) を選択します。 サーバーレス モードでアカウントを作成するには、 [サーバーレス] を選択します。
    Apply Azure Cosmos DB free tier discount (Azure Cosmos DB Free レベル割引を適用する) [適用] または [適用しない] Azure Cosmos DB Free レベルのアカウントでは、最初の 1000 RU/s と 25 GB のストレージを無料でご利用いただけます。 Free レベルの詳細を確認してください。
    合計アカウント スループットを制限する 選択済みかどうか このアカウントでプロビジョニングできるスループットの総量を制限する。 この制限により、プロビジョニングされたスループットに関連する予期しない料金が回避されます。 この制限は、アカウントの作成後に更新または削除できます。

    Azure サブスクリプションにつき所有できる Free サービス レベルの Azure Cosmos DB アカウントは 1 つまでです。また、アカウントの作成時にオプトインする必要があります。 Free レベル割引を適用するオプションが表示されない場合は、サブスクリプション内の別のアカウントが Free レベルで既に有効になっています。

    [Azure Cosmos DB アカウントの作成] ページを示すスクリーンショット。

    Note

    [Capacity mode](容量モード) として [サーバーレス] を選択した場合、以下のオプションは利用できません。

    • Apply Free Tier Discount (Free レベルの割引の適用)
    • 合計アカウント スループットを制限する
  5. [グローバル分散] タブで、次の詳細を構成します。 このクイックスタートでは、既定値のままにしておいてかまいません。

    設定 説明
    geo 冗長性 無効化 リージョンをペア リージョンとペアリングすることによる、アカウントでのグローバル配信を有効または無効にします。 アカウントには、後でさらにリージョンを追加できます。
    マルチリージョン書き込み 無効化 マルチリージョン書き込み機能を使用すると、世界中のデータベースとコンテナーで、プロビジョニングされたスループットを利用できます。
    可用性ゾーン 無効にする Availability Zones は、アプリケーションの可用性と回復性をさらに向上させるのに役立ちます。

    Note

    前の [基本] ページで [容量モード] として [サーバーレス] を選択した場合、次のオプションは使用できません:

    • geo 冗長
    • マルチリージョン ライター
  6. 必要に応じて、次のタブでさらに詳細を構成できます:

    • ネットワーク仮想ネットワークからのアクセスを構成します。
    • Backup Policy定期的または継続的のいずれかのバックアップ ポリシーを構成します。
    • 暗号化。 サービス マネージド キーまたはカスタマー マネージド キーのいずれかを使用します。
    • タグ。 タグは名前と値のペアで、同じタグを複数のリソースやリソース グループに適用することでリソースを分類したり、統合した請求を表示したりできるようにします。
  7. [Review + create](レビュー + 作成) を選択します。

  8. アカウントの設定を確認し、 [作成] を選択します。 アカウントの作成には数分かかります。 ポータル ページに "デプロイが完了しました" と表示されるまで待ちます。

    デプロイが完了したことを示すスクリーンショット。

  9. [リソースに移動] を選択し、Azure Cosmos DB アカウント ページに移動します。

    Azure Cosmos DB アカウント ページを示すスクリーンショット。

出力バインディングを追加する

  1. Azure portal で、前に作成した関数アプリに移動して選択します。

  2. [関数] を選択し、HttpTrigger 関数を選択します。

    Azure portal で Http 関数を選択する。

  3. [統合] を選択し、 [+ 出力を追加する] を選択します。

    Azure Cosmos DB 出力バインディングを追加する。

  4. 次の表に指定されている [出力の作成] 設定を使用します。

    Azure Cosmos DB 出力バインディングを構成する。

    設定 提案された値 説明
    バインドの種類 Azure Cosmos DB Azure Cosmos DB への出力バインディングを作成するために選択するバインディングの種類の名前。
    [ドキュメント パラメーター名] taskDocument コード内で Azure Cosmos DB オブジェクトを指す名前。
    データベース名 taskDatabase ドキュメントを保存するデータベースの名前。
    [コレクション名] taskCollection データベース コレクションの名前
    オンの場合、Azure Cosmos DB データベースとコレクションを作成する はい コレクションはまだ存在していないため、作成します。
    Azure Cosmos DB アカウント接続 新しい設定 [新規] を選択します。Azure Cosmos DB アカウントと前の手順で作成したデータベース アカウントを選択し、 [OK] を選択します。 アカウントの接続のアプリケーション設定を作成します。 この設定は、データベースへの接続へのバインディングによって使用されます。
  5. [OK] を選択してバインディングを作成します。

関数コードを更新する

既存の関数コードを、次の選択した言語のコードに置き換えます。

既存の C# 関数を次のコードに置き換えます。

#r "Newtonsoft.Json"

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

public static IActionResult Run(HttpRequest req, out object taskDocument, ILogger log)
{
    string name = req.Query["name"];
    string task = req.Query["task"];
    string duedate = req.Query["duedate"];

    // We need both name and task parameters.
    if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(task))
    {
        taskDocument = new
        {
            name,
            duedate,
            task
        };

        return (ActionResult)new OkResult();
    }
    else
    {
        taskDocument = null;
        return (ActionResult)new BadRequestResult();
    }
}

このサンプル コードは、HTTP 要求のクエリ文字列を読み取り、それらを taskDocument オブジェクトのフィールドに代入します。 taskDocument バインディングは、このバインディング パラメーターのオブジェクト データを、バインドされたドキュメント データベースに格納されるように送信します。 データベースは、関数が初めて実行されるときに作成されます。

関数とデータベースをテストする

  1. [Test/Run](テストと実行) を選択します。 [クエリ] の下の [+ パラメーターの追加] を選択し、クエリ文字列に以下のパラメーターを追加します。

    • name
    • task
    • duedate

    関数をテストする。

  2. [実行] を選択して、200 状態が返されることを確認します。

    [実行] を選択した後で HTTP 応答コード 200 状態が強調表示されているスクリーンショット。

  3. Azure portal で、Azure Cosmos DB を検索して選択します。

    Azure Cosmos DB サービスを検索する。

  4. 対象の Azure Cosmos DB アカウントを選択してから、[データ エクスプローラー] を選択します。

  5. [TaskCollection] ノードを展開して新しいドキュメントを選択し、ドキュメントにクエリ文字列値といくつかの追加のメタデータが含まれていることを確認します。

    ドキュメント内の文字列値を確認する。

Azure Cosmos DB インスタンスに非構造化データを格納するバインディングを HTTP トリガーに正常に追加できました。

リソースをクリーンアップする

前の手順では、リソース グループ内に Azure リソースを作成しました。 これらのリソースが将来必要になると思わない場合は、リソース グループを削除してリソースを削除できます。

Azure portal メニューまたは [ホーム] ページから、 [リソース グループ] を選択します。 次に、 [リソース グループ] ページで [myResourceGroup] を選択します。

[myResourceGroup] ページで、一覧表示されたリソースが、削除しようとするリソースであることを確認します。

[リソース グループの削除] を選択し、確認のためテキスト ボックスに「myResourceGroup」と入力して、 [削除] を選択します。

次のステップ

Azure Cosmos DB インスタンスへのバインドの詳細については、Azure Functions Azure Cosmos DB バインドに関する記事を参照してください。