Давайте начнем с того, что я пытаюсь достичь.
То, что я хотел бы сделать, - это создать шаблон ARM, в котором я получаю секреты из хранилища ключей Azure, не указывая слишком много подробностей о конкретном хранилище ключей. Звучит достаточно легко и, вероятно, что-то, что реализовано в каждой производственной системе.
При быстром поиске я обнаружил синтаксис такой вещи: .
"parameters": {
"adminPassword": {
"reference": {
"keyVault": {
"id": "[resourceId(subscription().subscriptionId, parameters('vaultResourceGroup'), 'Microsoft.KeyVault/vaults', parameters('vaultName'))]"
},
"secretName": "[parameters('secretName')]"
}
},
Из того, что я понял, вам нужно добавить это во внешний шаблон, поскольку используемые методы нельзя использовать в методе main.
Итак, я начал создавать «основной» шаблон ARM и новый шаблон под названием appservice.json
, который содержит все необходимое для моей службы приложений, включая блок appSettings
, который нуждается в секретах из хранилища ключей.
В моем основном шаблоне я сделал следующее: , как описано в документации .
{
"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[uri(deployment().properties.templateLink.uri, 'appservice.json')]",
"contentVersion": "1.0.0.0"
},
Однако при развертывании я сталкиваюсь со следующей ошибкой.
"error": {
"code": "InvalidTemplate",
"message": "Unable to process template language expressions for resource '/subscriptions/ba49bae7-2b37-4504-914b-441763a2bcd3/resourceGroups/cfpexchange-jan-test/providers/Microsoft.Resources/deployments/linkedTemplate' at line '1' and column '1526'. 'The language expression property 'templateLink' doesn't exist, available properties are 'name, properties'.'"
}
Я также попробовал следующее, потому что заметил, что IntelliSense в Visual Studio сказал мне, что properties
не завершается, и я должен использовать templateLink
напрямую.
{
"apiVersion": "2017-05-10",
"name": "linkedTemplate",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[uri(deployment().templateLink.uri, 'appservice.json')]",
"contentVersion": "1.0.0.0"
},
Это, конечно, тоже неправильно.
"error": {
"code": "InvalidTemplate",
"message": "Unable to process template language expressions for resource '/subscriptions/ba49bae7-2b37-4504-914b-441763a2bcd3/resourceGroups/cfpexchange-jan-test/providers/Microsoft.Resources/deployments/linkedTemplate' at line '1' and column '1526'. 'The language expression property 'templateLink' doesn't exist, available properties are 'name, properties'.'"
}
А при использовании его в качестве переменной, как в документации
"variables": {
"sharedTemplateUrl": "[uri(deployment().properties.templateLink.uri, 'shared-resources.json')]"
},
...
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[variables('sharedTemplateUrl')]",
"contentVersion": "1.0.0.0"
},
Я также получаю сообщение об ошибке.
2018-07-04T19: 14: 34.4204720Z ## [ошибка] Не удалось проверить шаблон развертывания: «Недопустимая переменная шаблона« sharedTemplateUrl »: свойство языкового выражения« templateLink »не существует, доступные свойства» шаблон, параметры, режим, debugSetting, provisioningState '.. Подробную информацию об использовании см. в https://aka.ms/arm-template-expressions.'.
В это время я немного растерялся. Из того, что я понимаю из документации, видно, что я все делаю правильно. Видимо, я нет. Любые идеи о том, как продолжить это?
Для полноты, два фактических файла, которые я сейчас использую:
Было предпринято несколько итераций, чтобы попытаться исправить это, но, как уже упоминалось, пока замечено, что это работает.