演習 - ARM テンプレート テスト ツールキットを使用して、テンプレートに優れたプラクティスを適用する
あなたは、Tailwind Traders 社の開発チームの一員です。 その作業の一環として、クラウドにリソースをデプロイして管理するために Azure Resource Manager (ARM) テンプレートを作成する必要があります。 リソースをデプロイする前に、テンプレートがいくつかの適切なプラクティスに従っていることを確認する必要があります。 あなたは、あらゆる問題を修正できるように、テンプレートの分析に役立つ ARM テンプレート テスト ツールキットを使用することにしました。
テスト環境を設定する
このツールは PowerShell モジュールです。 これを実行できるようにするには、次の手順に従います。
- PowerShell モジュールをインストールします。 このタスクの実行方法は、Linux、Mac、Windows のいずれを使用しているかによって異なります。
-
モジュールをダウンロードします。 このモジュールは GitHub リポジトリでホストされています。 そこからダウンロードすることも、
git cloneコマンドを使用してフェッチすることもできます。 - モジュールをインポートします。 このステップは、PowerShell セッションに入る単なる 1 行の命令で、これにより ARM-TTK コマンドが使用できるようになります。
PowerShell をインストールする
PowerShell をインストールするには、「 Linux への PowerShell のインストール」の手順に従います。
ターミナルで
pwshを実行して、インストールを確認します。pwsh次のような内容が出力されます。
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
テスト ツールキットをダウンロードする
テスト ツールキットは、GitHub リポジトリにあります。 次の操作のいずれかを選択します。
git cloneを実行して、リポジトリをクローンします。git clone https://github.com/Azure/arm-ttk.gitブラウザーから、 リポジトリを .zip ファイルとしてダウンロードします。
テスト ツールキットを調べる
テスト ツールキットを選択したディレクトリにダウンロードしました。 ディレクトリ構造を見てみましょう。 (git clone コマンドを実行する代わりに .zip ファイルをダウンロードすることを選択した場合は、ファイルが解凍されていることを確認してください。)ARM テスト ツールキットのディレクトリに移動すると、次のようなディレクトリ構造になっているはずです。
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
テスト ツールキットはサブディレクトリ /arm-ttk にあります。
テンプレート ファイルを作成する
ディレクトリを選択し、 azuredeploy.jsonという名前のファイルを作成します。
警告
選択したディレクトリは空で、サブディレクトリが含まれていないことを確認してください。
次のような内容を指定します。
{
"$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"
}]
}
テンプレート ファイルの場所を記録しておきます。 ターミナルでコマンド pwd を実行して、パスを出力できます。 このパスは、後でテスト ツールキットを実行するときにパラメーターとして使用します。
テスト ツールキットを実行し、テンプレートの問題を検出して修正する
Visual Studio Code と統合ターミナルを開始することをお勧めします。
デプロイ テンプレートが含まれているパスでテスト ツールキットを実行し、テンプレートを変更することによって検出されたエラーを修正します。
警告
この演習では、1 つのテンプレート ファイルをスキャンします。 テスト ツールキットにより、指定したディレクトリの下にあるすべてのファイルがスキャンされます。 この動作は、デプロイに複数のファイルが含まれている可能性があるためです。 azuredeploy.json が配置されているディレクトリの下に JSON ファイルがないことを確認します。
ターミナルで、 azuredeploy.json ファイルが存在するパスに移動します。 次のコマンドを実行して Visual Studio Code を開始します。
code .注
Visual Studio Code がパス上にない場合は、手動で Visual Studio Code を開き、テンプレート ディレクトリを開きます。
Visual Studio Code で、上部のメニューから>を選択して統合ターミナルを開きます。 ターミナルで次のコマンドを実行して、PowerShell シェルを開始します。
pwsh次のような出力が表示されるはずです。
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
テンプレートを分析する
Import-Moduleを実行して、どこからでもテストを実行できるようにします。注
モジュールをインポートする前に、 path/to/arm-ttk/arm-ttk.psd1 をダウンロードしたテスト ツールキットへのパスに置き換えます。
Import-Module path/to/arm-ttk/arm-ttk.psd1ヒント
ツールをダウンロードディレクトリに保存またはコピーした場合、パスは次のようになります: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1。
これで、ツールを使用する準備が整いました。 同じ PowerShell セッションを使用している限り、インポート コマンドをもう一度実行する必要はありません。
Test-AzTemplateを実行し、パラメーター-TemplatePathでテンプレート ファイルのパスを指定します (ファイル名は除く)。Test-AzTemplate -TemplatePath .次のような出力がターミナルに表示されます。
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)出力では、2 つのテストがどのように失敗しているかに注意してください。リソースには場所とパラメーターを参照する必要があります。 プレフィックス
[-]は失敗したテストを示します。何が起こっているかを理解するには、 azuredeploy.json ファイルを開きます。 次のようになります。
{ "$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" }] }次の 2 つの理由により、テストが失敗しています。
- location パラメーターは使用されません。 このエラー メッセージは、たとえば、過去にパラメーターを使用して、そのクリーンアップを忘れていることを示している可能性があります。 または、使用する必要があるのに、コードの更新を忘れているのかもしれません。
- location プロパティは、ハードコーディングされた文字列 westus に設定されます。 デプロイ時に入力パラメーターを使用してリソースの場所を制御できるようにしたいので、このオプションの使用はよいプラクティスとは見なされません。
テンプレートに修正を適用する
失敗したテストを修正するにはどうすればよいでしょうか。
テストで示されているように、 westus をテキスト グローバルに置き換えてみてください。 しかし、それでは問題の 1 つが修正されるだけです。 多くの場合、 location パラメーターを使用し、リソースの場所をその値に設定します。
その理由は 2 つあります。 デプロイのパラメーターとして location パラメーターを設定できるだけでなく、デプロイの実行時に location パラメーターの設定を省略した場合は、resourceGroup().location に defaultValue として設定されるという適切なフォールバックもあります。
resources 配列内の最初のリソース項目を見つけて、次の内容を置き換えます。
"resources": [{ "location": "westus" }]次のような内容にします。
"resources": [{ "location": "[parameters('location')]" }]統合ターミナルでテスト ツールをもう一度実行して、修正内容を検証します。
Test-AzTemplate -TemplatePath .これで、すべてのテストに合格したことが出力で示されるようになります。
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)
成功しました! テスト ツールを実行し、エラーを検出して修正できました。
ターミナルで
pwshを実行して、インストールを確認します。pwsh次のような内容が出力されます。
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
テスト ツールキットをダウンロードする
テスト ツールキットは、GitHub リポジトリにあります。 次の操作のいずれかを選択します。
git cloneを実行して、リポジトリをクローンします。git clone https://github.com/Azure/arm-ttk.gitブラウザーから、 リポジトリを .zip ファイルとしてダウンロードします。
テスト ツールキットを調べる
テスト ツールキットを選択したディレクトリにダウンロードしました。 ディレクトリ構造を見てみましょう。 (git clone コマンドを実行する代わりに .zip ファイルをダウンロードすることを選択した場合は、ファイルが解凍されていることを確認してください。)ARM テスト ツールキットのディレクトリに移動すると、次のようなディレクトリ構造になっているはずです。
-| arm-ttk/
-| unit-tests/
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
テスト ツールキットはサブディレクトリ /arm-ttk にあります。
テンプレート ファイルを作成する
ディレクトリを選択し、 azuredeploy.jsonという名前のファイルを作成します。
警告
選択したディレクトリは空で、サブディレクトリが含まれていないことを確認してください。
次のような内容を指定します。
{
"$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"
}]
}
テンプレート ファイルの場所を記録しておきます。 ターミナルでコマンド pwd を実行して、パスを出力できます。 このパスは、後でテスト ツールキットを実行するときにパラメーターとして使用します。
テスト ツールキットを実行し、テンプレートの問題を検出して修正する
Visual Studio Code と統合ターミナルを開始することをお勧めします。
デプロイ テンプレートが含まれているパスでテスト ツールキットを実行し、テンプレートを変更することによって検出されたエラーを修正します。
警告
この演習では、1 つのテンプレート ファイルをスキャンします。 テスト ツールキットにより、指定したディレクトリの下にあるすべてのファイルがスキャンされます。 この動作は、デプロイに複数のファイルが含まれている可能性があるためです。 azuredeploy.json が配置されているディレクトリの下に JSON ファイルがないことを確認します。
ターミナルで、 azuredeploy.json ファイルが存在するパスに移動します。 次のコマンドを実行して Visual Studio Code を開始します。
code .注
Visual Studio Code がパス上にない場合は、手動で Visual Studio Code を開き、テンプレート ディレクトリを開きます。
Visual Studio Code で、上部のメニューから>を選択して統合ターミナルを開きます。 ターミナルで次のコマンドを実行して、PowerShell シェルを開始します。
pwsh次のような出力が表示されるはずです。
PowerShell 7.0.3 Copyright (c) Microsoft Corporation. All rights reserved. https://aka.ms/powershell Type 'help' to get help.
テンプレートを分析する
Import-Moduleを実行して、どこからでもテストを実行できるようにします。注
モジュールをインポートする前に、 path/to/arm-ttk/arm-ttk.psd1 をダウンロードしたテスト ツールキットへのパスに置き換えます。
Import-Module path/to/arm-ttk/arm-ttk.psd1ヒント
ツールをダウンロードディレクトリに保存またはコピーした場合、パスは次のようになります: /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1。
これで、ツールを使用する準備が整いました。 同じ PowerShell セッションを使用している限り、インポート コマンドをもう一度実行する必要はありません。
Test-AzTemplateを実行し、パラメーター-TemplatePathでテンプレート ファイルのパスを指定します (ファイル名は除く)。Test-AzTemplate -TemplatePath .次のような出力がターミナルに表示されます。
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)上記の出力は、2 つのテストが失敗する方法を示しています。リソースには場所とパラメーターを参照する必要があります。 プレフィックス
[-]は失敗したテストを示します。何が起こっているかを理解するには、 azuredeploy.json ファイルを開きます。 次のようになります。
{ "$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" }] }次の 2 つの理由により、テストが失敗しています。
- location パラメーターは使用されません。 このエラー メッセージは、たとえば、過去にパラメーターを使用して、そのクリーンアップを忘れていることを示している可能性があります。 または、使用する必要があるのに、コードの更新を忘れているのかもしれません。
- location プロパティは、ハードコーディングされた文字列 westus に設定されます。 デプロイ時に入力パラメーターを使用してリソースの場所を制御できるようにしたいので、このオプションの使用はよいプラクティスとは見なされません。
テンプレートに修正を適用する
失敗したテストを修正するにはどうすればよいでしょうか。
テストで示されているように、 westus をテキスト グローバルに置き換えてみてください。 しかし、それでは問題の 1 つが修正されるだけです。 多くの場合、 location パラメーターを使用し、リソースの場所をその値に設定します。
その理由は 2 つあります。 デプロイのパラメーターとして location パラメーターを設定できるだけでなく、デプロイの実行時に location パラメーターの設定を省略した場合は、resourceGroup().location に defaultValue として設定されるという適切なフォールバックもあります。
resources 配列内の最初のリソース項目を見つけて、次の内容を置き換えます。
"resources": [{ "location": "westus" }]次のような内容にします。
"resources": [{ "location": "[parameters('location')]" }]統合ターミナルでテスト ツールをもう一度実行して、修正内容を検証します。
Test-AzTemplate -TemplatePath .これで、すべてのテストに合格したことが出力で示されるようになります。
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)
成功しました! テスト ツールを実行し、エラーを検出して修正できました。
- Windows への PowerShell のインストールに関する記事の手順に従います。
- Visual Studio Code から、 PowerShell 拡張機能をインストールします。
テスト ツールキットをダウンロードする
テスト ツールキットは、GitHub リポジトリにあります。 次の操作のいずれかを選択します。
git cloneを実行して、リポジトリをクローンします。git clone https://github.com/Azure/arm-ttk.gitブラウザーから、 リポジトリを .zip ファイルとしてダウンロードします。
テスト ツールキットを調べる
テスト ツールキットを選択したディレクトリにダウンロードしました。 ディレクトリ構造を見てみましょう。 (git clone コマンドを実行する代わりに .zip ファイルをダウンロードすることを選択した場合は、ファイルが解凍されていることを確認してください。)ARM テスト ツールキットのディレクトリに移動すると、次のようなディレクトリ構造になっているはずです。
-| arm-ttk\
-| unit-tests\
-| CODE_OF_CONDUCT.md
-| LICENCE.md
-| README.md
-| SECURITY.md
テスト ツールキットはサブディレクトリ \arm-ttk にあります。
テンプレート ファイルを作成する
C:\Temp など、azuredeploy.json という名前のファイルを任意のディレクトリに作成します。
警告
選択したディレクトリは空で、サブディレクトリが含まれていないことを確認してください。
次のような内容を指定します。
{
"$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"
}]
}
テンプレート ファイルの場所を記録しておきます。 このディレクトリ パス ( C:\Temp など) は、後でテスト ツールキットを実行するときにパラメーターとして使用します。
テスト ツールキットを実行し、テンプレートの問題を検出して修正する
Visual Studio Code と統合ターミナルを開始することをお勧めします。
デプロイ テンプレートが含まれているパスでテスト ツールキットを実行し、テンプレートを変更することによって検出されたエラーを修正します。
警告
この演習では、1 つのテンプレート ファイルをスキャンします。 テスト ツールキットにより、指定したディレクトリの下にあるすべてのファイルがスキャンされます。 この動作は、デプロイに複数のファイルが含まれている可能性があるためです。 azuredeploy.json が配置されているディレクトリの下に JSON ファイルがないことを確認します。
ターミナルで、 azuredeploy.json ファイルが存在するパスに移動します。 次のコマンドを実行して Visual Studio Code を開始します。
code .注
Visual Studio Code がパス上にない場合は、手動で Visual Studio Code を開き、テンプレート ディレクトリを開きます。
Visual Studio Code からコマンド パレットを表示し、 PowerShell: 統合コンソールの表示コマンドを選択します。
テンプレートを分析する
PowerShell ターミナルで
Import-Moduleを実行します。注
モジュールをインポートする前に、 パス\to\arm-ttk\arm-ttk.psd1 をダウンロードしたテスト ツールキットへのパスに置き換えます。
Import-Module path\to\arm-ttk\arm-ttk.psd1上記のコマンドによって、テスト ツールキット モジュールの場所が指定されます。
ヒント
ダウンロード ディレクトリに ツールをダウンロードまたは複製した場合、パスは C:\Users\<user>\Downloads\arm-ttk\arm-ttk\arm-ttk.psd1 のようになります。
これで、ツールを使用する準備が整いました。 同じ PowerShell セッションを使用している限り、インポート コマンドをもう一度実行する必要はありません。
注
新しい PowerShell セッションを開始する場合、
Import-Moduleコマンドをもう一度実行する必要があります。PowerShell ターミナルで
Test-AzTemplateを実行して、テストの実行を開始します。Test-AzTemplate -TemplatePath .次のような出力がターミナルに表示されます。
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上記の出力は、3つのテストが失敗していることを示しています。それらはLocation Should Not Be Hardcoded、Parameters Must Be Referenced、およびResources Should Have Locationです。 プレフィックス
[-]は失敗したテストを示します。何が起こっているかを理解するには、 azuredeploy.json ファイルを開きます。 次のようになります。
{ "$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" }] }次の 2 つの理由により、テストが失敗しています。
- location パラメーターは使用されません。 このエラー メッセージは、たとえば、過去にパラメーターを使用して、そのクリーンアップを忘れていることを示している可能性があります。 または、使用する必要があるのに、コードの更新を忘れているのかもしれません。
- location プロパティは、ハードコーディングされた文字列 westus に設定されます。 デプロイ時に入力パラメーターを使用してリソースの場所を制御できるようにしたいので、このオプションの使用はよいプラクティスとは見なされません。
テンプレートに修正を適用する
失敗したテストを修正するにはどうすればよいでしょうか。
テストで示されているように、 westus をテキスト グローバルに置き換えてみてください。 しかし、それでは問題の 1 つが修正されるだけです。 多くの場合、 location パラメーターを使用し、リソースの場所をその値に設定します。
その理由は 2 つあります。 デプロイのパラメーターとして location パラメーターを設定できるだけでなく、デプロイの実行時に location パラメーターの設定を省略した場合は、resourceGroup().location に defaultValue として設定されるという適切なフォールバックもあります。
resources 配列内の最初のリソース項目を見つけて、次の内容を置き換えます。
"resources": [{ "location": "westus" }]次のような内容にします。
"resources": [{ "location": "[parameters('location')]" }]Test-AzTemplateを実行して、もう一度テスト ツールを実行します。Test-AzTemplate -TemplatePath .これで、すべてのテストに合格したことが出力で示されるようになります。
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
成功しました! テスト ツールを実行し、エラーを検出して修正できました。
これで、テンプレートに対するテストを実行する準備が整いました。