Создание базы данных и контейнера для Azure Cosmos DB — API для NoSQL
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Примечание.
Мы рекомендуем использовать модуль Azure Az PowerShell для взаимодействия с Azure. Чтобы начать работу, см. статью Установка Azure PowerShell. Дополнительные сведения см. в статье Перенос Azure PowerShell с AzureRM на Az.
Для этого примера требуется модуль Azure PowerShell Az 5.4.0 или более поздней версии. Запустите Get-Module -ListAvailable Az
для просмотра установленных версий.
Если необходимо выполнить установку, см. статью об установке модуля Azure PowerShell.
Запустите Connect AzAccount для входа Azure.
Пример скрипта
Этот скрипт создает учетную запись Azure Cosmos DB для API для NoSQL в двух регионах с согласованностью на уровне сеанса, базой данных и контейнером с ключом секции, настраиваемой политикой индексирования, уникальной политикой ключей, TTL, выделенной пропускной способностью и последней записью выигрывает политику разрешения конфликтов с пользовательским путем разрешения конфликтов, который будет использоваться при multipleWriteLocations=true
использовании.
# Reference: Az.CosmosDB | https://docs.microsoft.com/powershell/module/az.cosmosdb
# --------------------------------------------------
# Purpose
# Create Cosmos SQL API account, database, and container with dedicated throughput,
# indexing policy with include, exclude, and composite paths, unique key, and conflict resolution
# --------------------------------------------------
Function New-RandomString{Param ([Int]$Length = 10) return $(-join ((97..122) + (48..57) | Get-Random -Count $Length | ForEach-Object {[char]$_}))}
# --------------------------------------------------
$uniqueId = New-RandomString -Length 7 # Random alphanumeric string for unique resource names
$apiKind = "Sql"
# --------------------------------------------------
# Variables - ***** SUBSTITUTE YOUR VALUES *****
$locations = @()
$locations += New-AzCosmosDBLocationObject -LocationName "East Us" -FailoverPriority 0 -IsZoneRedundant 0
$locations += New-AzCosmosDBLocationObject -LocationName "West Us" -FailoverPriority 1 -IsZoneRedundant 0
$resourceGroupName = "myResourceGroup" # Resource Group must already exist
$accountName = "cosmos-$uniqueId" # Must be all lower case
$consistencyLevel = "Session"
$tags = @{Tag1 = "MyTag1"; Tag2 = "MyTag2"; Tag3 = "MyTag3"}
$databaseName = "myDatabase"
$containerName = "myContainer"
$containerRUs = 400
$partitionKeyPath = "/myPartitionKey"
$indexPathIncluded = "/*"
$compositeIndexPaths1 = @(
@{ Path = "/myCompositePath1"; Order = "ascending" };
@{ Path = "/myCompositePath2"; Order = "descending" }
)
$compositeIndexPaths2 = @(
@{ Path = "/myCompositePath3"; Order = "ascending" };
@{ Path = "/myCompositePath4"; Order = "descending" }
)
$indexPathExcluded = "/myExcludedPath/*"
$uniqueKeyPath = "/myUniqueKeyPath"
$conflictResolutionPath = "/myResolutionPath"
$ttlInSeconds = 120 # Set this to -1 (or don't use it at all) to never expire
# --------------------------------------------------
Write-Host "Creating account $accountName"
$account = New-AzCosmosDBAccount -ResourceGroupName $resourceGroupName `
-LocationObject $locations -Name $accountName -ApiKind $apiKind -Tag $tags `
-DefaultConsistencyLevel $consistencyLevel `
-EnableAutomaticFailover:$true
Write-Host "Creating database $databaseName"
$database = New-AzCosmosDBSqlDatabase -ParentObject $account -Name $databaseName
$uniqueKey = New-AzCosmosDBSqlUniqueKey -Path $uniqueKeyPath
$uniqueKeyPolicy = New-AzCosmosDBSqlUniqueKeyPolicy -UniqueKey $uniqueKey
$compositePath1 = @()
ForEach ($compositeIndexPath in $compositeIndexPaths1) {
$compositePath1 += New-AzCosmosDBSqlCompositePath `
-Path $compositeIndexPath.Path `
-Order $compositeIndexPath.Order
}
$compositePath2 = @()
ForEach ($compositeIndexPath in $compositeIndexPaths2) {
$compositePath2 += New-AzCosmosDBSqlCompositePath `
-Path $compositeIndexPath.Path `
-Order $compositeIndexPath.Order
}
$includedPathIndex = New-AzCosmosDBSqlIncludedPathIndex -DataType String -Kind Range
$includedPath = New-AzCosmosDBSqlIncludedPath -Path $indexPathIncluded -Index $includedPathIndex
$indexingPolicy = New-AzCosmosDBSqlIndexingPolicy `
-IncludedPath $includedPath `
-CompositePath @($compositePath1, $compositePath2) `
-ExcludedPath $indexPathExcluded `
-IndexingMode Consistent -Automatic $true
# Conflict resolution policies only apply in multi-master accounts.
# Included here to show custom resolution path.
$conflictResolutionPolicy = New-AzCosmosDBSqlConflictResolutionPolicy `
-Type LastWriterWins -Path $conflictResolutionPath
Write-Host "Creating container $containerName"
$container = New-AzCosmosDBSqlContainer `
-ParentObject $database -Name $containerName `
-Throughput $containerRUs -IndexingPolicy $indexingPolicy `
-PartitionKeyKind Hash -PartitionKeyPath $partitionKeyPath `
-UniqueKeyPolicy $uniqueKeyPolicy `
-ConflictResolutionPolicy $conflictResolutionPolicy `
-TtlInSeconds $ttlInSeconds
Очистка развертывания
После выполнения примера сценария можно удалить группу ресурсов и все связанные с ней ресурсы, выполнив следующую команду.
Remove-AzResourceGroup -ResourceGroupName "myResourceGroup"
Описание скрипта
Этот скрипт использует следующие команды. Для каждой команды в таблице приведены ссылки на соответствующую документацию.
Команда | Примечания. |
---|---|
Azure Cosmos DB | |
New-AzCosmosDBAccount | Создает учетную запись Azure Cosmos DB. |
New-AzCosmosDBSqlDatabase | Создает База данных SQL Azure Cosmos DB. |
New-AzCosmosDBSqlUniqueKey | Создание объекта PSSqlUniqueKey для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlUniqueKeyPolicy. |
New-AzCosmosDBSqlUniqueKeyPolicy | Создание объекта PSSqlUniqueKeyPolicy для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlContainer. |
New-AzCosmosDBSqlCompositePath | Создание объекта PSCompositePath для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlIndexingPolicy. |
New-AzCosmosDBSqlIncludedPathIndex | Создание объекта PSIndexes для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlIncludedPath. |
New-AzCosmosDBSqlIncludedPath | Создание объекта PSIncludedPath для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlIndexingPolicy. |
New-AzCosmosDBSqlIndexingPolicy | Создание объекта PSSqlIndexingPolicy для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlContainer. |
New-AzCosmosDBSqlConflictResolutionPolicy | Создание объекта PSSqlConflictResolutionPolicy для SQL в Cosmos DB, который используется в качестве параметра для командлета New-AzCosmosDBSqlContainer. |
New-AzCosmosDBSqlContainer | Создает новый контейнер SQL Azure Cosmos DB. |
Группы ресурсов Azure | |
Remove-AzResourceGroup | Удаляет группу ресурсов со всеми вложенными ресурсами. |
Следующие шаги
Дополнительные сведения о Azure PowerShell см. в документации по Azure PowerShell.