A ARM eszközkészlet használata

Az Azure Resource Manager sablon (ARM) teszteszközkészlet ellenőrzi, hogy sablonja ajánlott eljárásokat használ-e. Ha a sablon nem felel meg az ajánlott eljárásoknak, a javasolt módosításokkal kapcsolatos figyelmeztetések listáját adja vissza. A teszteszközkészlet használatával megtudhatja, hogy miként kerülheti el a sablonok fejlesztése során gyakran okozott problémákat. Ebből a cikkből megtudhatja, hogy hogyan futtathatja a teszteszközkészletet, és hogyan adhat hozzá és távolíthat el teszteket. A tesztek futtatásával és egy adott teszt futtatásával kapcsolatos további információkért lásd: Paraméterek tesztelése.

Az eszközkészlet PowerShell-parancsprogramokat tartalmaz, amelyek a PowerShell vagy a CLI parancsprogramból futtathatók. Ezek a tesztek javaslatok, de nem követelmények. Eldöntheti, hogy mely tesztek relevánsak a céljai szempontjából, és testre szabhatja a futtatott teszteket.

Az eszközkészlet négy tesztkészletet tartalmaz:

Microsoft Learn

A ARM-sablonteszt eszközkészlettel kapcsolatos további információkért és a hatékony útmutatásért olvassa el az Azure-erőforrások érvényesítése a Microsoft Learn ARM template test toolkit (Azure-erőforrások érvényesítése) eszközkészletével ARM útmutatót.

Telepítés a Windows

  1. Ha még nem rendelkezik a PowerShell-parancsokkal, telepítse a PowerShellt a Windows.

  2. Töltse le .zip teszteszközkészlet legújabb fájlját, és bontsa ki.

  3. Indítsa el a PowerShellt.

  4. Nyissa meg azt a mappát, amelyből kinyerte a teszteszközkészletet. Ebben a mappában keresse meg az arm-ttk mappát.

  5. Ha a végrehajtási házirend letiltja a parancsfájlokat az internetről, fel kell oldani a parancsfájlok tiltásának feloldását. Győződjön meg arról, hogy a arm-ttk mappában van.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Importálja a modult.

    Import-Module .\arm-ttk.psd1
    
  7. A tesztek futtatásához használja a következő parancsot:

    Test-AzTemplate -TemplatePath \path\to\template
    

Telepítés Linux rendszeren

  1. Ha még nem rendelkezik a PowerShell-parancsokkal, telepítse a PowerShellt Linux rendszeren.

  2. Töltse le .zip teszteszközkészlet legújabb fájlját, és bontsa ki.

  3. Indítsa el a PowerShellt.

    pwsh
    
  4. Nyissa meg azt a mappát, amelyből kinyerte a teszteszközkészletet. Ebben a mappában keresse meg az arm-ttk mappát.

  5. Ha a végrehajtási házirend letiltja a parancsfájlokat az internetről, fel kell oldani a parancsfájlok tiltásának feloldását. Győződjön meg arról, hogy a arm-ttk mappában van.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Importálja a modult.

    Import-Module ./arm-ttk.psd1
    
  7. A tesztek futtatásához használja a következő parancsot:

    Test-AzTemplate -TemplatePath /path/to/template
    

Telepítés macOS rendszeren

  1. Ha még nem rendelkezik a PowerShell-parancsokkal, telepítse a PowerShellt macOS rendszeren.

  2. coreutilsTelepítés:

    brew install coreutils
    
  3. Töltse le .zip teszteszközkészlet legújabb fájlját, és bontsa ki.

  4. Indítsa el a PowerShellt.

    pwsh
    
  5. Nyissa meg azt a mappát, amelyből kinyerte a teszteszközkészletet. Ebben a mappában keresse meg az arm-ttk mappát.

  6. Ha a végrehajtási házirend letiltja a parancsfájlokat az internetről, fel kell oldani a parancsfájlok tiltásának feloldását. Győződjön meg arról, hogy a arm-ttk mappában van.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  7. Importálja a modult.

    Import-Module ./arm-ttk.psd1
    
  8. A tesztek futtatásához használja a következő parancsot:

    Test-AzTemplate -TemplatePath /path/to/template
    

Eredmény formátuma

A teszt eredményei zöld színnel jelennek meg, és a következővel jelennek meg: .

A nem sikerült tesztek piros színben jelennek meg, és a következő előtaggal jelennek meg: .

A figyelmeztetést megjelenítő tesztek sárga színben jelennek meg, és előtaggal jelennek meg.

view test results.

A szöveges eredmények a következőek:

deploymentTemplate
[+] adminUsername Should Not Be A Literal (6 ms)
[+] apiVersions Should Be Recent In Reference Functions (9 ms)
[-] apiVersions Should Be Recent (6 ms)
    Api versions must be the latest or under 2 years old (730 days) - API version 2019-06-01 of
    Microsoft.Storage/storageAccounts is 760 days old
    Valid Api Versions:
    2021-04-01
    2021-02-01
    2021-01-01
    2020-08-01-preview

[+] artifacts parameter (4 ms)
[+] CommandToExecute Must Use ProtectedSettings For Secrets (9 ms)
[+] DependsOn Best Practices (5 ms)
[+] Deployment Resources Must Not Be Debug (6 ms)
[+] DeploymentTemplate Must Not Contain Hardcoded Uri (4 ms)
[?] DeploymentTemplate Schema Is Correct (6 ms)
    Template is using schema version '2015-01-01' which has been deprecated and is no longer
    maintained.

Tesztparaméterek

A paraméter megadásakor az eszközkészlet ebben a mappában keres egy -TemplatePath-TemplatePath vagy maintemplate.json nevű sablont. Először teszteli a sablont, majd a mappában és almappákban található összes többi sablont teszteli. A többi sablont csatolt sablonként teszteltük. Ha az elérési út tartalmaz egy createUiDefinition.jsonnevű fájlt, a felhasználói felület definíciója szempontjából releváns teszteket futtat. A paraméterfájlok és a mappában lévő összes JSON-fájl tesztelése is fut.

Test-AzTemplate -TemplatePath $TemplateFolder

Ha a mappában egy fájlt szeretne tesztelni, vegye fel a -File paramétert. A mappának azonban továbbra is meg kell lennie egy azuredeploy.json vagy maintemplate.json nevű fő sablonnal.

Test-AzTemplate -TemplatePath $TemplateFolder -File cdn.json

Alapértelmezés szerint minden teszt fut. A futtatni kívánt egyes tesztek megadásához használja a -Test paramétert, és adja meg a teszt nevét. A tesztnevekről a következőARM, paraméterfájlok, createUiDefinition.jsonés az összes fájl.

Test-AzTemplate -TemplatePath $TemplateFolder -Test "Resources Should Have Location"

Tesztek testreszabása

Testre szabhatja az alapértelmezett teszteket, vagy létrehozhat saját teszteket. Ha véglegesen el szeretne távolítani egy tesztet, törölje a .test.ps1 fájlt a mappából.

Az eszközkészlet négy mappát tartalmaz, amelyek az adott fájltípusokon futtatott alapértelmezett teszteket tartalmazzák:

  • ARM sablonok: \arm-ttk\testcases\deploymentTemplate
  • Paraméterfájlok: \arm-ttk\testcases\deploymentParameters
  • createUiDefinition.json: \arm-ttk\testcases\CreateUIDefinition
  • Minden fájl: \arm-ttk\testcases\AllFiles

Egyéni teszt hozzáadása

Saját teszt hozzáadásához hozzon létre egy, az elnevezési konvenciónak megfelelő fájlt: Your-Custom-Test-Name.test.ps1.

A teszt be tudja szerezni a sablont objektum paraméterként vagy karakterlánc paraméterként. Általában az egyiket vagy a másikat használja, de mindkettő használható.

Akkor használja az objektum paramétert, ha be kell szereznie egy szakaszt a sablonból, és a tulajdonságain keresztül iterálnia kell. Az objektum paraméterét használó teszt formátuma a következő:

param(
  [Parameter(Mandatory=$true,Position=0)]
  [PSObject]
  $TemplateObject
)

# Implement test logic that evaluates parts of the template.
# Output error with: Write-Error -Message

A sablonobjektum a következő tulajdonságokkal rendelkezik:

  • $schema
  • contentVersion
  • parameters
  • variables
  • resources
  • outputs

A paramétergyűjteményt például a következővel kaphatja meg: $TemplateObject.parameters .

Akkor használja a karakterlánc paramétert, ha a teljes sablonon karakterláncot kell műveletet létrehoznia. A karakterlánc paraméterét használó teszt formátuma a következő:

param(
  [Parameter(Mandatory)]
  [string]
  $TemplateText
)

# Implement test logic that performs string operations.
# Output error with: Write-Error -Message

Futtathat például egy reguláris kifejezést a karakterlánc paraméterére, és így láthatja, hogy adott szintaxist használ-e.

A teszt végrehajtásával kapcsolatos további tudnivalókért nézze meg a mappában lévő többi tesztet is.

Integráció az Azure Pipelines alkalmazással

A teszteszközkészletet hozzáadhatja az Azure Pipeline eszközkészlethez. Egy prognózissal futtathatja a tesztet a sablon minden egyes módosításakor, vagy futtathatja a telepítési folyamat részeként.

A legegyszerűbben külső bővítményekkel adhat hozzá teszteszközkészletet a prognózishoz. A következő két bővítmény érhető el:

Vagy saját feladatokat is végrehajthat. Az alábbi példa bemutatja, hogyan töltheti le a teszteszközkészletet.

{
  "environment": {},
  "enabled": true,
  "continueOnError": false,
  "alwaysRun": false,
  "displayName": "Download TTK",
  "timeoutInMinutes": 0,
  "condition": "succeeded()",
  "task": {
    "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
    "versionSpec": "2.*",
    "definitionType": "task"
  },
  "inputs": {
    "targetType": "inline",
    "filePath": "",
    "arguments": "",
    "script": "New-Item '$(ttk.folder)' -ItemType Directory\nInvoke-WebRequest -uri '$(ttk.uri)' -OutFile \"$(ttk.folder)/$(ttk.asset.filename)\" -Verbose\nGet-ChildItem '$(ttk.folder)' -Recurse\n\nWrite-Host \"Expanding files...\"\nExpand-Archive -Path '$(ttk.folder)/*.zip' -DestinationPath '$(ttk.folder)' -Verbose\n\nWrite-Host \"Expanded files found:\"\nGet-ChildItem '$(ttk.folder)' -Recurse",
    "errorActionPreference": "stop",
    "failOnStderr": "false",
    "ignoreLASTEXITCODE": "false",
    "pwsh": "true",
    "workingDirectory": ""
  }
}

A következő példa bemutatja a tesztek futtatását.

{
  "environment": {},
  "enabled": true,
  "continueOnError": true,
  "alwaysRun": false,
  "displayName": "Run Best Practices Tests",
  "timeoutInMinutes": 0,
  "condition": "succeeded()",
  "task": {
    "id": "e213ff0f-5d5c-4791-802d-52ea3e7be1f1",
    "versionSpec": "2.*",
    "definitionType": "task"
  },
  "inputs": {
    "targetType": "inline",
    "filePath": "",
    "arguments": "",
    "script": "Import-Module $(ttk.folder)/arm-ttk/arm-ttk.psd1 -Verbose\n$testOutput = @(Test-AzTemplate -TemplatePath \"$(sample.folder)\")\n$testOutput\n\nif ($testOutput | ? {$_.Errors }) {\n   exit 1 \n} else {\n    Write-Host \"##vso[task.setvariable variable=result.best.practice]$true\"\n    exit 0\n} \n",
    "errorActionPreference": "continue",
    "failOnStderr": "true",
    "ignoreLASTEXITCODE": "false",
    "pwsh": "true",
    "workingDirectory": ""
  }
}

További lépések

  • A sablontesztekkel kapcsolatos további információkért lásd: Esetek tesztelése ARM sablonokhoz.
  • A paraméterfájlok teszteléséhez lásd: Esetek tesztelése paraméterfájlokhoz.
  • A createUiDefinition tesztekről az Esetek tesztelése a createUiDefinition.jsonhoz.
  • Az összes fájlra vonatkozó tesztekről az Esetek tesztelése az összes fájlhoz .
  • A teszteszközkészlet használatával kapcsolatos Microsoft Learn modulról az Azure-erőforrások érvényesítése a ARM sablonteszt eszközkészlettelARM olvashat.