Создание ключа хоста Azure Function с использованием ARM не работает в новом развертывании - PullRequest
1 голос
/ 29 января 2020

Я пытаюсь создать Azure Функция хост-ключ внутри шаблона ARM , где я сначала создаю функцию, а затем создаю ключ:

{
  "type": "Microsoft.Web/sites/host/functionKeys",
  "apiVersion": "2018-11-01",
  "name": "[concat(parameters('FUNCTIONNAME'), '/default/test-key')]",
  "properties": {
    "name": "test-key",
    "value": "test-value"
  },
  "dependsOn": [
    "[resourceId('Microsoft.Web/sites', parameters('FUNCTIONNAME'))]"
  ]
}

Похоже, что при развертывании добавится ключ хоста test-key, когда функция уже развернута. Если я разверну шаблон в новой группе ресурсов, ключ хоста будет не создан. Если я запускаю развертывание во второй раз, это так.

Что-то не так с моей декларацией dependsOn? Есть другие идеи?

1 Ответ

1 голос
/ 22 февраля 2020

Существует несколько проблем с развертыванием функциональных клавиш в шаблонах ARM. Ваш код верен и, как вы сказали, иногда успешно развертывается. Не имея глубоких знаний о том, что на самом деле происходит под капотом, вот некоторые из моих (болезненных) уроков:

  • Ключи не создаются до того, как содержимое функции каким-то образом материализовано (возможно, оно должно выглядеть если есть функции с HttpTrigger). Таким образом, поведение зависит от способа предоставления кода - со связанным sourcecontrol (например, Github) у меня были самые большие проблемы, а WEBSITE_RUN_FROM_PACKAGE работает довольно хорошо. Когда вы также настраиваете sourcecontrol в шаблоне ARM, вы можете добавить зависимость для ресурса functionKeys, например "[resourceId('Microsoft.Web/sites/sourcecontrols', 'name of function', 'web')]". Благодаря этому я добился того, чтобы функциональные клавиши были развернуты также при полных начальных развертываниях

  • При попытке прочитать развернутые функциональные клавиши в одном и том же шаблоне ARM могут возникнуть условия гонки (например, для использования в Управление API). Вы можете и должны установить зависимость с "[resourceId('Microsoft.Web/sites/host/functionKeys', 'name of function', 'default', 'name of key')]", что может помочь в некоторых ситуациях. Но у меня также была ситуация, когда ключ еще не был готов к чтению, и я закончил с последующим запуском для этого. То, что вы можете попробовать, это связать его с некоторыми настройками «зависящего», чтобы он выполнялся как можно позже (ну, это скорее взлом).

  • Когда вы этого не сделаете укажите значение для функциональной клавиши (например, test-value в вашем фрагменте), при каждом развертывании создается новое значение. Так что это на самом деле не «постепенно», как должно быть ИМХО. В сочетании с задержкой доступности ключа, как описано выше, у меня была проблема, заключающаяся в том, что я всегда получал старую версию значения ключа при последующих развертываниях, что было немного больно, чтобы узнать.

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

Надеюсь, что этот опыт поможет.

...