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 512 variabili in un file Bicep. Per altre informazioni, vedere Limiti dei modelli.

Definire le variabili

La sintassi per la definizione di una variabile è:

@<decorator>(<argument>)
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 elementi Decorator

Gli elementi Decorator vengono scritti nel formato @expression e vengono posizionati sopra le dichiarazioni di variabile. Nella tabella seguente vengono indicati gli elementi Decorator disponibili per le variabili.

Decorator Argomento Descrizione
description stringa Consente di fornire descrizioni per la variabile.
export Nessuno Indica che la variabile è disponibile per l'importazione da un altro file Bicep.

I decorator si trovano nello spazio dei nomi sys. Se è necessario distinguere un decorator da un altro elemento con lo stesso nome, anteporre al decorator con sys. Ad esempio, se il file Bicep include una variabile denominata description, è necessario aggiungere lo spazio dei nomi sys quando si usa l'elemento Decorator description.

Descrizione

Per specificare una spiegazione, aggiungere un elemento description alla dichiarazione della variabile. Ad esempio:

@description('Create a unique storage account name.')
var storageAccountName = uniqueString(resourceGroup().id)

Il testo in formato Markdown può essere usato come testo dell'elemento description.

Esportazione

Usare @export() per condividere la variabile con altri file Bicep. Per altre informazioni, vedere Esportare variabili, tipi e funzioni.

Usare le variabili

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@2023-04-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 includono i valori correlati per la configurazione di un ambiente. La variabile viene definita come oggetto con i valori. Nell'esempio seguente si illustra un oggetto che include i valori per due ambienti: test e prod. Specificare 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