Modello set di configurazione
Invece di definire un numero elevato di singoli parametri, creare set predefiniti di valori. Durante la distribuzione, selezionare il set di valori da usare.
Contesto e problema
Un singolo file Bicep spesso definisce molte risorse. Ogni risorsa potrebbe dover usare una configurazione diversa a seconda dell'ambiente in cui viene distribuita. Ad esempio, è possibile compilare un file Bicep che distribuisce un piano di Servizio app e un'app e un account di archiviazione. Ognuna di queste risorse include più opzioni che influiscono sui costi, sulla disponibilità e sulla resilienza. Per gli ambienti di produzione, si desidera usare un set di configurazioni che assegnano priorità alla disponibilità elevata e alla resilienza. Per gli ambienti non di produzione, si desidera usare un set diverso di configurazione che assegna priorità alla riduzione dei costi.
È possibile creare parametri per ogni impostazione di configurazione, ma questo approccio presenta alcuni svantaggi:
- Questo approccio crea un carico per gli utenti del modello, poiché è necessario comprendere i valori da usare per ogni risorsa e l'impatto dell'impostazione di ogni parametro.
- Il numero di parametri nel modello aumenta con ogni nuova risorsa definita.
- Gli utenti possono selezionare combinazioni di valori di parametro che non sono stati testati o che non funzioneranno correttamente.
Soluzione
Creare un singolo parametro per specificare il tipo di ambiente. Usare una variabile per selezionare automaticamente la configurazione per ogni risorsa in base al valore del parametro.
Nota
Questo approccio viene a volte definito dimensionamento di tipo t-shirt. Quando si acquista una t-shirt, non si ottiene un sacco di opzioni per la sua lunghezza, larghezza, maniche e così via. È sufficiente scegliere tra piccole, medie e grandi dimensioni, e il designer di t-shirt ha predefinito tali misurazioni in base a tale dimensione.
Esempio
Si supponga di avere un modello che può essere distribuito in due tipi di ambiente: non di produzione e produzione. A seconda del tipo di ambiente, la configurazione necessaria è diversa:
Proprietà | Ambienti di non-produzione | Ambienti di produzione |
---|---|---|
Piano di servizio app | ||
Nome SKU | S2 | P2V3 |
Capacità (numero di istanze) | 1 | 3 |
App del Servizio app | ||
Funzionamento continuo | Disabled | Attivata |
Account di archiviazione | ||
Nome SKU | Standard_LRS | Standard_ZRS |
È possibile usare il modello di set di configurazione per questo modello.
Accettare un singolo parametro che indica il tipo di ambiente, ad esempio produzione o non di produzione. Usare il decorator del parametro @allowed
per assicurarsi che gli utenti del modello forniscano solo valori previsti:
@allowed([
'Production'
'NonProduction'
])
param environmentType string = 'NonProduction'
Creare quindi una variabiledi mappa, ovvero un oggetto che definisce la configurazione specifica a seconda del tipo di ambiente. Si noti che la variabile ha due oggetti denominati Production
e NonProduction
. Questi nomi corrispondono ai valori consentiti per il parametro nell'esempio precedente:
var environmentConfigurationMap = {
Production: {
appServicePlan: {
sku: {
name: 'P2V3'
capacity: 3
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_ZRS'
}
}
}
NonProduction: {
appServicePlan: {
sku: {
name: 'S2'
capacity: 1
}
}
appServiceApp: {
alwaysOn: false
}
storageAccount: {
sku: {
name: 'Standard_LRS'
}
}
}
}
Quando si definiscono le risorse, usare la mappa di configurazione per definire le proprietà delle risorse:
resource appServicePlan 'Microsoft.Web/serverfarms@2022-09-01' = {
name: appServicePlanName
location: location
sku: environmentConfigurationMap[environmentType].appServicePlan.sku
}
resource appServiceApp 'Microsoft.Web/sites@2022-09-01' = {
name: appServiceAppName
location: location
properties: {
serverFarmId: appServicePlan.id
httpsOnly: true
siteConfig: {
alwaysOn: environmentConfigurationMap[environmentType].appServiceApp.alwaysOn
}
}
}
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
kind: 'StorageV2'
sku: environmentConfigurationMap[environmentType].storageAccount.sku
}
Considerazioni
- Nella variabile della mappa prendere in considerazione la possibilità di raggruppare le proprietà in base alla risorsa per semplificare la definizione.
- Nella variabile della mappa è possibile definire entrambi i singoli valori di proprietà (ad esempio la proprietà
alwaysOn
nell'esempio) o le variabili oggetto che impostano una proprietà dell'oggetto, ad esempio le proprietà SKU dell'esempio. - Prendere in considerazione l'uso di un set di configurazione con condizioni delle risorse. In questo modo il codice Bicep può distribuire determinate risorse per ambienti specifici e non in altri.
Passaggi successivi
Informazioni sul criterio per il file di variabili condivise.