二头肌:仅当资源不存在时如何有条件地部署资源

Woj*_*Zet 5 azure azure-storage azure-resource-manager azure-bicep

我有以下问题:我想部署存储帐户,但前提是它不存在。

我使用 az cli 部署脚本检查是否存在:

resource checkStorageAccountExistence 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'checkStorageAccountExistenceScript'
  location: location
  kind: 'AzurePowerShell'
  identity: identity
  properties: {
    arguments: '-storageAccountName \'${string(name)}\' -resourceGroupName \'${string(resourceGroupName)}\''
    azPowerShellVersion: '3.0'
    scriptContent: '''
      param([string]$storageAccountName, [string]$resourceGroupName)
      $provisioningState = az storage account show --name $storageAccountName --resource-group $resourceGroupName --output tsv --query 'provisioningState' 
      if ($provisioningState -eq "Succeeded") {$output = $true} else {$output = $false}
      Write-Output $output
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['storageAccountExists'] = $output
    '''
    forceUpdateTag: utcValue
    retentionInterval: 'P1D'
  }
}
Run Code Online (Sandbox Code Playgroud)

我想部署有条件的存储帐户:

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (checkStorageAccountExistence.properties.outputs.storageAccountExists == true){
}
Run Code Online (Sandbox Code Playgroud)

但我收到错误:

该表达式在 if 条件表达式中使用,该表达式需要一个可以在部署开始时计算的值。可以在开始时计算的 checkStorageAccountExistence 的属性包括“apiVersion”、“id”、“name”、“type”.bicep(BCP177)

Tho*_*mas 3

您可以在模块中创建存储帐户:

// storage-account.bicep

param exists bool
param name string
param location string

...

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = if (!exists) {
  name: name
  location: location
  ...
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

// main.bicep

resource checkStorageAccountExistence 'Microsoft.Resources/deploymentScripts@2020-10-01' = {
  name: 'checkStorageAccountExistenceScript'
  location: location
  kind: 'AzurePowerShell'
  identity: identity
  properties: {
    arguments: '-storageAccountName \'${string(name)}\' -resourceGroupName \'${string(resourceGroupName)}\''
    azPowerShellVersion: '3.0'
    scriptContent: '''
      param([string]$storageAccountName, [string]$resourceGroupName)
      $provisioningState = az storage account show --name $storageAccountName --resource-group $resourceGroupName --output tsv --query 'provisioningState' 
      if ($provisioningState -eq "Succeeded") {$output = $true} else {$output = $false}
      Write-Output $output
      $DeploymentScriptOutputs = @{}
      $DeploymentScriptOutputs['storageAccountExists'] = $output
    '''
    forceUpdateTag: utcValue
    retentionInterval: 'P1D'
  }
}

module storageAccount 'storage-account.bicep' = {
  name: 'storage-account'
  params: {
    exists: checkStorageAccountExistence.properties.outputs.storageAccountExists
    location: location
    name: name
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)