Muster für Konfigurationssatz
Anstatt viele einzelne Parameter zu definieren, erstellen Sie vordefinierte Wertesätze. Wählen Sie während der Bereitstellung den zu verwendenden Wertesatz aus.
Kontext und Problem
Eine einzelne Bicep-Datei definiert häufig viele Ressourcen. Jede Ressource muss abhängig von der Umgebung, in der Sie sie bereitstellen, möglicherweise eine andere Konfiguration verwenden. Beispielsweise können Sie eine Bicep-Datei erstellen, die einen App Service-Plan und eine App sowie ein Speicherkonto bereitgestellt. Jede dieser Ressourcen verfügt über mehrere Optionen, die sich auf deren Kosten, Verfügbarkeit und Resilienz auswirken. Für Produktionsumgebungen sollten Sie einen Konfigurationssatz mit der Priorisierung für Hochverfügbarkeit und Resilienz verwenden. Für Nicht-Produktionsumgebungen sollten Sie einen anderen Konfigurationssatz verwenden, der die Kostenreduzierung priorisiert.
Sie können Parameter für jede Konfigurationseinstellung erstellen, allerdings hat dieser Ansatz einige Nachteile:
- Dieser Ansatz macht es den Vorlagenbenutzer etwas aufwändiger, da sie die Werte, die für jede Ressource verwendet werden sollen, und die Auswirkungen der einzelnen Parametereinstellungen verstehen müssen.
- Die Anzahl der Parameter in Ihrer Vorlage erhöht sich mit jeder neuen Ressource, die Sie definieren.
- Benutzer können Kombinationen von Parameterwerten auswählen, die nicht getestet wurden oder nicht ordnungsgemäß funktionieren.
Lösung
Erstellen Sie einen einzelnen Parameter, um den Umgebungstyp anzugeben. Verwenden Sie eine Variable, um die Konfiguration für jede Ressource basierend auf dem Wert des Parameters automatisch auszuwählen.
Hinweis
Dieser Ansatz wird manchmal als Aufwandsschätzung mit T-Shirt-Größen (T-shirt sizing) bezeichnet. Wenn Sie ein T-Shirt kaufen, haben Sie für Länge, Breite, Ärmel usw. nicht viele Optionen. Sie wählen einfach zwischen kleinen, mittleren und großen Größen und der Designer des T-Shirts hat diese Maße basierend auf diesen Größen vordefiniert.
Beispiel
Angenommen, Sie verfügen über eine Vorlage, die in zwei Arten von Umgebungen bereitgestellt werden kann: Nichtproduktion und Produktion. Je nach Umgebungstyp ist die Konfiguration, die Sie benötigen, anders:
Eigenschaft | Nichtproduktionsumgebungen | Produktionsumgebungen |
---|---|---|
App Service-Plan | ||
SKU-Name | S2 | P2V3 |
Kapazität (Anzahl von Instanzen) | 1 | 3 |
App Service-App | ||
Always On | Disabled | Aktiviert |
Speicherkonto | ||
SKU-Name | Standard_LRS | Standard_ZRS |
Sie können das Konfigurationssatzmuster für diese Vorlage verwenden.
Akzeptieren Sie einen einzelnen Parameter, der den Umgebungstyp angibt, z. B. Produktion oder Nichtproduktion. Verwenden Sie den Parameterdecorator @allowed
, um sicherzustellen, dass die Benutzer Ihrer Vorlage nur die Werte angeben, die Sie erwarten:
@allowed([
'Production'
'NonProduction'
])
param environmentType string = 'NonProduction'
Erstellen Sie dann eine Zuordnungsvariable, bei der es sich um ein Objekt handelt, das die spezifische Konfiguration abhängig vom Umgebungstyp definiert. Beachten Sie, dass die Variable über zwei Objekte mit dem Namen Production
und NonProduction
verfügt. Diese Namen stimmen mit den zulässigen Werten für den Parameter im vorherigen Beispiel überein:
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'
}
}
}
}
Wenn Sie die Ressourcen definieren, verwenden Sie die Konfigurationszuordnung, um die Ressourceneigenschaften zu definieren:
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
}
Weitere Überlegungen
- Ziehen Sie es in Betracht, die Eigenschaften in Ihrer Zuordnungsvariablen nach Ressource zu gruppieren, um deren Definition zu vereinfachen.
- In Ihrer Zuordnungsvariablen können Sie sowohl einzelne Eigenschaftswerte (wie die
alwaysOn
-Eigenschaft im Beispiel) als auch Objektvariablen definieren, die eine Objekteigenschaft festlegen (wie die SKU-Eigenschaften im Beispiel). - Ziehen Sie es in Betracht, einen Konfigurationssatz mit Ressourcenbedingungen zu verwenden. Dadurch kann Ihr Bicep-Code bestimmte Ressourcen für bestimmte Umgebungen bereitstellen, und für andere nicht.
Nächste Schritte
Erfahren Sie mehr über das Dateimuster für freigegebene Variablen.