繁体   English   中英

使用 ARM 创建 Azure Function 主机密钥不适用于新部署

[英]Creating an Azure Function host key using ARM doesn't work on a new deployment

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

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

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

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

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

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

  • 如果您想为什么不使用预定义的主密钥或默认密钥来避免这些麻烦:我经常遇到在部署过程中主密钥和默认密钥发生变化的奇怪情况。 因此,ARM 模板中的引用组件再次获得了一个过时的键值。

希望这些经验有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM