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 location
Location (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 maxValue
paramé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 _artifactsLocationSasToken
paramé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 egystring
lehet . -
_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 egysecureString
lehet . -
_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 template
beá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 concat
kezdő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/deployments
hibakeresé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 adminUserName
ne 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
, sku
vagy version
.
A tulajdonságról további információt a Microsoft.Compute virtualMachines és a imageReference
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-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 , sku
vagy version
a 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 secureObject
a secureString
, vagy lista* típusú paraméterek, például listKeys
a .
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 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 paraméterekben, mint a vagy a lista* függvények secureString
secureObject
, például listKeys
a , 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 expressionEvaluationOptions
inner
kiértékelheti azokat a kifejezéseket, amelyek olyan biztonságos paramétereket tartalmaznak, mint listKeys
például a típus secureString
vagy secureObject
lista* 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
- A tesztelési eszközkészlet futtatásával kapcsolatos további információkért lásd: ARM-sablontesztelési eszközkészlet használata.
- A tesztelési eszközkészlet használatával kapcsolatos Learn-modulért lásd: Változások előnézete és az Azure-erőforrások ellenőrzése a what-if és az ARM-sablontesztelési eszközkészlet használatával.
- A paraméterfájlok teszteléséhez tekintse meg a paraméterfájlok tesztelési eseteit ismertető cikket.
- A createUiDefinition tesztekhez lásd: A createUiDefinition.json tesztelési esetei.
- Az összes fájl tesztjeiről a Tesztelési esetek az összes fájl esetében című témakörben olvashat.