使用AZ PowerShell获取功能URL

时间:2020-06-29 15:54:34

标签: azure powershell azure-powershell

在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后,我注意到listsecretstrigger_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

第二次尝试

接下来,我尝试结合使用listkeysfunctions来获取功能键。我知道对于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。

1 个答案:

答案 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

enter image description here

如果触发器在插槽中,请更改此行 $FunctionApp = Get-AzWebApp -ResourceGroupName $GroupName -Name $FunctionAppName$FunctionApp = Get-AzWebAppSlot -ResourceGroupName $GroupName -Name $FunctionAppName -Slot <slotname>

enter image description here

更新

我在一边测试了自定义路线,我的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

enter image description here