我有一个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
答案 0 :(得分:0)
根据您的描述,我测试了您的工作流程,发现它只发生过一次。
之后,相同的请求可以按预期工作。
根据我的理解,这可能是您猜测的一个短暂问题。此外,请确保您的功能可以按预期工作。此外,为了生成函数的每个功能键而不是使用默认主机密钥,您还可以利用ARM REST API(例如https://{functionappname}.azurewebsites.net/admin/functions/{functionname}/keys/{keyname}
)为现有功能创建新的功能键。
有关创建功能键的详细命令,您可以遵循类似的issue。