De ARM-sjabloontesttoolkit gebruiken

De Azure Resource Manager sjabloon (ARM-sjabloon) test toolkit controleert of uw sjabloon aanbevolen procedures gebruikt. Wanneer uw sjabloon niet compatibel is met aanbevolen procedures, wordt er een lijst met waarschuwingen met de voorgestelde wijzigingen weergegeven. Met behulp van de testtoolkit kunt u leren hoe u veelvoorkomende problemen bij het ontwikkelen van sjablonen kunt voorkomen. In dit artikel wordt beschreven hoe u de test-toolkit kunt uitvoeren en hoe u tests kunt toevoegen of verwijderen. Zie Testparameters voor meer informatie over het uitvoeren van tests of het uitvoeren van een specifieke test.

De toolkit is een set PowerShell-scripts die kan worden uitgevoerd met een opdracht in PowerShell of CLI. Deze tests zijn aanbevelingen, maar geen vereisten. U kunt bepalen welke tests relevant zijn voor uw doelen en aanpassen welke tests worden uitgevoerd.

De toolkit bevat vier sets tests:

Microsoft Learn

Zie Azure-resources valideren met behulp van de ARM-sjabloontest voor meer informatie over de testtoolkit voor ARM-sjablonen en zie Azure-resources valideren met behulp van de arm-sjabloontest Toolkit op Microsoft Learn.

Installeren in Windows

  1. Als u PowerShell nog niet hebt, installeert u PowerShell op Windows.

  2. Download het meest recente .zip voor de testtoolkit en extraheren.

  3. Start PowerShell.

  4. Navigeer naar de map waarin u de test-toolkit hebt uitgepakt. Navigeer in die map naar de map arm-ttk.

  5. Als uw uitvoeringsbeleid scripts van internet blokkeert, moet u de blokkering van de scriptbestanden opheffen. Zorg ervoor dat u zich in de map arm-ttk.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Importeer de module.

    Import-Module .\arm-ttk.psd1
    
  7. Gebruik de volgende opdracht om de tests uit te voeren:

    Test-AzTemplate -TemplatePath \path\to\template
    

Installeren in Linux

  1. Als u PowerShell nog niet hebt, installeert u PowerShell op Linux.

  2. Download het meest recente .zip voor de testtoolkit en extraheren.

  3. Start PowerShell.

    pwsh
    
  4. Navigeer naar de map waarin u de test-toolkit hebt uitgepakt. Navigeer in die map naar de map arm-ttk.

  5. Als uw uitvoeringsbeleid scripts van internet blokkeert, moet u de blokkering van de scriptbestanden opheffen. Zorg ervoor dat u zich in de map arm-ttk.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  6. Importeer de module.

    Import-Module ./arm-ttk.psd1
    
  7. Gebruik de volgende opdracht om de tests uit te voeren:

    Test-AzTemplate -TemplatePath /path/to/template
    

Installeren in Mac OS

  1. Als u PowerShell nog niet hebt, installeert u PowerShell op macOS.

  2. coreutils installeren:

    brew install coreutils
    
  3. Download het meest recente .zip voor de testtoolkit en extraheren.

  4. Start PowerShell.

    pwsh
    
  5. Navigeer naar de map waarin u de test-toolkit hebt uitgepakt. Navigeer in die map naar de map arm-ttk.

  6. Als uw uitvoeringsbeleid scripts van internet blokkeert, moet u de blokkering van de scriptbestanden opheffen. Zorg ervoor dat u zich in de map arm-ttk.

    Get-ChildItem *.ps1, *.psd1, *.ps1xml, *.psm1 -Recurse | Unblock-File
    
  7. Importeer de module.

    Import-Module ./arm-ttk.psd1
    
  8. Gebruik de volgende opdracht om de tests uit te voeren:

    Test-AzTemplate -TemplatePath /path/to/template
    

Resultaatopmaak

Tests die worden doorstaan, worden groen weergegeven en voorafgaand aan [+] .

Testen die mislukken, worden rood weergegeven en voorafgaand aan [-] .

Tests met een waarschuwing worden geel weergegeven en voorafgaand aan [?] .

testresultaten weergeven.

De tekstresultaten zijn:

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.

Testparameters

Wanneer u de parameter opgeeft, zoekt de toolkit in die map naar een sjabloon met de naam -TemplatePath azuredeploy.json of maintemplate.json. Deze sjabloon wordt eerst getest en vervolgens worden alle andere sjablonen in de map en de submappen getest. De andere sjablonen worden getest als gekoppelde sjablonen. Als uw pad een bestand bevat met de naam createUiDefinition.json,worden er tests uitgevoerd die relevant zijn voor de gebruikersinterfacedefinitie. Er worden ook tests uitgevoerd voor parameterbestanden en alle JSON-bestanden in de map .

Test-AzTemplate -TemplatePath $TemplateFolder

Als u één bestand in die map wilt testen, voegt u de -File parameter toe. De map moet echter nog steeds een hoofdsjabloon met de naam azuredeploy.json of maintemplate.json hebben.

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

Standaard worden alle tests uitgevoerd. Als u afzonderlijke tests wilt opgeven die moeten worden uitgevoerd, gebruikt u -Test de parameter en geeft u de naam van de test op. Zie ARM-sjablonen, parameterbestanden, createUiDefinition.jsonen alle bestanden voor de testnamen.

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

Tests aanpassen

U kunt de standaardtests aanpassen of uw eigen tests maken. Als u een test permanent wilt verwijderen, verwijdert u het .test.ps1 uit de map.

De toolkit heeft vier mappen die de standaardtests bevatten die worden uitgevoerd voor specifieke bestandstypen:

  • ARM-sjablonen: \arm-ttk\testcases\deploymentTemplate
  • Parameterbestanden: \arm-ttk\testcases\deploymentParameters
  • createUiDefinition.json: \arm-ttk\testcases\CreateUIDefinition
  • Alle bestanden: \arm-ttk\testcases\AllFiles

Een aangepaste test toevoegen

Als u uw eigen test wilt toevoegen, maakt u een bestand met de naamconventie: Your-Custom-Test-Name.test.ps1.

De test kan de sjabloon als een objectparameter of een tekenreeksparameter krijgen. Normaal gesproken gebruikt u de ene of de andere, maar u kunt beide gebruiken.

Gebruik de objectparameter wanneer u een sectie van de sjabloon wilt op halen en de eigenschappen ervan moet doorseen. Een test die gebruikmaakt van de objectparameter heeft de volgende indeling:

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

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

Het sjabloonobject heeft de volgende eigenschappen:

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

U kunt bijvoorbeeld de verzameling parameters ophalen met $TemplateObject.parameters .

Gebruik de tekenreeksparameter wanneer u een tekenreeksbewerking moet uitvoeren op de hele sjabloon. Een test die gebruikmaakt van de tekenreeksparameter heeft de volgende indeling:

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

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

U kunt bijvoorbeeld een reguliere expressie van de tekenreeksparameter uitvoeren om te zien of er een specifieke syntaxis wordt gebruikt.

Bekijk de andere tests in die map voor meer informatie over het implementeren van de test.

Integreren met Azure Pipelines

U kunt de testtoolkit toevoegen aan uw Azure Pipeline. Met een pijplijn kunt u de test uitvoeren telkens wanneer de sjabloon wordt bijgewerkt of uitvoeren als onderdeel van uw implementatieproces.

De eenvoudigste manier om de testtoolkit toe te voegen aan uw pijplijn is met extensies van derden. De volgende twee extensies zijn beschikbaar:

U kunt ook uw eigen taken implementeren. In het volgende voorbeeld ziet u hoe u de testtoolkit downloadt.

{
  "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": ""
  }
}

In het volgende voorbeeld ziet u hoe u de tests kunt uitvoeren.

{
  "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": ""
  }
}

Volgende stappen