Как включить функции предварительного просмотра Azure Cosmos DB (конвейер агрегации и Mongodbv3.4) через Powershell?

Я хотел бы включить конвейер агрегации и функции предварительного просмотра MongoDBv3.4 программно через AzureRM Powershell.

введите здесь описание изображения

До сих пор я безуспешно пытался сделать это с помощью шаблона Azure ARM и команды Set-AzureRmResource.

Set-AzureRmResource:

$updateDBProperties = @{
        "capabilities" = @(@{"Name" = "EnableAggregationPipeline"}, @{"Name"= "MongoDBv3.4"}) 
};

# also tried without luck
# $updateDBProperties = @{
#       "capabilities" = @("EnableAggregationPipeline", "MongoDBv3.4")
# };

# won't work
Set-AzureRmResource -ResourceType "Microsoft.DocumentDb/databaseAccounts" `
    -ApiVersion "2015-04-08" `
    -ResourceGroupName "my-resource-group" `
    -Name "my-cosmosdb-development" `
    -Properties $updateDBProperties

Через шаблон руки без везения:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "cosmosDBName": {
    "type": "string"
    },
    "location": {
    "type": "string"
    },
    "locations": {
    "type": "array"
    }
},
"variables": {},
"resources": [
    {
    "name": "[parameters('cosmosDBName')]",
    "type": "Microsoft.DocumentDB/databaseAccounts",
    "apiVersion": "2015-04-08",
    "location": "[parameters('location')]",
    "kind": "MongoDB",
    "properties": {
        "consistencyPolicy": {
        "defaultConsistencyLevel": "Session",
        "maxIntervalInSeconds": 5,
        "maxStalenessPrefix": 100
        },
        "databaseAccountOfferType": "Standard",
        "locations": "[array(parameters('locations'))]",
        "capabilities": [
        {
            "name": "EnableAggregationPipeline"
        },
        {
            "name": "MongoDBv3.4"
        }
        ]
    }
    }
],
"outputs": {}
}

Мы загружаем шаблон руки выше через Powershell. Создается база данных Cosmos, но функции предварительного просмотра не включены:

New-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroup -TemplateFile $templateDirectory"/azureCosmosDB.json" -TemplateParameterObject $templateParameterObject -Name $templateParameterObject.cosmosDBName;

person Yudhistira Arya    schedule 12.06.2018    source источник
comment
Не могли бы вы проверить capabilities в проводнике ресурсов вашей базы данных mongo? Два свойства существуют или нет?   -  person Joy Wang    schedule 12.06.2018
comment
@JoyWang, вы имеете в виду сгенерированный скрипт автоматизации (шаблон руки)? Нет, его там нет, даже после того, как я запустил все вышеперечисленное.   -  person Yudhistira Arya    schedule 13.06.2018
comment
Я имею в виду, что после выполнения вашей команды вы можете проверить возможности своей базы данных mongo в resources.azure.com, если там есть два свойства name? Если они существуют, я думаю, что это успешно. если вы проверите кнопку на портале, они не включены, это может быть ошибка, потому что я видел аналогичную проблему в веб-приложении.   -  person Joy Wang    schedule 14.06.2018
comment
Эти два свойства не создаются в resources.azure.com. Он создается только тогда, когда я использую команду Azure CLI, но не AzureRM Powershell.   -  person Yudhistira Arya    schedule 27.06.2018


Ответы (3)


Мне удалось установить эти возможности с помощью инструмента командной строки az:

az cosmosdb update \
   --name my-resource-group \
   --resource-group my-cosmosdb-deployment \
   --capabilities "EnableAggregationPipeline" "MongoDBv3.4"

Хотя это заняло несколько минут. Надеюсь, это поможет!

person Johann Philipp Strathausen    schedule 04.12.2018
comment
другая функция предварительного просмотра имеет метку mongoEnableDocLevelTTL... на случай, если кто-то захочет включить все три - person Roman Gherta; 09.09.2019

Это достижимо с помощью PowerShell путем исправления ресурса учетной записи CosmosDB. Ключевым моментом является добавление флага -UsePatchSemantics к Set-AzureRmResource, чтобы он делал запрос HTTP PATCH, а не HTTP PUT.

$db = Get-AzureRmResource -ResourceName "CosmosDB account name" -ResourceGroupName "RG name" | Where-Object -Property ResourceType -eq "Microsoft.DocumentDb/databaseAccounts"

# Enable some optional capabilities/features
$props = @{capabilities = @( @{name="EnableAggregationPipeline"}, @{name="MongoDBv3.4"})}

# Patch the resource with these settings
Set-AzureRmResource -ResourceId $db.ResourceId -ApiVersion "2015-04-08" -PropertyObject $props -UsePatchSemantics
person Brian Golden    schedule 01.07.2019

Чтобы это работало как часть шаблона ARM, мне пришлось изменить apiVersion (2015-04-08, в вашем случае) на что-то более новое:

"apiVersion": "2019-08-01",

Дополнительные сведения об apiVersion см. в документации MS здесь< /а>.

Однако в настоящее время это работает только при первоначальном создании Cosmos DB с включенной функцией; До сих пор я не нашел способа включить его после того, как ресурс был первоначально подготовлен.

person Étienne Huckle-Marchand    schedule 29.10.2019