Règle de linter – aucune ressource de déploiement
Cette règle de linter émet un avertissement quand un modèle contient une ressource Microsoft.Resources/deployments
au niveau racine.
Code de règle de linter
Utilisez la valeur suivante dans le fichier config Bicep pour personnaliser les paramètres de règle :
no-deployments-resources
Solution
Dans les modèles ARM, vous pouvez réutiliser ou modulariser un modèle via l’imbrication ou la liaison de modèles à l’aide de la Microsoft.Resources/deployments
ressource. Pour plus d’informations, consultez Utilisation de modèles liés et imbriqués lors du déploiement de ressources Azure Le modèle ARM suivant est un exemple de modèle imbriqué :
{
"$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"
}
]
}
}
}
]
}
Dans Bicep, vous pouvez toujours utiliser la Microsoft.Resources/deployments
ressource pour imbriquer des modèles ARM ou lier des modèles ARM externes. Mais ce n’est pas une bonne idée, car cela peut entraîner des comportements dangereux et difficiles en raison de la façon dont il est évalué plusieurs fois. En outre, il n’y a pas de validation et d’auto-achèvement à partir de Visual Studio Code lorsque vous créez le fichier Bicep, ce qui rend difficile l’utilisation. Le fichier Bicep suivant échoue ce test, car le modèle contient Microsoft.Resources/deployments
une ressource au niveau racine.
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'
}
]
}
}
}
Pour résoudre le problème, vous pouvez utiliser la commande decompile cli Bicep. Par exemple, le modèle ARM précédent peut être décomplié dans les fichiers Bicep suivants :
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'
}
En outre, vous pouvez également référencer des modèles ARM à l’aide de l’instruction de module .
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"
}
]
}
Étapes suivantes
Pour plus d’informations sur le linter, consultez Utiliser le linter Bicep.