リンター ルール - デプロイ リソースなし
このリンター ルールでは、テンプレートにルート レベルの Microsoft.Resources/deployments
リソースが含まれているときに警告を発行します。
リンター ルールのコード
ルール設定をカスタマイズするには、Bicep 構成ファイルで次の値を使用します。
no-deployments-resources
解決策
ARM テンプレートでは、 Microsoft.Resources/deployments
リソースを使用してテンプレートを入れ子またはリンクすることで、テンプレートを再利用またはモジュール化できます。 詳細については、「 Azure リソースをデプロイするときにリンクされたテンプレートと入れ子になったテンプレートを使用する」を参照してください 次の ARM テンプレートは、入れ子になったテンプレートのサンプルです。
{
"$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 では、ARM テンプレートを入れ子にしたり、外部 ARM テンプレートをリンクしたりするために、 Microsoft.Resources/deployments
リソースを引き続き使用できます。 しかし、複数回評価される方法により、安全でトリッキーな動作につながる可能性があるため、これは素晴らしいアイデアではありません。 また、Bicep ファイルを作成するときに、Visual Studio Code からの検証と自己補完がほとんどないため、操作が困難になります。 次の Bicep ファイルは、テンプレートにルート レベルのリソース 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'
}
]
}
}
}
この問題を解決するには、Bicep CLI decompile コマンドを使用します。 たとえば、上記の ARM テンプレートは、次の Bicep ファイルに逆コンパイルできます。
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'
}
さらに、 module ステートメントを使用して ARM テンプレートを参照することもできます。
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"
}
]
}
次のステップ
リンターの詳細については、「Bicep リンターの使用方法」を参照してください。