使用PowerShell脚本

时间:2018-01-19 10:23:45

标签: c# azure azure-functions

我有一个http触发的azure函数,我需要在部署期间填充其功能键。我目前正在尝试使用给定here的过程来获取功能键(只是调用主机键API而不是调用功能键API /admin/functions/$functionName/keys?code=$masterKey)。我只要使用KUDU zip API将压缩的功能代码上传到功能应用程序,就会调用API。

我面临的问题是,在尝试设置功能应用程序的应用程序设置时,我收到了错误

  

Invoke-RestMethod:{" id":" 643ea0b3-5ffe-4683-a8d3-62daec8c8db9"," requestId":" ec5461d6-57bc -45dd-b3ac-358602cfa94c""的StatusCode" 500"的errorCode":0,"消息":"   值不能为空。\ r \ n参数名称:source"}

但是当我在本地尝试时,这是有效的。当我进行REST调用以获取功能键并因此导致错误时,我怀疑该功能尚未部署。错误消息是什么意思,我该如何解决?这是一个短暂的问题吗?

更新:代码段

function get_credentials($resourceGroupName, $functionAppName){
$creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName `
-ResourceType Microsoft.Web/sites/config -ResourceName "$functionAppName/publishingcredentials" `
-Action list -ApiVersion 2015-08-01 -Force

$username = $creds.Properties.PublishingUserName
$password = $creds.Properties.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
return $base64AuthInfo
}
function get_master_key($kuduAuthToken, $functionAppName ){
    Write-Host "KUDU token is $kuduAuthToken"
    $apiUrl = "https://$functionAppName.scm.azurewebsites.net/api/functions/admin/masterkey"
    $result = Invoke-RestMethod -Uri $apiUrl -Headers @{"Authorization"="Basic $kuduAuthToken";"If-Match"="*"} 
    $masterKey = $result.masterKey
    Write-Host "master key is $masterKey"
    return $masterKey
}

function get_function_key($functionAppName, $functionName, $masterKey ){

    $apiUrl = "https://$functionAppName.azurewebsites.net/admin/functions/$functionName/keys?code=$masterKey"
    Write-Host "Calling $apiUrl"
    $result = Invoke-RestMethod -Uri $apiUrl 
    Write-Host "Result is $result"
    return $result.keys[0].value
    Write-Host "host token is $result"
}
$authToken = get_credentials $resourceGroupName $functionAppName
$masterKey = get_master_key $authToken $functionAppName
get_function_key $functionAppName $purgeFunctionName $masterKey

1 个答案:

答案 0 :(得分:0)

根据您的描述,我测试了您的工作流程,发现它只发生过一次。

enter image description here

之后,相同的请求可以按预期工作。

enter image description here

根据我的理解,这可能是您猜测的一个短暂问题。此外,请确保您的功能可以按预期工作。此外,为了生成函数的每个功能键而不是使用默认主机密钥,您还可以利用ARM REST API(例如https://{functionappname}.azurewebsites.net/admin/functions/{functionname}/keys/{keyname})为现有功能创建新的功能键。

enter image description here

有关创建功能键的详细命令,您可以遵循类似的issue