Создание базы данных и контейнера для Azure Cosmos DB — API для NoSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

Примечание

Для взаимодействия с Azure рекомендуется использовать модуль Azure Az PowerShell. Чтобы начать работу, см. статью Установка 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 в двух регионах с согласованностью на уровне сеанса, базой данных и контейнером с ключом секции, настраиваемой политикой индексирования, политикой уникального ключа, сроком жизни, выделенной пропускной способностью, а последний модуль записи выигрывает политику разрешения конфликтов с пользовательским путем разрешения конфликтов, который будет использоваться при 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"

Описание скрипта

Этот скрипт использует следующие команды. Для каждой команды в таблице приведены ссылки на соответствующую документацию.

Get-Help Примечания
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.