ARM 템플릿 테스트 도구 키트에 대 한 기본 테스트 사례Default test cases for ARM template test toolkit

이 문서에서는 템플릿 테스트 도구 키트를 사용 하 여 실행 되는 기본 테스트에 대해 설명 합니다.This article describes the default tests that are run with the template test toolkit. 테스트를 통과 또는 실패 하는 예제를 제공 합니다.It provides examples that pass or fail the test. 각 테스트의 이름을 포함 합니다.It includes the name of each test.

올바른 스키마 사용Use correct schema

테스트 이름: Deploymenttemplate 스키마가 올바릅니다 .Test name: DeploymentTemplate Schema Is Correct

템플릿에서 유효한 스키마 값을 지정 해야 합니다.In your template, you must specify a valid schema value.

다음 예에서는이 테스트를 통과 합니다.The following example passes this test.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {},
  "resources": []
}

템플릿의 schema 속성은 다음 스키마 중 하나로 설정 되어야 합니다.The schema property in the template must be set to one of the following schemas:

  • https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2018-05-01/subscriptionDeploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-08-01/tenantDeploymentTemplate.json#
  • https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json

매개 변수가 있어야 합니다.Parameters must exist

테스트 이름: Parameters 속성이 있어야 합니다 .Test name: Parameters Property Must Exist

템플릿에 매개 변수 요소가 있어야 합니다.Your template should have a parameters element. 매개 변수는 템플릿을 여러 환경에서 재사용할 수 있도록 하는 데 필수적입니다.Parameters are essential for making your templates reusable in different environments. 다른 환경에 배포할 때 변경 되는 값에 대 한 매개 변수를 템플릿에 추가 합니다.Add parameters to your template for values that change when deploying to different environments.

다음 예제에서는이 테스트를 통과 합니다.The following example passes this test:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
      "vmName": {
          "type": "string",
          "defaultValue": "linux-vm",
          "metadata": {
            "description": "Name for the Virtual Machine."
          }
      }
  },
  ...

선언 된 매개 변수를 사용 해야 합니다.Declared parameters must be used

테스트 이름: 매개 변수를 참조 해야 합니다 .Test name: Parameters Must Be Referenced

템플릿의 혼동을 줄이려면 정의 되었지만 사용 되지 않는 매개 변수를 삭제 합니다.To reduce confusion in your template, delete any parameters that are defined but not used. 이 테스트는 템플릿의 모든 위치에서 사용 되지 않는 매개 변수를 찾습니다.This test finds any parameters that aren't used anywhere in the template. 불필요 한 매개 변수를 제거 하면 불필요 한 값을 제공할 필요가 없기 때문에 템플릿을 쉽게 배포할 수 있습니다.Eliminating unused parameters also makes it easier to deploy your template because you don't have to provide unnecessary values.

보안 매개 변수에는 하드 코드 된 기본값을 사용할 수 없습니다.Secure parameters can't have hardcoded default

테스트 이름: 보안 문자열 매개 변수에는 기본값을 사용할 수 없습니다 .Test name: Secure String Parameters Cannot Have Default

템플릿의 보안 매개 변수에 하드 코드 된 기본값을 제공 하지 마십시오.Don't provide a hard-coded default value for a secure parameter in your template. 기본값은 빈 문자열입니다.An empty string is fine for the default value.

암호와 같은 중요 한 값을 포함 하는 매개 변수에는 SecureString 또는 secureobject 유형을 사용 합니다.You use the types SecureString or SecureObject on parameters that contain sensitive values, like passwords. 매개 변수가 보안 유형을 사용 하는 경우 매개 변수 값이 기록 되지 않거나 배포 기록에 저장 되지 않습니다.When a parameter uses a secure type, the value of the parameter isn't logged or stored in the deployment history. 이 작업을 수행 하면 악의적인 사용자가 중요 한 값을 검색 하지 못합니다.This action prevents a malicious user from discovering the sensitive value.

그러나 기본값을 제공 하는 경우 해당 값은 템플릿이나 배포 기록에 액세스할 수 있는 모든 사용자가 검색할 수 있습니다.However, when you provide a default value, that value is discoverable by anyone who can access the template or the deployment history.

다음 예에서는이 테스트에 실패 합니다.The following example fails this test:

"parameters": {
    "adminPassword": {
        "defaultValue": "HardcodedPassword",
        "type": "SecureString"
    }
}

다음 예제에서는이 테스트를 통과 합니다.The next example passes this test:

"parameters": {
    "adminPassword": {
        "type": "SecureString"
    }
}

환경 Url은 하드 코딩 될 수 없습니다.Environment URLs can't be hardcoded

테스트 이름: Deploymenttemplate에 하드 코딩 Uri가 포함 되지 않아야 합니다 .Test name: DeploymentTemplate Must Not Contain Hardcoded Uri

템플릿에서 환경 Url을 하드 코딩 하지 마세요.Don't hardcode environment URLs in your template. 대신 환경 함수 를 사용 하 여 배포 중에 이러한 url을 동적으로 가져옵니다.Instead, use the environment function to dynamically get these URLs during deployment. 차단 된 URL 호스트 목록은 테스트 사례를 참조 하세요.For a list of the URL hosts that are blocked, see the test case.

URL이 하드 코딩 되었으므로 다음 예제는이 테스트에 실패 합니다.The following example fails this test because the URL is hardcoded.

"variables":{
    "AzureURL":"https://management.azure.com"
}

Concat 또는 uri와 함께 사용 하는 경우에도 테스트가 실패 합니다.The test also fails when used with concat or uri.

"variables":{
    "AzureSchemaURL1": "[concat('https://','gallery.azure.com')]",
    "AzureSchemaURL2": "[uri('gallery.azure.com','test')]"
}

다음 예에서는이 테스트를 통과 합니다.The following example passes this test.

"variables": {
    "AzureSchemaURL": "[environment().gallery]"
},

위치에서 매개 변수 사용Location uses parameter

테스트 이름: 위치는 하드 코드 되어서는 안 됩니다 .Test name: Location Should Not Be Hardcoded

템플릿의 사용자는 제한 된 영역을 사용할 수 있습니다.Users of your template may have limited regions available to them. 리소스 위치를로 설정 하면 "[resourceGroup().location]" 리소스 그룹이 다른 사용자가 액세스할 수 없는 지역에 만들어졌을 수 있습니다.When you set the resource location to "[resourceGroup().location]", the resource group may have been created in a region that other users can't access. 이러한 사용자는 템플릿 사용을 차단 합니다.Those users are blocked from using the template.

각 리소스의 위치를 정의 하는 경우 리소스 그룹 위치에 대 한 기본값을 사용 하는 매개 변수를 사용 합니다.When defining the location for each resource, use a parameter that defaults to the resource group location. 사용자는이 매개 변수를 제공 하 여 편의를 위해 기본 값을 사용할 수 있지만 다른 위치를 지정할 수도 있습니다.By providing this parameter, users can use the default value when convenient but also specify a different location.

다음 예제에서는 리소스의 위치가로 설정 되어 있으므로이 테스트에 실패 합니다 resourceGroup().location .The following example fails this test because location on the resource is set to resourceGroup().location.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "name": "storageaccount1",
            "location": "[resourceGroup().location]",
            "kind": "StorageV2",
            "sku": {
                "name": "Premium_LRS",
                "tier": "Premium"
            }
        }
    ]
}

다음 예제에서는 위치 매개 변수를 사용 하지만 위치 매개 변수의 기본값은 하드 코드 된 위치 이므로이 테스트에 실패 합니다.The next example uses a location parameter but fails this test because the location parameter defaults to a hardcoded location.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "defaultValue": "westus"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "name": "storageaccount1",
            "location": "[parameters('location')]",
            "kind": "StorageV2",
            "sku": {
                "name": "Premium_LRS",
                "tier": "Premium"
            }
        }
    ],
    "outputs": {}
}

대신 리소스 그룹 위치로 기본 설정 되는 매개 변수를 만들지만 사용자가 다른 값을 제공할 수 있도록 합니다.Instead, create a parameter that defaults to the resource group location but allows users to provide a different value. 다음 예에서는이 테스트를 통과 합니다.The following example passes this test.

{
    "$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."
            }
        }
     },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "name": "storageaccount1",
            "location": "[parameters('location')]",
            "kind": "StorageV2",
            "sku": {
                "name": "Premium_LRS",
                "tier": "Premium"
            }
        }
    ],
    "outputs": {}
}

리소스에 위치가 있어야 합니다.Resources should have location

테스트 이름: 리소스에 위치가 있어야 합니다 .Test name: Resources Should Have Location

리소스의 위치는 템플릿 식 또는로 설정 해야 합니다 global .The location for a resource should be set to a template expression or global. 일반적으로 템플릿 식은 이전 테스트에서 설명한 location 매개 변수를 사용 합니다.The template expression would typically use the location parameter described in the previous test.

다음 예에서는 위치가 식이나가 아니기 때문에이 테스트에 실패 합니다 global .The following example fails this test because the location isn't an expression or global.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "functions": [],
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "name": "storageaccount1",
            "location": "westus",
            "kind": "StorageV2",
            "sku": {
                "name": "Premium_LRS",
                "tier": "Premium"
            }
        }
    ],
    "outputs": {}
}

다음 예에서는이 테스트를 통과 합니다.The following example passes this test.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {},
    "functions": [],
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Maps/accounts",
            "apiVersion": "2020-02-01-preview",
            "name": "demoMap",
            "location": "global",
            "sku": {
                "name": "S0"
            }
        }
    ],
    "outputs": {
    }
}

다음 예제에서는이 테스트도 통과 합니다.The next example also passes this test.

{
    "$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."
            }
        }
     },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "apiVersion": "2019-06-01",
            "name": "storageaccount1",
            "location": "[parameters('location')]",
            "kind": "StorageV2",
            "sku": {
                "name": "Premium_LRS",
                "tier": "Premium"
            }
        }
    ],
    "outputs": {}
}

VM 크기 사용 매개 변수VM size uses parameter

테스트 이름: VM 크기는 매개 변수 여야 합니다 .Test name: VM Size Should Be A Parameter

가상 컴퓨터 크기를 하드 코딩 하지 마세요.Don't hardcode the virtual machine size. 템플릿의 사용자가 배포 된 가상 머신의 크기를 수정할 수 있도록 매개 변수를 제공 합니다.Provide a parameter so users of your template can modify the size of the deployed virtual machine.

다음 예제에서는이 테스트가 실패 합니다.The following example fails this test.

"hardwareProfile": {
    "vmSize": "Standard_D2_v3"
}

대신 매개 변수를 제공 합니다.Instead, provide a parameter.

"vmSize": {
    "type": "string",
    "defaultValue": "Standard_A2_v2",
    "metadata": {
        "description": "Size for the Virtual Machine."
    }
},

그런 다음 VM 크기를 해당 매개 변수로 설정 합니다.Then, set the VM size to that parameter.

"hardwareProfile": {
    "vmSize": "[parameters('vmSize')]"
},

Min 및 max 값은 숫자입니다.Min and max values are numbers

테스트 이름: Min 및 Max 값은 숫자입니다 .Test name: Min And Max Value Are Numbers

매개 변수에 대 한 최소값 및 최대값을 정의 하는 경우 해당 값을 숫자로 지정 합니다.If you define min and max values for a parameter, specify them as numbers.

다음 예에서는이 테스트에 실패 합니다.The following example fails this test:

"exampleParameter": {
    "type": "int",
    "minValue": "0",
    "maxValue": "10"
},

대신 숫자 값을 제공 합니다.Instead, provide the values as numbers. 다음 예제에서는이 테스트를 통과 합니다.The following example passes this test:

"exampleParameter": {
    "type": "int",
    "minValue": 0,
    "maxValue": 10
},

최소값 또는 최대값을 제공 하지만 다른 값은 제공 하지 않는 경우에도이 경고가 발생 합니다.You also get this warning if you provide a min or max value, but not the other.

아티팩트 매개 변수가 올바르게 정의 되었습니다.Artifacts parameter defined correctly

테스트 이름: 아티팩트 매개 변수Test name: artifacts parameter

및에 대 한 매개 변수를 포함 하는 경우 _artifactsLocation _artifactsLocationSasToken 올바른 기본값과 유형을 사용 합니다.When you include parameters for _artifactsLocation and _artifactsLocationSasToken, use the correct defaults and types. 이 테스트를 통과 하려면 다음 조건을 충족 해야 합니다.The following conditions must be met to pass this test:

  • 하나의 매개 변수를 제공 하는 경우 다른 매개 변수를 제공 해야 합니다.if you provide one parameter, you must provide the other
  • _artifactsLocation문자열 이어야 합니다._artifactsLocation must be a string
  • _artifactsLocation 주 템플릿의 기본값이 있어야 합니다._artifactsLocation must have a default value in the main template
  • _artifactsLocation 중첩 된 템플릿에는 기본값을 사용할 수 없습니다._artifactsLocation can't have a default value in a nested template
  • _artifactsLocation``"[deployment().properties.templateLink.uri]"기본값에 대해 또는 원시 리포지토리 URL이 있어야 합니다._artifactsLocation must have either "[deployment().properties.templateLink.uri]" or the raw repo URL for its default value
  • _artifactsLocationSasTokensecureString 이어야 합니다._artifactsLocationSasToken must be a secureString
  • _artifactsLocationSasToken 기본값에는 빈 문자열만 사용할 수 있습니다._artifactsLocationSasToken can only have an empty string for its default value
  • _artifactsLocationSasToken 중첩 된 템플릿에는 기본값을 사용할 수 없습니다._artifactsLocationSasToken can't have a default value in a nested template

선언 된 변수를 사용 해야 합니다.Declared variables must be used

테스트 이름: 변수를 참조 해야 합니다 .Test name: Variables Must Be Referenced

템플릿에서 혼동을 줄이려면 정의 되었지만 사용 되지 않는 모든 변수를 삭제 합니다.To reduce confusion in your template, delete any variables that are defined but not used. 이 테스트는 템플릿의 모든 위치에서 사용 되지 않는 변수를 찾습니다.This test finds any variables that aren't used anywhere in the template.

동적 변수는 concat을 사용 하면 안 됩니다.Dynamic variable should not use concat

테스트 이름: 동적 변수 참조는 Concat를 사용 하면 안 됩니다 .Test name: Dynamic Variable References Should Not Use Concat

다른 변수 또는 매개 변수의 값을 기반으로 변수를 동적으로 생성 해야 하는 경우도 있습니다.Sometimes you need to dynamically construct a variable based on the value of another variable or parameter. 값을 설정할 때 concat 함수를 사용 하지 마세요.Don't use the concat function when setting the value. 대신, 사용 가능한 옵션을 포함 하는 개체를 사용 하 고 배포 하는 동안 개체의 속성 중 하나를 동적으로 가져옵니다.Instead, use an object that includes the available options and dynamically get one of the properties from the object during deployment.

다음 예에서는이 테스트를 통과 합니다.The following example passes this test. 이러한 변수는 배포 하는 동안 동적으로 설정 됩니다.The currentImage variable is dynamically set during deployment.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
      "osType": {
          "type": "string",
          "allowedValues": [
              "Windows",
              "Linux"
          ]
      }
  },
  "variables": {
    "imageOS": {
        "Windows": {
            "image": "Windows Image"
        },
        "Linux": {
            "image": "Linux Image"
        }
    },
    "currentImage": "[variables('imageOS')[parameters('osType')].image]"
  },
  "resources": [],
  "outputs": {
      "result": {
          "type": "string",
          "value": "[variables('currentImage')]"
      }
  }
}

최근 API 버전 사용Use recent API version

테스트 이름: Apiversions는 최신 버전 이어야 합니다 .Test name: apiVersions Should Be Recent

각 리소스에 대 한 API 버전은 최신 버전을 사용 해야 합니다.The API version for each resource should use a recent version. 테스트는 사용 하는 버전을 해당 리소스 종류에 사용할 수 있는 버전에 대해 평가 합니다.The test evaluates the version you use against the versions available for that resource type.

하드 코딩 API 버전 사용Use hardcoded API version

테스트 이름: 공급자 apiVersions를 사용할 수 없습니다 .Test name: Providers apiVersions Is Not Permitted

리소스 유형에 대 한 API 버전은 사용할 수 있는 속성을 결정 합니다.The API version for a resource type determines which properties are available. 템플릿에 하드 코드 된 API 버전을 제공 합니다.Provide a hard-coded API version in your template. 배포 중에 결정 된 API 버전을 검색 하지 않습니다.Don't retrieve an API version that is determined during deployment. 사용할 수 있는 속성을 알 수 없습니다.You won't know which properties are available.

다음 예제에서는이 테스트가 실패 합니다.The following example fails this test.

"resources": [
    {
        "type": "Microsoft.Compute/virtualMachines",
        "apiVersion": "[providers('Microsoft.Compute', 'virtualMachines').apiVersions[0]]",
        ...
    }
]

다음 예에서는이 테스트를 통과 합니다.The following example passes this test.

"resources": [
    {
       "type": "Microsoft.Compute/virtualMachines",
       "apiVersion": "2019-12-01",
       ...
    }
]

속성은 비워 둘 수 없습니다.Properties can't be empty

테스트 이름: 템플릿에 공백이 포함 되 면 안 됩니다 .Test name: Template Should Not Contain Blanks

속성을 빈 값으로 하드 코딩 하지 마세요.Don't hardcode properties to an empty value. 빈 값은 null, 빈 문자열, 개체 또는 배열을 포함 합니다.Empty values include null and empty strings, objects, or arrays. 속성을 빈 값으로 설정한 경우 템플릿에서 해당 속성을 제거 합니다.If you've set a property to an empty value, remove that property from your template. 그러나 매개 변수를 통해 배포 하는 동안 속성을 빈 값으로 설정 하는 것이 좋습니다.However, it's okay to set a property to an empty value during deployment, such as through a parameter.

리소스 ID 함수 사용Use Resource ID functions

테스트 이름: Id는 Resourceid에서 파생 되어야 합니다 .Test name: IDs Should Be Derived From ResourceIDs

리소스 ID를 지정 하는 경우 리소스 ID 함수 중 하나를 사용 합니다.When specifying a resource ID, use one of the resource ID functions. 허용 되는 함수는 다음과 같습니다.The allowed functions are:

Concat 함수를 사용 하 여 리소스 ID를 만들지 마세요.Don't use the concat function to create a resource ID. 다음 예제에서는이 테스트가 실패 합니다.The following example fails this test.

"networkSecurityGroup": {
    "id": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.Network/networkSecurityGroups/', variables('networkSecurityGroupName'))]"
}

다음 예제에서는이 테스트를 통과 합니다.The next example passes this test.

"networkSecurityGroup": {
    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

ResourceId 함수에 올바른 매개 변수가 있습니다.ResourceId function has correct parameters

테스트 이름: resourceid는 다음을 포함할 수 없습니다 .Test name: ResourceIds should not contain

리소스 Id를 생성할 때는 선택적 매개 변수에 불필요 한 함수를 사용 하지 마세요.When generating resource IDs, don't use unnecessary functions for optional parameters. 기본적으로 resourceId 함수는 현재 구독 및 리소스 그룹을 사용 합니다.By default, the resourceId function uses the current subscription and resource group. 이러한 값은 제공 하지 않아도 됩니다.You don't need to provide those values.

다음 예에서는 현재 구독 ID와 리소스 그룹 이름을 제공할 필요가 없기 때문에이 테스트에 실패 합니다.The following example fails this test, because you don't need to provide the current subscription ID and resource group name.

"networkSecurityGroup": {
    "id": "[resourceId(subscription().subscriptionId, resourceGroup().name, 'Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

다음 예제에서는이 테스트를 통과 합니다.The next example passes this test.

"networkSecurityGroup": {
    "id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
}

이 테스트는 다음에 적용 됩니다.This test applies to:

및의 경우를 사용 하 여 reference list* 리소스 ID를 생성할 때 테스트가 실패 concat 합니다.For reference and list*, the test fails when you use concat to construct the resource ID.

dependsOn 모범 사례dependsOn best practices

테스트 이름: DependsOn 모범 사례Test name: DependsOn Best Practices

배포 종속성을 설정 하는 경우 if 함수를 사용 하 여 조건을 테스트 하지 마세요.When setting the deployment dependencies, don't use the if function to test a condition. 조건에 따라 배포되는 리소스에 종속 된 리소스를 사용 하는 경우 모든 리소스를 사용 하는 것과 마찬가지로 종속성을 설정 합니다.If one resource depends on a resource that is conditionally deployed, set the dependency as you would with any resource. 조건부 리소스가 배포 되지 않은 경우 Azure Resource Manager은 필요한 종속성에서 자동으로 제거 합니다.When a conditional resource isn't deployed, Azure Resource Manager automatically removes it from the required dependencies.

다음 예제에서는이 테스트가 실패 합니다.The following example fails this test.

"dependsOn": [
    "[if(equals(parameters('newOrExisting'),'new'), variables('storageAccountName'), '')]"
]

다음 예제에서는이 테스트를 통과 합니다.The next example passes this test.

"dependsOn": [
    "[variables('storageAccountName')]"
]

중첩 또는 연결 된 배포는 디버그를 사용할 수 없습니다.Nested or linked deployments can't use debug

테스트 이름: 배포 리소스는 디버그할 수 없습니다 .Test name: Deployment Resources Must Not Be Debug

Microsoft .resources/배포 리소스 종류를 사용 하 여 중첩 또는 연결 된 템플릿을 정의 하는 경우 해당 템플릿에 대해 디버깅을 사용 하도록 설정할 수 있습니다.When you define a nested or linked template with the Microsoft.Resources/deployments resource type, you can enable debugging for that template. 디버깅은 해당 템플릿을 테스트 해야 하지만 프로덕션에서 템플릿을 사용할 준비가 되었을 때 설정 해야 하는 경우에는 문제가 없습니다.Debugging is fine when you need to test that template but should be turned when you're ready to use the template in production.

관리 사용자 이름은 리터럴 값일 수 없습니다.Admin user names can't be literal value

테스트 이름: Adminusername은 리터럴이 아니어야 합니다 .Test name: adminUsername Should Not Be A Literal

관리 사용자 이름을 설정할 때는 리터럴 값을 사용 하지 마세요.When setting an admin user name, don't use a literal value.

다음 예에서는이 테스트에 실패 합니다.The following example fails this test:

"osProfile":  {
    "adminUserName":  "myAdmin"
},

대신 매개 변수를 사용 합니다.Instead, use a parameter. 다음 예제에서는이 테스트를 통과 합니다.The following example passes this test:

"osProfile": {
    "adminUsername": "[parameters('adminUsername')]"
}

최신 VM 이미지 사용Use latest VM image

테스트 이름: VM 이미지는 최신 버전을 사용 해야 합니다 .Test name: VM Images Should Use Latest Version

템플릿에 이미지를 포함 하는 가상 컴퓨터가 포함 된 경우 최신 버전의 이미지를 사용 하 고 있는지 확인 합니다.If your template includes a virtual machine with an image, make sure it's using the latest version of the image.

안정적인 VM 이미지 사용Use stable VM images

테스트 이름: Virtual Machines 미리 보기로 서는 안 됩니다 .Test name: Virtual Machines Should Not Be Preview

가상 컴퓨터는 미리 보기 이미지를 사용 하지 않아야 합니다.Virtual machines shouldn't use preview images.

다음 예제에서는이 테스트가 실패 합니다.The following example fails this test.

"imageReference": {
    "publisher": "Canonical",
    "offer": "UbuntuServer",
    "sku": "16.04-LTS",
    "version": "latest-preview"
}

다음 예에서는이 테스트를 통과 합니다.The following example passes this test.

"imageReference": {
    "publisher": "Canonical",
    "offer": "UbuntuServer",
    "sku": "16.04-LTS",
    "version": "latest"
},

Microsoft.managedidentity 확장 사용 안 함Don't use ManagedIdentity extension

테스트 이름: ManagedIdentityExtension를 사용 하면 안 됩니다 .Test name: ManagedIdentityExtension must not be used

가상 컴퓨터에 Microsoft.managedidentity 확장을 적용 하지 마세요.Don't apply the ManagedIdentity extension to a virtual machine. 자세한 내용은 가상 컴퓨터 관리 id 확장 사용을 중지 하는 방법 및 Azure Instance Metadata Service 사용 시작을 참조 하세요.For more information, see How to stop using the virtual machine managed identities extension and start using the Azure Instance Metadata Service.

출력에는 비밀을 포함할 수 없습니다.Outputs can't include secrets

테스트 이름: 출력은 암호를 포함할 수 없습니다 .Test name: Outputs Must Not Contain Secrets

잠재적으로 비밀을 노출 하는 출력 섹션에 값을 포함 하지 마세요.Don't include any values in the outputs section that potentially expose secrets. 템플릿의 출력은 배포 기록에 저장 되므로 악의적인 사용자가 해당 정보를 찾을 수 있습니다.The output from a template is stored in the deployment history, so a malicious user could find that information.

다음 예제에서는 출력 값에 보안 매개 변수를 포함 하기 때문에 테스트에 실패 합니다.The following example fails the test because it includes a secure parameter in an output value.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "secureParam": {
            "type": "securestring"
        }
    },
    "functions": [],
    "variables": {},
    "resources": [],
    "outputs": {
        "badResult": {
            "type": "string",
            "value": "[concat('this is the value ', parameters('secureParam'))]"
        }
    }
}

다음 예는 출력에서 list * 함수를 사용 하기 때문에 실패 합니다.The following example fails because it uses a list* function in the outputs.

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "storageName": {
            "type": "string"
        }
    },
    "functions": [],
    "variables": {},
    "resources": [],
    "outputs": {
        "badResult": {
            "type": "object",
            "value": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('storageName')), '2019-06-01')]"
        }
    }
}

다음 단계Next steps

테스트 도구 키트를 실행 하는 방법에 대 한 자세한 내용은 ARM 템플릿 테스트 도구 키트 사용을 참조 하세요.To learn about running the test toolkit, see Use ARM template test toolkit.