Delen via


Linter-regel - geen implementatieresources

Deze linter-regel geeft een waarschuwing wanneer een sjabloon een Microsoft.Resources/deployments resource op het hoofdniveau bevat.

Linter-regelcode

Gebruik de volgende waarde in het Bicep-configuratiebestand om regelinstellingen aan te passen:

no-deployments-resources

Oplossing

In ARM-sjablonen kunt u een sjabloon opnieuw gebruiken of modulariseren door sjablonen te nesten of te koppelen met behulp van de Microsoft.Resources/deployments resource. Zie Gekoppelde en geneste sjablonen gebruiken bij het implementeren van Azure-resources De volgende ARM-sjabloon is een voorbeeld van een geneste sjabloon voor meer informatie:

{
  "$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 kunt u nog steeds de resource gebruiken voor het Microsoft.Resources/deployments nesten van ARM-sjablonen of het koppelen van externe ARM-sjablonen. Maar het is geen goed idee omdat het kan leiden tot onveilig en lastig gedrag vanwege hoe het meerdere keren wordt geƫvalueerd. Bovendien is er nauwelijks validatie en zelfvoltooiing van Visual Studio Code wanneer u het Bicep-bestand ontwerpt, waardoor het moeilijk is om mee te werken. Het volgende Bicep-bestand mislukt deze test omdat de sjabloon een resource op het hoofdniveau bevat 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'
        }
      ]
    }    
  }
}

U kunt het probleem oplossen met de bicep CLI-decompile-opdracht. De voorgaande ARM-sjabloon kan bijvoorbeeld worden nageleefd in de volgende Bicep-bestanden:

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'
}

Daarnaast kunt u ook verwijzen naar ARM-sjablonen met behulp van de module-instructie .

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"
    }
  ]
}

Volgende stappen

Zie Bicep linter gebruiken voor meer informatie over de linter.