연습 - ARM 템플릿 테스트 도구 키트를 사용하여 템플릿에 모범 사례 적용
Tailwind Traders 회사의 개발 팀에 속한다고 가정합니다. 해당 작업의 일환으로 클라우드에서 리소스를 배포하고 관리하기 위해 ARM(Azure Resource Manager) 템플릿을 작성해야 합니다. 리소스가 배포되기 전에 템플릿이 몇 가지 모범 사례를 따르는지 확인하려고 합니다. ARM 템플릿 테스트 도구 키트 사용을 선택하면 템플릿을 분석하여 문제를 해결할 수 있습니다.
테스트 환경 설정
해당 도구는 PowerShell 모듈입니다. 이를 실행하려면 다음 단계를 사용합니다.
- PowerShell 모듈을 설치합니다. 이 작업은 사용하는 운영 체제가 Linux인지 Mac 또는 Windows인지에 따라 다르게 수행됩니다.
- 모듈을 다운로드합니다. GitHub 리포지토리에 모듈이 호스트되어 있습니다. 거기에서 다운로드하거나
git clone
명령을 통해 가져올 수 있습니다. - 모듈을 가져옵니다. 이번 단계는 PowerShell 세션에 입력하여 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 및 통합 터미널을 시작하는 것이 좋습니다.
배포 템플릿이 포함된 경로에서 테스트 도구 키트를 실행하고 템플릿을 변경하여 검색된 오류를 해결합니다.
경고
이 연습에서는 하나의 템플릿 파일을 검색합니다. 테스트 도구 키트는 지정한 디렉터리 아래에 있는 모든 파일을 검사합니다. 그 이유는 배포에 여러 파일이 포함될 수 있기 때문입니다. 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
팁
Downloads 디렉터리에 도구를 다운로드했거나 복제한 경우 경로는 /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1과 같이 표시됩니다.
이제 도구를 사용할 준비가 되었습니다. 동일한 PowerShell 세션에서는 가져오기 명령을 다시 실행하지 않아도 됩니다.
템플릿 파일 경로(파일 이름 제외)의 위치를 가리키는
-TemplatePath
매개 변수를 사용하여Test-AzTemplate
을 실행합니다.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)
출력에서 다음 두 테스트가 어떻게 실패하는지 확인합니다. Resources Should Have Location 및 Parameters Must Be Referenced. 접두사
[-]
는 실패한 테스트를 나타냅니다.진행 상황을 파악하려면 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" }] }
테스트는 다음과 같은 두 가지 이유로 실패합니다.
- location 매개 변수가 사용되지 않았습니다. 이 오류 메시지는 예를 들어 이전에 해당 매개 변수를 사용하고는 정리하지 않았음을 나타냅니다. 또는 해당 매개 변수를 사용해야 하지만 코드를 업데이트하지 않았음을 나타냅니다.
- 위치 속성이 하드 코드된 문자열 westus로 설정되어 있습니다. 배포하는 동안 입력 매개 변수를 사용하여 리소스의 위치를 제어하려면 이 옵션을 사용하지 않는 것이 좋습니다.
템플릿에 수정 사항 적용
실패한 테스트는 어떻게 수정하나요?
테스트에서 알 수 있듯이 westus를 global이라는 텍스트로 바꿀 수 있습니다. 그러나 이 방법은 문제 중 하나만 수정합니다. 대부분 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)
성공! 테스트 도구를 실행하고 오류를 찾아 수정했습니다.
macOS에서 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 및 통합 터미널을 시작하는 것이 좋습니다.
배포 템플릿이 포함된 경로에서 테스트 도구 키트를 실행하고 템플릿을 변경하여 검색된 오류를 해결합니다.
경고
이 연습에서는 하나의 템플릿 파일을 검색합니다. 테스트 도구 키트는 지정한 디렉터리 아래에 있는 모든 파일을 검사합니다. 그 이유는 배포에 여러 파일이 포함될 수 있기 때문입니다. 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
팁
Downloads 디렉터리에 도구를 다운로드했거나 복제한 경우 경로는 /Users/<user>/Downloads/arm-ttk/arm-ttk/arm-ttk.psd1과 같이 표시됩니다.
이제 도구를 사용할 준비가 되었습니다. 동일한 PowerShell 세션에서는 가져오기 명령을 다시 실행하지 않아도 됩니다.
템플릿 파일 경로(파일 이름 제외)의 위치를 가리키는
-TemplatePath
매개 변수를 사용하여Test-AzTemplate
을 실행합니다.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)
앞의 출력은 다음 두 테스트가 어떻게 실패하는지 보여 줍니다. Resources Should Have Location 및 Parameters Must Be Referenced. 접두사
[-]
는 실패한 테스트를 나타냅니다.진행 상황을 파악하려면 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" }] }
테스트는 다음과 같은 두 가지 이유로 실패합니다.
- location 매개 변수가 사용되지 않았습니다. 이 오류 메시지는 예를 들어 이전에 해당 매개 변수를 사용하고는 정리하지 않았음을 나타냅니다. 또는 해당 매개 변수를 사용해야 하지만 코드를 업데이트하지 않았음을 나타냅니다.
- 위치 속성이 하드 코드된 문자열 westus로 설정되어 있습니다. 배포하는 동안 입력 매개 변수를 사용하여 리소스의 위치를 제어하려면 이 옵션을 사용하지 않는 것이 좋습니다.
템플릿에 수정 사항 적용
실패한 테스트는 어떻게 수정하나요?
테스트에서 알 수 있듯이 westus를 global이라는 텍스트로 바꿀 수 있습니다. 그러나 이 방법은 문제 중 하나만 수정합니다. 대부분 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 및 통합 터미널을 시작하는 것이 좋습니다.
배포 템플릿이 포함된 경로에서 테스트 도구 키트를 실행하고 템플릿을 변경하여 검색된 오류를 해결합니다.
경고
이 연습에서는 하나의 템플릿 파일을 검색합니다. 테스트 도구 키트는 지정한 디렉터리 아래에 있는 모든 파일을 검사합니다. 그 이유는 배포에 여러 파일이 포함될 수 있기 때문입니다. azuredeploy.json이 있는 디렉터리 아래에 JSON 파일이 없는지 확인합니다.
터미널에서 azuredeploy.json 파일이 있는 경로로 이동합니다. 다음 명령을 실행하여 Visual Studio Code를 시작합니다.
code .
참고
Visual Studio Code가 해당 경로에 없는 경우 Visual Studio Code를 수동으로 열고 템플릿 디렉터리를 엽니다.
Visual Studio Code에서 명령 팔레트를 열고 ‘PowerShell: 통합 콘솔 표시’ 명령을 선택합니다.
템플릿 분석
PowerShell 터미널에서
Import-Module
을 실행합니다.참고
모듈을 가져오기 전에 path\to\arm-ttk\arm-ttk.psd1을 다운로드한 테스트 도구 키트의 경로로 바꿉니다.
Import-Module path\to\arm-ttk\arm-ttk.psd1
앞의 명령은 테스트 도구 키트 모듈의 위치를 가리킵니다.
팁
Downloads 디렉터리에 도구를 다운로드했거나 복제한 경우 경로는 \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
위의 출력은 다음 세 가지 테스트가 어떻게 실패하는지 보여 줍니다. 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" }] }
테스트는 다음과 같은 두 가지 이유로 실패합니다.
- location 매개 변수가 사용되지 않았습니다. 이 오류 메시지는 예를 들어 이전에 해당 매개 변수를 사용하고는 정리하지 않았음을 나타냅니다. 또는 해당 매개 변수를 사용해야 하지만 코드를 업데이트하지 않았음을 나타냅니다.
- 위치 속성이 하드 코드된 문자열 westus로 설정되어 있습니다. 배포하는 동안 입력 매개 변수를 사용하여 리소스의 위치를 제어하려면 이 옵션을 사용하지 않는 것이 좋습니다.
템플릿에 수정 사항 적용
실패한 테스트는 어떻게 수정하나요?
테스트에서 알 수 있듯이 westus를 global이라는 텍스트로 바꿀 수 있습니다. 그러나 이 방법은 문제 중 하나만 수정합니다. 대부분 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
성공! 테스트 도구를 실행하고 오류를 찾아 수정했습니다.
이제 템플릿에서 테스트를 실행할 준비가 되었습니다.