Megosztás a következőn keresztül:


ARM-sablonok tesztelési esetei

Ez a cikk az Azure Resource Manager-sablonokhoz (ARM-sablonokhoz) készült sablontesztelési eszközkészlettel futtatott teszteket ismerteti. Példákat tartalmaz, amelyek sikeresek vagy sikertelenek , és tartalmazzák az egyes tesztek nevét. A tesztek futtatásával vagy egy adott teszt futtatásával kapcsolatos további információkért lásd: Tesztparaméterek.

A megfelelő séma használata

Teszt neve: DeploymentTemplate-séma helyes

A sablonban érvényes sémaértéket kell megadnia.

Az alábbi példa meghiúsul , mert a séma érvénytelen.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-01-01/deploymentTemplate.json#",
}

Az alábbi példában figyelmeztetés jelenik meg, mert a sémaverzió 2015-01-01 elavult, és nincs karbantartva.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
}

Az alábbi példa érvényes sémát használ.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
}

A sablon tulajdonságát schema a következő sémák egyikére kell beállítani:

  • https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json

Deklarált paramétereket kell használni

Teszt neve: A paraméterekre hivatkozni kell

Ez a teszt olyan paramétereket keres, amelyeket nem használnak a sablonban, vagy olyan paramétereket, amelyeket nem használnak érvényes kifejezésben.

A sablon félreértéseinek csökkentése érdekében törölje a definiált, de nem használt paramétereket. A nem használt paraméterek kiküszöbölése leegyszerűsíti a sablontelepítéseket, mert nem kell felesleges értékeket megadnia.

A Bicep-ben használja a Linter-szabályt – nincsenek fel nem használt paraméterek.

Az alábbi példa meghiúsul, mert a paraméterre hivatkozó kifejezésből hiányzik a kezdő szögletes zárójel ([).

"resources": [
  {
    "location": " parameters('location')]"
  }
]

Az alábbi példa azért halad át , mert a kifejezés érvényes.

"resources": [
  {
    "location": "[parameters('location')]"
  }
]

A biztonságos paraméterek nem rendelkezhetnek alapértelmezetten rögzített kóddal

Teszt neve: A biztonságos sztringparaméterek nem lehetnek alapértelmezettek

A sablonban ne adjon meg egy rögzített alapértelmezett értéket egy biztonságos paraméterhez. A biztonságos paraméterek alapértelmezett értékként üres sztringet tartalmazhatnak, vagy használhatják a newGuid függvényt egy kifejezésben.

Azokat a típusokat secureString vagy secureObject paramétereket használja, amelyek bizalmas értékeket, például jelszavakat tartalmaznak. Ha egy paraméter biztonságos típust használ, a paraméter értéke nincs naplózva vagy tárolva az üzembe helyezési előzményekben. Ez a művelet megakadályozza, hogy egy rosszindulatú felhasználó felderítse a bizalmas értéket.

Ha alapértelmezett értéket ad meg, ezt az értéket bárki felfedezheti, aki hozzáfér a sablonhoz vagy az üzembe helyezési előzményekhez.

A Bicepben használja a Linter-szabályt – a biztonságos paraméter alapértelmezett értékét.

Az alábbi példa meghiúsul.

"parameters": {
  "adminPassword": {
    "defaultValue": "HardcodedPassword",
    "type": "secureString"
  }
}

A következő példa átmegy.

"parameters": {
  "adminPassword": {
    "type": "secureString"
  }
}

Az alábbi példa azért halad át , mert a newGuid függvényt használja.

"parameters": {
  "secureParameter": {
    "type": "secureString",
    "defaultValue": "[newGuid()]"
  }
}

A környezeti URL-címek nem kódoltak

Teszt neve: A DeploymentTemplate nem tartalmazhat hardcoded URI-t

Ne kódos környezeti URL-címeket használjon a sablonban. Ehelyett a környezeti függvénnyel dinamikusan lekérheti ezeket az URL-címeket az üzembe helyezés során. A letiltott URL-gazdagépek listáját a tesztesetben találja.

A Bicep-ben használja a Linter-szabályt – nincs merevlemezes környezeti URL-cím.

Az alábbi példa meghiúsul, mert az URL-cím kódolt.

"variables":{
  "AzureURL":"https://management.azure.com"
}

A teszt akkor is meghiúsul , ha összefűzéssel vagy URI-val használják.

"variables":{
  "AzureSchemaURL1": "[concat('https://','gallery.azure.com')]",
  "AzureSchemaURL2": "[uri('gallery.azure.com','test')]"
}

Az alábbi példa átmegy.

"variables": {
  "AzureSchemaURL": "[environment().gallery]"
}

A hely paramétert használ

Teszt neve: A hely nem lehet hardcoded

Egy erőforrás helyének beállításához a sablonoknak rendelkezniük kell egy nevű location paraméterrel, amelynek típusa a következő: string. A fő sablonban( azuredeploy.json vagy mainTemplate.json) ez a paraméter alapértelmezés szerint az erőforráscsoport helyére állítható be. Csatolt vagy beágyazott sablonokban a helyparaméternek nem lehet alapértelmezett helye.

Előfordulhat, hogy a sablonfelhasználók korlátozott hozzáféréssel rendelkeznek azokhoz a régiókhoz, ahol erőforrásokat hozhatnak létre. A nehezen kódolt erőforrás-hely megakadályozhatja, hogy a felhasználók létrehoznak egy erőforrást. A "[resourceGroup().location]" kifejezés letilthatja a felhasználókat, ha az erőforráscsoport olyan régióban lett létrehozva, amelyhez a felhasználó nem fér hozzá. A letiltott felhasználók nem tudják használni a sablont.

Ha megad egy location alapértelmezett paramétert az erőforráscsoport helyére, a felhasználók kényelmesen használhatják az alapértelmezett értéket, de más helyet is megadhatnak.

A Bicepben használja a Linter-szabályt – a paraméter alapértelmezett értékein kívül nincs helykifejezés.

Az alábbi példa meghiúsul , mert az erőforrás location értéke resourceGroup().location.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[resourceGroup().location]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ]
}

A következő példa egy paramétert location használ, de meghiúsul, mert a paraméter alapértelmezés szerint egy szigorúan kódolt helyre van beállítva.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "westus"
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[parameters('location')]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

Az alábbi példa akkor halad át , ha a sablont használják fő sablonként. Hozzon létre egy alapértelmezett paramétert az erőforráscsoport helyére, de lehetővé teszi, hogy a felhasználók más értéket adjanak meg.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the resources."
      }
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[parameters('location')]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

Megjegyzés

Ha az előző példát csatolt sablonként használja a rendszer, a teszt sikertelen lesz. Csatolt sablonként használva távolítsa el az alapértelmezett értéket.

Az erőforrásoknak helyük kell, hogy legyen

Teszt neve: Az erőforrásoknak helyük kell, hogy legyen

Az erőforrás helyét sablonkifejezésre vagy global. A sablonkifejezés általában a locationLocation (Hely) paramétert használja.

A Bicep-ben használja a Linter-szabályt – nincs merevlemezes hely.

Az alábbi példa meghiúsul, mert a location nem kifejezés vagy global.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "functions": [],
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "westus",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

Az alábbi példa azért halad át , mert az erőforrás location értéke global.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "functions": [],
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "global",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

A következő példa azért is átmegy, mert a location paraméter egy kifejezést használ. Az erőforrás location a kifejezés értékét használja.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "Location for the resources."
      }
    }
  },
  "variables": {},
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-02-01",
      "name": "storageaccount1",
      "location": "[parameters('location')]",
      "kind": "StorageV2",
      "sku": {
        "name": "Premium_LRS",
        "tier": "Premium"
      }
    }
  ],
  "outputs": {}
}

A virtuális gép mérete paramétert használ

Teszt neve: A virtuális gép méretének paraméternek kell lennie

Ne írja be az hardwareProfile objektum kódját vmSize. A teszt meghiúsul, ha a hardwareProfile értéket nem adja meg, vagy egy kódolt értéket tartalmaz. Adjon meg egy paramétert, hogy a sablon felhasználói módosíthassák az üzembe helyezett virtuális gép méretét. További információ: Microsoft.Compute virtualMachines.

Az alábbi példa meghiúsul , mert az hardwareProfile objektum vmSize egy kemény kóddal kódolt érték.

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-12-01",
    "name": "demoVM",
    "location": "[parameters('location')]",
    "properties": {
      "hardwareProfile": {
        "vmSize": "Standard_D2_v3"
      }
    }
  }
]

A példa akkor halad át , ha egy paraméter a következő vmSizeértékét adja meg:

"parameters": {
  "vmSizeParameter": {
    "type": "string",
    "defaultValue": "Standard_D2_v3",
    "metadata": {
      "description": "Size for the virtual machine."
    }
  }
}

hardwareProfile Ezután egy kifejezést vmSize használva hivatkozzon a paraméter értékére:

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-12-01",
    "name": "demoVM",
    "location": "[parameters('location')]",
    "properties": {
      "hardwareProfile": {
        "vmSize": "[parameters('vmSizeParameter')]"
      }
    }
  }
]

A minimális és a maximális értékek számok

Teszt neve: Min és Max Value Are Numbers

Ha a és maxValueparamétert minValue adja meg, adja meg őket számként. Párként és maxValue párként kell használniaminValue, vagy a teszt sikertelen.

Az alábbi példa meghiúsul, mert minValue és maxValue sztringek.

"exampleParameter": {
  "type": "int",
  "minValue": "0",
  "maxValue": "10"
}

Az alábbi példa meghiúsul, mert csak minValue a rendszer használja.

"exampleParameter": {
  "type": "int",
  "minValue": 0
}

Az alábbi példa azért halad át , mert minValue és maxValue számok.

"exampleParameter": {
  "type": "int",
  "minValue": 0,
  "maxValue": 10
}

Az Artifacts paraméter helyesen van definiálva

Teszt neve: összetevők paramétere

Ha a és _artifactsLocationSasTokenparamétert _artifactsLocation adja meg, használja a megfelelő alapértelmezett értékeket és típusokat. A teszt elvégzéséhez a következő feltételeknek kell teljesülniük:

  • Ha egy paramétert ad meg, meg kell adnia a másikat.
  • _artifactsLocation csak egy stringlehet .
  • _artifactsLocation A fő sablonban alapértelmezett értékkel kell rendelkeznie.
  • _artifactsLocation nem lehet alapértelmezett érték beágyazott sablonban.
  • _artifactsLocation az alapértelmezett értékhez vagy a nyers adattár URL-címével kell rendelkeznie "[deployment().properties.templateLink.uri]" .
  • _artifactsLocationSasToken csak egy secureStringlehet .
  • _artifactsLocationSasToken az alapértelmezett értékhez csak egy üres sztring tartozhat.
  • _artifactsLocationSasToken nem lehet alapértelmezett érték beágyazott sablonban.

A Bicepben használja a Linter-szabályt – összetevők paramétereit.

Deklarált változókat kell használni

Teszt neve: A változókra hivatkozni kell

Ez a teszt olyan változókat keres, amelyeket nem használnak a sablonban, vagy nem használnak érvényes kifejezésben. A sablon félreértéseinek csökkentése érdekében törölje a definiált, de nem használt változókat.

Az értékek iterálására az copy elemet használó változókra kell hivatkozni. További információ: Változó iteráció ARM-sablonokban.

A Bicepben használja a Linter-szabályt – nincsenek fel nem használt változók.

Az alábbi példa meghiúsul, mert az copy elemet használó változóra nincs hivatkozás.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "itemCount": {
      "type": "int",
      "defaultValue": 5
    }
  },
  "variables": {
    "copy": [
      {
        "name": "stringArray",
        "count": "[parameters('itemCount')]",
        "input": "[concat('item', copyIndex('stringArray', 1))]"
      }
    ]
  },
  "resources": [],
  "outputs": {}
}

Az alábbi példa meghiúsul, mert a változóra hivatkozó kifejezésből hiányzik a kezdő szögletes zárójel ([).

"outputs": {
  "outputVariable": {
    "type": "string",
    "value": " variables('varExample')]"
  }
}

Az alábbi példa azért halad át, mert a változóra hivatkozik a fájlban outputs.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "itemCount": {
      "type": "int",
      "defaultValue": 5
    }
  },
  "variables": {
    "copy": [
      {
        "name": "stringArray",
        "count": "[parameters('itemCount')]",
        "input": "[concat('item', copyIndex('stringArray', 1))]"
      }
    ]
  },
  "resources": [],
  "outputs": {
    "arrayResult": {
      "type": "array",
      "value": "[variables('stringArray')]"
    }
  }
}

Az alábbi példa azért megy át, mert a kifejezés érvényes.

"outputs": {
  "outputVariable": {
    "type": "string",
    "value": "[variables('varExample')]"
  }
}

A dinamikus változó nem használhat összefűzést

Teszt neve: A dinamikus változóhivatkozások nem használhatják az összefűzést

Néha dinamikusan kell létrehoznia egy változót egy másik változó vagy paraméter értéke alapján. Ne használja az összefűző függvényt az érték beállításakor. Ehelyett használjon olyan objektumot, amely tartalmazza a rendelkezésre álló lehetőségeket, és dinamikusan lekérje az objektum egyik tulajdonságát az üzembe helyezés során.

Az alábbi példa megfelel. A currentImage változó dinamikusan van beállítva az üzembe helyezés során.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "osType": {
      "type": "string",
      "allowedValues": [
        "Windows",
        "Linux"
      ]
    }
  },
  "variables": {
    "imageOS": {
      "Windows": {
        "image": "Windows Image"
      },
      "Linux": {
        "image": "Linux Image"
      }
    },
    "currentImage": "[variables('imageOS')[parameters('osType')].image]"
  },
  "resources": [],
  "outputs": {
    "result": {
      "type": "string",
      "value": "[variables('currentImage')]"
    }
  }
}

Az API legújabb verziójának használata

Teszt neve: apiVersions – Legutóbbinak kell lennie

Az egyes erőforrások API-verziójának sztringként rögzített legutóbbi verziót kell használnia. A teszt kiértékeli a sablon API-verzióját az erőforrás-szolgáltatónak az eszközkészlet gyorsítótárában lévő verzióival. A teszt futtatásának dátumától számított két évnél régebbi API-verziót a rendszer frissnek tekinti. Ne használjon előzetes verziót, ha újabb verzió érhető el.

Egy figyelmeztetés, amely szerint egy API-verzió nem található, csak azt jelzi, hogy a verzió nem szerepel az eszközkészlet gyorsítótárában. Az API legújabb, ajánlott verziójának használatával létrehozhatja a figyelmeztetést.

További információ az eszközkészlet-gyorsítótárról.

A Bicepben használja a Linter-szabályt – használja a legutóbbi API-verziókat.

Az alábbi példa meghiúsul, mert az API-verzió több mint két éves.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2019-06-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]"
  }
]

Az alábbi példa meghiúsul, mert egy előzetes verziót használnak, ha újabb verzió érhető el.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2020-08-01-preview",
    "name": "storageaccount1",
    "location": "[parameters('location')]"
  }
]

Az alábbi példa azért megy át , mert egy friss verzió, amely nem előzetes verzió.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2021-02-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]"
  }
]

Nehezen kódolt API-verzió használata

Teszt neve: Szolgáltatók apiVersions Nem engedélyezett

Az erőforrástípus API-verziója határozza meg, hogy mely tulajdonságok érhetők el. Adjon meg egy rögzített API-verziót a sablonban. Ne kérje le az üzembe helyezés során meghatározott API-verziót, mert nem fogja tudni, hogy mely tulajdonságok érhetők el.

Az alábbi példa sikertelen.

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "[providers('Microsoft.Compute', 'virtualMachines').apiVersions[0]]",
    ...
  }
]

Az alábbi példa megfelel.

"resources": [
  {
    "type": "Microsoft.Compute/virtualMachines",
    "apiVersion": "2020-12-01",
    ...
  }
]

A tulajdonságok nem lehetnek üresek

Teszt neve: A sablon nem tartalmazhat üres elemet

Ne írja be a tulajdonságokat üres értékre. Az üres értékek közé tartoznak a null értékű és üres sztringek, objektumok vagy tömbök. Ha egy tulajdonság üres értékre van állítva, távolítsa el a tulajdonságot a sablonból. A tulajdonságot az üzembe helyezés során üres értékre állíthatja, például egy paraméterrel.

A templatebeágyazott sablon tulajdonsága üres tulajdonságokat tartalmazhat. A beágyazott sablonokkal kapcsolatos további információkért lásd: Microsoft.Resources üzembe helyezések.

Az alábbi példa meghiúsul, mert üres tulajdonságok vannak.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2021-01-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]",
    "sku": {},
    "kind": ""
  }
]

Az alábbi példa azért halad át, mert a tulajdonságok értékeket tartalmaznak.

"resources": [
  {
    "type": "Microsoft.Storage/storageAccounts",
    "apiVersion": "2021-01-01",
    "name": "storageaccount1",
    "location": "[parameters('location')]",
    "sku": {
      "name": "Standard_LRS",
      "tier": "Standard"
    },
    "kind": "Storage"
  }
]

Erőforrás-azonosító függvények használata

Teszt neve: Az azonosítókat erőforrás-azonosítókból kell származtatni

Erőforrás-azonosító megadásakor használja az erőforrás-azonosító függvények egyikét. Az engedélyezett függvények a következők:

Ne használja az összefűző függvényt erőforrás-azonosító létrehozásához.

A Bicepben használja a Linter-szabályt – használja az erőforrás-azonosító függvényeket.

Az alábbi példa sikertelen.

"networkSecurityGroup": {
    "id": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/networkSecurityGroups/', variables('networkSecurityGroupName'))]"
}

A következő példa átmegy.

"networkSecurityGroup": {
    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

A ResourceId függvény helyes paraméterekkel rendelkezik

Teszt neve: A ResourceId-azonosítók nem tartalmazhatnak

Erőforrás-azonosítók létrehozásakor ne használjon szükségtelen függvényeket opcionális paraméterekhez. Alapértelmezés szerint a resourceId függvény az aktuális előfizetést és erőforráscsoportot használja. Ezeket az értékeket nem kell megadnia.

Az alábbi példa meghiúsul , mert nem kell megadnia az aktuális előfizetés-azonosítót és erőforráscsoport-nevet.

"networkSecurityGroup": {
    "id": "[resourceId(subscription().subscriptionId, resourceGroup().name, 'Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

A következő példa átmegy.

"networkSecurityGroup": {
    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

Ez a teszt a következőkre vonatkozik:

A reference és list*esetében a teszt meghiúsul , amikor az erőforrás-azonosító létrehozásához használja concat .

dependsOn ajánlott eljárások

Teszt neve: A DependsOn ajánlott eljárásai

Az üzembehelyezési függőségek beállításakor ne használja az if függvényt egy feltétel teszteléséhez. Ha egy erőforrás feltételesen üzembe helyezett erőforrástól függ, állítsa be a függőséget úgy, ahogyan bármely erőforrás esetében tenné. Ha egy feltételes erőforrás nincs üzembe helyezve, az Azure Resource Manager automatikusan eltávolítja azt a szükséges függőségekből.

Az dependsOn elem nem kezdődhet összefűző függvénnyel.

A Bicepben használja a Linter-szabályt – nincs felesleges dependsOn bejegyzés.

Az alábbi példa meghiúsul , mert egy függvényt if tartalmaz.

"dependsOn": [
  "[if(equals(parameters('newOrExisting'),'new'), variables('storageAccountName'), '')]"
]

Az alábbi példa meghiúsul , mert a következővel concatkezdődik: .

"dependsOn": [
  "[concat(variables('storageAccountName'))]"
]

Az alábbi példa megfelel.

"dependsOn": [
  "[variables('storageAccountName')]"
]

A beágyazott vagy csatolt üzemelő példányok nem használhatnak hibakeresést

Teszt neve: Az üzembehelyezési erőforrások nem lehetnek hibakeresések

Ha beágyazott vagy csatolt sablont definiál az erőforrástípussal, engedélyezheti a Microsoft.Resources/deploymentshibakeresést. A hibakeresés akkor használatos, ha tesztelnie kell egy sablont, de bizalmas információkat tehet közzé. A sablon éles környezetben való használata előtt kapcsolja ki a hibakeresést. Eltávolíthatja az debugSetting objektumot, vagy módosíthatja a tulajdonságot a detailLevel következőre: none.

Az alábbi példa sikertelen.

"debugSetting": {
  "detailLevel": "requestContent"
}

Az alábbi példa megfelel.

"debugSetting": {
  "detailLevel": "none"
}

Rendszergazda felhasználónevek nem lehetnek literálértékek

Teszt neve: adminUsername Nem lehet literál

A beállításakor adminUserNamene használjon literális értéket. Hozzon létre egy paramétert a felhasználónévhez, és használjon egy kifejezést a paraméter értékére való hivatkozáshoz.

A Bicepben használja a Linter-szabályt – a rendszergazdai felhasználónév nem lehet literál.

Az alábbi példa literálértékkel meghiúsul .

"osProfile":  {
  "adminUserName": "myAdmin"
}

Az alábbi példa egy kifejezéssel halad át .

"osProfile": {
  "adminUsername": "[parameters('adminUsername')]"
}

A legújabb virtuálisgép-rendszerkép használata

Teszt neve: A virtuálisgép-rendszerképek a legújabb verziót használják

Ez a teszt le van tiltva, de a kimenet azt mutatja, hogy sikeres volt. Az ajánlott eljárás az, hogy ellenőrizze a sablont az alábbi feltételek alapján:

Ha a sablon tartalmaz egy rendszerképet tartalmazó virtuális gépet, győződjön meg arról, hogy a rendszerkép legújabb verzióját használja.

A Bicep-ben használja a Linter-szabályt – használjon stabil virtuálisgép-lemezképet.

Stabil virtuálisgép-rendszerképek használata

Teszt neve: Virtual Machines nem lehet előzetes verzió

A virtuális gépek nem használhatnak előzetes verziójú képeket. A teszt ellenőrzi, storageProfile hogy a imageReference nem használ-e előzetes verziót tartalmazó sztringet. És ez az előnézet nem használatos a imageReference tulajdonságokban offer, skuvagy version.

A tulajdonságról további információt a Microsoft.Compute virtualMachines és a imageReferenceMicrosoft.Compute virtualMachineScaleSets című témakörben talál.

A Bicep-ben használja a Linter-szabályt – használjon stabil virtuálisgép-lemezképet.

Az alábbi példa meghiúsul , mert imageReference egy előzetes verziót tartalmazó sztring.

"properties": {
  "storageProfile": {
    "imageReference": "latest-preview"
  }
}

Az alábbi példa meghiúsul, ha előzetes verziót használ a , skuvagy versiona fájlbanoffer.

"properties": {
  "storageProfile": {
    "imageReference": {
      "publisher": "Canonical",
      "offer": "UbuntuServer_preview",
      "sku": "16.04-LTS-preview",
      "version": "preview"
    }
  }
}

Az alábbi példa átmegy.

"storageProfile": {
  "imageReference": {
    "publisher": "Canonical",
    "offer": "UbuntuServer",
    "sku": "16.04-LTS",
    "version": "latest"
  }
}

Ne használja a ManagedIdentity bővítményt

Teszt neve: A ManagedIdentityExtension nem használható

Ne alkalmazza a bővítményt ManagedIdentity egy virtuális gépre. A bővítmény 2019-ben elavult, és a továbbiakban nem használható.

A kimenetek nem tartalmazhatnak titkos kulcsokat

Teszt neve: A kimenetek nem tartalmazhatnak titkos kódokat

Ne tartalmazzon olyan értékeket a szakaszban, amelyek potenciálisan felfedik a outputs titkos kulcsokat. Ilyenek például a típus vagy secureObjecta secureString , vagy lista* típusú paraméterek, például listKeysa .

A sablon kimenete az üzembe helyezési előzményekben van tárolva, így egy rosszindulatú felhasználó megtalálhatja ezeket az információkat.

A Bicep-ben használja a Linter-szabályt – a kimenetek nem tartalmazhatnak titkos kódokat.

Az alábbi példa meghiúsul , mert egy biztonságos paramétert tartalmaz egy kimeneti értékben.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "secureParam": {
      "type": "secureString"
    }
  },
  "functions": [],
  "variables": {},
  "resources": [],
  "outputs": {
    "badResult": {
      "type": "string",
      "value": "[concat('this is the value ', parameters('secureParam'))]"
    }
  }
}

Az alábbi példa meghiúsul , mert lista* függvényt használ a kimenetekben.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "storageName": {
      "type": "string"
    }
  },
  "functions": [],
  "variables": {},
  "resources": [],
  "outputs": {
    "badResult": {
      "type": "object",
      "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2021-02-01')]"
    }
  }
}

A protectedSettings használata a commandToExecute titkos kódokhoz

Teszt neve: A CommandToExecute-nek védett beállításokat kell használnia a titkos kódokhoz

A típussal CustomScriptrendelkező erőforrások esetében használja a titkosított protectedSettings kódot, ha commandToExecute titkos adatokat, például jelszót tartalmaz. A titkos adatok például használhatók olyan biztonságos paraméterekben, mint a vagy a lista* függvények secureStringsecureObject, például listKeysa , vagy az egyéni szkriptek.

Ne használjon titkos adatokat az settings objektumban, mert világos szöveget használ. További információ: Microsoft.Compute virtualMachines/extensions, Windows vagy Linux.

A Bicep-ben használja a Linter-szabályt – használja a protectedSettings parancsotToExecute titkos kódokhoz.

Az alábbi példa meghiúsul, mert settings biztonságos paraméterrel használja commandToExecute .

"parameters": {
  "adminPassword": {
    "type": "secureString"
  }
}
...
"properties": {
  "type": "CustomScript",
  "settings": {
    "commandToExecute": "[parameters('adminPassword')]"
  }
}

Az alábbi példa meghiúsul, mert settings függvényt listKeys használcommandToExecute.

"properties": {
  "type": "CustomScript",
  "settings": {
    "commandToExecute": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2021-02-01')]"
  }
}

Az alábbi példa azért halad át, mert protectedSettings biztonságos paraméterrel használja commandToExecute .

"parameters": {
  "adminPassword": {
    "type": "secureString"
  }
}
...
"properties": {
  "type": "CustomScript",
  "protectedSettings": {
    "commandToExecute": "[parameters('adminPassword')]"
  }
}

Az alábbi példa azért halad át, mert protectedSettings függvényt listKeys használcommandToExecute.

"properties": {
  "type": "CustomScript",
  "protectedSettings": {
    "commandToExecute": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2021-02-01')]"
  }
}

A legutóbbi API-verziók használata referenciafüggvényekben

Teszt neve: apiVersions A referenciafüggvényekben a legutóbbiaknak kell lenniük

A referenciafüggvényekben használt API-verziónak nem előzetes verziónak, hanem frissnek kell lennie. A teszt kiértékeli a sablon API-verzióját az eszközkészlet gyorsítótárában található erőforrás-szolgáltató verzióival. A teszt futtatásától számított két évnél régebbi API-verziót a rendszer frissnek tekinti.

Egy figyelmeztetés, amely szerint egy API-verzió nem található, csak azt jelzi, hogy a verzió nem szerepel az eszközkészlet gyorsítótárában. Az API legújabb, ajánlott verziójának használata generálhatja a figyelmeztetést.

További információ az eszközkészlet-gyorsítótárról.

Az alábbi példa meghiúsul, mert az API-verzió több mint kétéves.

"outputs": {
  "stgAcct": {
    "type": "string",
    "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2019-06-01')]"
  }
}

Az alábbi példa meghiúsul, mert az API-verzió egy előzetes verzió.

"outputs": {
  "stgAcct": {
    "type": "string",
    "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2020-08-01-preview')]"
  }
}

Az alábbi példa azért halad át , mert az API-verzió kevesebb, mint kétéves, és nem előzetes verzió.

"outputs": {
  "stgAcct": {
    "type": "string",
    "value": "[reference(resourceId(parameters('storageResourceGroup'), 'Microsoft.Storage/storageAccounts', parameters('storageAccountName')), '2021-02-01')]"
  }
}

Típus és név használata a resourceId függvényekben

Teszt neve: Az erőforrások nem lehetnek kétértelműek

Ez a teszt le van tiltva, de a kimenet azt mutatja, hogy sikeres volt. Az ajánlott eljárás az, hogy ellenőrizze a sablont az alábbi feltételek alapján:

Az erőforrásazonosítónak tartalmaznia kell egy erőforrástípust és egy erőforrásnevet. Ez a teszt megkeresi a sablon összes függvényét resourceId , és ellenőrzi, hogy az erőforrást a megfelelő szintaxissal használja-e a sablonban. Ellenkező esetben a függvény nem egyértelmű.

Egy függvény például resourceId nem egyértelmű:

  • Ha nem található erőforrás a sablonban, és nincs megadva erőforráscsoport.
  • Ha egy erőforrás feltételt tartalmaz, és nincs megadva erőforráscsoport.
  • Ha egy kapcsolódó erőforrás tartalmaz néhány, de nem az összes névszegmenst. A gyermekerőforrás például egynél több névszegmenst tartalmaz. További információ: resourceId-megjegyzések.

Belső hatókör használata beágyazott üzembehelyezési biztonságos paraméterekhez

Teszt neve: Biztonságos paramok beágyazott üzemelő példányokban

A beágyazott sablon hatókörrel rendelkező objektumával expressionEvaluationOptionsinner kiértékelheti azokat a kifejezéseket, amelyek olyan biztonságos paramétereket tartalmaznak, mint listKeyspéldául a típus secureString vagy secureObjectlista* függvények. Ha a hatókört használja, a outer rendszer világos szövegben értékeli ki a kifejezéseket a szülősablon hatókörén belül. A biztonságos érték ezután bárki számára látható lesz, aki hozzáfér az üzembehelyezési előzményekhez. Az alapértelmezett érték a expressionEvaluationOptions .outer

A beágyazott sablonokról további információt a Microsoft.Resources üzembe helyezési és kifejezésértékelési hatóköre beágyazott sablonokban című témakörben talál.

A Bicepben használja a Linter-szabályt – biztonságos paramokat a beágyazott üzembe helyezésben.

Az alábbi példa meghiúsul, mert expressionEvaluationOptions hatókör használatával outer értékeli ki a biztonságos paramétereket vagy list* függvényeket.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2021-04-01",
    "name": "nestedTemplate",
    "properties": {
      "expressionEvaluationOptions": {
        "scope": "outer"
      }
    }
  }
]

Az alábbi példa azért halad át, mert expressionEvaluationOptions hatókör használatával inner értékeli ki a biztonságos paramétereket vagy list* függvényeket.

"resources": [
  {
    "type": "Microsoft.Resources/deployments",
    "apiVersion": "2021-04-01",
    "name": "nestedTemplate",
    "properties": {
      "expressionEvaluationOptions": {
        "scope": "inner"
      }
    }
  }
]

Következő lépések