Esercizio - Applicare le procedure consigliate al modello usando il toolkit di test dei modelli di Resource Manager
Si fa parte del team di sviluppo della società Tailwind Traders. Nelle proprie mansioni è inclusa la creazione di modelli di Azure Resource Manager (ARM) per distribuire e gestire le risorse nel cloud. Ci si vuole assicurare che i modelli seguano alcune buone procedure prima di distribuire le risorse. Si decide di usare il toolkit di test dei modelli di Resource Manager per analizzare i modelli e correggere gli eventuali problemi riscontrati.
Configurare l'ambiente di test
Lo strumento è un modulo di PowerShell. Per essere in grado di eseguirlo, seguire questa procedura:
- Installare il modulo di PowerShell. Questa attività viene eseguita in modo diverso a seconda che si usi Linux, Mac o Windows.
- Scaricare il modulo. Il modulo è ospitato in un repository GitHub. È possibile scaricarlo da GitHub o recuperarlo tramite un comando
git clone
. - Importare il modulo. Questo passaggio è un'istruzione di una sola riga, da immettere in una sessione di PowerShell, che rende disponibili i comandi di ARM-TTK.
Installare PowerShell
Per installare PowerShell, seguire le istruzioni in Installazione di PowerShell in Linux.
Eseguire
pwsh
nel terminale per verificare l'installazione:pwsh
L'output è simile al seguente:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Scaricare il toolkit di test
Il toolkit di test si trova in un repository GitHub. Scegliere una delle azioni seguenti:
Eseguire
git clone
per clonare il repository:git clone https://github.com/Azure/arm-ttk.git
Nel browser scaricare il repository come file con estensione zip.
Esaminare il toolkit di test
Il toolkit di test è stato appena scaricato nella directory scelta. Esaminiamo la struttura di directory. Assicurarsi di aver decompresso il file se si è scelto di scaricare il file con estensione zip anziché eseguire il comando git clone
. Se si passa alla directory del toolkit di test dei modelli di Resource Manager, la struttura delle directory dovrebbe essere simile alla seguente:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Il toolkit di test si trova nella sottodirectory /arm-ttk.
Creare il file di modello
Scegliere una directory e creare un file denominato azuredeploy.json.
Avviso
Verificare che la directory selezionata sia vuota, senza sottodirectory.
Aggiungere il contenuto seguente:
{
"$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."
}
}
},
"resources": [{
"location": "westus"
}]
}
Prendere nota del percorso del file modello. Per restituire il percorso, è possibile eseguire il comando pwd
nel terminale. Questo percorso verrà usato più avanti come parametro durante l'esecuzione del toolkit di test.
Individuare e correggere i problemi nel modello eseguendo il toolkit di test
È consigliabile avviare Visual Studio Code e un terminale integrato.
Si eseguirà il toolkit di test in un percorso contenente un modello di distribuzione e si correggeranno gli eventuali errori rilevati modificando il modello.
Avviso
In questo esercizio viene analizzato un solo file di modello. Il toolkit di test analizza tutti i file contenuti nella directory specificata. Una distribuzione può infatti contenere diversi file. Verificare che non siano presenti file JSON nella directory in cui si trova il file azuredeploy.json.
In un terminale passare al percorso in cui risiede il file azuredeploy.json. Eseguire il comando seguente per avviare Visual Studio Code:
code .
Nota
Se Visual Studio Code non è nel percorso, aprire Visual Studio Code manualmente e aprire la directory del modello.
Da Visual Studio Code aprire il terminale integrato selezionando Terminale>Nuovo terminale nel menu principale. Eseguire il comando seguente nel terminale per avviare una shell di PowerShell:
pwsh
Verrà visualizzato un output simile al seguente:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Analizzare il modello
Eseguire
Import-Module
in modo da poter eseguire i test da qualsiasi posizione.Nota
Prima di importare il modulo, sostituire path/to/arm-ttk/arm-ttk.psd1 con il percorso del toolkit di test scaricato.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Suggerimento
Se lo strumento è stato scaricato o clonato nella directory Download, il percorso dovrebbe essere simile a /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
A questo punto è possibile iniziare a usare lo strumento. Se si rimane nella stessa sessione di PowerShell, non è necessario eseguire di nuovo il comando di importazione.
Eseguire
Test-AzTemplate
con il parametro-TemplatePath
che punta al percorso del file del modello (escluso il nome file):Test-AzTemplate -TemplatePath .
Nel terminale viene visualizzato un output simile al seguente:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)
Nell'output è possibile notare che due test hanno esito negativo: Resources Should Have Location (Le risorse devono avere un percorso) e Parameters Must Be Referenced (È necessario fare riferimento ai parametri). Il prefisso
[-]
indica un test con esito negativo.Per comprendere perché i test non sono stati superati, aprire il file azuredeploy.json. La cartella dovrebbe avere un aspetto simile a questo:
{ "$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." } } }, "resources": [{ "location": "westus" }] }
I test non sono stati superati per due motivi:
- Il parametro location non è stato usato. Questo messaggio di errore potrebbe indicare, ad esempio, che il parametro è stato usato in passato e ci si è dimenticati di pulirlo. Oppure che dovrebbe essere usato ma ci si è dimenticati di aggiornare il codice.
- La proprietà location è impostata sulla stringa hardcoded westus. L'uso di questa opzione non è una procedura consigliata poiché è opportuno poter controllare la posizione di una risorsa con parametri di input durante la distribuzione.
Applicare una correzione al modello
Come è possibile correggere i test non superati?
Come indica il test, si potrebbe provare a sostituire westus con il testo global. Ma questo correggerebbe solo uno dei problemi. È preferibile usare il parametro location e impostare la posizione delle risorse su quel valore.
Il motivo è duplice: Oltre a poter essere impostato come parametro per la distribuzione, in caso di necessità il parametro location può essere impostato su resourceGroup().location come defaultValue, se si omette di impostare location durante la distribuzione.
Individuare il primo elemento di risorsa nella matrice resources e sostituire il contenuto seguente:
"resources": [{ "location": "westus" }]
con questo contenuto:
"resources": [{ "location": "[parameters('location')]" }]
Eseguire di nuovo lo strumento di test nel terminale integrato per verificare che la correzione sia stata applicata:
Test-AzTemplate -TemplatePath .
Si ottiene ora un output in cui tutti i test sono stati superati:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (6 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (1 ms) [+] Deployment Resources Must Not Be Debug (1 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (4 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (1 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (1 ms) [+] Parameters Must Be Referenced (1 ms) [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [+] Resources Should Have Location (1 ms) [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (4 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (4 ms)
Operazione riuscita. È stato eseguito lo strumento di test, sono stati individuati errori e corretti.
Seguire le istruzioni in Installazione di PowerShell in macOS.
Eseguire
pwsh
nel terminale per verificare l'installazione:pwsh
L'output è simile al seguente:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Scaricare il toolkit di test
Il toolkit di test si trova in un repository GitHub. Scegliere una delle azioni seguenti:
Eseguire
git clone
per clonare il repository:git clone https://github.com/Azure/arm-ttk.git
Nel browser scaricare il repository come file con estensione zip.
Esaminare il toolkit di test
Il toolkit di test è stato appena scaricato nella directory scelta. Esaminiamo la struttura di directory. Assicurarsi di aver decompresso il file se si è scelto di scaricare il file con estensione zip anziché eseguire il comando git clone
. Se si passa alla directory del toolkit di test dei modelli di Resource Manager, la struttura delle directory dovrebbe essere simile alla seguente:
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Il toolkit di test si trova nella sottodirectory /arm-ttk.
Creare il file di modello
Scegliere una directory e creare un file denominato azuredeploy.json.
Avviso
Verificare che la directory selezionata sia vuota, senza sottodirectory.
Aggiungere il contenuto seguente:
{
"$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."
}
}
},
"resources": [{
"location": "westus"
}]
}
Prendere nota del percorso del file modello. Per restituire il percorso, è possibile eseguire il comando pwd
nel terminale. Questo percorso verrà usato più avanti come parametro durante l'esecuzione del toolkit di test.
Individuare e correggere i problemi nel modello eseguendo il toolkit di test
È consigliabile avviare Visual Studio Code e un terminale integrato.
Si eseguirà il toolkit di test in un percorso contenente un modello di distribuzione e si correggeranno gli eventuali errori rilevati modificando il modello.
Avviso
In questo esercizio viene analizzato un solo file di modello. Il toolkit di test analizza tutti i file contenuti nella directory specificata. Una distribuzione può infatti contenere diversi file. Verificare che non siano presenti file JSON nella directory in cui si trova il file azuredeploy.json.
In un terminale passare al percorso in cui risiede il file azuredeploy.json. Eseguire il comando seguente per avviare Visual Studio Code:
code .
Nota
Se Visual Studio Code non è nel percorso, aprire Visual Studio Code manualmente e aprire la directory del modello.
Da Visual Studio Code aprire il terminale integrato selezionando Terminale>Nuovo terminale nel menu principale. Eseguire il comando seguente nel terminale per avviare una shell di PowerShell:
pwsh
Verrà visualizzato un output simile al seguente:
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
Analizzare il modello
Eseguire
Import-Module
in modo da poter eseguire i test da qualsiasi posizione.Nota
Prima di importare il modulo, sostituire path/to/arm-ttk/arm-ttk.psd1 con il percorso del toolkit di test scaricato.
Import-Module path/to/arm-ttk/arm-ttk.psd1
Suggerimento
Se lo strumento è stato scaricato o clonato nella directory Download, il percorso dovrebbe essere simile a /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1.
A questo punto è possibile iniziare a usare lo strumento. Se si rimane nella stessa sessione di PowerShell, non è necessario eseguire di nuovo il comando di importazione.
Eseguire
Test-AzTemplate
con il parametro-TemplatePath
che punta al percorso del file del modello (escluso il nome file):Test-AzTemplate -TemplatePath .
Nel terminale viene visualizzato un output simile al seguente:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (4 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (2 ms) [+] Deployment Resources Must Not Be Debug (2 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (3 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (2 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (4 ms) [-] Parameters Must Be Referenced (2 ms) Unreferenced parameter: location [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [-] Resources Should Have Location (8 ms) Resource Location must be an expression or 'global' [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (3 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (3 ms)
L'output precedente mostra che due test hanno esito negativo: Resources Should Have Location (Le risorse devono avere un percorso) e Parameters Must Be Referenced (È necessario fare riferimento ai parametri). Il prefisso
[-]
indica un test con esito negativo.Per comprendere perché i test non sono stati superati, aprire il file azuredeploy.json. La cartella dovrebbe avere un aspetto simile a questo:
{ "$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." } } }, "resources": [{ "location": "westus" }] }
I test non sono stati superati per due motivi:
- Il parametro location non è stato usato. Questo messaggio di errore potrebbe indicare, ad esempio, che il parametro è stato usato in passato e ci si è dimenticati di pulirlo. Oppure che dovrebbe essere usato ma ci si è dimenticati di aggiornare il codice.
- La proprietà location è impostata sulla stringa hardcoded westus. L'uso di questa opzione non è una procedura consigliata poiché è opportuno poter controllare la posizione di una risorsa con parametri di input durante la distribuzione.
Applicare una correzione al modello
Come è possibile correggere i test non superati?
Come indica il test, si potrebbe provare a sostituire westus con il testo global. Ma questo correggerebbe solo uno dei problemi. È preferibile usare il parametro location e impostare la posizione delle risorse su quel valore.
Il motivo è duplice: Oltre a poter essere impostato come parametro per la distribuzione, in caso di necessità il parametro location può essere impostato su resourceGroup().location come defaultValue, se si omette di impostare location durante la distribuzione.
Individuare il primo elemento di risorsa nella matrice resources e sostituire il contenuto seguente:
"resources": [{ "location": "westus" }]
con questo contenuto:
"resources": [{ "location": "[parameters('location')]" }]
Eseguire di nuovo lo strumento di test nel terminale integrato per verificare che la correzione sia stata applicata:
Test-AzTemplate -TemplatePath .
Si ottiene ora un output in cui tutti i test sono stati superati:
Validating deploy\azuredeploy.json deploymentTemplate [+] adminUsername Should Not Be A Literal (6 ms) [+] apiVersions Should Be Recent (2 ms) [+] artifacts parameter (1 ms) [+] DependsOn Best Practices (1 ms) [+] Deployment Resources Must Not Be Debug (1 ms) [+] DeploymentTemplate Must Not Contain Hardcoded Uri (1 ms) [+] DeploymentTemplate Schema Is Correct (1 ms) [+] Dynamic Variable References Should Not Use Concat (1 ms) [+] IDs Should Be Derived From ResourceIDs (4 ms) [+] Location Should Not Be Hardcoded (1 ms) [+] ManagedIdentityExtension must not be used (1 ms) [+] Min And Max Value Are Numbers (1 ms) [+] Outputs Must Not Contain Secrets (1 ms) [+] Parameters Must Be Referenced (1 ms) [+] Parameters Property Must Exist (1 ms) [+] providers apiVersions Is Not Permitted (1 ms) [+] ResourceIds should not contain (1 ms) [+] Resources Should Have Location (1 ms) [+] Secure String Parameters Cannot Have Default (1 ms) [+] Template Should Not Contain Blanks (1 ms) [+] Variables Must Be Referenced (1 ms) [+] Virtual Machines Should Not Be Preview (4 ms) [+] VM Images Should Use Latest Version (1 ms) [+] VM Size Should Be A Parameter (4 ms)
Operazione riuscita. È stato eseguito lo strumento di test, sono stati individuati errori e corretti.
- Seguire le istruzioni in Installazione di PowerShell in Windows.
- Da Visual Studio Code installare l'estensione di PowerShell.
Scaricare il toolkit di test
Il toolkit di test si trova in un repository GitHub. Scegliere una delle azioni seguenti:
Eseguire
git clone
per clonare il repository:git clone https://github.com/Azure/arm-ttk.git
Nel browser scaricare il repository come file con estensione zip.
Esaminare il toolkit di test
Il toolkit di test è stato appena scaricato nella directory scelta. Esaminiamo la struttura di directory. Assicurarsi di aver decompresso il file se si è scelto di scaricare il file con estensione zip anziché eseguire il comando git clone
. Se si passa alla directory del toolkit di test dei modelli di Resource Manager, la struttura delle directory dovrebbe essere simile alla seguente:
-| arm-ttk\
-| unit-tests\
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
Il toolkit di test si trova nella sottodirectory \arm-ttk.
Creare il file di modello
Creare un file denominato azuredeploy.json in una directory a scelta, ad esempio C:\Temp.
Avviso
Verificare che la directory selezionata sia vuota, senza sottodirectory.
Aggiungere il contenuto seguente:
{
"$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."
}
}
},
"resources": [{
"location": "westus"
}]
}
Prendere nota del percorso del file modello. Questo percorso di directory (ad esempio C:\Temp) verrà usato più avanti come parametro durante l'esecuzione del toolkit di test.
Individuare e correggere i problemi nel modello eseguendo il toolkit di test
È consigliabile avviare Visual Studio Code e un terminale integrato.
Si eseguirà il toolkit di test in un percorso contenente un modello di distribuzione e si correggeranno gli eventuali errori rilevati modificando il modello.
Avviso
In questo esercizio viene analizzato un solo file di modello. Il toolkit di test analizza tutti i file contenuti nella directory specificata. Una distribuzione può infatti contenere diversi file. Verificare che non siano presenti file JSON nella directory in cui si trova il file azuredeploy.json.
In un terminale passare al percorso in cui risiede il file azuredeploy.json. Eseguire il comando seguente per avviare Visual Studio Code:
code .
Nota
Se Visual Studio Code non è nel percorso, aprire Visual Studio Code manualmente e aprire la directory del modello.
In Visual Studio Code visualizzare il riquadro comandi e selezionare il comando PowerShell: Show Integrated Console (PowerShell: mostra console integrata).
Analizzare il modello
Eseguire
Import-Module
nel terminale di PowerShell:Nota
Prima di importare il modulo, sostituire path\to\arm-ttk\arm-ttk.psd1 con il percorso del toolkit di test scaricato.
Import-Module path\to\arm-ttk\arm-ttk.psd1
Il comando precedente visualizzerà la posizione del modulo del toolkit di test.
Suggerimento
Se lo strumento è stato scaricato o clonato nella directory Download, il percorso dovrebbe essere simile a C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1.
A questo punto è possibile iniziare a usare lo strumento. Se si rimane nella stessa sessione di PowerShell, non è necessario eseguire di nuovo il comando di importazione.
Nota
Se si avvia una nuova sessione di PowerShell, sarà necessario eseguire di nuovo il comando
Import-Module
.Eseguire
Test-AzTemplate
nel terminale di PowerShell per avviare un'esecuzione dei test:Test-AzTemplate -TemplatePath .
Nel terminale viene visualizzato un output simile al seguente:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (16 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (6 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (10 ms) apiVersions Should Be Recent [+] apiVersions Should Be Recent (7 ms) artifacts parameter [+] artifacts parameter (5 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (7 ms) DependsOn Best Practices [+] DependsOn Best Practices (6 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (5 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (5 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (4 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (4 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (6 ms) deploymentTemplate [-] Location Should Not Be Hardcoded (13 ms) Location value of 'westus' on resource '' must be an expression or 'global'. Line: 14, Column: 9 ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (5 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (5 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (5 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (9 ms) deploymentTemplate [-] Parameters Must Be Referenced (6 ms) Unreferenced parameter: location Line: 5, Column: 9 Password params must be secure [+] Password params must be secure (11 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (5 ms) ResourceIds should not contain [+] ResourceIds should not contain (5 ms) deploymentTemplate [-] Resources Should Have Location (5 ms) Resource Location must be an expression or 'global' Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (7 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (10 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (7 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (5 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (8 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (5 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (8 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (5 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (5 ms) Fail : 3 Total : 31 Pass : 28
L'output precedente mostra come tre test hanno esito negativo: Location Should Not Be Hardcoded, Parameters Must Be Referenced e Resources Should Have Location. Il prefisso
[-]
indica un test con esito negativo.Per comprendere perché i test non sono stati superati, aprire il file azuredeploy.json. La cartella dovrebbe avere un aspetto simile a questo:
{ "$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." } } }, "resources": [{ "location": "westus" }] }
I test non sono stati superati per due motivi:
- Il parametro location non è stato usato. Questo messaggio di errore potrebbe indicare, ad esempio, che il parametro è stato usato in passato e ci si è dimenticati di pulirlo. Oppure che dovrebbe essere usato ma ci si è dimenticati di aggiornare il codice.
- La proprietà location è impostata sulla stringa hardcoded westus. L'uso di questa opzione non è una procedura consigliata poiché è opportuno poter controllare la posizione di una risorsa con parametri di input durante la distribuzione.
Applicare una correzione al modello
Come è possibile correggere i test non superati?
Come indica il test, si potrebbe provare a sostituire westus con il testo global. Ma questo correggerebbe solo uno dei problemi. È preferibile usare il parametro location e impostare la posizione delle risorse su quel valore.
Il motivo è duplice: Oltre a poter essere impostato come parametro per la distribuzione, in caso di necessità il parametro location può essere impostato su resourceGroup().location come defaultValue, se si omette di impostare location durante la distribuzione.
Individuare il primo elemento di risorsa nella matrice resources e sostituire il contenuto seguente:
"resources": [{ "location": "westus" }]
con questo contenuto:
"resources": [{ "location": "[parameters('location')]" }]
Eseguire
Test-AzTemplate
per ripetere l'esecuzione dello strumento di test:Test-AzTemplate -TemplatePath .
Si ottiene ora un output in cui tutti i test sono stati superati:
Validating deploy\azuredeploy.json JSONFiles Should Be Valid [+] JSONFiles Should Be Valid (83 ms) Fail : 0 Total : 1 Pass : 1 adminUsername Should Not Be A Literal [+] adminUsername Should Not Be A Literal (36 ms) apiVersions Should Be Recent In Reference Functions [+] apiVersions Should Be Recent In Reference Functions (57 ms) piVersions Should Be Recent [+] apiVersions Should Be Recent (67 ms) artifacts parameter [+] artifacts parameter (19 ms) CommandToExecute Must Use ProtectedSettings For Secrets [+] CommandToExecute Must Use ProtectedSettings For Secrets (93 ms) DependsOn Best Practices [+] DependsOn Best Practices (52 ms) Deployment Resources Must Not Be Debug [+] Deployment Resources Must Not Be Debug (77 ms) DeploymentTemplate Must Not Contain Hardcoded Uri [+] DeploymentTemplate Must Not Contain Hardcoded Uri (18 ms) DeploymentTemplate Schema Is Correct [+] DeploymentTemplate Schema Is Correct (73 ms) Dynamic Variable References Should Not Use Concat [+] Dynamic Variable References Should Not Use Concat (72 ms) IDs Should Be Derived From ResourceIDs [+] IDs Should Be Derived From ResourceIDs (15 ms) Location Should Not Be Hardcoded [+] Location Should Not Be Hardcoded (24 ms) ManagedIdentityExtension must not be used [+] ManagedIdentityExtension must not be used (143 ms) Min And Max Value Are Numbers [+] Min And Max Value Are Numbers (23 ms) Outputs Must Not Contain Secrets [+] Outputs Must Not Contain Secrets (160 ms) Parameter Types Should Be Consistent [+] Parameter Types Should Be Consistent (13 ms) Parameters Must Be Referenced [+] Parameters Must Be Referenced (13 ms) Password params must be secure [+] Password params must be secure (12 ms) providers apiVersions Is Not Permitted [+] providers apiVersions Is Not Permitted (79 ms) ResourceIds should not contain [+] ResourceIds should not contain (12 ms) Resources Should Have Location [+] Resources Should Have Location (17 ms) Resources Should Not Be Ambiguous [+] Resources Should Not Be Ambiguous (17 ms) Secure Params In Nested Deployments [+] Secure Params In Nested Deployments (17 ms) Secure String Parameters Cannot Have Default [+] Secure String Parameters Cannot Have Default (16 ms) Template Should Not Contain Blanks [+] Template Should Not Contain Blanks (83 ms) URIs Should Be Properly Constructed [+] URIs Should Be Properly Constructed (108 ms) Variables Must Be Referenced [+] Variables Must Be Referenced (111 ms) Virtual Machines Should Not Be Preview [+] Virtual Machines Should Not Be Preview (16 ms) VM Images Should Use Latest Version [+] VM Images Should Use Latest Version (22 ms) VM Size Should Be A Parameter [+] VM Size Should Be A Parameter (133 ms) Fail : 0 Total : 31 Pass : 31
Operazione riuscita. È stato eseguito lo strumento di test, sono stati individuati errori e corretti.
A questo punto è possibile eseguire i test sul modello.