Megosztás a következőn keresztül:


Linter szabály – nincsenek üzembehelyezési erőforrások

Ez a linterszabály figyelmeztetést ad ki, ha egy sablon gyökérszinten tartalmaz erőforrást Microsoft.Resources/deployments .

Linter-szabály kódja

A bicep-konfigurációs fájlban a következő érték használatával szabhatja testre a szabálybeállításokat:

no-deployments-resources

Megoldás

AZ ARM-sablonokban újra felhasználhatja vagy modulárissá teheti a sablonokat a sablonok beágyazásával vagy csatolásával az Microsoft.Resources/deployments erőforrás használatával. További információ: Csatolt és beágyazott sablonok használata Azure-erőforrások üzembe helyezésekor Az alábbi ARM-sablon egy beágyazott sablon mintája:

{
  "$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": "2022-09-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-01-01",
              "name": "[parameters('storageAccountName')]",
              "location": "[parameters('location')]",
              "sku": {
                "name": "Standard_LRS"
              },
              "kind": "StorageV2"
            }
          ]
        }
      }
    }
  ]
}

A Bicepben továbbra is használhatja az erőforrást ARM-sablonok Microsoft.Resources/deployments beágyazására vagy külső ARM-sablonok összekapcsolására. Ez azonban nem jó ötlet, mert veszélyes és trükkös viselkedéshez vezethet, mivel többször is kiértékelik. Emellett a Bicep-fájl létrehozásakor a Visual Studio Code alig végez ellenőrzést és önkiteljesítést, ami megnehezíti a munka elvégzését. A következő Bicep-fájl nem felel meg a tesztnek, mert a sablon gyökérszinten tartalmaz Microsoft.Resources/deployments erőforrást.

param storageAccountName string = 'store${uniqueString(resourceGroup().id)}'
param location string = resourceGroup().location

resource nestedTemplate1 'Microsoft.Resources/deployments@2023-07-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-01-01'
          name: storageAccountName
          location: location
          sku: {
            name: 'Standard_LRS'
          }
          kind: 'StorageV2'
        }
      ]
    }    
  }
}

A probléma megoldásához használhatja a Bicep CLI felbontási parancsát. Az előző ARM-sablon például a következő Bicep-fájlokra bontható:

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-01-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

Emellett az ARM-sablonokat a modulutasítás használatával is át is használhatja.

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-01-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2"
    }
  ]
}

Következő lépések

A linterről további információt a Bicep-linter használata című témakörben talál.