使用 Azure Cosmos DB 模擬器在本機開發
本文內容
模擬器的常見使用案例是在建置應用程式時做為開發資料庫。 使用模擬器進行開發,可協助您瞭解為 Azure Cosmos DB 等資料庫建立和模型化資料的特性,而不會產生任何服務成本。 此外,使用模擬器作為自動化工作流程的一部分,可確保您可以執行相同的整合測試套件。 您可以確定相同的測試會在開發機器上本機執行,也會在持續整合作業中從遠端執行。
必要條件
安裝模擬器
模擬器有多個變化,而且每個變化都有安裝程式,彼此之間沒有衝突。
若要開始使用,請從 Microsoft Container Registry (MCR) 取得容器映像的 Linux 變體。
將 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Linux 容器映像從容器登錄提取到本機 Docker 主機。
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
檢查以確定模擬器映像在您的本機 Docker 主機可用。
docker images
若要開始使用,請從 Microsoft Container Registry (MCR) 取得容器映像的 Windows 變體。
將 mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
Windows 容器映像從容器登錄提取到本機 Docker 主機。
docker pull mcr.microsoft.com/cosmosdb/windows/azure-cosmos-emulator
檢查以確定模擬器映像在您的本機 Docker 主機可用。
docker images
若要開始使用,請下載最新版的 Azure Cosmos DB 模擬器並安裝在本機電腦上。
提示
模擬器版本資訊 一文列出所有可用的版本,以及每個版本推出的功能更新。
下載 Azure Cosmos DB 模擬器 。
使用系統管理權限 在本機電腦上執行安裝程式。
模擬器會自動安裝適當的開發人員憑證,並在本機電腦上設定防火牆規則。
若要開始使用,請從 Microsoft Container Registry (MCR) 取得容器映像的 Linux 變體。
使用 mongodb
標籤,將 mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator
Linux 容器映像從容器登錄提取到本機 Docker 主機。
docker pull mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:mongodb
檢查以確定模擬器映像在您的本機 Docker 主機可用。
docker images
Docker (Windows) 容器映像不支援適用於 MongoDB 的 API。
若要開始使用,請下載最新版的 Azure Cosmos DB 模擬器並安裝在本機電腦上。
提示
模擬器版本資訊 一文列出所有可用的版本,以及每個版本推出的功能更新。
下載 Azure Cosmos DB 模擬器 。
使用系統管理權限 在本機電腦上執行安裝程式。
模擬器會自動安裝適當的開發人員憑證,並在本機電腦上設定防火牆規則。
模擬器的 Docker 容器變體 (Linux 或 Windows) 不支援 API for Apache Cassandra、API for Apache Gremlin 以及 API for Table。
若要開始使用,請下載最新版的 Azure Cosmos DB 模擬器並安裝在本機電腦上。
提示
模擬器版本資訊 一文列出所有可用的版本,以及每個版本推出的功能更新。
下載 Azure Cosmos DB 模擬器 。
使用系統管理權限 在本機電腦上執行安裝程式。
模擬器會自動安裝適當的開發人員憑證,並在本機電腦上設定防火牆規則。
啟動模擬器
下載之後,啟動已啟用指定 API 的模擬器。
模擬器的 Docker 容器變體不支援 API for Apache Cassandra。
在 %ProgramFiles%\Azure Cosmos DB Emulator
路徑上啟動模擬器的可執行檔 (Microsoft.Azure.Cosmos.Emulator.exe
)。 使用下列參數來設定模擬器:
描述
EnableCassandraEndpoint
啟用 API for Apache Cassandra 端點。
CassandraPort
用於端點的連接埠號碼。
Microsoft.Azure.Cosmos.Emulator.exe /EnableCassandraEndpoint /CassandraPort=65200
注意
如需命令列引數的詳細資訊,請參閱命令列引數 。
模擬器會自動使用 URL https://localhost:8081/_explorer/index.html
開啟資料總管。
模擬器的 Docker 容器變體不支援 API for Apache Gremlin。
在 %ProgramFiles%\Azure Cosmos DB Emulator
路徑上啟動模擬器的可執行檔 (Microsoft.Azure.Cosmos.Emulator.exe
)。 使用下列參數來設定模擬器:
描述
EnableGremlinEndpoint
啟用 API for Apache Gremlin 端點。
GremlinPort
用於端點的連接埠號碼。
Microsoft.Azure.Cosmos.Emulator.exe /EnableGremlinEndpoint /GremlinPort=65400
注意
如需命令列引數的詳細資訊,請參閱命令列引數 。
模擬器會自動使用 URL https://localhost:8081/_explorer/index.html
開啟資料總管。
模擬器的 Docker 容器變體不支援 API for Table。
在 %ProgramFiles%\Azure Cosmos DB Emulator
路徑上啟動模擬器的可執行檔 (Microsoft.Azure.Cosmos.Emulator.exe
)。 使用下列參數來設定模擬器:
描述
EnableTableEndpoint
啟用 API for Table 端點。
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
用於 API for NoSQL 端點的連接埠號碼。
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 版本啟用適用 API for MongoDB 端點。
MongoPort
用於端點的連接埠號碼。
Microsoft.Azure.Cosmos.Emulator.exe /EnableMongoDbEndpoint=4.0 /MongoPort=65200
注意
如需模擬器所支援的命令列引數和 MongoDB 版本的詳細資訊,請參閱 命令列參數 。
模擬器會自動使用 URL https://localhost:8081/_explorer/index.html
開啟資料總管。
匯入模擬器的 TLS/SSL 憑證
匯入模擬器的 TLS/SSL 憑證,以搭配您慣用的開發人員 SDK 使用模擬器,而不需要在用戶端上停用 TLS/SSL。
模擬器的 Docker 容器變體 (Linux 或 Windows) 不支援 API for Apache Cassandra、API for Apache Gremlin 以及 API for Table。
模擬器的 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
注意
如果您先前修改過這些值,您可能需要變更主機 (或 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
);
使用 Azure Cosmos DB API for NoSQL Python SDK 從 Python 應用程式連線到模擬器。
從空白資料夾中開始。
從 Python 套件索引匯入 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 套件索引匯入 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,
)
使用 list_database_names
和 list_collection_names
以及 CreateDatabase
和 CreateCollection
自定義命令,建立新的資料庫和容器。
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 套件索引匯入 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
建立新的 keyspace 和資料表。
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
執行命令伺服器端來建立 keyspace 和資料表 。
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
}
})
重要
開始之前,API for Apache Gremlin 會要求您在模擬器中建立資源。 建立名為 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 套件索引匯入 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 套件索引匯入 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 模擬器搭配所選架構中的測試套件。 GitHub Action 裝載的執行器 windows-latest
變體中已經預安裝了 Azure Cosmos DB 模擬器。
使用適用於 .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
注意
使用各種引數或 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
注意
使用各種引數或 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
注意
使用各種引數或 PowerShell 命令,從命令列中啟動模擬器。 如需詳細資訊,請參閱模擬器命令列引數 。
後續步驟