Как обновить ключ учетной записи Cosmos DB, используемый в связанной службе фабрики данных Azure

Я пытаюсь обновить связанную службу фабрики данных V2 через PowerShell, но не могу получить рабочий файл определения.

Мой сценарий заключается в том, что после ротации ключа учетной записи Cosmos DB связанная служба фабрики данных, которая подключается к базе данных в учетной записи, должна быть обновлена ​​с использованием нового ключа. Для этого я извлекаю существующие свойства из связанной службы, обновляю свойства EncryptedCredential и AdditionalProperties.typeProperties.encryptedCredential, а затем снова запускаю их.

$definitionFile = "{0}/cosmosDbDefinition.json" -f $PSScriptRoot
$definition = (Get-AzDataFactoryV2LinkedService -Name $LinkedServiceName -DataFactoryName $Name -ResourceGroupName $ResourceGroupName).Properties
$definition.EncryptedCredential = ConvertTo-SecureString -String $key -AsPlainText
Set-Content -Path $definitionFile -Value ($definition | ConvertTo-Json)
Set-AzDataFactoryV2LinkedService -Name $Name -DataFactoryName $DataFactoryName -ResourceGroupName $ResourceGroupName -DefinitionFile $definitionFile -Force

Однако я явно делаю что-то не так, потому что Set-AzDataFactoryV2LinkedService не работает -

Недопустимые полезные данные связанной службы, вложенный в полезные данные 'typeProperties' имеет значение NULL.

Из-за ошибки typeProperties в полезной нагрузке не равно нулю. Тем не менее, я не уверен, правильнее ли было бы просто вернуть свойства обратно.

Документация не содержит никаких примеров файла определения, и я не могу найти никаких рабочих примеров (возможно, я ищу не то).

Как правильно обновить ключ для службы, связанной с фабрикой данных, для Cosmos DB?


person David Gard    schedule 22.09.2020    source источник


Ответы (1)


Определенный файл связанной службы фабрики данных Azure должен быть таким, как показано ниже. Дополнительные сведения см. В здесь и здесь.

{
    "name": "<Name of the linked service>",
    "properties": {
        "type": "<Type of the linked service>",
        "typeProperties": {
              "<data store or compute-specific type properties>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Если вы хотите обновить ключ учетной записи Azure CosmosDB, обратитесь к следующему сценарию.

$key="<account key>"
$definition = (Get-AzDataFactoryV2LinkedService -Name $LinkedServiceName -DataFactoryName $Name -ResourceGroupName $ResourceGroupName).Properties
$newdef=@{
  "properties" =@{
    "type"="CosmosDb"
    "typeProperties"= @{
      "connectionString"= $definition.ConnectionString+ "AccountKey=$($key)"
     
    }
  
  }
} | ConvertTo-Json -Depth 10

$newdef | Out-File E:\test.json

Set-AzDataFactoryV2LinkedService -Name $LinkedServiceName -DataFactoryName $Name -ResourceGroupName $ResourceGroupName -DefinitionFile E:\test.json
 

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

person Jim Xu    schedule 24.09.2020
comment
Спасибо, этот формат работает. Мне не удалось найти это где-либо задокументированным - есть ли у вас вообще источник, которым можно поделиться? - person David Gard; 24.09.2020
comment
@DavidGard Вы можете обратиться к docs.microsoft.com/en-us/azure/data-factory/ и docs.microsoft.com/en-us/rest/api/datafactory/linkedservices/, чтобы проверить каждое определение соединителя. - person Jim Xu; 24.09.2020