azure - 使用 ARM 创建 Azure Function 主机 key 不适用于新部署

标签 azure azure-functions azure-resource-manager

我尝试在 ARM 模板内创建 Azure Function 主机 key ,我首先在其中创建函数,然后创建 key :

{
  "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'))]"
  ]
}

看起来,当函数已经部署时,部署将添加主机 key test-key。如果我将模板部署到新的资源组,则不会创建主机 key 。如果我第二次运行部署,就是这样。

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

最佳答案

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

  • 在函数内容以某种方式具体化之前不会创建键(也许它必须查看是否存在带有 HttpTrigger 的函数)。因此,行为取决于提供代码的方式 - 使用链接的源代码控制(例如 Github)我遇到了最大的问题,而 WEBSITE_RUN_FROM_PACKAGE 工作得很好。当您也在 ARM 模板中设置源代码控制时,您可以为 functionKeys 资源添加 dependentOn,例如 "[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')]" 设置 dependentOn这在某些情况下可能会有所帮助。但我也遇到了 key 尚未准备好读取的情况,我最终为此运行了后续部署。您可以尝试将其与一些“dependsOn”设置链接起来,以便尽可能晚地执行它(好吧,这更像是一种黑客行为)。

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

  • 如果您认为为什么不使用预定义的主 key 或默认 key 避免这些麻烦:我经常遇到这样的奇怪情况 主 key 和默认 key 在部署期间发生了更改。那么再次 ARM 模板中的引用组件由一个 该键的值已过时。

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

关于azure - 使用 ARM 创建 Azure Function 主机 key 不适用于新部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967186/

相关文章:

azure - 是否可以在Azure DevOps中创建遵循幂等原则的PowerShell任务

azure - 为什么我们在使用 Visual Studio 创建的 Azure AD 应用程序注册时收到 2 条警告

android - Azure DevOps Gradle "Java heap space"错误

azure - 具有 AGIC 和应用程序网关的 AKS

azure - 为基于消耗的 Azure Functions 创建的应用程序服务计划是否可重复使用?

azure - 为什么 CosmosDB 在通过 ARM 模板创建文档集合时忽略索引?

c# - 可以在本地连接到 Salesforce 连接的应用程序,但在 Azure 函数中发布时无法连接

c# - 具有 HTTP 触发器的 Azure 函数在开始处理之前返回 "received"消息

azure - 有什么方法可以通过管理 API 访问 azure blob 存储吗?

azure - 重新实现 uniqueString() 哈希 ARM 函数