从 VSCode 部署时,Bicep 无法解析“foo${uniqueString(resourceGroup().id)}”

问题描述 投票:0回答:2

我尝试使用 Bicep 扩展直接从 VSCode 部署 Bicep 模板,但始终失败。不过,当我使用

New-AzResourceGroupDeployment
cmdlet 从 PowerShell 进行部署时,它工作正常。是我做错了什么还是bug?

Bicep 模板部署新的存储帐户并包含以下存储帐户名称参数:

param storageName string = 'mystorage${uniqueString(resourceGroup().id)}'

从 VSCode 部署时出错

当我从 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 中工作正常

当我从 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.

azure powershell visual-studio-code azure-resource-manager azure-bicep
2个回答
0
投票

这似乎是一个“已知错误”。作为解决方法,您可以使用 string() 包装插值参数。

例如,更改此:

param storageName string = 'mystorage${uniqueString(resourceGroup().id)}'

对此:

param storageName string = string('mystorage${uniqueString(resourceGroup().id)}')



0
投票

您可以在名称参数上方添加装饰器 @minLength(3) 和 @maxLength(24)。

© www.soinside.com 2019 - 2024. All rights reserved.