Condividi tramite


Variabili in Bicep

Questo articolo descrive come definire e usare le variabili nel file Bicep. Le variabili vengono usate per semplificare lo sviluppo di file Bicep. Anziché ripetere espressioni complesse in tutto il file Bicep, si definisce una variabile che contiene l'espressione complessa. Usare quindi tale variabile in base alle esigenze nel file Bicep.

Resource Manager risolve le variabili prima di avviare le operazioni di distribuzione. Ovunque la variabile venga usata nel file Bicep, Resource Manager la sostituisce con il valore risolto.

Sono limitate a 256 variabili in un file Bicep. Per ulteriori informazioni, vedere Limiti dei modelli.

Definire variabile

La sintassi per la definizione di una variabile è:

var <variable-name> = <variable-value>

Una variabile non può avere lo stesso nome di un parametro, un modulo o una risorsa.

Si noti che non si specifica un tipo di dati per la variabile. Il tipo viene dedotto dal valore. Nell'esempio seguente viene impostata una variabile su una stringa.

var stringVar = 'example value'

È possibile usare il valore di un parametro o di un'altra variabile durante la costruzione della variabile.

param inputValue string = 'deployment parameter'

var stringVar = 'preset variable'
var concatToVar =  '${stringVar}AddToVar'
var concatToParam = '${inputValue}AddToParam'

output addToVar string = concatToVar
output addToParam string = concatToParam

L'esempio precedente restituisce:

{
  "addToParam": {
    "type": "String",
    "value": "deployment parameterAddToParam"
  },
  "addToVar": {
    "type": "String",
    "value": "preset variableAddToVar"
  }
}

È possibile usare le funzioni Bicep per costruire il valore della variabile. Nell'esempio seguente vengono usate le funzioni Bicep per creare un valore stringa per un nome di account di archiviazione.

param storageNamePrefix string = 'stg'
var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

output uniqueStorageName string = storageName

L'esempio precedente restituisce un valore simile al seguente:

"uniqueStorageName": {
  "type": "String",
  "value": "stghzuunrvapn6sw"
}

È possibile usare cicli iterativi durante la definizione di una variabile. Nell'esempio seguente viene creata una matrice di oggetti con tre proprietà.

param itemCount int = 3

var objectArray = [for i in range(0, itemCount): {
  name: 'myDataDisk${(i + 1)}'
  diskSizeGB: '1'
  diskIndex: i
}]

output arrayResult array = objectArray

L'output restituisce una matrice con i valori seguenti:

[
  {
    "name": "myDataDisk1",
    "diskSizeGB": "1",
    "diskIndex": 0
  },
  {
    "name": "myDataDisk2",
    "diskSizeGB": "1",
    "diskIndex": 1
  },
  {
    "name": "myDataDisk3",
    "diskSizeGB": "1",
    "diskIndex": 2
  }
]

Per altre informazioni sui tipi di cicli che è possibile usare con le variabili, vedere Cicli iterativi in Bicep.

Usare la variabile

Nell'esempio seguente viene illustrato come usare la variabile per una proprietà della risorsa. Per fare riferimento al valore della variabile, specificare il nome della variabile: storageName.

param rgLocation string
param storageNamePrefix string = 'STG'

var storageName = '${toLower(storageNamePrefix)}${uniqueString(resourceGroup().id)}'

resource demoAccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: storageName
  location: rgLocation
  kind: 'Storage'
  sku: {
    name: 'Standard_LRS'
  }
}

output stgOutput string = storageName

Poiché i nomi degli account di archiviazione devono usare lettere minuscole, la variabile storageName usa la funzione toLower per impostare il valore storageNamePrefix in lettere minuscole. La funzione uniqueString crea un valore univoco dall'ID del gruppo di risorse. I valori vengono concatenati a una stringa.

Variabili di configurazione

È possibile definire variabili che contengono valori correlati per la configurazione di un ambiente. La variabile viene definita come oggetto con i valori. Nell'esempio seguente viene illustrato un oggetto che contiene valori per due ambienti: test e prod. Passare uno di questi valori durante la distribuzione.

@allowed([
  'test'
  'prod'
])
param environmentName string

var environmentSettings = {
  test: {
    instanceSize: 'Small'
    instanceCount: 1
  }
  prod: {
    instanceSize: 'Large'
    instanceCount: 4
  }
}

output instanceSize string = environmentSettings[environmentName].instanceSize
output instanceCount int = environmentSettings[environmentName].instanceCount

Passaggi successivi