Bagikan melalui


Aturan Linter - tidak ada sumber daya penyebaran

Aturan linter ini mengeluarkan peringatan saat templat berisi Microsoft.Resources/deployments sumber daya pada tingkat akar.

Kode aturan linter

Gunakan nilai berikut pada file konfigurasi Bicep untuk menyesuaikan pengaturan aturan:

no-deployments-resources

Solusi

Di templat ARM, Anda dapat menggunakan kembali atau memodulasi templat melalui templat berlapis atau menautkan menggunakan Microsoft.Resources/deployments sumber daya. Untuk informasi selengkapnya, lihat Menggunakan templat tertaut dan berlapis saat menyebarkan sumber daya Azure Templat ARM berikut ini adalah sampel templat berlapis:

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

Di Bicep, Anda masih dapat menggunakan Microsoft.Resources/deployments sumber daya untuk menyarangkan templat ARM atau menautkan templat ARM eksternal. Tapi, ini bukan ide yang bagus karena dapat menyebabkan perilaku yang tidak aman dan sulit karena bagaimana hal itu dievaluasi beberapa kali. Selain itu, hampir tidak ada validasi dan penyelesaian diri dari Visual Studio Code saat Anda menulis file Bicep, sehingga sulit untuk dikerjakan. File Bicep berikut gagal dalam pengujian ini karena templat berisi Microsoft.Resources/deployments sumber daya pada tingkat akar.

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

Untuk memperbaiki masalah ini, Anda dapat menggunakan perintah dekompilasi Bicep CLI. Misalnya, templat ARM sebelumnya dapat diurai ke dalam file Bicep berikut:

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

Selain itu, Anda juga dapat mereferensikan templat ARM menggunakan pernyataan modul .

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

Langkah berikutnya

Untuk informasi selengkapnya tentang linter, lihat Menggunakan linter Bicep.