在PowerShell中,我试图检索Function App的调用URL和键。经过几个小时的尝试,我在调用URL方面遇到了一堵砖墙。真的有可能吗?
由于Microsoft一直不愿提供与az rest
相同的内容,因此我一直在研究Invoke-AzResourceAction
,其文档内容如下-
Invoke-AzResourceAction cmdlet调用对指定Azure资源的操作。若要获取受支持的操作的列表,请使用Azure资源浏览器工具。
使用Azure Resource Explorer tool一段时间后,我意识到它并不是真的很有帮助,所以我开始寻找其他选项并发现Get-AzProviderOperation
Get-AzProviderOperation获取Azure资源提供者公开的操作。
使用上面的命令,我可以看到有三个可用的操作-
Operation OperationName ProviderNamespace ResourceName Description IsDataAction
--------- ------------- ----------------- ------------ ----------- ------------
microsoft.web/sites/functions/action Functions Web Apps Microsoft Web Apps Web App Functions Web Apps. False
microsoft.web/sites/functions/listsecrets/action List Web Apps Functions Secrets Microsoft Web Apps Web Apps Functions List Function secrets. False
microsoft.web/sites/functions/listkeys/action List Web Apps Functions Keys Microsoft Web Apps Web Apps Functions List Function keys. False
最初我很乐意使用listsecrets
操作,但是在将具有自定义路由的功能添加到我的Function App后,我注意到listsecrets
在trigger_url
中不遵循该自定义路由财产,所以我不得不放弃使用它。
$functionApp = Get-AzWebAppSlot -Name $FunctionAppName -ResourceGroup $ResourceGroupName -Slot $Slot
$functionApp | Format-List
$functionKey = Invoke-AzResourceAction -ResourceId ("{0}/functions/{1}" -f $functionApp.Id, $FunctionName) -Action "listsecrets" -ApiVersion "2019-08-01" -Force
接下来,我尝试结合使用listkeys
和functions
来获取功能键。我知道对于REST API,在查询函数时可以在properties.invoke_url_template
处找到调用URL,因此我希望在这里也能找到。 las ...
Invoke-AzResourceAction -ResourceId(“ {0} / functions -f $ functionApp.Id)-Action $ FunctionName -ApiVersion” 2019-08-01“ -Force
没有为'/ api / functions / Health?api-version = 2019-08-01'注册的路由
在这种情况下,很可能我没有正确实现Invoke-AzResourceAction
(今天以前从未使用过)。
除了缺少与az rest
的等效项之外,AZ PowerShell还缺少与az-account-get-access-token
的等效项。这意味着我无法获取令牌并仅查询REST API。
答案 0 :(得分:2)
正如我在评论中提到的那样,如果要获取函数(触发)URL(包括函数键),则可以使用下面的命令,$FunctionURL
是您想要的。
$FunctionAppName = "joyfun"
$GroupName = "xxxxx"
$TriggerName = "HttpTrigger1"
$FunctionApp = Get-AzWebApp -ResourceGroupName $GroupName -Name $FunctionAppName
$Id = $FunctionApp.Id
$DefaultHostName = $FunctionApp.DefaultHostName
$FunctionKey = (Invoke-AzResourceAction -ResourceId "$Id/functions/$TriggerName" -Action listkeys -Force).default
$FunctionURL = "https://" + $DefaultHostName + "/api/" + $TriggerName + "?code=" + $FunctionKey
如果触发器在插槽中,请更改此行
$FunctionApp = Get-AzWebApp -ResourceGroupName $GroupName -Name $FunctionAppName
至$FunctionApp = Get-AzWebAppSlot -ResourceGroupName $GroupName -Name $FunctionAppName -Slot <slotname>
。
更新:
我在一边测试了自定义路线,我的host.json
代码段如下所示。
{
"extensions": {
"http": {
"routePrefix": "api/Health",
}
}
}
您可以使用下面的命令。
$FunctionAppName = "joyfun"
$GroupName = "xxxxx"
$TriggerName = "HttpTrigger1"
$FunctionApp = Get-AzWebApp -ResourceGroupName $GroupName -Name $FunctionAppName
$Id = $FunctionApp.Id
$DefaultHostName = $FunctionApp.DefaultHostName
$FunctionKey = (Invoke-AzResourceAction -ResourceId "$Id/functions/$TriggerName" -Action listkeys -Force).default
$invokeurl = (Get-AzResource -ResourceId "$Id/functions" | Where-Object {$_.Name -eq "$FunctionAppName/$TriggerName"}).Properties.invoke_url_template
$FunctionURL = $invokeurl + "?code=" + $FunctionKey