Невозможно правильно использовать функцию ссылки в шаблоне ARM - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть основной шаблон.В пределах этого: у меня есть связанный шаблон, создающий понимание приложения.и еще один связанный вызов шаблона для создания веб-приложения.

В вызове связанного шаблона веб-приложения я хочу передать AIKey в качестве параметра, но это проблематично.Если я это сделаю:

"value": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')),'2014-04-01').InstrumentationKey]"

Это не удается в первый раз, потому что эталонное значение оценивается немедленно, а appinsights еще не существует.Это происходит даже в том случае, если я использую зависимость от вызова ресурса шаблона, связанного с appinsights, в веб-приложении.

Поэтому я подумал, что, возможно, я смогу использовать ссылку в ссылке, чтобы предотвратить ее оценку слишком рано, ноэто не работает - кажется, вы не можете иметь ссылку внутри ссылки.

"value": "[reference(reference('AppInsights').outputs.resourceID.value,'2014-04-01').InstrumentationKey]"

Я не хочу помещать AI-ключ в вывод связанного шаблона, так как он будет помещатьэто открытым текстом.Есть ли способ добиться того, что я пытаюсь сделать?

Вот некоторые фрагменты кода, это один шаблон, но шаблон очень большой, поэтому я не включил все:

Вызов AI вложенного шаблона:

{
  "name": "AppInsights",
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2016-09-01",
  "dependsOn": [],
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "[variables('AppInsightsTemplatePath')]",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      "tagValues": {
        "value": "[parameters('tagValues')]"
      },
      "workspaceId": {
        "value": "[parameters('workspaceId')]"
      },
      "appInsightsName": {
        "value": "[variables('appInsightsName')]"
      }
    }
  }
 },

Вызов шаблона WebAPP:

{
  "name": "WebApp",
  "type": "Microsoft.Resources/deployments",
  "apiVersion": "2016-09-01",
  "dependsOn": [
    "AppInsights",
    "AppServicePlan"
  ],
  "properties": {
    "mode": "Incremental",
    "templateLink": {
      "uri": "[variables('WebAppTemplatePath')]",
      "contentVersion": "1.0.0.0"
    },
    "parameters": {
      "siteConfig": {
        "value": {
          "netFrameworkVersion": "v4.7",
          "phpVersion": "",
          "pythonVersion": "",
          "javaVersion": "",
          "nodeVersion": "",
          "linuxFxVersion": "",
          "use32BitWorkerProcess": "False",
          "webSocketsEnabled": "False",
          "alwaysOn": "True",
          "managedPipelineMode": "Integrated",
          "remoteDebuggingEnabled": "False",
          "appSettings": [
            {
              "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
              "value": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')),'2014-04-01').InstrumentationKey]"
            }
          ],
          "connectionStrings": [],
          "defaultDocuments": [],
          "handlerMappings": [],
          "virtualApplications": [
            {
              "virtualPath": "/",
              "physicalPath": "site\\wwwroot",
              "preloadEnabled": "True",
              "virtualDirectories": ""
            }
          ],
          "minTlsVersion": "1.2"
        }
      }
    }
  }
},

Вот ошибка: "code": "ResourceNotFound", "message": "Ресурс «Microsoft.Insights / components / MyAppInsightsName» в группе ресурсов «MyResourceGroup» не найден. "

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

хорошо, я думаю, я понимаю, что вы говорите, вот как выглядит ваш шаблон:

parent:
  - child1:
      - application insights
  - child2:
      - webapp

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

parent:- child1: - понимание приложения - child2: - webapp

вы также можете попробовать обновить конфигурацию как автономный ресурс внутри child2:

{
    "name": "appsettings",
    "type": "config",
    "apiVersion": "2015-08-01",
    "properties": {
        "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('appInsightsName')),'2014-04-01').InstrumentationKey]"
    }
}

другой вариант - вывести его в child1 иссылка в child2, это будет работать.вы можете удалить развертывание как часть вашего скрипта (если вы не хотите удалять child1, вы можете создать прокси-развертывание, которое только это и делает), так что в Azure не будет никаких следов ключа AI, другой вариант выглядит несколько странно:

родитель: - child1: - child1.1 (бывший child1): - понимание приложения - child2: << это зависит от child1 - child2.1 (прежний child2): << ссылается на ключ AI - webapp </p>

0 голосов
/ 14 декабря 2018

Вместо передачи ключа в шаблон веб-приложения, передайте resourceId ресурса AI и вставьте вызов reference () в шаблон веб-приложения.Не выводите resourceId, просто передайте строку, как у вас в первом фрагменте кода.

"value": "[resourceId('Microsoft.Insights/components', variables('appInsightsName'))]

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

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