Azure Cosmos DB for NoSQL SDK をオフライン開発用に構成する
Azure Cosmos DB Emulator は、開発とテストのために Azure Cosmos DB サービスをエミュレートするローカル ツールです。 エミュレーターでは for NoSQL がサポートされており、Azure SDK for .NET を使用してコードを開発するときにクラウド サービスの代わりに使用できます。
このラボでは、Azure SDK for .NET から Azure Cosmos DB Emulator に接続します。
開発環境を準備する
このラボで作業している環境に DP-420 のラボ コードのリポジトリをまだクローンしていない場合は、次の手順に従ってクローンします。 それ以外の場合は、以前にクローンしたフォルダーを Visual Studio Code で開きます。
-
Visual Studio Code を起動します。
📝 Visual Studio Code インターフェイスについてまだよく理解していない場合は、作業の開始に関するドキュメントをご覧ください
-
コマンド パレットを開き、Git: Clone を実行して、任意のローカル フォルダーに
https://github.com/microsoftlearning/dp-420-cosmos-db-dev
GitHub リポジトリをクローンします。💡 Ctrl + Shift + P キーボード ショートカットを使用してコマンド パレットを開くことができます。
-
リポジトリが複製されたら、Visual Studio Code で選択したローカル フォルダーを開きます。
Azure Cosmos DB Emulator を起動する
ご利用の環境に既にエミュレーターがプレインストールされている必要があります。 そうでない場合は、インストール手順を参照して Azure Cosmos DB Emulator をインストールしてください。 エミュレーターが起動したら、接続文字列を取得し、それを使用して、Azure SDK for .NET または任意の他の SDK を使用してエミュレーターに接続できます。
-
Azure Cosmos DB Emulator を起動します。
📝 エミュレーターを起動するための管理者アクセス権を付与するように求められる場合があります。 ラボ環境では、管理者アカウントのパスワードは学生アカウントと同じになります。
💡 Azure Cosmos DB Emulator は、Windows タスクバーと [スタート] メニューの両方に固定されています。 Emulator がピン留めされたアイコンから始まらない場合は、 C:\Program Files\Azure Cosmos DB Emulator\CosmosDB.Emulator.exe* ファイル*をダブルクリックして開いてみてください。 エミュレーターの起動には、20 から 30 秒かかることに注意してください。
-
エミュレーターで自動的に既定のブラウザーが開き、localhost:8081/_explorer/index.html のランディング ページに移動するのを待ちます。
-
Azure Cosmos DB Emulator のランディング ページで、[クイック スタート] ペインに移動します。
-
このペインには、SDK からアカウントに接続するために必要な接続の詳細と資格情報が含まれています。 具体的な内容は次のとおりです。
[プライマリ接続文字列] フィールドに注目します。 この接続文字列の値は、この演習で後ほど使用します。
-
[エクスプローラー] ペインに移動します。
-
[データ エクスプローラー] で、NoSQL API ナビゲーション ツリー内にノードがないことを確認します。
-
このタブを開いたままにして、Visual Studio Code に切り替えます。
SDK からエミュレーターに接続する
この演習で使用する .NET スクリプトには、Microsoft.Azure.Cosmos ライブラリが既にプレインストールされています。 さらに、時間を節約するために、いくつかの定型コードが既に記述されています。 定型接続文字列値を更新し、スクリプトを完了するためにいくつかのコード行を記述する必要があります。
-
Visual Studio Code の [エクスプローラー] ペインで、05-sdk-offline フォルダーを参照します。
-
05-sdk-offline フォルダー内の script.cs コード ファイルを開きます。
-
Azure Cosmos DB Emulator の接続文字列に値が設定された connectionString という名前の既存の変数を更新します。
string connectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
📝 エミュレーターの URI は通常、既定のポートが 8081 に設定された SSL を使用する localhost:[port] です。
📝 C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw== は、エミュレーターのすべてのインストールに使用される既定のキーです。 このキーは、コマンド ライン オプションを使用して変更できます。
-
エミュレーター内に作成する新しいデータベースの名前 (cosmicworks) を渡し、Database 型の変数に結果を格納する client 変数の CreateDatabaseIfNotExistsAsync メソッドを非同期的に呼び出します。
Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks");
-
組み込みの Console.WriteLine 静的メソッドを使用して、Database クラスの Id プロパティを New Databaseー というタイトルのヘッダーと共に出力します。
Console.WriteLine($"New Database:\tId: {database.Id}");
-
完了すると、コード ファイルが次のようになるはずです。
using System; using Microsoft.Azure.Cosmos; string connectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="; CosmosClient client = new (connectionString); Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks"); Console.WriteLine($"New Database:\tId: {database.Id}");
-
script.cs コード ファイルを保存します。
-
Visual Studio Code で、05-sdk-offline フォルダーのコンテキスト メニューを開き、[統合ターミナルで開く] を選択して新しいターミナル インスタンスを開きます。
📝 このコマンドを実行すると、開始ディレクトリが 05-sdk-offline フォルダーに既に設定されているターミナルが開きます。
-
次のコマンドを使用して、NuGet から Microsoft.Azure.Cosmos パッケージを追加します。
dotnet add package Microsoft.Azure.Cosmos --version 3.22.1
-
dotnet run コマンドを使用して、プロジェクトをビルドして実行します。
dotnet run
-
統合ターミナルを閉じます。
エミュレーターで変更を表示する
Azure Cosmos DB エミュレーターに新しいデータベースを作成したので、オンライン データ エクスプローラーを使用して、エミュレーター内の新しい NoSQL API データベースを確認します。
-
ブラウザーに戻ります。
-
Azure Cosmos DB Emulator のランディング ページで、[エクスプローラー] ペインに移動します。
-
[データ エクスプローラー] で NoSQL API を更新して、ナビゲーション ツリー内の新しい cosmicworks データベース ノードを確認します。
-
Visual Studio Code に戻ります。
新しいコンテナーを作成して表示する
新しいコンテナーの作成は、新しいデータベースの作成に使用されるパターンに似ています。 クラウドまたはエミュレーターにリソースを作成するかどうかに関係なく、ここで学習するコードが関連し、接続文字列を変更するだけで済みます。 スクリプト ファイルをさらに拡張して、データベースと共に新しいコンテナーを作成します。
-
Visual Studio Code の [エクスプローラー] ペインで、05-sdk-offline フォルダーを参照します。
-
再度 05-sdk-offline フォルダー内の script.cs コード ファイルを開きます。
-
cosmicworks データベース内に作成する新しいコンテナーの名前 (products)、パーティション キー パス (/categoryId)、およびスループット (400) を渡し、Container 型の変数に結果を格納する database 変数の CreateContainerIfNotExistsAsync メソッドを非同期的に呼び出します。
Container container = await database.CreateContainerIfNotExistsAsync("products", "/categoryId", 400);
-
組み込みの Console.WriteLine 静的メソッドを使用して、Container クラスの Id プロパティを New Container というタイトルのヘッダーと共に出力します。
Console.WriteLine($"New Container:\tId: {container.Id}");
-
完了すると、コード ファイルが次のようになるはずです。
using System; using Microsoft.Azure.Cosmos;; string connectionString = "AccountEndpoint=https://localhost:8081/;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="; CosmosClient client = new (connectionString); Database database = await client.CreateDatabaseIfNotExistsAsync("cosmicworks"); Console.WriteLine($"New Database:\tId: {database.Id}"); Container container = await database.CreateContainerIfNotExistsAsync("products", "/categoryId", 400); Console.WriteLine($"New Container:\tId: {container.Id}");
-
script.cs コード ファイルを保存します。
-
Visual Studio Code で、05-sdk-offline フォルダーのコンテキスト メニューを開き、[統合ターミナルで開く] を選択して新しいターミナル インスタンスを開きます。
-
dotnet run コマンドを使用して、プロジェクトをビルドして実行します。
dotnet run
-
統合ターミナルを閉じます。
-
Visual Studio Code を閉じます。
-
ブラウザーに切り替えます。
-
Azure Cosmos DB Emulator のランディング ページで、[エクスプローラー] ペインに移動します。
-
[データ エクスプローラー] で SQL API を更新し、cosmicworks データベース ノード内の新しい products コンテナー ノードを確認します。
-
Web ブラウザーのウィンドウまたはタブを閉じます。
Azure Cosmos DB Emulator を停止する
環境でシステム リソースを使用できるため、使い終わったらエミュレーターを停止することが重要です。 システム トレイ アイコンを使用して、エミュレーターと実行中のすべてのインスタンスを停止します。
Windows システム トレイのエミュレーター アイコンに移動し、コンテキスト メニューを開き、[終了] を選択してエミュレーターをシャットダウンします。
📝 エミュレーターのすべてのインスタンスが終了するまでしばらくかかる場合があります。