2016-08-26 6 views
1

Я пытаюсь автоматизировать создание соединения API для учетной записи хранилища в Azure с использованием шаблонов диспетчера ресурсов.Динамическое извлечение ключа учетной записи azure в шаблоне ARM

Я использую метод listKeys в ARM для получения ключа доступа к учетной записи хранилища. Я прошел через этот question, и он не работает для меня. Когда я использую этот метод в разделе шаблона outputs, он отлично работает и успешно извлекает и отображает ключ доступа.

"outputs": { "listKeysOutput": { "type": "string", "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storagename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]" } }

Однако при попытке использовать ту же самую функцию внутри соединительного ресурса (как показано ниже), шаблон выполняется без каких-либо ошибок. Но при доступе к API-интерфейсу с портала Azure он говорит, что параметр отсутствует.

"parameterValues": { "accesskey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storagename')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]", "accountName": "[parameters('storagename')]" }

enter image description here

enter image description here

Я пропускаю что-то здесь? Или вывод listKeys не принимается свойством accesskey?

+0

Не могли бы вы попытаться использовать этот API останова (https://msdn.microsoft.com/en-us/library/mt163589.aspx)? –

ответ

0

Две вещи, которые могут быть причиной проблемы:

  1. Убедитесь, что соединение API имеет зависимость от учетной записи
  2. хранения прописной ключ в «Accesskey» (некоторые вещи в шаблонах чувствительны к регистру)
1

@Naren, я рекомендую вам эту функцию можно использовать API, чтобы получить ключ для хранения

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys?api-version={api-version}

Вы можете получить тот же результат, что и шаблон.

{ 
    “keys”: [ 
    { 
     “keyName”: “key1”, 
     “value”: "key1Value”, 
     “permissions”: “FULL” 
    }, 
    { 
     “keyName”: “key2”, 
     “value”: "key2Value”, 
     “permissions”: “FULL” 
    }, 
    ] 
} 

Просто для справки: https://msdn.microsoft.com/en-us/library/mt163589.aspx

+0

следует принимать как решение. –

2

У меня был подобный опыт несколько месяцев назад, и решить ее с помощью строки подключения непосредственно в моем коде, и затем передать строку соединения в соединениях. Значение выглядит следующим образом:

[concat('DefaultEndpointsProtocol=https;AccountName=', variables('storageConfigs')[0].name,';AccountKey=', listKeys(resourceId('Microsoft.Storage/storageAccounts/', variables('storageConfigs')[0].name), variables('defaultStorageApiVersion')).key1)] 

Я использовал объект конфигурации для хранения в качестве входных данных, так вот почему он выглядит как выше вы могли бы заменить variables('storageConfigs')[0].name с любым именем или переменной функции вы используете в вашем коде. Похоже, что над ним может быть storagename

0

Зависимость действительно является требованием, чтобы учетная запись хранилища уже была создана до начала развертывания соединения api.

Проблема с кодом шаблона OP заключается в использовании accesskey, а правильное имя параметра - accessKey (обратите внимание на столицу K) для ресурса соединения Azi Blob api.

Для тех, кто борется с отсутствием документации для требуемых параметров API ресурсов Connection - инициировать этот API вызов:

https://management.azure.com/subscriptions/<YOUR SUBSCRIPTION ID>/providers/Microsoft.Web/locations/<YOUR LOCATION>/managedApis/<API TYPE>?api-version=2016-06-01

<API TYPE> должен быть тип апи соединения, чтобы проверить, например, azureblob, azurequeues или documentdb.

Описание всех ожидаемых параметров возвращается вместе с другой описательной информацией для этого ресурса.