Bicep не разрешает 'foo${uniqueString(resourceGroup().id)}' при развертывании из VSCode

Я пытаюсь развернуть шаблон Bicep непосредственно из VSCode с расширением Bicep, но он постоянно терпит неудачу. Однако он отлично работает, когда я развертываю из PowerShell с помощью командлета New-AzResourceGroupDeployment. Я что-то не так делаю или это баг?

Шаблон Bicep развертывает новую учетную запись хранения и содержит следующий параметр для имени учетной записи хранения:

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

Ошибка при развертывании из VSCode

Когда я развертываю из VSCode, он не разрешается storageName автоматически и предлагает мне подтвердить это:

Я считаю, что это приглашение является неожиданным. storageName должны быть решены автоматически. Я нажимаю Enter для подтверждения. В конце концов, этот параметр должен автоматически изменяться.

И это не удается, когда я пытаюсь развернуть этот шаблон Bicep из VSCode. Вот сообщение о состоянии ошибки:

{
    "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. Это ожидаемо.

Прямо сейчас я не знаю, почему это происходит, но это похоже на ошибку в расширении Bicep для VSCode.

VSCode 1.74.3 (универсальный) на MacOS, Расширение бицепса v0.13.1.

Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
0
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, это известная ошибка. В качестве обходного пути вы можете обернуть интерполированные параметры с помощью string().

Например, измените это:

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

К этому:

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

Другие вопросы по теме