適用於:NoSQL
下列指南說明使用 Azure CLI 自動管理 Azure Cosmos DB 帳戶、資料庫和容器的常見命令。 您可以在 Azure CLI 參考中取得所有 Azure Cosmos DB CLI 命令的參考頁面。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱 使用 Azure CLI 向 Azure 進行驗證。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能的詳細資訊,請參閱 使用和管理 Azure CLI 的擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 2.22.1 版或更新版本的 Azure CLI。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。
如需適用於其他 API 的 Azure CLI 範例,請參閱適用於 Cassandra 的 CLI 範例、適用於 API for MongoDB 的 CLI 範例、適用於 Gremlin 的 CLI 範例、適用於資料表的 CLI 範例
重要
Azure Cosmos DB 資源無法重新命名,因為這違反 Azure Resource Manager 與資源 URI 的運作方式。
Azure Cosmos DB 帳戶
下列各節會示範如何管理 Azure Cosmos DB 帳戶,包括:
- 建立 Azure Cosmos DB 帳戶
- 新增或移除區域
- 啟用多重區域寫入
- 設定區域容錯移轉優先順序
- 啟用服務管理容錯移轉
- 觸發手動容錯移轉
- 列出帳戶金鑰
- 列出唯讀帳戶金鑰
- 列出連接字串
- 重新產生帳戶金鑰
建立 Azure Cosmos DB 帳戶
建立 Azure Cosmos DB 帳戶,具有 API for NoSQL、美國西部和美國東部區域的工作階段一致性:
重要
Azure Cosmos DB 帳戶名稱必須是小寫且少於 44 個字元。
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount' #needs to be lower case and less than 44 characters
az cosmosdb create \
-n $accountName \
-g $resourceGroupName \
--default-consistency-level Session \
--locations regionName='West US' failoverPriority=0 isZoneRedundant=False \
--locations regionName='East US' failoverPriority=1 isZoneRedundant=False
新增或移除區域
建立具有兩個區域的 Azure Cosmos DB 帳戶、新增區域,以及移除區域。
注意
您無法同時新增或移除區域 locations ,以及變更 Azure Cosmos DB 帳戶的其他屬性。 修改區域必須與帳戶資源的任何其他變更分開作業。
注意
此命令可讓您新增及移除區域,但不允許您修改容錯移轉優先順序或觸發手動容錯移轉。 請參閱設定容錯移轉優先順序和觸發手動容錯移轉。
提示
新增區域時,所有資料都必須完全複寫並認可到新的區域,才能將該區域標示為可用。 此作業所需的時間取決於帳戶中儲存的資料量。 如果非同步輸送量調整作業正在進行中,輸送量擴大規模作業將會暫停,並會在新增/移除區域作業完成時自動繼續。
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
# Create an account with 2 regions
az cosmosdb create --name $accountName --resource-group $resourceGroupName \
--locations regionName="West US" failoverPriority=0 isZoneRedundant=False \
--locations regionName="East US" failoverPriority=1 isZoneRedundant=False
# Add a region
az cosmosdb update --name $accountName --resource-group $resourceGroupName \
--locations regionName="West US" failoverPriority=0 isZoneRedundant=False \
--locations regionName="East US" failoverPriority=1 isZoneRedundant=False \
--locations regionName="South Central US" failoverPriority=2 isZoneRedundant=False
# Remove a region
az cosmosdb update --name $accountName --resource-group $resourceGroupName \
--locations regionName="West US" failoverPriority=0 isZoneRedundant=False \
--locations regionName="East US" failoverPriority=1 isZoneRedundant=False
啟用多重寫入區域
為 Azure Cosmos DB 帳戶啟用多重區域寫入
# Update an Azure Cosmos DB account from single write region to multiple write regions
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
# Get the account resource id for an existing account
accountId=$(az cosmosdb show -g $resourceGroupName -n $accountName --query id -o tsv)
az cosmosdb update --ids $accountId --enable-multiple-write-locations true
設定容錯移轉優先順序
為已設定服務管理容錯移轉的 Azure Cosmos DB 帳戶設定容錯移轉優先順序
# Assume region order is initially 'West US'=0 'East US'=1 'South Central US'=2 for account
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
# Get the account resource id for an existing account
accountId=$(az cosmosdb show -g $resourceGroupName -n $accountName --query id -o tsv)
# Make South Central US the next region to fail over to instead of East US
az cosmosdb failover-priority-change --ids $accountId \
--failover-policies 'West US=0' 'South Central US=1' 'East US=2'
啟用服務管理容錯移轉
# Enable service-managed failover on an existing account
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
# Get the account resource id for an existing account
accountId=$(az cosmosdb show -g $resourceGroupName -n $accountName --query id -o tsv)
az cosmosdb update --ids $accountId --enable-automatic-failover true
觸發手動容錯移轉
警告
變更區域的優先順序 = 0 將會觸發 Azure Cosmos DB 帳戶的手動容錯移轉。 變更其他優先順序則不會觸發容錯移轉。
注意
如果您在進行非同步調整規模作業時執行手動容錯移轉作業,則會暫停輸送量擴大規模作業。 當容錯移轉作業完成時,該作業便會自動繼續。
# Assume region order is initially 'West US=0' 'East US=1' 'South Central US=2' for account
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
# Get the account resource id for an existing account
accountId=$(az cosmosdb show -g $resourceGroupName -n $accountName --query id -o tsv)
# Trigger a manual failover to promote East US 2 as new write region
az cosmosdb failover-priority-change --ids $accountId \
--failover-policies 'East US=0' 'South Central US=1' 'West US=2'
列出所有帳戶金鑰
取得 Azure Cosmos DB 帳戶的所有金鑰。
# List all account keys
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
az cosmosdb keys list \
-n $accountName \
-g $resourceGroupName
列出唯讀帳戶金鑰
取得 Azure Cosmos DB 帳戶的唯讀金鑰。
# List read-only account keys
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
az cosmosdb keys list \
-n $accountName \
-g $resourceGroupName \
--type read-only-keys
列出連接字串
取得 Azure Cosmos DB 帳戶的連接字串。
# List connection strings
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
az cosmosdb keys list \
-n $accountName \
-g $resourceGroupName \
--type connection-strings
重新產生帳戶金鑰
為 Azure Cosmos DB 帳戶重新產生新的金鑰。
# Regenerate secondary account keys
# key-kind values: primary, primaryReadonly, secondary, secondaryReadonly
az cosmosdb keys regenerate \
-n $accountName \
-g $resourceGroupName \
--key-kind secondary
Azure Cosmos DB 資料庫
下列各節會示範如何管理 Azure Cosmos DB 資料庫,包括:
建立資料庫
建立 Azure Cosmos DB 資料庫。
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
az cosmosdb sql database create \
-a $accountName \
-g $resourceGroupName \
-n $databaseName
建立具有共用輸送量的資料庫
使用共用輸送量來建立 Azure Cosmos DB 資料庫。
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
throughput=400
az cosmosdb sql database create \
-a $accountName \
-g $resourceGroupName \
-n $databaseName \
--throughput $throughput
移轉資料庫以自動調整輸送量
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
# Migrate to autoscale throughput
az cosmosdb sql database throughput migrate \
-a $accountName \
-g $resourceGroupName \
-n $databaseName \
-t 'autoscale'
# Read the new autoscale max throughput
az cosmosdb sql database throughput show \
-g $resourceGroupName \
-a $accountName \
-n $databaseName \
--query resource.autoscaleSettings.maxThroughput \
-o tsv
變更資料庫輸送量
增加 1000 RU/秒的 Azure Cosmos DB 資料庫輸送量。
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
newRU=1000
# Get minimum throughput to make sure newRU is not lower than minRU
minRU=$(az cosmosdb sql database throughput show \
-g $resourceGroupName -a $accountName -n $databaseName \
--query resource.minimumThroughput -o tsv)
if [ $minRU -gt $newRU ]; then
newRU=$minRU
fi
az cosmosdb sql database throughput update \
-a $accountName \
-g $resourceGroupName \
-n $databaseName \
--throughput $newRU
防止資料庫遭刪除
在資料庫上放置 Azure 資源刪除鎖定,以防止其遭到刪除。 這項功能需要鎖定 Azure Cosmos DB 帳戶,以防止資料平面 SDK 變更。 若要深入瞭解,請參閱防止 SDK 的變更。 Azure 資源鎖定也可以藉由指定 ReadOnly 鎖定類型來防止資源遭變更。 對於 Azure Cosmos DB 資料庫,可用來防止輸送量遭變更。
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
lockType='CanNotDelete' # CanNotDelete or ReadOnly
databaseParent="databaseAccounts/$accountName"
databaseLockName="$databaseName-Lock"
# Create a delete lock on database
az lock create --name $databaseLockName \
--resource-group $resourceGroupName \
--resource-type Microsoft.DocumentDB/sqlDatabases \
--lock-type $lockType \
--parent $databaseParent \
--resource $databaseName
# Delete lock on database
lockid=$(az lock show --name $databaseLockName \
--resource-group $resourceGroupName \
--resource-type Microsoft.DocumentDB/sqlDatabases \
--resource $databaseName \
--parent $databaseParent \
--output tsv --query id)
az lock delete --ids $lockid
Azure Cosmos DB 容器
下列各節會示範如何管理 Azure Cosmos DB 容器,包括:
建立容器
建立 Azure Cosmos DB 容器,具有預設索引原則、分割區索引鍵和 400 RU/秒。
# Create a API for NoSQL container
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
partitionKey='/myPartitionKey'
throughput=400
az cosmosdb sql container create \
-a $accountName -g $resourceGroupName \
-d $databaseName -n $containerName \
-p $partitionKey --throughput $throughput
建立具有自動調整的容器
建立 Azure Cosmos DB 容器,具有預設索引原則、分割區索引鍵和自動調整 4000 RU/秒。
# Create a API for NoSQL container
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
partitionKey='/myPartitionKey'
maxThroughput=4000
az cosmosdb sql container create \
-a $accountName -g $resourceGroupName \
-d $databaseName -n $containerName \
-p $partitionKey --max-throughput $maxThroughput
建立具有 TTL 的容器
建立 Azure Cosmos DB 容器並啟用 TTL。
# Create an Azure Cosmos DB container with TTL of one day
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
az cosmosdb sql container update \
-g $resourceGroupName \
-a $accountName \
-d $databaseName \
-n $containerName \
--ttl=86400
建立含有自訂索引原則的容器
建立 Azure Cosmos DB 容器,具有自訂索引原則、空間索引、複合索引、分割區索引鍵和 400 RU/秒。
# Create a API for NoSQL container
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
partitionKey='/myPartitionKey'
throughput=400
# Generate a unique 10 character alphanumeric string to ensure unique resource names
uniqueId=$(env LC_CTYPE=C tr -dc 'a-z0-9' < /dev/urandom | fold -w 10 | head -n 1)
# Define the index policy for the container, include spatial and composite indexes
idxpolicy=$(cat << EOF
{
"indexingMode": "consistent",
"includedPaths": [
{"path": "/*"}
],
"excludedPaths": [
{ "path": "/headquarters/employees/?"}
],
"spatialIndexes": [
{"path": "/*", "types": ["Point"]}
],
"compositeIndexes":[
[
{ "path":"/name", "order":"ascending" },
{ "path":"/age", "order":"descending" }
]
]
}
EOF
)
# Persist index policy to json file
echo "$idxpolicy" > "idxpolicy-$uniqueId.json"
az cosmosdb sql container create \
-a $accountName -g $resourceGroupName \
-d $databaseName -n $containerName \
-p $partitionKey --throughput $throughput \
--idx @idxpolicy-$uniqueId.json
# Clean up temporary index policy file
rm -f "idxpolicy-$uniqueId.json"
變更容器輸送量
增加 1000 RU/秒的 Azure Cosmos DB 容器輸送量。
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
newRU=1000
# Get minimum throughput to make sure newRU is not lower than minRU
minRU=$(az cosmosdb sql container throughput show \
-g $resourceGroupName -a $accountName -d $databaseName \
-n $containerName --query resource.minimumThroughput -o tsv)
if [ $minRU -gt $newRU ]; then
newRU=$minRU
fi
az cosmosdb sql container throughput update \
-a $accountName \
-g $resourceGroupName \
-d $databaseName \
-n $containerName \
--throughput $newRU
移轉容器以自動調整輸送量
resourceGroupName='MyResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
# Migrate to autoscale throughput
az cosmosdb sql container throughput migrate \
-a $accountName \
-g $resourceGroupName \
-d $databaseName \
-n $containerName \
-t 'autoscale'
# Read the new autoscale max throughput
az cosmosdb sql container throughput show \
-g $resourceGroupName \
-a $accountName \
-d $databaseName \
-n $containerName \
--query resource.autoscaleSettings.maxThroughput \
-o tsv
防止容器遭刪除
在容器上放置 Azure 資源刪除鎖定,以防止其遭到刪除。 這項功能需要鎖定 Azure Cosmos DB 帳戶,以防止資料平面 SDK 變更。 若要深入瞭解,請參閱防止 SDK 的變更。 Azure 資源鎖定也可以藉由指定 ReadOnly 鎖定類型來防止資源遭變更。 對於 Azure Cosmos DB 容器,鎖定可用來防止輸送量或任何其他屬性遭變更。
resourceGroupName='myResourceGroup'
accountName='mycosmosaccount'
databaseName='database1'
containerName='container1'
lockType='CanNotDelete' # CanNotDelete or ReadOnly
databaseParent="databaseAccounts/$accountName"
containerParent="databaseAccounts/$accountName/sqlDatabases/$databaseName"
containerLockName="$containerName-Lock"
# Create a delete lock on container
az lock create --name $containerLockName \
--resource-group $resourceGroupName \
--resource-type Microsoft.DocumentDB/containers \
--lock-type $lockType \
--parent $containerParent \
--resource $containerName
# Delete lock on container
lockid=$(az lock show --name $containerLockName \
--resource-group $resourceGroupName \
--resource-type Microsoft.DocumentDB/containers \
--resource-name $containerName \
--parent $containerParent \
--output tsv --query id)
az lock delete --ids $lockid
下一步
如需 Azure CLI 的詳細資訊,請參閱: