【问题标题】:Creating an Azure Function host key using ARM doesn't work on a new deployment使用 ARM 创建 Azure Function 主机密钥不适用于新部署
【发布时间】:2020-01-29 12:32:43
【问题描述】:

我尝试在 ARM 模板中创建一个 Azure Function 主机密钥,我首先在其中创建函数,然后创建密钥:

{
  "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 声明有什么问题吗?还有其他想法吗?

【问题讨论】:

  • 这看起来不错,我不确定这里往南走的是什么,可能有点像种族......?你可以试试dependsOn 保证比函数应用本身更晚完成的东西吗?

标签: azure azure-functions azure-resource-manager


【解决方案1】:

在 ARM 模板中部署功能键存在几个问题。您的代码是正确的,正如您所说,它有时会成功部署。 在不深入了解幕后真正发生的事情的情况下,这里是我的一些(痛苦的)学习:

  • 在函数的内容以某种方式具体化之前不会创建键(也许它必须查看是否有带有 HttpTrigger 的函数)。所以行为取决于提供代码的方式 - 使用链接的源代码控制(例如 Github)我遇到了最大的问题,而 WEBSITE_RUN_FROM_PACKAGE 工作得很好。当你在 ARM 模板中设置 sourcecontrol 时,你可以为 functionKeys 资源添加一个dependsOn,如"[resourceId('Microsoft.Web/sites/sourcecontrols', 'name of function', 'web')]"。这样,我实现了在完整的初始部署中也部署了功能键

  • 当您尝试在同一 ARM 模板中读取已部署的 functionKey(例如用于 API 管理)时,您可能会遇到竞争情况。您可以并且应该使用"[resourceId('Microsoft.Web/sites/host/functionKeys', 'name of function', 'default', 'name of key')]" 设置一个dependsOn,这在某些情况下可能会有所帮助。但是我也遇到了密钥还没有准备好读取的情况,我最终为此进行了后续部署。您可以尝试将其与一些“dependsOn”设置链接起来,以便尽可能晚地执行它(嗯,这相当 hack)。

  • 如果您没有为功能键指定值(如 sn-p 中的 test-value),每次部署都会生成一个新值。所以它并不是真正的“增量”,因为它应该是恕我直言。结合上述密钥的延迟可用性,我遇到了一个问题,即我在后续部署中总是得到旧版本的键值对,这很难找到。

  • 如果您认为为什么不使用预定义的主密钥或默认密钥 避免这些烦恼:我经常遇到的奇怪情况 在部署期间更改了主密钥和默认密钥。所以再次 ARM 模板中的引用组件提供了一个 键的过时值。

希望这些经验有所帮助。

【讨论】:

  • 感谢您的帮助 josch。不幸的是,我仍然收到错误:-/。我现在可能会使用 Post-PowerShell 脚本来执行此操作...
猜你喜欢
  • 2017-12-19
  • 1970-01-01
  • 2018-08-20
  • 2021-02-19
  • 2019-03-31
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
相关资源
最近更新 更多