在Powershell中获取Azure功能的功能和主机密钥

Roh*_*1.0 7 powershell azure

我使用Arm模板部署了Azure功能.我需要在Powershell中部署Azure功能的功能键和主机密钥.目前我正在尝试从ARM模板的输出部分获取密钥

 "outputs": {
"FunctionAppName": {
  "type": "string",
  "value": "[variables('functionAppName')]"
},
"Key": {
  "type": "string",
  "value": "[listKeys(resourceId('Microsoft.Web/sites', '[variables('functionAppName')]'),'2015-08-01').keys]"
}
Run Code Online (Sandbox Code Playgroud)

}

我尝试了不同的组合,但它失败了.有没有办法在Powershell中检索密钥?

小智 13

我使用以下方法使其工作:

    "outputs": {
    "FunctionAppName": {
        "type": "string",
        "value": "[parameters('functionName')]"
    },
    "Key": {
        "type": "string",
        "value": "[listsecrets(resourceId('Microsoft.Web/sites/functions', parameters('existingFunctionAppName'), parameters('functionName')),'2015-08-01').key]"
    },        
    "Url": {
        "type": "string",
        "value": "[listsecrets(resourceId('Microsoft.Web/sites/functions', parameters('existingFunctionAppName'), parameters('functionName')),'2015-08-01').trigger_url]"
    }        
}
Run Code Online (Sandbox Code Playgroud)

我也找不到任何例子.但是通过使用上面的内容,GitHub上的快速入门示例以及资源函数的文档以及一些试验和错误,我得到了它.

请注意变量/参数和名称已更改.

  • ARM模板如何知道函数应用程序中存在哪些函数?如果直到 ARM 模板运行后才部署代码(以便将其部署到某个地方)? (2认同)

Rob*_*eer 8

我无法获得可接受的答案来检索默认主机密钥。@4c74356b41 的答案非常接近。您可以使用下面的代码取出钥匙。默认主机密钥将在Outputs.functionKeys.Value.functionKeys.default.Value.

  "outputs": {
    "functionKeys": {
      "type": "object",
      "value": "[listkeys(concat(resourceId('Microsoft.Web/sites', variables('functionAppName')), '/host/default'), '2018-11-01')]"
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,这是 V2 运行时的正确答案,而 V1 使用“listsecrets”。今年早些时候,这让我抓狂了一段时间,尤其是当我第一次尝试这样做时,API 版本似乎还没有发布。 (4认同)

Jea*_*mit 5

问题似乎没有得到解答,因为它请求从 Powershell 而不是 ARM 模板获取功能键。我使用下面的脚本从 Azure DevOps 中的 Powershell 获取功能密钥。

$accountInfo = az account show
$accountInfoObject = $accountInfo | ConvertFrom-Json
$subscriptionId  = $accountInfoObject.id

$resourceGroup = "your-resource-group"
$functionName = "your-function-name"

$functionkeylist = az rest --method post --uri "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/Microsoft.Web/sites/$functionName/host/default/listKeys?api-version=2018-11-01"
$keylistobject = $functionkeylist | ConvertFrom-Json
$functionKey = $keylistobject.functionKeys.default
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • 另请参阅此处 /sf/answers/4344069411/,了解我见过的最干净的 Az Powershell 单行代码 `Get-AzResource -Name RESOURCE-NAME | Invoke-AzResourceAction -Action host/default/listkeys -Force` (3认同)