使用ARM创建Azure函数主机密钥不需要';我无法进行新的部署

使用ARM创建Azure函数主机密钥不需要';我无法进行新的部署,azure,azure-functions,azure-resource-manager,Azure,Azure Functions,Azure Resource Manager,我尝试在ARM模板中创建Azure函数主机密钥,首先在该模板中创建函数,然后创建密钥: { "type": "Microsoft.Web/sites/host/functionKeys", "apiVersion": "2018-11-01", "name": "[concat(parameters('FUNCTIONNAME'), '/default/test-key')]", "properties": { "name": "test-key", "value

我尝试在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'))]"
  ]
}
看起来,当功能已经部署时,部署将添加主机键
测试键
。如果将模板部署到新的资源组,则不会创建主机密钥。如果我第二次运行部署,它就是


我的
dependsOn
声明有什么问题吗?还有其他想法吗?

在ARM模板中部署FunctionKey存在几个问题。您的代码是正确的,正如您所说,它有时会成功部署。 在没有深入了解引擎盖下到底发生了什么的情况下,这里是我的一些(痛苦的)学习:

  • 在函数的内容以某种方式具体化之前,不会创建键(可能需要查看是否有带有HttpTrigger的函数)。因此,行为取决于代码的提供方式——使用链接的sourcecontrol(例如Github),我遇到了最大的问题,而WEBSITE_RUN_FROM_包运行得非常好。在ARM模板中设置sourcecontrol时,也可以为functionKeys资源添加依赖项,如
    “[resourceId('Microsoft.Web/sites/sourcecontrols','name of function','Web')”
    。这样,我就实现了functionkeys也可以在完整的初始部署中部署

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

  • 如果没有为函数键指定值(如代码段中的
    testvalue
    ),则每次部署都会生成一个新值。因此,它不是真正的“增量”,因为它应该是IMHO。再加上如上所述密钥的延迟可用性,我遇到了一个问题:在后续部署中,我总是会得到一个旧版本的密钥值,这让我有点痛苦

  • 如果您认为,为什么不使用预定义的主控键或默认键 避免这些麻烦:我经常遇到这种奇怪的情况 主密钥和默认密钥在部署期间更改。又是这样 ARM模板中的引用组件得到了一个 键的过时值


希望这些经验对您有所帮助。

在ARM模板中部署FunctionKey时存在几个问题。您的代码是正确的,正如您所说,它有时会成功部署。 在没有深入了解引擎盖下到底发生了什么的情况下,这里是我的一些(痛苦的)学习:

  • 在函数的内容以某种方式具体化之前,不会创建键(可能需要查看是否有带有HttpTrigger的函数)。因此,行为取决于代码的提供方式——使用链接的sourcecontrol(例如Github),我遇到了最大的问题,而WEBSITE_RUN_FROM_包运行得非常好。在ARM模板中设置sourcecontrol时,也可以为functionKeys资源添加依赖项,如
    “[resourceId('Microsoft.Web/sites/sourcecontrols','name of function','Web')”
    。这样,我就实现了functionkeys也可以在完整的初始部署中部署

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

  • 如果没有为函数键指定值(如代码段中的
    testvalue
    ),则每次部署都会生成一个新值。因此,它不是真正的“增量”,因为它应该是IMHO。再加上如上所述密钥的延迟可用性,我遇到了一个问题:在后续部署中,我总是会得到一个旧版本的密钥值,这让我有点痛苦

  • 如果您认为,为什么不使用预定义的主控键或默认键 避免这些麻烦:我经常遇到这种奇怪的情况 主密钥和默认密钥在部署期间更改。又是这样 ARM模板中的引用组件得到了一个 键的过时值


希望这些经历能有所帮助。

这看起来不错,我不太确定这里到底是什么,可能有点像比赛?你能尝试一下
dependsOn
一些保证比函数应用程序本身更晚完成的东西吗?这看起来不错,我不太确定这里到底发生了什么,可能有点像比赛?你能试着做一些比函数应用程序本身更晚完成的事情吗?谢谢你的帮助josch。不幸的是,我仍然得到错误:-/。我现在可能会使用Post PowerShell脚本来执行此操作…感谢您的帮助josch。不幸的是,我仍然得到错误:-/。我现在可能会使用Post PowerShell脚本执行此操作。。。