ARM. Как я могу получить ключ доступа из учетной записи хранилища для использования в AppSettings позже в шаблоне?

Я создаю шаблон управления ресурсами Azure, который создает несколько ресурсов, включая учетную запись Azure и службу приложений Azure с веб-приложением.

Я хотел бы иметь возможность захватить основной ключ доступа (или полную строку соединения, в любом случае - в порядке) из недавно созданной учетной записи хранилища и использовать ее как значение для одного из AppSettings для Интернета App.

Возможно ли это?

Ответы

Ответ 1

Используйте вспомогательную функцию listkeys.

"appSettings": [
    {
      "name": "STORAGE_KEY",
      "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]"
    }
]

Этот быстрый запуск делает нечто похожее:

https://azure.microsoft.com/en-us/documentation/articles/cache-web-app-arm-with-redis-cache-provision/

Ответ 2

Синтаксис изменился с тех пор, как был принят другой ответ. Ошибка, которую вы сейчас нажмете, - 'Template language expression property 'key1' doesn't exist, available properties are 'keys'

Ключи теперь представлены как массив ключей, и теперь синтаксис:

"StorageAccount": "[Concat('DefaultEndpointsProtocol=https;AccountName=',variables('StorageAccountName'),';AccountKey=',listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('StorageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value)]",

Смотрите: http://samcogan.com/retrieve-azure-storage-key-in-arm-script/

Ответ 3

Я столкнулся с этой проблемой два раза. Сначала в 2015 году и последний сегодня в мае 2017 года. Мне нужно добавить строки подключения к WebApp - я хочу добавлять строки автоматически из сгенерированных ресурсов во время развертывания из шаблона ARM. Это может помочь позже не добавлять вручную эти значения.

Впервые я использовал старую версию функции listKeys (похоже, что старая версия возвращает результат не как объект, а как значение):

"AzureWebJobsStorage": {
                        "type": "Custom",
                        "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2015-05-01-preview').key1)]"
                    },

Сегодня последняя версия рабочего шаблона:

"resources": [
    {
      "apiVersion": "2015-08-01",
      "type": "config",
      "name": "connectionstrings",
      "dependsOn": [
        "[resourceId('Microsoft.Web/Sites/', parameters('webSiteName'))]"
      ],
      "properties": {
        "DefaultConnection": {
          "value": "[concat('Data Source=tcp:', reference(resourceId('Microsoft.Sql/servers/', parameters('sqlserverName'))).fullyQualifiedDomainName, ',1433;Initial Catalog=', parameters('databaseName'), ';User Id=', parameters('administratorLogin'), '@', parameters('sqlserverName'), ';Password=', parameters('administratorLoginPassword'), ';')]",
          "type": "SQLServer"
        },
        "AzureWebJobsStorage": {
          "type": "Custom",
          "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-01-01').keys[0].value)]"
        },
        "AzureWebJobsDashboard": {
          "type": "Custom",
          "value": "[concat(variables('storageConnectionString'), listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2016-01-01').keys[0].value)]"
        }
      }
    },

Спасибо.