Ошибка шаблона Arm: Не удается обработать языковые выражения шаблона для ресурса

Вопрос или проблема

У меня возникла проблема с ARM-шаблоном для развертывания или обновления ресурса Azure Function App. Я использовал следующий ARM-шаблон.

 {
      "type": "Microsoft.Web/sites/config",
      "apiVersion": "2022-03-01",
      "name": "[format('{0}/{1}', variables('functionAppName'), 'appsettings')]",
      "properties": {
        "AzureWebJobsStorage": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', variables('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2021-09-01').keys[0].value)]",
        "APPINSIGHTS_INSTRUMENTATIONKEY": "[reference(resourceId('Microsoft.Insights/components', variables('applicationInsightsName')), '2020-02-02').InstrumentationKey]",
        "FUNCTIONS_EXTENSION_VERSION": "~4",
        "ftpsState": "Disabled",
        "minTlsVersion": "1.2"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Insights/components', variables('applicationInsightsName'))]",
        "[resourceId('Microsoft.Web/sites', variables('functionAppName'))]",
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    }
  ]
}

Я использую Azure DevOps pipeline для развертывания этого шаблона, однако у меня возникает следующая ошибка: Статус сообщения: Невозможно обработать языковые выражения шаблона для ресурса ‘/subscriptions/subscriptionID/resourceGroups/DE3/providers/Microsoft.Web/sites/functionap-DE3/config/appsettings’ на строке ‘176’ и столбце ‘9’. ‘Невозможно оценить языковую функцию ‘format’: формат неверный: ‘Индекс (начиная с нуля) должен быть больше или равен нулю и меньше размера списка аргументов. С идентификатором корреляции без явной причины.

Я протестировал шаблон непосредственно в Azure portal, и он успешно прошел проверки валидации, но при развертывании через Azure pipeline он потерпел неудачу. Можете ли вы подсказать, как это исправить?

Я пытался изменить форматирование для этой строки кода "name": "[format('{0}/{1}', variables('functionAppName'), 'appsettings')]", на "name": "[concat('{0}/{1}', variables('functionAppName'), 'appsettings')]",

при развертывании ошибка осталась прежней.

.

Ответ или решение

При развертывании или обновлении Azure Function App с использованием ARM-шаблона, вы столкнулись с ошибкой, связанной с выражениями языковой модели, что часто указывает на проблемы с форматированием или параметрами внутри шаблона. В приведенной вами информации ошибка гласит: "Unable to evaluate language function ‘format’: the format is invalid; Index (zero based) must be greater than or equal to zero and less than the size of the argument list". Давайте разберем, как можно устранить эту ошибку и улучшить ваш шаблон.

Важные моменты в вашем случае:

  1. Проблема с функцией форматирования:
    Ваша строка "name": "[format('{0}/{1}', variables('functionAppName'), 'appsettings')]" использует функцию format, которая требует, чтобы количество переданных аргументов соответствовало количеству заполнительных маркеров (в данном случае, {0} и {1}). Проверьте, корректно ли определяется переменная functionAppName. Это означает, что переменная должна быть инициализирована и содержать значение, не равное NULL или пустой строке.

  2. Проверка переменных:
    Убедитесь, что переменная functionAppName объявлена в разделе variables вашего шаблона и что она правильно инициализируется. Например:

    "variables": {
       "functionAppName": "имяВашегоFunctionApp",
       "storageAccountName": "имяВашегоStorageAccount",
       "applicationInsightsName": "имяВашегоApplicationInsights"
    }
  3. Ошибки, связанные с параметрами Azure компонента:
    Убедитесь, что ресурсы, от которых зависит ваш шаблон, успешно развёрнуты и имеют корректные имена. Если один из ресурсов, таких как applicationInsightsName, отсутствует или неправильно инициализирован, это также может вызвать подобную ошибку.

  4. Тестирование на локальном уровне:
    Если вы тестируете шаблон в Azure Portal и там он проходит валидацию, но при развертывании через Azure DevOps возвращает ошибку, возможно, необходимо проверить, как значения переменных передаются в pipeline. Убедитесь, что pipeline не влияет на инициализацию переменных.

  5. Использование альтернатив:
    Если функция format продолжает выдавать ошибки, попробуйте альтернативный способ конкатенации строк с помощью функции concat, однако строка должна быть правильно отформатирована:

    "name": "[concat(variables('functionAppName'), '/appsettings')]"

Рекомендации по устранению ошибки

  • Проверьте все переменные, используемые в format или concat. Убедитесь, что они не содержат NULL или пустые значения.
  • Попробуйте добавить блоки output в ваш шаблон для вывода значений переменных, чтобы проверить их на этапе развертывания.
  • Убедитесь, что вы используете последнюю стабильную версию API для всех ресурсов в шаблоне, так как устаревшие версии могут иметь изменения в обработке.

Заключение

Каждая ошибка при развертывании Azure ресурса может быть вызвана многими факторами, связанными с типографическими ошибками или неверными зависимостями. Тщательный подход к диагностике и инспекции переменных и зависимостей поможет вам успешно развернуть ваш ARM-шаблон. Если ошибки продолжают возникать, рекомендуется очень внимательно просматривать все логи развертывания в Azure DevOps для выявления возможных дополнительных подсказок о причине сбоя.

Оцените материал
Добавить комментарий

Капча загружается...