azure az bot创建命令失败,请求正文中的参数“schemaTransformationVersion”设置为“0.0”-为什么会发生这种情况?如何修复?

k97glaaz  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(96)

我正在尝试让命令az bot create在docker容器中运行。更具体地说,这是完整的命令:

az bot create `
    --app-type $appType `
    --appid $appInfo.AppId `
    --name $botName `
    --resource-group $resourceGroupName `
    --endpoint $messagingEndpoint `
    --sku $sku

其中$appType等于"MultiTenant"; $appInfo.AppId来自于对有效应用注册及其对象id使用命令Get-AzADApplication;将$botName设置为"TestingScriptBot"; $resourceGroupName设置为有效资源组的名称; $messagingEndpoint被设置为有效URL;将$sku设置为"FO"
但是,我在Docker容器中收到了一个相当奇怪的错误:

(InvalidBotData) Bot is not valid. Errors: The schema transformation version is not supported.  See https://docs.microsoft.com/azure/bot-service/bot-service-resources-bot-framework-faq?view=azure-bot-service-4.0 for detailed requirements.
Code: InvalidBotData
Message: Bot is not valid. Errors: The schema transformation version is not supported.  See https://docs.microsoft.com/azure/bot-service/bot-service-resources-bot-framework-faq?view=azure-bot-service-4.0 for detailed requirements.

此外,当在上述命令上启用--debug标志时,我注意到以下参数“请求主体内的schemaTransformationVersion"被设置为"0.0"

cli.azure.cli.core.sdk.policies: Request body:
cli.azure.cli.core.sdk.policies: {"location": "global", "sku": {"name": "F0"}, "kind": "azurebot", "properties": {"displayName": "AutomationTestingScriptBot", "iconUrl": "", "endpoint": <working_endpoint>, "msaAppType": "MultiTenant", "msaAppId": <working_app_id>, "isCmekEnabled": false, "publicNetworkAccess": "Enabled", "isStreamingSupported": false, "schemaTransformationVersion": "0.0"}}

但是,当我在本地运行相同的命令时,此参数甚至不在请求正文中。az bot create命令甚至不允许我更改此参数-因此我有点不知所措。我也尝试过使用不同版本的Azure CLI重新构建容器(从2.38.0开始到最新版本的2.43.0),并且发生相同的行为。
由于我最初认为这是模块版本问题,我尝试使用不同版本的Powershell和Azure CLI重新构建容器。此外,我还尝试了不同版本的Python。
我还尝试使用租户ID登录到每个相应的客户端(Powershell和Azure CLI),因为我有一个共享令牌/刷新令牌警告-但这似乎也没有帮助。
不管我尝试了什么,都发生了同样的错误。
这个命令一直在Docker容器中为我工作,直到最近--上周五(12/2/22)是我重建容器时,这个行为开始了。
因此,我不太明白为什么此参数突然出现在此命令的请求主体中,并且目前不知道如何修复它。我认为这可能是模块版本问题,但在使用不同版本的Azure CLI并更新容器内的软件后,我不太确定如何/为什么会出现此行为,以及我需要做些什么来修复它。

以下是我拥有的所有版本/软件包:

Docker容器正在以下列版本执行:Alpine Linux v3.16 .
我正在运行最新版本的Powershell:7.3.0 .
我正在运行最新版本的Azure CLI:

{               
  "azure-cli": "2.43.0",
  "azure-cli-core": "2.43.0",
  "azure-cli-telemetry": "1.0.8",
  "extensions": {}
}

我通过Install-Module -name Az安装了最新版本的Az模块,通过Install-Module -Name Az.BotService安装了最新版本的Az.BotService模块。
我安装了libffi和OpenSSL版本1.1.1s
我安装了Python版本3.10.8
这是我一直在测试的powershell脚本:

$appInfo = Get-AzADApplication -ObjectId <valid_obj_id>

$appType = "MultiTenant"
$botName = "TestingScriptBot"
$resourceGroupName = <valid_resource_group_name>
$messagingEndpoint = <valid_endpoint>
$sku = "F0"

az bot create `
    --app-type $appType `
    --appid $appInfo.AppId `
    --name $botName `
    --resource-group $resourceGroupName `
    --endpoint $messagingEndpoint `
    --sku $sku `
    --debug

我在本地和Docker容器内运行相同的脚本,并在启用--debug标志的情况下比较了命令,从两个输出的文本比较中,我看到的两个主要差异是:
1.请求正文中的“schemaTransformationVersion"”参数设置为"0.0"-但仅当命令在Docker容器中运行时-当命令在本地运行时,此参数不在命令的请求正文中

  1. docker容器在使用az bot create命令发出请求之前使用auth令牌,而local使用刷新令牌-尽管我不怀疑这是导致问题的原因,因为过去当命令在docker容器中为我工作时就发生过这种情况
    如果需要更多的信息,请告诉我。
o4tp2gmn

o4tp2gmn1#

再研究一下,我能够找到一个确实有效的替代解决方案。当然,我不喜欢这个解决方案,因为它感觉有点像黑客,但我认为它可以坚持,直到我可以进一步挖掘az bot create命令出了什么问题。
在做了更多的研究之后,我想我可能知道这个问题,或者这是我注意到的另一个不同之处。2021-05-01-preview。另一方面,运行此命令时的Docker容器api版本是2022-06-15-preview
因此,我使用了az rest命令,其请求url(包括api版本)与local相同,并且使用了与local相同的body。结果,bot创建对我很有效。这确实允许我避免az bot create命令的失败。下面是我测试的脚本,它允许我对az bot create做我想做的事情:

$body = '{\"location\": \"global\", \"sku\": {\"name\": \"F0\"}, \"kind\": \"azurebot\", \"properties\": {\"displayName\": \"TestingScriptBot\", \"endpoint\": \"<valid_endpoint>\", \"msaAppType\": \"MultiTenant\", \"msaAppId\": \"<valid_app_id>\", \"isCmekEnabled\": false, \"publicNetworkAccess\": \"Enabled\", \"isStreamingSupported\": false}}'

$uri = "/subscriptions/<subscription_id>/resourceGroups/<resoure_group_name>/providers/Microsoft.BotService/botServices/<bot_name>?api-version=2021-05-01-preview"

az rest --uri $uri `
    --method put `
    --body $body `
    --debug

注意你可能需要根据你使用的操作系统来调整你的json主体。这个特定的主体在我的macos上工作。为了让它在docker容器中工作,我删除了转义字符(json主体中每个双引号前面的\)。

然而,我不认为使用az rest是解决这个问题的一个很好的解决方案,我仍然希望了解为什么az bot create命令在Docker容器中失败。
到目前为止,我的猜测是,请求URL中的API版本差异可能是包含“schemaTransformationVersion”参数的原因,并且该参数具有无效值,特别是因为我无法控制此命令中的该参数值。
有人知道我是否可以更改Azure CLI命令使用的API版本吗?因为如果可能的话,我希望使用较旧的API版本来测试az bot create命令,而不仅仅是模仿我希望通过az rest进行的调用。

相关问题