我正在尝试让命令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容器中运行时-当命令在本地运行时,此参数不在命令的请求正文中
- docker容器在使用
az bot create
命令发出请求之前使用auth令牌,而local使用刷新令牌-尽管我不怀疑这是导致问题的原因,因为过去当命令在docker容器中为我工作时就发生过这种情况
如果需要更多的信息,请告诉我。
1条答案
按热度按时间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
做我想做的事情:注意你可能需要根据你使用的操作系统来调整你的json主体。这个特定的主体在我的macos上工作。为了让它在docker容器中工作,我删除了转义字符(json主体中每个双引号前面的
\
)。然而,我不认为使用
az rest
是解决这个问题的一个很好的解决方案,我仍然希望了解为什么az bot create
命令在Docker容器中失败。到目前为止,我的猜测是,请求URL中的API版本差异可能是包含“schemaTransformationVersion”参数的原因,并且该参数具有无效值,特别是因为我无法控制此命令中的该参数值。
有人知道我是否可以更改Azure CLI命令使用的API版本吗?因为如果可能的话,我希望使用较旧的API版本来测试
az bot create
命令,而不仅仅是模仿我希望通过az rest
进行的调用。