Aracılığıyla paylaş


Linter kuralı - dağıtım kaynağı yok

Bu linter kuralı, şablon kök düzeyinde bir kaynak içerdiğinde bir Microsoft.Resources/deployments uyarı gönderir.

Linter kural kodu

Kural ayarlarını özelleştirmek için Bicep yapılandırma dosyasında aşağıdaki değeri kullanın:

no-deployments-resources

Çözüm

ARM şablonlarında, kaynağı kullanarak Microsoft.Resources/deployments şablonları iç içe yerleştirerek veya bağlayarak şablonu yeniden kullanabilir veya modülerleştirebilirsiniz. Daha fazla bilgi için bkz . Azure kaynaklarını dağıtırken bağlantılı ve iç içe yerleştirilmiş şablonları kullanma Aşağıdaki ARM şablonu iç içe bir şablon örneğidir:

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

Bicep'te arm şablonlarını Microsoft.Resources/deployments iç içe yerleştirme veya dış ARM şablonlarını bağlama için kaynağı kullanmaya devam edebilirsiniz. Ancak, bu harika bir fikir değildir çünkü birden çok kez değerlendirilme şekli nedeniyle güvenli olmayan ve karmaşık davranışlara yol açabilir. Ayrıca, Bicep dosyasını yazarken Visual Studio Code'da neredeyse hiç doğrulama ve kendi kendine tamamlama işlemi yoktur ve bu da çalışmayı zorlaştırıyor. Şablon kök düzeyinde kaynak içerdiğinden Microsoft.Resources/deployments aşağıdaki Bicep dosyası bu testte başarısız oluyor.

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

Sorunu düzeltmek için Bicep CLI kod çözme komutunu kullanabilirsiniz. Örneğin, önceki ARM şablonu aşağıdaki Bicep dosyalarına dönüştürülebilir:

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

Ayrıca modül deyimini kullanarak ARM şablonlarına da başvurabilirsiniz.

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

Sonraki adımlar

Lint hakkında daha fazla bilgi için bkz . Bicep linter'i kullanma.