#azure #diagnostics #azure-diagnostics #sas-token
#azure #диагностика #azure-диагностика #sas-токен
Вопрос:
Я пытаюсь развернуть шаблон arm с новой виртуальной машиной и настроить диагностическое расширение Linux / LAD без создания новой учетной записи хранилища, но используя существующую. Я нашел эту статью https://samcogan.com/generate-sas-tokens-in-arm-teamplates для использования «listAccountSas» и я установил в «ProtectedSettings»:
«storageAccountSasToken»: «[Список учетных записей(параметры(‘existingStorageName’), ‘2018-07-01’, переменные (‘accountSasProperties’)).accountSasToken]»
"resources": [
{vm creation bla bla},
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"apiVersion": "[providers('Microsoft.Compute','virtualMachines/extensions').apiVersions[0]]",
"location": "[parameters('vmLocation')]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"name": "[concat(parameters('vmName'), '/LinuxDiagnostic')]",
"properties": {
"publisher": "Microsoft.Azure.Diagnostics",
"type": "LinuxDiagnostic",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "3.0",
"protectedSettings": {
"storageAccountName": "[parameters('existingStorageName')]",
"storageAccountSasToken": "[listAccountSas(parameters('existingStorageName'), '2018-07-01', variables('accountSasProperties')).accountSasToken]",
"storageAccountEndPoint": "https://core.windows.net/",
"sinksConfig": {
"sink": [
{
"name": "WADMetricJsonBlob",
"type": "JsonBlob"
}
]
}
},
"settings": {
"StorageAccount": "[parameters('existingStorageName')]",
"ladCfg": {
"diagnosticMonitorConfiguration": {
"eventVolume": "Medium",
"metrics": {
"metricAggregation": [
{
"scheduledTransferPeriod": "PT1H"
},
{
"scheduledTransferPeriod": "PT1M"
}
],
"resourceId": "[resourceId('Microsoft.Compute/virtualMachines', parameters('vmName'))]"
},
"performanceCounters": {
"sinks": "WADMetricJsonBlob",
"performanceCounterConfiguration": [
{
"annotation": [
{
"displayName": "Memory percentage",
"locale": "en-us"
}
],
"class": "memory",
"counter": "percentusedmemory",
"counterSpecifier": "/builtin/memory/percentusedmemory",
"type": "builtin",
"unit": "Percent"
}
]
},
"syslogEvents": {}
},
"sampleRateInSeconds": 15
}
}
}
},
Когда я пытаюсь развернуть шаблон, я получаю ошибку во время проверки:
«InvalidTemplate», «сообщение»: «Ошибка проверки шаблона развертывания: «Ссылка на шаблон «myExistingStorageAccount» недопустима: не удалось найти ресурс шаблона или копию ресурса с этим именем. Пожалуйста, смотрите https://aka.ms/arm-template-expressions/#reference для получения подробной информации об использовании.’.»}
Согласно MS:
Ссылочная функция и функции list * не создают неявной зависимости, когда на ресурс ссылается его идентификатор ресурса. Чтобы создать неявную зависимость, передайте имя ресурса, который развернут в том же шаблоне.
Тем не менее, я попытался с помощью вложенного шаблона, где «создать» токен SAS и в выходных данных установить sasToken.Идентификатор, по которому позже в моем основном шаблоне будет вызываться диагностическое расширение с sastoken.Id:
{
"apiVersion": "2017-08-01",
"name": "SasTokenNestedTemplate",
"type": "Microsoft.Resources/deployments",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"properties": {
"mode" : "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [
{
"apiVersion" : "2018-03-01",
"type": "Microsoft.Resources/deployments",
"name": "NestedSasTokenCreation",
"properties": {
"sasToken": "[listAccountSas(parameters('existingStorageName'), '2018-07-01', variables('accountSasProperties')).accountSasToken]"
}
}
],
"outputs": {
"sasToken": {
"type": "string",
"value": "[resourceId('Microsoft.Resources/deployments', parameters('sasToken'))]"
}
}
}
}
},
{
"type": "Microsoft.Compute/virtualMachines/extensions",
"apiVersion": "[providers('Microsoft.Compute','virtualMachines/extensions').apiVersions[0]]",
"location": "[parameters('vmLocation')]",
"dependsOn": [
"[concat('Microsoft.Compute/virtualMachines/', parameters('vmName'))]"
],
"name": "[concat(parameters('vmName'), '/LinuxDiagnostic')]",
"properties": {
"publisher": "Microsoft.Azure.Diagnostics",
"type": "LinuxDiagnostic",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "3.0",
"protectedSettings": {
"storageAccountName": "[parameters('existingStorageName')]",
"storageAccountSasToken": { "value": "[reference('SasTokenNestedTemplate', '2017-08-01').outputs.sasToken.value]" },
"storageAccountEndPoint": "https://core.windows.net/",
"sinksConfig": {
"sink": [
{
"name": "WADMetricJsonBlob",
"type": "JsonBlob"
}
]
}
Но по-прежнему выдает ту же ошибку, что и выше.
Заранее спасибо за вашу помощь!
Ответ №1:
вам нужно предоставить ему идентификатор ресурса учетной записи хранилища, потому что это не часть шаблона, он не может разобраться с этим самостоятельно.
listAccountSas(resourceId('Microsoft.Storage/storageAccounts', parameters('existingStorageName')), '2018-07-01', variables('accountSasProperties')).accountSasToken
Комментарии:
1. Ты мой герой! Большое спасибо, приятель!