如何使用 ARM 模板为 Azure Functions 中的部署槽添加默认功能键

How to add a default function key with ARM template for a deployment slot in Azure Functions

我想在我的 Azure 部署槽中添加一个默认功能键。因此,我将它添加到我的模板中,如下所示:

...,
{
   "type": "Microsoft.Web/sites/slots/functions/keys",
   "dependsOn":[
     "[resourceId('Microsoft.Web/sites/slots', variables('apiServiceName'),'deploy')]"
   ],
   "apiVersion": "2018-02-01",
   "name": "[concat(variables('apiServiceName'),'/deploy/default/eventgrid')]",
   "properties": {
       "name": "eventgrid"
   }
},...

不幸的是,我找不到如何让它工作,这是我能找到的最接近模板失败的方法(更少的片段使模板无效) 现在我得到这个错误:

NotFound: Error creating or updating function key.

API 文档解释了它是如何工作的,我认为它与我这里的 ARM 模板相匹配,但我似乎无法弄清楚为什么我会收到未找到的错误... 有人试过这个用于 azure 函数插槽吗? 不过,我可以让它在生产槽中工作:

...,
{
    "type": "Microsoft.Web/sites/host/functionKeys",
    "dependsOn":[
      "[resourceId('Microsoft.Web/sites', variables('apiServiceName'))]"
    ],
    "apiVersion": "2018-11-01",
    "name": "[concat(variables('apiServiceName'), '/default/eventgrid')]",
    "properties": {
        "name": "event-grid"
    }
},...

感谢任何帮助。

这对我有用。我认为您在名称 属性:

中缺少插槽名称
{
    "type": "Microsoft.Web/sites/slots/host/functionKeys",
    "apiVersion": "2018-11-01",
    "name": "[concat(variables('functionAppName'), '/staging', '/default/key')]",
    "properties": {
        "name": "key",
        "value": "[parameters('key')]"
    },
    "dependsOn": [
        "[resourceId('Microsoft.Web/sites/slots', variables('functionAppName'), 'staging')]"
    ]
},

我还不能发表评论,所以我不得不写一个答案:-( 我想补充一件我发现在使用上述答案时非常有帮助的小东西。我希望有人在看这个问题直接在此处查看此链接可能会有所帮助。

在尝试使用一个 ARM 模板部署多个环境时,我使用了上述答案并通过在参数文件中为每个环境创建一个参数来扩展它:

"parameters": {
        "subscription": {
            "value": "<mySub>"
        },
        "env": {
            "value": "<env>"
        },
        "devHostKey": {
            "reference": {
              "keyVault": {
                  "id": "/subscriptions/<mySubID>/resourceGroups/<myKvRG>/providers/Microsoft.KeyVault/vaults/<KvName>"
              },
              "secretName": "<KeyName>"
            }
        },
        "accHostKey": { .... },
        "prdHostKey": {..... }
    }

然后在我的 ARM 模板中我使用了

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "subscription": {
      "type": "string"
     },
    "env": {
      "type": "string"
     },
    "devHostKey": {
      "type": "securestring"
     },
    "accHostKey": {
      "type": "securestring"
     },
    "prdHostKey": {
      "type": "securestring"
     }
  },
  "resources":[
    {"type": "Microsoft.Web/sites/slots/host/functionKeys",
      "apiVersion": "2020-12-01",
      "name": "[concat(variables('func_name'),'/', variables('slot_name') ,'/default/default')]",
      "properties": {
        "name": "default",
        "value": "[if(equals(parameters('env'),'dev'),parameters('devHostKey'),if(equals(parameters('env'),'acc'),parameters('accHostKey'),parameters('prdHostKey')))]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/sites/slots', variables('func_name'),variables('slot_name'))]"
      ]
    }
  ]

这样我就可以将这个插槽默认插槽主机密钥部署到我所有的环境中,只需更改我的参数文件中的“env”参数,然后重新运行脚本。

希望这对以后的人有所帮助:-)