SDK を使って Azure Cosmos DB for NoSQL コンテナーのインデックス ポリシーを構成する

インデックス作成ポリシーは、任意の Azure Cosmos DB SDK から管理できます。 特に、.NET SDK には、Azure Cosmos DB for NoSQL のコンテナーに新しいインデックス ポリシーを設計およびプッシュするために使用できる一連のクラスが含まれています。

このラボでは、.NET SDK を使用して、コンテナーのカスタム インデックス作成ポリシーを作成します。

開発環境を準備する

このラボで作業している環境に DP-420 のラボ コードのリポジトリをまだクローンしていない場合は、次の手順に従ってクローンします。 それ以外の場合は、以前にクローンしたフォルダーを Visual Studio Code で開きます。

  1. Visual Studio Code を起動します。

    📝 Visual Studio Code インターフェイスについてまだよく理解していない場合は、Visual Studio Code の入門ガイドを参照してください

  2. コマンド パレットを開き、Git: Clone を実行して、任意のローカル フォルダーに https://github.com/microsoftlearning/dp-420-cosmos-db-dev GitHub リポジトリをクローンします。

    💡 Ctrl + Shift + P キーボード ショートカットを使用してコマンド パレットを開くことができます。

  3. リポジトリが複製されたら、Visual Studio Code で選択したローカル フォルダーを開きます。

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

Azure Cosmos DB は、複数の API をサポートするクラウドベースの NoSQL データベース サービスです。 Azure Cosmos DB アカウントを初めてプロビジョニングするときに、そのアカウントでサポートする API (たとえば、Mongo APINoSQL API) を選択します。 Azure Cosmos DB for NoSQL アカウントのプロビジョニングが完了したら、エンドポイントとキーを取得し、Azure SDK for .NET または任意の他の SDK を使用して Azure Cosmos DB for NoSQL アカウントに接続する際に使用できます。

  1. 新しい Web ブラウザー ウィンドウまたはタブで、Azure portal (portal.azure.com) に移動します。

  2. ご利用のサブスクリプションに関連付けられている Microsoft 資格情報を使用して、ポータルにサインインします。

  3. [+ リソースの作成] を選択し、Cosmos DB を検索して、新しい Azure Cosmos DB for NoSQL アカウント リソースを作成します。以下を設定して、残りの設定はすべて既定値のままにします。

    設定 Value
    サブスクリプション ’‘既存の Azure サブスクリプション’’
    リソース グループ ’‘既存のリソース グループを選択するか、新しいものを作成します’’
    アカウント名 ’‘グローバルに一意の名前を入力します’’
    場所 ’‘使用可能なリージョンを選びます’’
    容量モード プロビジョニング済みスループット
    Apply Free Tier Discount (Free レベル割引の適用) 適用しない

    📝 ご利用のラボ環境には、新しいリソース グループを作成できない制限が存在する場合があります。 その場合は、事前に作成されている既存のリソース グループを使用します。

  4. デプロイ タスクが完了するまで待ってから、このタスクを続行してください。

  5. 新しく作成された Azure Cosmos DB アカウント リソースに移動し、 [キー] ペインに移動します。

  6. このペインには、SDK からアカウントに接続するために必要な接続の詳細と資格情報が含まれています。 具体的な内容は次のとおりです。

    1. [URI] フィールドに注目します。 このエンドポイントの値は、この演習で後ほど使用します。

    2. [主キー] フィールドに注目してください。 このキーの値は、この演習で後ほど使用します。

  7. Visual Studio Code に戻ります。

.NET SDK を使用して新しいインデックス作成ポリシーを作成する

.NET SDK には、コードで新しいインデックスポリシーを構築するために、親 Microsoft.Azure.Cosmos.IndexingPolicy クラスに関連する一連のクラスが含まれています。

  1. [エクスプローラー] ウィンドウで、12-custom-index-policy フォルダーを参照します。

  2. script.cs コード ファイルを開きます。

  3. endpoint という名前の既存の変数を、先ほど作成した Azure Cosmos DB アカウントの endpoint に設定された値で更新します。

     string endpoint = "<cosmos-endpoint>";
    

    📝 たとえば、ご自分のエンドポイントが https­://dp420.documents.azure.com:443/ の場合、C# ステートメントは string endpoint = “https­://dp420.documents.azure.com:443/”; になります。

  4. key という名前の既存の変数を、先ほど作成した Azure Cosmos DB アカウントの key に設定された値で更新します。

     string key = "<cosmos-key>";
    

    📝 たとえば、キーが fDR2ci9QgkdkvERTQ== の場合、C# ステートメントは string key = “fDR2ci9QgkdkvERTQ==”; になります。

  5. 既定の空のコンストラクターを使用して、policy という名前の型 IndexingPolicy の新しい変数を作成します。

     IndexingPolicy policy = new ();
    
  6. policy 変数の IndexingMode プロパティを IndexingMode.Consistent の値に設定します。

     policy.IndexingMode = IndexingMode.Consistent;
    
  7. Path プロパティが /* の値に設定された型 ExcludedPath の新しいオブジェクトを、policy 変数の ExcludedPaths コレクション プロパティに追加します。

     policy.ExcludedPaths.Add(
         new ExcludedPath{ Path = "/*" }
     );
    
  8. Path プロパティが /name/? の値に設定された型 IncludedPath の新しいオブジェクトを、 policy 変数の IncludedPaths コレクション プロパティに追加します。

     policy.IncludedPaths.Add(
         new IncludedPath{ Path = "/name/?" }
     );
    
  9. options という名前の型 ContainerProperties の新しい変数を作成し、コンストラクター パラメーターとして値 products/categoryId を渡します。

     ContainerProperties options = new ("products", "/categoryId");
    
  10. policy 変数を options 変数の IndexingPolicy プロパティに割り当てます。

     options.IndexingPolicy = policy;
    
  11. database 変数の CreateContainerIfNotExistsAsync メソッドを非同期に呼び出し、options 変数をコンストラクター パラメーターとして渡し、結果を container という名前の Container 型の変数に格納します。

     Container container = await database.CreateContainerIfNotExistsAsync(options);
    
  12. 組み込みの Console.WriteLine 静的メソッドを使用して、Container クラスの Id プロパティを Container Created というタイトルのヘッダーと共に出力します。

     Console.WriteLine($"Container Created [{container.Id}]");
    
  13. 完了すると、コード ファイルが次のようになるはずです。

     using System;
     using Microsoft.Azure.Cosmos;
    
     string endpoint = "<cosmos-endpoint>";
    
     string key = "<cosmos-key>";
    
     CosmosClient client = new CosmosClient(endpoint, key);
    
     Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks");
        
     IndexingPolicy policy = new ();
     policy.IndexingMode = IndexingMode.Consistent;
     policy.ExcludedPaths.Add(
         new ExcludedPath{ Path = "/*" }
     );
     policy.IncludedPaths.Add(
         new IncludedPath{ Path = "/name/?" }
     );
    
     ContainerProperties options = new ("products", "/categoryId");
     options.IndexingPolicy = policy;
    
     Container container = await database.CreateContainerIfNotExistsAsync(options);
     Console.WriteLine($"Container Created [{container.Id}]");
    
  14. script.cs ファイルを保存します。

  15. Visual Studio Code で、12-custom-index-policy フォルダーのコンテキスト メニューを開き、[統合ターミナルで開く] を選択して新しいターミナル インスタンスを開きます。

  16. dotnet run コマンドを使用して、プロジェクトをビルドして実行します。

     dotnet run
    
  17. スクリプトにより、新しく作成したコンテナーの名前が出力されます。

     Container Created [products]
    
  18. 統合ターミナルを閉じます。

  19. Web ブラウザーに戻ります。

データ エクスプローラーを使用して、.NET SDK によって作成されたインデックス作成ポリシーを確認する

他のインデックス作成ポリシーと同様に、データ エクスプローラーを使用して、.NET SDK を使用してプッシュしたポリシーを表示できます。 ここでは、ポータルを使用して、このラボで作成したポリシーをコードから確認します。

  1. Azure Cosmos DB アカウント リソース内で、 [データ エクスプローラー] ペインに移動します。

  2. [データ エクスプローラー] で、cosmicworks データベース ノードを展開し、NoSQL API ナビゲーション ツリー内の新しい products コンテナー ノードを確認します。

  3. NoSQL API ナビゲーション ツリーの products コンテナー ノード内で、[スケールと設定] を選択します。

  4. [インデックス作成ポリシー] セクションで、インデックス作成ポリシーを確認します。

     {
       "indexingMode": "consistent",
       "automatic": true,
       "includedPaths": [
         {
           "path": "/name/?"
         }
       ],
       "excludedPaths": [
         {
           "path": "/*"
         },
         {
           "path": "/\"_etag\"/?"
         }
       ]
     }
    

    📝 これは、このラボで .NET SDK を使用して作成したインデックス作成ポリシーの JSON 表現です。

  5. Web ブラウザーのウィンドウまたはタブを閉じます。