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 a teszt sikeres vagy sikertelen végrehajtására , és tartalmazza az egyes tesztek nevét. A tesztek futtatásával vagy egy adott teszt futtatásával kapcsolatos további információkért tekintse meg a tesztparamétereket.
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
az alábbi 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 keveredésének 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
Ne adjon meg egy rögzített alapértelmezett értéket a sablonban lévő 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 nem naplózva vagy tárolva lesz 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 Bicep-ben használja a Linter-szabályt – a biztonságos paraméter alapértelmezése.
Az alábbi példa sikertelen.
"parameters": {
"adminPassword": {
"defaultValue": "HardcodedPassword",
"type": "secureString"
}
}
A következő példa átmegy.
"parameters": {
"adminPassword": {
"type": "secureString"
}
}
Az alábbi példa a függvény használata miatt newGuid
halad át.
"parameters": {
"secureParameter": {
"type": "secureString",
"defaultValue": "[newGuid()]"
}
}
A környezeti URL-címek nem kódolhatók keményen
Teszt neve: A DeploymentTemplate nem tartalmazhat hardcoded URI-t
A sablonban ne kódoljon szigorú környezeti URL-címeket. Ehelyett használja a környezeti függvényt ezeknek az URL-címeknek a dinamikus lekérésére 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 rögzített 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 áthalad.
"variables": {
"AzureSchemaURL": "[environment().gallery]"
}
A hely paramétert használ
Teszt neve: A hely nem lehet hardcoded
Az erőforrás helyének beállításához a sablonoknak rendelkezniük kell egy paraméterrel location
, 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.
A sablonfelhasználók korlátozott hozzáféréssel rendelkezhetnek 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 egy alapértelmezett paramétert location
ad meg 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 Bicep-ben használja a Linter-szabályt – a paraméter alapértelmezett értékein kívül nincs helykifejezés.
A következő 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 sikertelen, mert a paraméter alapértelmezés szerint egy rögzített 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": {}
}
Feljegyzés
Ha az előző példát csatolt sablonként használja, a teszt sikertelen lesz. Csatolt sablonként használva távolítsa el az alapértelmezett értéket.
Az erőforrásoknak helyüknek kell lennie
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 location
Location paraméterben leírt paramétert használja.
A Bicep-ben használja a Linter-szabályt – nincsenek rögzített helyek.
Az alábbi példa meghiúsul, mert nem location
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
a következő.
{
"$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 kódozza be az hardwareProfile
objektumot vmSize
. A teszt sikertelen lesz, ha a rendszer kihagyja, hardwareProfile
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 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 , amikor egy paraméter megad egy értéket a következőhöz vmSize
:
"parameters": {
"vmSizeParameter": {
"type": "string",
"defaultValue": "Standard_D2_v3",
"metadata": {
"description": "Size for the virtual machine."
}
}
}
hardwareProfile
Ezután egy kifejezéssel vmSize
hivatkozhat 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: A minimális és a maximális érték szám
Amikor egy paramétert ad minValue
meg, és maxValue
számként adja meg őket. Párként és maxValue
párként kell használniaminValue
, vagy a teszt meghiúsul.
Az alábbi példa meghiúsul, mert maxValue
minValue
sztringek.
"exampleParameter": {
"type": "int",
"minValue": "0",
"maxValue": "10"
}
A következő 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
maxValue
számok.
"exampleParameter": {
"type": "int",
"minValue": 0,
"maxValue": 10
}
Az Összetevők paraméter helyesen van definiálva
Teszt neve: összetevők paramétere
Ha paramétereket _artifactsLocation
ad meg és _artifactsLocationSasToken
használ, 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
a .-nakstring
kell lennie._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
a .-naksecureString
kell lennie._artifactsLocationSasToken
az alapértelmezett értékhez csak üres sztring tartozhat._artifactsLocationSasToken
nem lehet alapértelmezett érték beágyazott sablonban.
A Bicep-ben 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 keveredésének 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 Bicep-ben használja a Linter-szabályt – nincsenek fel nem használt változók.
Az alábbi példa meghiúsul , mert az elemet használó copy
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": {}
}
A következő 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üggvény.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 halad á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 egy objektumot, amely tartalmazza a rendelkezésre álló lehetőségeket, és dinamikusan kérje le az objektum egyik tulajdonságát az üzembe helyezés során.
Az alábbi példa áthalad. 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 Legyen friss
Az egyes erőforrások API-verziójának sztringként kódolt 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á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.
Figyelmeztetés, amely szerint az 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 létrehozhatja a figyelmeztetést.
További információ az eszközkészlet-gyorsítótárról.
A Bicep-ben 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 újabb verziójú verziót használ a rendszer.
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2020-08-01-preview",
"name": "storageaccount1",
"location": "[parameters('location')]"
}
]
Az alábbi példa azért halad át , mert az egy friss verzió, amely nem előzetes verzió.
"resources": [
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-02-01",
"name": "storageaccount1",
"location": "[parameters('location')]"
}
]
A kódolt API-verzió használata
Teszt neve: A szolgáltatók apiVersions nem engedélyezettek
Az erőforrástípus API-verziója határozza meg, hogy mely tulajdonságok érhetők el. Adjon meg egy kemény kóddal rendelkező 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 áthalad.
"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 é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 be, például egy paraméteren keresztül.
A template
beágyazott sablon tulajdonsága üres tulajdonságokat tartalmazhat. A beágyazott sablonokról további információt a Microsoft.Resources üzembe helyezései című témakörben talál.
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 resourceID-ekből kell származtatni
Erőforrás-azonosító megadásakor használja az erőforrás-azonosító egyik függvényé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 Bicep-ben 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 megfelelő paraméterekkel rendelkezik
Teszt neve: A ResourceIds nem tartalmazhat
Erőforrásazonosítók létrehozásakor ne használjon felesleges függvényeket az 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.
A következő példa meghiúsul , mert nem kell megadnia az előfizetés aktuális azonosítóját és erőforráscsoportnevét.
"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:
list*
Az reference
erőforrás-azonosító létrehozásakor concat
a teszt sikertelen lesz.
dependsOn ajánlott eljárások
Teszt neve: DependsOn – ajánlott eljárások
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 Bicep-ben használja a Linter-szabályt – nincs szükségtelen 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'), '')]"
]
A következő példa meghiúsul , mert a következővel concat
kezdődik: .
"dependsOn": [
"[concat(variables('storageAccountName'))]"
]
Az alábbi példa áthalad.
"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ési hibák
Ha beágyazott vagy csatolt sablont definiál az erőforrástípussal, engedélyezheti a Microsoft.Resources/deployments
hibakeresést. A hibakeresés akkor használatos, ha sablont kell tesztelnie, de bizalmas információkat tehet közzé. Mielőtt a sablont éles környezetben használná, kapcsolja ki a hibakeresést. Eltávolíthatja az debugSetting
objektumot, vagy módosíthatja a detailLevel
tulajdonságot none
.
Az alábbi példa sikertelen.
"debugSetting": {
"detailLevel": "requestContent"
}
Az alábbi példa áthalad.
"debugSetting": {
"detailLevel": "none"
}
A rendszergazdai felhasználónevek nem lehetnek literálértékek
Tesztnév: adminUsername Nem lehet konstans
Ha beállít egy adminUserName
értéket, ne használjon literális értéket. Hozzon létre egy paramétert a felhasználónévhez, és használjon kifejezést a paraméter értékére való hivatkozáshoz.
A Bicep-ben használja a Linter-szabályt – a rendszergazdai felhasználónév nem lehet konstans.
Az alábbi példa literális é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 a következő feltételek ellenőrzése a sablonban:
Ha a sablon tartalmaz egy képpel rendelkező 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-rendszerképet.
Stabil virtuálisgép-rendszerképek használata
Teszt neve: A virtuális gépek nem tekinthetők meg előzetes verzióban
A virtuális gépek nem használhatnak előzetes verziójú képeket. A teszt ellenőrzi, storageProfile
hogy a imageReference
sztring nem használ-e előnézetet tartalmazó sztringet. És ez az előnézet nem használatos a imageReference
tulajdonságokban offer
, sku
vagy version
.
A tulajdonságról további információt a imageReference
Microsoft.Compute virtualMachines és a Microsoft.Compute virtualMachineScaleSets című témakörben talál.
A Bicep-ben használja a Linter-szabályt – használjon stabil virtuálisgép-rendszerképet.
Az alábbi példa meghiúsul, mert imageReference
egy előnézetet tartalmazó sztring.
"properties": {
"storageProfile": {
"imageReference": "latest-preview"
}
}
Az alábbi példa nem működik, ha az előnézetet a ( vagy sku
version
) fájlban offer
használja.
"properties": {
"storageProfile": {
"imageReference": {
"publisher": "Canonical",
"offer": "UbuntuServer_preview",
"sku": "16.04-LTS-preview",
"version": "preview"
}
}
}
Az alábbi példa áthalad.
"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 kulcsokat
Ne tartalmazzon olyan értékeket a outputs
szakaszban, amelyek titkos kulcsokat fednek fel. Ilyenek például a biztonságos paraméterek, például listKeys
a típus secureString
vagy secureObject
a lista* függvények.
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.
A következő példa meghiúsul , mert egy biztonsági 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 kulcsokhoz
Teszt neve: A CommandToExecute-nek védett beállításokat kell használnia a titkos kódokhoz
A típussal CustomScript
rendelkező 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 secureString
secureObject
paraméterekben, mint például a lista* függvények, például listKeys
az egyéni szkriptek.
Ne használjon titkos adatokat az settings
objektumban, mert tiszta 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 kulcsokhoz.
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
Tesztnév: apiVersionsnak frissnek kell lennie a referenciafüggvényekben
A referenciafüggvényekben használt API-verziónak frissnek és nem előzetes verziónak kell lennie. 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ától számított két évnél régebbi API-verziót a rendszer frissnek tekinti.
Figyelmeztetés, amely szerint az 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 létrehozhatja 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 a következő feltételek ellenőrzése a sablonban:
A resourceId-nek 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ás a megfelelő szintaxissal van-e használatban 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. Egy gyermekerőforrás például egynél több névszegmenst tartalmaz. További információkért tekintse meg a resourceId megjegyzéseit.
Belső hatókör használata beágyazott üzembe helyezés biztonságos paramétereihez
Teszt neve: Biztonságos paramok beágyazott üzemelő példányokban
A beágyazott sablon objektumának hatókörrel való inner
használatával kiértékelheti azokat a kifejezéseket, amelyek típus- secureString
vagy secureObject
listafüggvények, például listKeys
biztonságos paramétereket tartalmaznak.expressionEvaluationOptions
Ha a hatókört használja, a outer
kifejezéseket a rendszer tiszta szövegben értékeli ki 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 üzembe helyezési előzményekhez. Az alapértelmezett érték az expressionEvaluationOptions
outer
.
A beágyazott sablonokról további információt a Microsoft.Resources üzembe helyezései és a kifejezések kiértékelési hatóköre beágyazott sablonokban című témakörben talál.
A Bicep-ben 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
- A tesztelési eszközkészlet futtatásáról az ARM-sablontesztelési eszközkészlet használata című témakörben olvashat.
- A tesztelési eszközkészlet használatával kapcsolatos Learn-modulért tekintse meg a módosítások előnézetét, és ellenőrizze az Azure-erőforrásokat a what-if és az ARM-sablon tesztelési eszközkészletével.
- A paraméterfájlok teszteléséhez tekintse meg a paraméterfájlok tesztelési eseteit.
- A createUiDefinition tesztekhez lásd a createUiDefinition.json tesztelési eseteit.
- Az összes fájl tesztjeinek megismeréséhez tekintse meg az összes fájl tesztelési eseteit.