我尝试使用 Bicep 扩展直接从 VSCode 部署 Bicep 模板,但始终失败。不过,当我使用
New-AzResourceGroupDeployment
cmdlet 从 PowerShell 进行部署时,它工作正常。是我做错了什么还是bug?
Bicep 模板部署新的存储帐户并包含以下存储帐户名称参数:
param storageName string = 'mystorage${uniqueString(resourceGroup().id)}'
当我从 VSCode 部署时,它不会自动解析
storageName
并提示我确认:
我相信这个提示是出乎意料的。
storageName
应该会自动解决。我按 Enter 确认。毕竟这个参数应该会自动解析。
当我尝试从 VSCode 部署此 Bicep 模板时,它失败了。这是错误状态消息:
{
"status": "Failed",
"error": {
"code": "AccountNameInvalid",
"message": "[format('mystorage{0}', uniqueString(resourceGroup().id))] is not a valid storage account name. Storage account name must be between 3 and 24 characters in length and use numbers and lower-case letters only."
}
}
据我所知,由于某种原因,
storageName
参数未解析为实际字符串(请参阅输出的最后一行)。所以预计 ARM 不会让我部署这个模板。
Get-AzResourceGroupDeployment -ResourceGroupName VSCodeBicepTest-RG -Name MyTestDeployment-FAILS
DeploymentName : MyTestDeployment-FAILS
ResourceGroupName : VSCodeBicepTest-RG
ProvisioningState : Failed
Timestamp : 19/01/2023 19:56:37
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
location String "northeurope"
storageName String "[format('mystorage{0}', uniqueString(resourceGroup().id))]"
当我从 PowerShell 部署模板时,一切似乎都很好。部署成功:
New-AzResourceGroupDeployment -Name MyTestDeployment-SUCCEEDS -ResourceGroupName VSCodeBicepTest-RG -TemplateFile ./sample-template.bicep
DeploymentName : MyTestDeployment-SUCCEEDS
ResourceGroupName : VSCodeBicepTest-RG
ProvisioningState : Succeeded
Timestamp : 19/01/2023 19:56:16
Mode : Incremental
TemplateLink :
Parameters :
Name Type Value
=============== ========================= ==========
location String "northeurope"
storageName String "mystoragedcgcd6nvj5tje"
如您所见,
storageName
参数已正确解析为字符串mystoragedcgcd6nvj5tje
。这是预料之中的。
现在,我不知道为什么会发生这种情况,但它看起来像是 VSCode 的 Bicep 扩展中的一个错误。
MacOS 上的 VSCode 1.74.3(通用), 二头肌伸展 v0.13.1.
这似乎是一个“已知错误”。作为解决方法,您可以使用 string()
包装插值参数。
param storageName string = 'mystorage${uniqueString(resourceGroup().id)}'
对此:
param storageName string = string('mystorage${uniqueString(resourceGroup().id)}')
您可以在名称参数上方添加装饰器 @minLength(3) 和 @maxLength(24)。