Как составить список ключей для учетной записи хранения, развернутой через связанный шаблон ARM? - PullRequest
2 голосов
/ 08 июня 2019

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

Шаблон хранилища

"outputs": {
    "storageKey": {
        "type": "string",
        "value": "[listKeys(resourceid(resourceGroup().name, 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]"
    }
}

Шаблон корня

{
    "apiVersion": "[variables('apiVersion')]",
    "type": "Microsoft.Resources/deployments",
    "name": "[concat(resourceGroup().Name, '-', variables('tdfConfiguration')[copyIndex()]['roleName'], '-storage')]",
    "copy": {
        "name": "storageCopy",
        "count": "[length(variables('tdfConfiguration'))]"
    },
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "[variables('storageAccountTemplateUri')]",
            "contentVersion": "1.0.0.0"
        },
        "parameters": {
            "storageAccountName": { "value": "[variables('tdfConfiguration')[copyIndex()]['componentName']]" },
            "storageAccountLocation": { "value": "[resourceGroup().location]" },
            "storageAccountType": { "value": "[variables('storageAccountType')]" }
        }
    }
},

{
    "apiVersion": "[variables('apiVersion')]",
    "type": "Microsoft.Resources/deployments",
    "name": "[concat(resourceGroup().Name, '-', variables('tdfConfiguration')[copyIndex()]['roleName'], '-website')]",
    "copy": {
        "name": "webSiteCopy",
        "count": "[length(variables('tdfConfiguration'))]"
    },
    "dependsOn": [
        "[concat('Microsoft.Resources/deployments/', resourceGroup().Name, '-', variables('tdfConfiguration')[copyIndex()]['roleName'], '-serviceplan')]",
        "[concat('Microsoft.Resources/deployments/', resourceGroup().Name, '-', variables('tdfConfiguration')[copyIndex()]['roleName'], '-storage')]"
    ],
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "[variables('webSiteTemplateUri')]",
            "contentVersion": "1.0.0.0"
        },
        "parameters": {
            "azureWebJobsStorageAccountKey": { "value": "[reference(concat(resourceGroup().Name, '-', variables('tdfConfiguration')[copyIndex()]['roleName'], '-storage')).outputs.storageKey.value]" }

        }
    }
},

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

  "azureWebJobsStorageAccountKey": { "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts',variables('tdfConfiguration')[copyIndex()]['componentName']), providers('Microsoft.Storage', 'storageAccounts').apiVersions[0]).keys[0].value]" }

, это не удастся, потому что, хотя учетная запись хранения указана как зависимость, она пытается разрешить это значение.немедленно, не дожидаясь развертывания учетной записи хранения.Есть идеи?

1 Ответ

2 голосов
/ 08 июня 2019

list* функции будут ожидать доступности ресурса, если он создается в том же шаблоне. но вы используете вложенные шаблоны, поэтому он не может знать, подготовлен ли ресурс или нет, поэтому он просто принимает его (стандартное поведение при использовании list* функций).

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

Кроме того, я не понимаю, почему вы делаете это с помощью вложенных шаблонов, я не вижу никаких причин делать это в вашем случае, вы слишком усложняете развертывание \ код без выгоды (и даже создали проблему для себя из-за тот). Просто отбросьте вложенные развертывания и используйте ресурсы.

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