Teilen über


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.