Azure Cosmos DB エミュレーターを使用したローカルでの開発
[アーティクル] 08/15/2024
7 人の共同作成者
フィードバック
この記事の内容
エミュレーターの一般的なユース ケースは、アプリケーションの作成中に開発データベースとして使用することです。 開発にエミュレーターを使用すると、サービス コストを発生させることなく、Azure Cosmos DB などのデータベースのデータの作成やモデル化の特徴を学習するのに役立ちます。 さらに、エミュレーターをオートメーション ワークフローの一部として使用すると、確実に同じ統合テスト スイートを実行できます。 開発用コンピューター (ローカル) と継続的インテグレーション ジョブ (リモート) の両方で同じテストを実行できます。
前提条件
.NET 6 以降 、Node.js v20 以降 、または Python 3.7 以降
必要なすべての実行可能ファイルが PATH
にあることを確認します。
Windows エミュレーター
64 ビット Windows Server 2016、2019、Windows 10、または Windows 11。
最小ハードウェア要件:
2 GB の RAM
10 GB のハードディスク空き容量
Docker エミュレーター
エミュレーターをインストールする
エミュレーターには複数のバリエーションがあり、バリエーションごとにスムーズなインストール プロセスがあります。
まず、Microsoft Container Registry (MCR) から Linux 用のコンテナー イメージを取得します。
コンテナー レジストリからローカル Docker ホストに mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Linux コンテナー イメージをプルします。
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
エミュレータ イメージがローカル Docker ホストで利用できることを確認します。
docker images
まず、Microsoft Container Registry (MCR) からWindows 用のコンテナー イメージを取得します。
コンテナー レジストリからローカル Docker ホストに mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Windows コンテナー イメージをプルします。
docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
エミュレータ イメージがローカル Docker ホストで利用できることを確認します。
docker images
まず、最新バージョンの Azure Cosmos DB Emulator をローカル コンピューターにダウンロードしてインストールします。
Azure Cosmos DB エミュレーター をダウンロードします。
管理特権 を使用して、ローカル コンピューターでインストーラーを実行します。
エミュレーターによって、適切な開発者証明書が自動的にインストールされ、ローカル コンピューターにファイアウォール規則が構成されます。
まず、Microsoft Container Registry (MCR) から Linux 用のコンテナー イメージを取得します。
コンテナー レジストリからローカル Docker ホストに、mongodb
タグを使用して mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Linux コンテナー イメージをプルします。
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
エミュレータ イメージがローカル Docker ホストで利用できることを確認します。
docker images
Docker (Windows) コンテナー イメージでは、MongoDB 用 API はサポートされていません。
まず、最新バージョンの Azure Cosmos DB Emulator をローカル コンピューターにダウンロードしてインストールします。
Azure Cosmos DB エミュレーター をダウンロードします。
管理特権 を使用して、ローカル コンピューターでインストーラーを実行します。
エミュレーターによって、適切な開発者証明書が自動的にインストールされ、ローカル コンピューターにファイアウォール規則が構成されます。
エミュレーターの Docker コンテナーのバリエーション (Linux または Windows) では、Apache Cassandra 用 API、Apache Gremlin 用 API、または Table 用 API はサポートされていません。
まず、最新バージョンの Azure Cosmos DB Emulator をローカル コンピューターにダウンロードしてインストールします。
Azure Cosmos DB エミュレーター をダウンロードします。
管理特権 を使用して、ローカル コンピューターでインストーラーを実行します。
エミュレーターによって、適切な開発者証明書が自動的にインストールされ、ローカル コンピューターにファイアウォール規則が構成されます。
エミュレーターを起動する
ダウンロードしたら、指定した API を有効にしてエミュレーターを起動します。
エミュレーターの Docker コンテナーのバリエーションでは、Apache Cassandra 用 API はサポートされていません。
%ProgramFiles%\Azure Cosmos DB Emulator
パスにあるエミュレーターの実行可能ファイル (Microsoft.Azure.Cosmos.Emulator.exe
) を起動します。 次のパラメーターを使用してエミュレーターを構成します。
説明
EnableCassandraEndpoint
"Apache Cassandra エンドポイントの API を有効にします。"
CassandraPort
"エンドポイントで使用するポート番号。"
Microsoft.Azure.Cosmos.Emulator.exe /EnableCassandraEndpoint /CassandraPort=65200
エミュレーターにより、URL https://localhost:8081/_explorer/index.html
が使用されてデータ エクスプローラーが自動的に開きます。
エミュレーターの Docker コンテナーのバリエーションでは、Apache Gremlin 用 API はサポートされていません。
%ProgramFiles%\Azure Cosmos DB Emulator
パスにあるエミュレーターの実行可能ファイル (Microsoft.Azure.Cosmos.Emulator.exe
) を起動します。 次のパラメーターを使用してエミュレーターを構成します。
説明
EnableGremlinEndpoint
"Apache Gremlin エンドポイントの API を有効にします。"
GremlinPort
"エンドポイントで使用するポート番号。"
Microsoft.Azure.Cosmos.Emulator.exe /EnableGremlinEndpoint /GremlinPort=65400
エミュレーターにより、URL https://localhost:8081/_explorer/index.html
が使用されてデータ エクスプローラーが自動的に開きます。
エミュレーターの Docker コンテナーのバリエーションでは、Table 用 API はサポートされていません。
%ProgramFiles%\Azure Cosmos DB Emulator
パスにあるエミュレーターの実行可能ファイル (Microsoft.Azure.Cosmos.Emulator.exe
) を起動します。 次のパラメーターを使用してエミュレーターを構成します。
説明
EnableTableEndpoint
"Table エンドポイントの API を有効にします。"
TablePort
"エンドポイントで使用するポート番号。"
Microsoft.Azure.Cosmos.Emulator.exe /EnableTableEndpoint /TablePort=65500
エミュレーターにより、URL https://localhost:8081/_explorer/index.html
が使用されてデータ エクスプローラーが自動的に開きます。
コンテナー イメージと次の構成を使用して、新しいコンテナーを実行します。
説明
AZURE_COSMOS_EMULATOR_PARTITION_COUNT
(省略可)
"使用するパーティションの数を指定します。"
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE
(省略可)
"エミュレーターの実行間のデータ永続化を有効にします。"
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE
(省略可)
"エミュレーターの既定の IP アドレスをオーバーライドします。"
Linux システムの場合は以下を使用します。
docker run \
--publish 8081:8081 \
--publish 10250-10255:10250-10255 \
--name linux-emulator \
--detach \
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
Windows システムの場合は以下を使用します。
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250-10255:10250-10255"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
https://localhost:8081/_explorer/index.html
に移動して、データ エクスプローラーにアクセスします。
バインド マウント用の新しいディレクトリを作成する
コンテナー イメージを使用して新しいコンテナーを実行します。
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250-10255:10250-10255"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
https://localhost:8081/_explorer/index.html
に移動して、データ エクスプローラーにアクセスします。
Windows の [スタート] メニュー でアプリケーションを選択して、エミュレーターを起動します。
または、%ProgramFiles%\Azure Cosmos DB Emulator
パスにあるエミュレーターの実行可能ファイル (Microsoft.Azure.Cosmos.Emulator.exe
) を起動できます。
また、コマンドラインからエミュレーターを起動することもできます。 次のパラメーターを使用してエミュレーターを構成します。
説明
Port
"NoSQL 用 API のエンドポイントで使用するポート番号。"
Microsoft.Azure.Cosmos.Emulator.exe /Port=65000
エミュレーターにより、URL https://localhost:8081/_explorer/index.html
が使用されてデータ エクスプローラーが自動的に開きます。
コンテナー イメージと次の構成を使用して、新しいコンテナーを実行します。
説明
AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT
使用する MongoDB エンドポイントのバージョンを指定します。 サポートされるエンドポイントは、3.2
、3.6
、または 4.0
です。
AZURE_COSMOS_EMULATOR_PARTITION_COUNT
(省略可)
"使用するパーティションの数を指定します。"
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE
(省略可)
"エミュレーターの実行間のデータ永続化を有効にします。"
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE
(省略可)
"エミュレーターの既定の IP アドレスをオーバーライドします。"
Linux システムの場合は以下を使用します。
docker run \
--publish 8081:8081 \
--publish 10250:10250 \
--env AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.0 \
--name linux-emulator \
--detach \
mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
Windows システムの場合は以下を使用します。
$parameters = @(
"--publish", "8081:8081"
"--publish", "10250:10250"
"--env", "AZURE_COSMOS_EMULATOR_ENABLE_MONGODB_ENDPOINT=4.0"
"--name", "windows-emulator"
"--detach"
)
docker run @parameters mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
https://localhost:8081/_explorer/index.html
に移動して、データ エクスプローラーにアクセスします。
Docker (Windows) コンテナー イメージでは、MongoDB 用 API はサポートされていません。
%ProgramFiles%\Azure Cosmos DB Emulator
パスにあるエミュレーターの実行可能ファイル (Microsoft.Azure.Cosmos.Emulator.exe
) を起動します。 次のパラメーターを使用してエミュレーターを構成します。
説明
EnableMongoDbEndpoint
"指定の MongoDB バージョンの MongoDB エンドポイントの API を有効にします。"
MongoPort
"エンドポイントで使用するポート番号。"
Microsoft.Azure.Cosmos.Emulator.exe /EnableMongoDbEndpoint=4.0 /MongoPort=65200
Note
エミュレーターでサポートされているコマンドライン引数と MongoDB バージョンの詳細については、「コマンドライン パラメーター 」を参照してください。
エミュレーターにより、URL https://localhost:8081/_explorer/index.html
が使用されてデータ エクスプローラーが自動的に開きます。
エミュレーターの TLS/SSL 証明書をインポートする
クライアントで TLS/SSL を無効にせず、任意の開発者 SDK でエミュレーターを使用するようにエミュレーターの TLS/SSL 証明書をインポートします。
エミュレーターの Docker コンテナーのバリエーション (Linux または Windows) では、Apache Cassandra 用 API、Apache Gremlin 用 API、または Table 用 API はサポートされていません。
エミュレーターの Windows ローカル インストールでは、TLS/SSL 証明書が自動的にインポートされます。 それ以上の操作は必要ありません。
エミュレーターの証明書は、実行中のコンテナーの _explorer/emulator.pem
パスで使用できます。 curl
を使用して、実行中のコンテナーからローカル コンピューターに証明書をダウンロードします。
実行中のコンテナーから証明書を取得します。
Linux システムの場合は以下を使用します。
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Windows システムの場合は以下を使用します。
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
お使いのオペレーティング システムに適したコマンドを使用して、証明書バンドルを再生成します。
Debian ベース Linux システム (たとえば、Ubuntu など) の場合は、以下を使用します。
sudo update-ca-certificates
Red Hat ベース Linux システム (たとえば、CentOS、Fedora など) の場合は、以下を使用します。
sudo update-ca-trust
Windows システムの場合は以下を使用します。
certutil -f -addstore "Root" ~/emulatorcert.crt
詳細な手順については、お使いのオペレーティング システムに固有のドキュメントを参照してください。
Docker (Windows) コンテナー イメージでは、MongoDB 用 API はサポートされていません。
エミュレーターの Windows ローカル インストールでは、TLS/SSL 証明書が自動的にインポートされます。 それ以上の操作は必要ありません。
エミュレーターの証明書は、実行中のコンテナーの /_explorer/emulator.pem
パスで使用できます。
実行中のコンテナーからローカル コンピューターに証明書をダウンロードします。
Linux システムの場合は以下を使用します。
curl --insecure https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
Windows システムの場合は以下を使用します。
$parameters = @{
Uri = 'https://localhost:8081/_explorer/emulator.pem'
Method = 'GET'
OutFile = 'emulatorcert.crt'
SkipCertificateCheck = $True
}
Invoke-WebRequest @parameters
Note
これらの値を以前に変更した場合は、ホスト (または IP アドレス) とポート番号の変更が必要な場合があります。
オペレーティング システムで通常使用されるプロセスに従って証明書をインストールします。 たとえば、Linux では、証明書を /usr/local/share/ca-certificates/
パスにコピーします。
Linux システムの場合は以下を使用します。
cp ~/emulatorcert.crt /usr/local/share/ca-certificates/
Windows システムの場合は以下を使用します。
$parameters = @{
FilePath = 'emulatorcert.crt'
CertStoreLocation = 'Cert:\CurrentUser\Root'
}
Import-Certificate @parameters
Linux システムの場合、お使いの Linux ディストリビューションに適したコマンドを使用して、証明書バンドルを再生成します。
Debian ベース Linux システム (たとえば、Ubuntu など) の場合は、以下を使用します。
sudo update-ca-certificates
Red Hat ベース Linux システム (たとえば、CentOS、Fedora など) の場合は、以下を使用します。
sudo update-ca-trust
詳細な手順については、お使いのオペレーティング システムに固有のドキュメントを参照してください。
エミュレーター用の証明書は、実行中のコンテナー上のフォルダー C:\CosmosDB.Emulator\bind-mount
に存在します。 このフォルダーには、証明書を自動的にインストールするスクリプトも含まれています。
docker cp
を使用して、フォルダー全体をローカル コンピューターにコピーします。
docker cp windows-emulator:C:\CosmosDB.Emulator\bind-mount .
フォルダー内の importcert.ps1 スクリプトを実行します。
.\bind-mount\importcert.ps1
エミュレーターの Windows ローカル インストールでは、TLS/SSL 証明書が自動的にインポートされます。 それ以上の操作は必要ありません。
SDK からエミュレーターに接続する
各 SDK には、SDK を Azure Cosmos DB アカウントに接続するために通常使用されるクライアント クラスが含まれています。 エミュレーターの資格情報 を使用して、SDK をエミュレーター インスタンスに接続できます。
Azure Cosmos DB API for NoSQL .NET SDK を使用して、.NET アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しい .NET コンソール アプリケーションを作成します。
dotnet new console
NuGet から Microsoft.Azure.Cosmos
パッケージを追加します。
dotnet add package Microsoft.Azure.Cosmos
Program.cs ファイルを開きます。
ファイル内に既存のコンテンツがあれば削除します。
Microsoft.Azure.Cosmos
名前空間の using ブロックを追加します。
using Microsoft.Azure.Cosmos;
エミュレーターの資格情報を使用して、CosmosClient の新しいインスタンスを作成します。
using CosmosClient client = new(
accountEndpoint: "https://localhost:8081/",
authKeyOrResourceToken: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
CreateDatabaseIfNotExistsAsync および CreateContainerIfNotExistsAsync を使用して、新しいデータベースとコンテナーを作成します。
Database database = await client.CreateDatabaseIfNotExistsAsync(
id: "cosmicworks",
throughput: 400
);
Container container = await database.CreateContainerIfNotExistsAsync(
id: "products",
partitionKeyPath: "/id"
);
UpsertItemAsync を使用して、コンテナーに新しい項目を作成します。
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
await container.UpsertItemAsync(item);
.NET アプリケーションを実行します。
dotnet run
警告
SSL エラーが発生すると、場合によってはアプリケーションの TLS/SSL を無効にする必要があります。 通常これが発生するのは、コンテナー内の Azure Cosmos DB エミュレーターを使用してローカル コンピューターで開発しているときに、コンテナーの SSL 証明書をインポート していない場合です。 これを解決するには、クライアントを作成する前に、TLS/SSL 検証を無効にするようにクライアントのオプションを構成します。
CosmosClientOptions options = new ()
{
HttpClientFactory = () => new HttpClient(new HttpClientHandler()
{
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
}),
ConnectionMode = ConnectionMode.Gateway,
};
using CosmosClient client = new(
...,
...,
clientOptions: options
);
ヒント
.NET SDK を使用して実行できるその他の操作については、.NET 開発者ガイド を参照してください。
Azure Cosmos DB API for NoSQL Python SDK を使用して、Python アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
Python Package Index から azure-cosmos
パッケージをインポートします。
pip install azure-cosmos
app.py ファイルを作成します。
azure.cosmos
モジュールから CosmosClient
および PartitionKey
をインポートします。
from azure.cosmos import CosmosClient, PartitionKey
エミュレーターの資格情報を使用して新しい CosmosClient を作成します。
client = CosmosClient(
url="<https://localhost:8081>",
credential=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGG"
"yPMbIZnqyMsEcaGQy67XIw/Jw=="
),
)
create_database_if_not_exists および create_container_if_not_exists を使用して、新しいデータベースとコンテナーを作成します。
database = client.create_database_if_not_exists(
id="cosmicworks",
offer_throughput=400,
)
container = database.create_container_if_not_exists(
id="products",
partition_key=PartitionKey(
path="/id",
),
)
upsert_item を使用して、コンテナーに新しい項目を作成します。
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
container.upsert_item(item)
Python アプリケーションを実行します。
python app.py
警告
SSL エラーが発生する場合は、アプリケーションの TLS/SSL を無効にする必要があるかもしれません。 通常これが発生するのは、コンテナー内の Azure Cosmos DB エミュレーターを使用してローカル コンピューターで開発しているときに、コンテナーの SSL 証明書をインポート していない場合です。 これを解決するには、クライアントを作成する前に、TLS/SSL 検証を無効にするようにアプリケーションを構成します。
import urllib3
urllib3.disable_warnings()
それでも SSL エラーが発生する場合は、Python が別の証明書ストアから証明書を取得している可能性があります。 Python が証明書を探しているパスを確認するには、次の手順に従います。
重要
Python 仮想環境 (venv) を使用している場合は、コマンドを実行する前に、それがアクティブになっている ことを確認してください。
ターミナルを開きます
Python のバージョンに応じて、「python」または「python3」と入力して Python インタープリターを開始します。
Python インタープリターで、次のコマンドを実行します。
from requests.utils import DEFAULT_CA_BUNDLE_PATH
print(DEFAULT_CA_BUNDLE_PATH)
仮想環境内では 、パスは (少なくとも Ubuntu では) 次のようになります。
path/to/venv/lib/pythonX.XX/site-packages/certifi/cacert.pem
仮想環境の外部では 、パスは (少なくとも Ubuntu では) 次のようになります。
/etc/ssl/certs/ca-certificates.crt
DEFAULT_CA_BUNDLE_PATH を特定したら、新しいターミナル を開き、次のコマンドを実行してエミュレータ証明書を証明書バンドルに追加します。
重要
DEFAULT_CA_BUNDLE_PATH 変数がシステム ディレクトリ を指している場合は、"アクセス許可が拒否されました" というエラーが発生する可能性があります。 この場合は、管理者特権で (root として) コマンドを実行する必要があります。 また、指定されたコマンドを実行した後、証明書バンドルを更新して再生成する 必要があります。
# Add a new line to the certificate bundle
echo >> /path/to/ca_bundle
# Append the emulator certificate to the certificate bundle
cat /path/to/emulatorcert.crt >> /path/to/ca_bundle
Azure Cosmos DB API for NoSQL Node.js SDK を使用して、Node.js/JavaScript アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
Node パッケージ マネージャーから @azure/cosmos
パッケージをインストールします。
npm install --save @azure/cosmos
app.js ファイルを作成します。
@azure/cosmos
モジュールから CosmosClient
型をインポートします。
import { CosmosClient } from '@azure/cosmos'
CosmosClient
を使用し、エミュレーターの資格情報を使用して新しいクライアント インスタンスを作成します。
const cosmosClient = new CosmosClient({
endpoint: 'https://localhost:8081/',
key: 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
})
Databases.createIfNotExists
および Containers.createIfNotExists
を使用して、データベースとコンテナーを作成します。
const { database } = await cosmosClient.databases.createIfNotExists({
id: 'cosmicworks',
throughput: 400
})
const { container } = await database.containers.createIfNotExists({
id: 'products',
partitionKey: {
paths: [
'/id'
]
}
})
Items.upsert
を使用して新しい項目をアップサートします。
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
container.items.upsert(item)
Node.js アプリケーションを実行します。
node app.js
警告
SSL エラーが発生すると、場合によってはアプリケーションの TLS/SSL を無効にする必要があります。 通常これが発生するのは、コンテナー内の Azure Cosmos DB エミュレーターを使用してローカル コンピューターで開発しているときに、コンテナーの SSL 証明書をインポート していない場合です。 これを解決するには、クライアントを作成する前に、TLS/SSL 検証を無効にするようにアプリケーションを構成します。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0
MongoDB .NET ドライバー を使用して、.NET アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しい .NET コンソール アプリケーションを作成します。
dotnet new console
NuGet から MongoDB.Driver
パッケージを追加します。
dotnet add package MongoDB.Driver
Program.cs ファイルを開きます。
ファイル内に既存のコンテンツがあれば削除します。
MongoDB.Driver
名前空間の using ブロックを追加します。
using MongoDB.Driver;
エミュレーターの資格情報を使用して、MongoClient
の新しいインスタンスを作成します。
var client = new MongoClient(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false"
);
GetDatabase
および GetCollection<>
を使用して、データベースとコンテナーを取得します。
var database = client.GetDatabase("cosmicworks");
var collection = database.GetCollection<dynamic>("products");
InsertOneAsync
を使用して XXX に新しい項目を 作成します。
var item = new
{
name = "Kiama classic surfboard"
};
await collection.InsertOneAsync(item);
.NET アプリケーションを実行します。
dotnet run
MongoDB Python ドライバー を使用して、Python アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
Python Package Index から pymongo
パッケージをインポートします。
pip install pymongo
app.py ファイルを作成します。
os
、sys
、および pymongo
モジュールをインポートします。
import pymongo
エミュレーターの資格情報を使用して新しい MongoClient
を作成します。
client = pymongo.MongoClient(
host=(
"mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2"
"nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/a"
"dmin?ssl=true"
),
tls=True,
)
CreateDatabase
および CreateCollection
カスタム コマンドで list_database_names
および list_collection_names
を使用して、新しいデータベースとコンテナーを作成します。
db = client["cosmicworks"]
if "cosmicworks" not in client.list_database_names():
db.command(
{
"customAction": "CreateDatabase",
"offerThroughput": 400,
}
)
collection = db["products"]
if "products" not in db.list_collection_names():
db.command({"customAction": "CreateCollection", "collection": "products"})
update_one
を使用して、コンテナーに新しい項目を作成します。
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
collection.update_one(
filter={"id": item["id"]}, update={"$set": item}, upsert=True
)
Python アプリケーションを実行します。
python app.py
MongoDB Node.js ドライバー を使用して、Node.js/JavaScript アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
Node パッケージ マネージャーから mongodb
パッケージをインストールします。
npm install --save mongodb
app.js ファイルを作成します。
mongodb
モジュールから MongoClient
型をインポートします。
import { MongoClient } from 'mongodb'
MongoClient
を使用し、エミュレーターの資格情報を使用して新しいクライアント インスタンスを作成します。 connect
を使用して、エミュレーターに接続します。
const client = new MongoClient(
'mongodb://localhost:C2y6yDjf5%2FR%2Bob0N8A7Cgv30VRDJIWEHLM%2B4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw%2FJw%3D%3D@localhost:10255/admin?ssl=true&retrywrites=false'
)
await client.connect()
db
および collection
を使用して、データベースとコンテナーを作成します。
const database = client.db('cosmicworks')
const collection = database.collection('products')
insertOne
を使用して新しい項目を作成します。
const item = {
name: 'Kiama classic surfboard'
}
await collection.insertOne(item)
Node.js アプリケーションを実行します。
node app.js
警告
SSL エラーが発生すると、場合によってはアプリケーションの TLS/SSL を無効にする必要があります。 通常これが発生するのは、コンテナー内の Azure Cosmos DB エミュレーターを使用してローカル コンピューターで開発しているときに、コンテナーの SSL 証明書をインポート していない場合です。 これを解決するには、クライアントを作成する前に、TLS/SSL 検証を無効にするようにアプリケーションを構成します。
const client = new MongoClient(
...,
{ tlsAllowInvalidCertificates: true }
)
Apache Cassandra .NET ドライバー を使用して、.NET アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しい .NET コンソール アプリケーションを作成します。
dotnet new console
NuGet から CassandraCSharpDriver
パッケージを追加します。
dotnet add package CassandraCSharpDriver
Program.cs ファイルを開きます。
ファイル内に既存のコンテンツがあれば削除します。
Cassandra
名前空間の using ブロックを追加します。
using Cassandra;
エミュレーターの資格情報を使用して、Cluster
の新しいインスタンスを作成します。 Connect
を使用して新しいセッションを作成します。
var options = new SSLOptions(
sslProtocol: System.Security.Authentication.SslProtocols.Tls12,
checkCertificateRevocation: true,
remoteCertValidationCallback: (_, _, _, policyErrors) => policyErrors == System.Net.Security.SslPolicyErrors.None);
using var cluster = Cluster.Builder()
.WithCredentials(
username: "localhost",
password: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
)
.WithPort(
port: 10350
)
.AddContactPoint(
address: "localhost"
)
.WithSSL(
sslOptions: options
)
.Build();
using var session = cluster.Connect();
PrepareAsync
および ExecuteAsync
を使用して、新しいデータベースとコンテナーを作成します。
var createKeyspace = await session.PrepareAsync("CREATE KEYSPACE IF NOT EXISTS cosmicworks WITH replication = {'class':'basicclass', 'replication_factor': 1};");
await session.ExecuteAsync(createKeyspace.Bind());
var createTable = await session.PrepareAsync("CREATE TABLE IF NOT EXISTS cosmicworks.products (id text PRIMARY KEY, name text)");
await session.ExecuteAsync(createTable.Bind());
ExecuteAsync
を使用して、テーブルに新しい項目を作成します。 Bind
を使用して、項目にプロパティを割り当てます。
var item = new
{
id = "68719518371",
name = "Kiama classic surfboard"
};
var createItem = await session.PrepareAsync("INSERT INTO cosmicworks.products (id, name) VALUES (?, ?)");
var createItemStatement = createItem.Bind(item.id, item.name);
await session.ExecuteAsync(createItemStatement);
.NET アプリケーションを実行します。
dotnet run
Apache Cassandra Python ドライバー を使用して、Python アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
Python Package Index から cassandra-driver
パッケージをインポートします。
pip install cassandra-driver
app.py ファイルを作成します。
ssl
モジュールから PROTOCOL_TLS_CLIENT
、SSLContext
、および CERT_NONE
をインポートします。 次に、cassandra.cluster
モジュールから Cluster
をインポートします。 最後に、cassandra.auth
モジュールから PlainTextAuthProvider
をインポートします。
from ssl import PROTOCOL_TLS_CLIENT, SSLContext, CERT_NONE
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
SSLContext
を使用して、新しい TLS/SSL コンテキスト変数を作成します。 エミュレーターの自己署名証明書を検証しないようにコンテキストを構成します。
ssl_context = SSLContext(PROTOCOL_TLS_CLIENT)
ssl_context.check_hostname = False
ssl_context.verify_mode = CERT_NONE
エミュレーターの資格情報 PlainTextAuthProvider
、Cluster
、および cluster.connect()
を使用して、新しい session
を作成します。
auth_provider = PlainTextAuthProvider(
username="localhost",
password=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnq"
"yMsEcaGQy67XIw/Jw=="
),
)
cluster = Cluster(
["localhost"],
port="10350",
auth_provider=auth_provider,
ssl_context=ssl_context,
)
session = cluster.connect()
session.execute
を使用して、新しいキースペースとテーブルを作成します。
session.execute(
"CREATE KEYSPACE IF NOT EXISTS cosmicworks WITH replication = {'class':'ba"
"sicclass', 'replication_factor': 1};"
)
session.execute(
"CREATE TABLE IF NOT EXISTS cosmicworks.products (id text PRIMARY KEY, nam"
"e text)"
)
session.execute
を使用して、テーブルに新しい項目を作成します。
item = {"id": "68719518371", "name": "Kiama classic surfboard"}
session.execute(
"INSERT INTO cosmicworks.products (id, name) VALUES (%s, %s)",
[item["id"], item["name"]],
)
Python アプリケーションを実行します。
python app.py
Apache Cassandra Node.js ドライバー を使用して、Node.js/JavaScript アプリケーションからエミュレーターを使用します。
空のフォルダーから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
Node パッケージ マネージャーから cassandra-driver
パッケージをインストールします。
npm install --save cassandra-driver
app.js ファイルを作成します。
cassandra-driver
モジュールから Client
型と auth
名前空間をインポートします。
import { Client, auth } from 'cassandra-driver'
PlainTextAuthProvider
を使用して、エミュレーターの資格情報の新しいオブジェクトを作成します。 Client
を使用し、資格情報を使用してエミュレーターに接続します。
const credentials = new auth.PlainTextAuthProvider(
'localhost',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new Client({
contactPoints: [
'localhost:10350'
],
authProvider: credentials,
localDataCenter: 'South Central US'
})
execute
を使用し、サーバー側でコマンドを実行して、キースペース とテーブル を作成します。
await client.execute(
'CREATE KEYSPACE IF NOT EXISTS cosmicworks WITH replication = {\'class\':\'basicclass\', \'replication_factor\': 1};'
)
await client.execute(
'CREATE TABLE IF NOT EXISTS cosmicworks.products (id text PRIMARY KEY, name text)'
)
パラメーターを使用して新しい項目を作成するには、もう一度 execute
を使用します。
const item = {
id: '68719518371',
name: 'Kiama classic surfboard'
}
await client.execute(
'INSERT INTO cosmicworks.products (id, name) VALUES (?, ?)',
[
item.id,
item.name
]
)
Node.js アプリケーションを実行します。
node app.js
警告
SSL エラーが発生すると、場合によってはアプリケーションの TLS/SSL を無効にする必要があります。 通常これが発生するのは、コンテナー内の Azure Cosmos DB エミュレーターを使用してローカル コンピューターで開発しているときに、コンテナーの SSL 証明書をインポート していない場合です。 これを解決するには、TLS/SSL 検証を無効にするようにクライアントを構成します。
const client = new Client({
...,
...,
...,
sslOptions: {
rejectUnauthorized: false
}
})
重要
Apache Gremlin 用 API の場合、開始する前に、エミュレーターにリソースを作成する必要があります。 db1
という名前のデータベースと coll1
という名前のコンテナーを作成します。 スループットの設定は、このガイドには関係ありません。必要に応じて低く設定できます。
Apache Gremlin .NET ドライバー を使用して、.NET アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しい .NET コンソール アプリケーションを作成します。
dotnet new console
NuGet から Gremlin.Net
パッケージを追加します。
dotnet add package Gremlin.Net
Program.cs ファイルを開きます。
ファイル内に既存のコンテンツがあれば削除します。
Gremlin.Net.Driver
名前空間の using ブロックを追加します。
using Gremlin.Net.Driver;
エミュレーターの資格情報を使用して、GremlinServer
と GremlinClient
の新しいインスタンスを作成します。
var server = new GremlinServer(
hostname: "localhost",
port: 8901,
username: "/dbs/db1/colls/coll1",
password: "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
);
using var client = new GremlinClient(
gremlinServer: server,
messageSerializer: new Gremlin.Net.Structure.IO.GraphSON.GraphSON2MessageSerializer()
);
SubmitAsync
を使用してグラフをクリーンアップします。
await client.SubmitAsync(
requestScript: "g.V().drop()"
);
もう一度 SubmitAsync
を使用し、指定したパラメーターを使用してグラフに新しい項目を追加します。
await client.SubmitAsync(
requestScript: "g.addV('product').property('id', prop_id).property('name', prop_name)",
bindings: new Dictionary<string, object>
{
{ "prop_id", "68719518371" },
{ "prop_name", "Kiama classic surfboard" }
}
);
.NET アプリケーションを実行します。
dotnet run
Apache Gremlin Python ドライバー を使用して、Python アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
Python Package Index から gremlinpython
パッケージをインポートします。
pip install gremlinpython
app.py ファイルを作成します。
gremlin_python.driver
モジュールから client
をインポートします。
from gremlin_python.driver import client
エミュレーターの資格情報を使用して新しい Client
を作成します。
client = client.Client(
url="ws://localhost:8901/",
traversal_source="g",
username="/dbs/db1/colls/coll1",
password=(
"C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnq"
"yMsEcaGQy67XIw/Jw=="
),
)
client.submit
を使用してグラフをクリーンアップします。
client.submit(message="g.V().drop()")
もう一度 client.submit
を使用し、指定したパラメーターを使用してグラフに新しい項目を追加します。
client.submit(
message=(
"g.addV('product').property('id', prop_id).property('name', prop_name)"
),
bindings={
"prop_id": "68719518371",
"prop_name": "Kiama classic surfboard",
},
)
Python アプリケーションを実行します。
python app.py
Apache Gremlin Node.js ドライバー を使用して、Node.js/JavaScript アプリケーションからエミュレーターを使用します。
空のフォルダーから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
Node パッケージ マネージャーから gremlin
パッケージをインストールします。
npm install --save gremlin
app.js ファイルを作成します。
gremlin
モジュールをインポートします。
import gremlin from 'gremlin'
PlainTextSaslAuthenticator
を使用して、エミュレーターの資格情報の新しいオブジェクトを作成します。 Client
を使用し、資格情報を使用してエミュレーターに接続します。
const credentials = new gremlin.driver.auth.PlainTextSaslAuthenticator(
'/dbs/db1/colls/coll1',
'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
)
const client = new gremlin.driver.Client(
'ws://localhost:8901/',
{
credentials,
traversalsource: 'g',
rejectUnauthorized: false,
mimeType: 'application/vnd.gremlin-v2.0+json'
}
)
client.open()
submit
を使用してコマンドをサーバー側で実行し、グラフに既にデータがある場合はグラフをクリアします。
await client.submit('g.V().drop()')
もう一度 submit
を使用し、指定したパラメーターを使用してグラフに新しい項目を追加します。
await client.submit(
'g.addV(\'product\').property(\'id\', prop_id).property(\'name\', prop_name)', {
prop_id: '68719518371',
prop_name: 'Kiama classic surfboard'
}
)
Node.js アプリケーションを実行します。
node app.js
Azure Tables SDK for .NET を使用して、.NET アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
新しい .NET コンソール アプリケーションを作成します。
dotnet new console
NuGet から Azure.Data.Tables
パッケージを追加します。
dotnet add package Azure.Data.Tables
Program.cs ファイルを開きます。
ファイル内に既存のコンテンツがあれば削除します。
Azure.Data.Tables
名前空間の using ブロックを追加します。
using Azure.Data.Tables;
エミュレーターの資格情報を使用して、TableServiceClient
の新しいインスタンスを作成します。
var serviceClient = new TableServiceClient(
connectionString: "DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
);
GetTableClient
を使用して、TableClient
の新しいインスタンスをテーブルの名前で作成します。 次に、CreateIfNotExistsAsync
を使用してテーブルが存在することを確認します。
var client = serviceClient.GetTableClient(
tableName: "cosmicworksproducts"
);
await client.CreateIfNotExistsAsync();
項目の新しい record
型を作成します。
public record Product : Azure.Data.Tables.ITableEntity
{
public required string RowKey { get; set; }
public required string PartitionKey { get; set; }
public required string Name { get; init; }
public Azure.ETag ETag { get; set; }
public DateTimeOffset? Timestamp { get; set; }
}
UpsertEntityAsync
と Replace
モードを使用して、テーブルに新しい項目を作成します。
var item = new Product
{
RowKey = "68719518371",
PartitionKey = "Surfboards",
Name = "Kiama classic surfboard",
Timestamp = DateTimeOffset.Now
};
await client.UpsertEntityAsync(
entity: item,
mode: TableUpdateMode.Replace
);
.NET アプリケーションを実行します。
dotnet run
Azure Tables Python SDK を使用して、Python アプリケーションからエミュレーターに接続します。
空のフォルダーから開始します。
Python Package Index から azure-data-tables
パッケージをインポートします。
pip install azure-data-tables
app.py ファイルを作成します。
azure.data.tables
モジュールから TableServiceClient
および UpdateMode
をインポートします。
from azure.data.tables import TableServiceClient, UpdateMode
TableServiceClient.from_connection_string
を使用して、新しいサービスレベルのクライアントを作成します。
service = TableServiceClient.from_connection_string(
conn_str=(
"DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yD"
"jf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEca"
"GQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;"
)
)
create_table_if_not_exists
を使用して、新しいテーブルレベルのクライアントを作成します。
client = service.create_table_if_not_exists(table_name="cosmicworksproducts")
upsert_entity
を使用して、コンテナーに新しい項目を作成します。
item = {
"PartitionKey": "68719518371",
"RowKey": "Surfboards",
"name": "Kiama classic surfboard",
}
client.upsert_entity(entity=item, mode=UpdateMode.REPLACE)
Python アプリケーションを実行します。
python app.py
Azure Tables JavaScript SDK を使用して、Node.js/JavaScript アプリケーションからエミュレーターを使用します。
空のフォルダーから開始します。
新しいモジュールを初期化します。
npm init es6 --yes
Node パッケージ マネージャーから @azure/data-tables
パッケージをインストールします。
npm install --save @azure/data-tables
app.js ファイルを作成します。
@azure/data-tables
モジュールから TableClient
型をインポートします。
import { TableClient } from '@azure/data-tables'
TableClient.fromConnectionString
を使用し、エミュレーターの接続文字列を使用して新しいクライアント インスタンスを作成します。
const client = TableClient.fromConnectionString(
'DefaultEndpointsProtocol=http;AccountName=localhost;AccountKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==;TableEndpoint=http://localhost:8902/;',
'cosmicworksproducts'
)
テーブルがまだ存在しない場合は、createTable
を使用して新しいテーブルを作成します。
await client.createTable()
upsertEntity
を使用して、項目を作成または置換します。
const item = {
partitionKey: '68719518371',
rowKey: 'Surfboards',
name: 'Kiama classic surfboard'
}
await client.upsertEntity(
item,
'Replace'
)
Node.js アプリケーションを実行します。
node app.js
警告
SSL エラーが発生すると、場合によってはアプリケーションの TLS/SSL を無効にする必要があります。 通常これが発生するのは、コンテナー内の Azure Cosmos DB エミュレーターを使用してローカル コンピューターで開発しているときに、コンテナーの SSL 証明書をインポート していない場合です。 これを解決するには、TLS/SSL 検証を無効にするようにクライアントを構成します。
const client = TableClient.fromConnectionString(
...,
...,
{
allowInsecureConnection: true
}
)
GitHub Actions CI ワークフローでエミュレーターを使用する
アプリケーションを自動的に検証する継続的インテグレーション ワークロードを実行するには、選択したフレームワークのテスト スイートと共に Azure Cosmos DB エミュレータを使用します。 Azure Cosmos DB エミュレーターは、windows-latest
用の GitHub Action ホストテッド ランナーにプレインストールされています。
.NET 用の組み込みテスト ドライバーと、MSTest 、NUnit 、 XUnit などのテスト フレームワークを使用して、テスト スイートを実行します。
アプリケーションの単体テスト スイートが予期したとおりに動作することを検証します。
dotnet test
.github/workflows/ci.yml
という名前のファイル内に GitHub リポジトリの新しいワークフローを作成します。
PowerShell を使用して Azure Cosmos DB エミュレーターを起動し、単体テスト スイートを実行するジョブをワークフローに追加します。
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run .NET unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Run .NET tests
run: dotnet test
Note
さまざまな引数または PowerShell コマンドを使用して、コマンドラインからエミュレーターを起動します。 詳細については、「エミュレーターのコマンドライン引数 」を参照してください。
pytest
を使用して、Python アプリケーションとデータベース操作をテストします。
アプリケーションの単体テスト スイートが予期したとおりに動作することを検証します。
pip install -U pytest
pytest
.github/workflows/ci.yml
という名前のファイル内に GitHub リポジトリの新しいワークフローを作成します。
PowerShell を使用して Azure Cosmos DB エミュレーターを起動し、単体テスト スイートを実行するジョブをワークフローに追加します。
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run Python unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Install test runner
run: pip install pytest
- name: Run Python tests
run: pytest
Note
さまざまな引数または PowerShell コマンドを使用して、コマンドラインからエミュレーターを起動します。 詳細については、「エミュレーターのコマンドライン引数 」を参照してください。
mocha
を使用して、Node.js アプリケーションとそのデータベースの変更をテストします。
アプリケーションの単体テスト スイートが予期したとおりに動作することを検証します。
npm install --global mocha
mocha
.github/workflows/ci.yml
という名前のファイル内に GitHub リポジトリの新しいワークフローを作成します。
PowerShell を使用して Azure Cosmos DB エミュレーターを起動し、単体テスト スイートを実行するジョブをワークフローに追加します。
name: Continuous Integration
on:
push:
branches:
- main
jobs:
unit_tests:
name: Run Node.js unit tests
runs-on: windows-latest
steps:
- name: Checkout (GitHub)
uses: actions/checkout@v3
- name: Start Azure Cosmos DB emulator
run: |
Write-Host "Launching Cosmos DB Emulator"
Import-Module "$env:ProgramFiles\Azure Cosmos DB Emulator\PSModules\Microsoft.Azure.CosmosDB.Emulator"
Start-CosmosDbEmulator
- name: Install test runner
run: npm install --global mocha
- name: Run Node.js tests
run: mocha
Note
さまざまな引数または PowerShell コマンドを使用して、コマンドラインからエミュレーターを起動します。 詳細については、「エミュレーターのコマンドライン引数 」を参照してください。
次のステップ