Linter-Regel: Keine Bereitstellungsressourcen
Diese Linter-Regel gibt eine Warnung aus, wenn eine Vorlage eine Microsoft.Resources/deployments
-Ressource auf der Stammebene enthält.
Linter-Regelcode
Verwenden Sie den folgenden Wert in der Bicep-Konfigurationsdatei, um die Regeleinstellungen anzupassen:
no-deployments-resources
Lösung
In ARM-Vorlagen können Sie eine Vorlage mithilfe der Microsoft.Resources/deployments
Ressource wiederverwenden oder modularisieren, indem Sie Vorlagen verschachteln oder verknüpfen. Weitere Informationen finden Sie unter Verwenden von verknüpften und geschachtelten Vorlagen beim Bereitstellen von Azure-Ressourcen Die folgende ARM-Vorlage ist ein Beispiel für eine geschachtelte Vorlage:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('{0}{1}', 'store', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2024-03-01",
"name": "nestedTemplate1",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-04-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
]
}
}
}
]
}
In Bicep können Sie die Microsoft.Resources/deployments
Ressource weiterhin zum Verschachteln von ARM-Vorlagen oder zum Verknüpfen externer ARM-Vorlagen verwenden. Aber es ist keine gute Idee, weil sie aufgrund der mehrfachen Auswertung zu unsicheren und schwierigen Verhaltensweisen führen kann. Außerdem gibt es kaum eine Überprüfung und Selbsterledigung aus Visual Studio Code, wenn Sie die Bicep-Datei erstellen, was die Arbeit mit schwierig macht. Die folgende Bicep-Datei schlägt diesen Test fehl, da die Vorlage Ressourcen auf der Stammebene enthält Microsoft.Resources/deployments
.
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param location string = resourceGroup().location
resource nestedTemplate1 'Microsoft.Resources/deployments@2024-03-01' = {
name: 'nestedTemplate1'
properties:{
mode: 'Incremental'
template: {
'$schema': 'https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#'
contentVersion: '1.0.0.0'
resources: [
{
type: 'Microsoft.Storage/storageAccounts'
apiVersion: '2023-04-01'
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
]
}
}
}
Um das Problem zu beheben, können Sie den Befehl Bicep CLI dekompilieren . Die vorangehende ARM-Vorlage kann beispielsweise in die folgenden Bicep-Dateien dekompiliert werden:
main.bicep:
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param location string = resourceGroup().location
module nestedTemplate1 './nested_nestedTemplate1.bicep' = {
name: 'nestedTemplate1'
params: {
storageAccountName: storageAccountName
location: location
}
}
nested_nestedTemplate1.bicep:
param storageAccountName string
param location string
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
name: storageAccountName
location: location
sku: {
name: 'Standard_LRS'
}
kind: 'StorageV2'
}
Darüber hinaus können Sie mithilfe der Modul-Anweisung auch auf ARM-Vorlagen verweisen.
main.bicep:
param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param location string = resourceGroup().location
module nestedTemplate1 './createStorage.json' = {
name: 'nestedTemplate1'
params: {
storageAccountName: storageAccountName
location: location
}
}
createStorage.json:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"storageAccountName": {
"type": "string",
"defaultValue": "[format('{0}{1}', 'store', uniqueString(resourceGroup().id))]"
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
}
},
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2023-04-01",
"name": "[parameters('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "StorageV2"
}
]
}
Nächste Schritte
Weitere Informationen über den Linter finden Sie unter Verwendung des Bicep-Linters.