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.