중첩된 템플릿을 사용하여 DevTest Labs 환경 배포

중첩된 배포는 기본 템플릿 내에서 보조 ARM(Azure Resource Manager) 템플릿을 실행합니다. 이 문서에서는 Azure DevTest Labs 환경을 배포하기 위한 중첩 템플릿의 예를 보여 줍니다. DevTest Labs 환경에는 PaaS(Platform-as-a-Service) 리소스가 설치된 여러 IaaS(Infrastructure-as-a-Service) VM(가상 머신)이 포함되어 있습니다. ARM 템플릿을 사용하여 PaaS 리소스 및 VM을 프로비저닝할 수 있습니다.

배포를 대상이 지정된 목적별 템플릿 집합으로 분해하면 테스트, 재사용 및 가독성 면에서 이점이 제공됩니다. 코드 샘플을 포함하여 중첩된 템플릿에 대한 일반적인 정보는 Azure 리소스를 배포할 때 연결된 및 중첩된 템플릿 사용을 참조하세요.

Visual Studio를 사용하여 중첩된 템플릿 배포

Visual Studio의 Azure Resource Group 프로젝트 템플릿을 사용하면 ARM 템플릿을 쉽게 개발하고 디버그할 수 있습니다. 중첩된 템플릿을 기본 azuredeploy.json 템플릿 파일에 추가하면 Visual Studio에서 템플릿을 보다 유연하게 만들기 위해 다음 항목을 추가합니다.

  • 보조 템플릿 및 매개 변수 파일이 있는 하위 폴더
  • 기본 템플릿 파일의 변수 이름
  • 두 개의 주요 매개 변수 _artifactsLocation_artifactsLocationSasToken

DevTest Labs에서는 랩에 링크하는 Git 리포지토리에 ARM 템플릿을 저장합니다. 연결된 리포지토리 템플릿 중 하나를 사용하여 새 환경을 만드는 경우 배포는 템플릿 파일을 랩의 Azure Storage 컨테이너에 복사합니다. 중첩된 템플릿 리소스를 리포지토리 및 기본 템플릿 파일에 추가하면 Visual Studio에서 _artifactsLocation_artifactsLocationSasToken 값을 식별하고 하위 폴더를 스토리지 컨테이너에 복사하고 위치 및 SaS(공유 액세스 서명) 토큰을 매개 변수 파일에 삽입합니다.

중첩된 템플릿 폴더 구조

다음 템플릿 예에서 Git 리포지토리 폴더에는 중첩된 템플릿 파일 NestOne.jsonNestOne.parameters.json이 있는 nestedtemplates 하위 폴더가 있습니다. azuredeploy.json 기본 템플릿 파일은 아티팩트 위치, 중첩된 템플릿 폴더 및 중첩된 템플릿 파일 이름을 사용하여 보조 템플릿에 대한 URI를 빌드합니다. 매개 변수 파일의 URI는 아티팩트 위치, 중첩된 템플릿 폴더 및 중첩된 템플릿 매개 변수 파일입니다. 기본 폴더에 중첩된 템플릿 하위 폴더를 더 추가할 수 있지만 하나의 중첩 수준에서만 가능합니다.

다음 스크린샷은 Visual Studio의 프로젝트 구조를 보여 줍니다.

Screenshot that shows the nested template project structure in Visual Studio.

중첩된 배포 예제

다음 예는 중첩된 배포를 위한 기본 azuredeploy.json ARM 템플릿 파일을 보여 줍니다.


"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
    "_artifactsLocation": {
        "type": "string"
    },
    "_artifactsLocationSasToken": {
        "type": "securestring"
    }},
"variables": {
    "NestOneTemplateFolder": "nestedtemplates",
    "NestOneTemplateFileName": "NestOne.json",
    "NestOneTemplateParametersFileName": "NestOne.parameters.json"},
    "resources": [
    {
        "name": "NestOne",
        "type": "Microsoft.Resources/deployments",
        "apiVersion": "2016-09-01",
        "dependsOn": [ ],
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            },
            "parametersLink": {
                "uri": "[concat(parameters('_artifactsLocation'), '/', variables('NestOneTemplateFolder'), '/', variables('NestOneTemplateParametersFileName'), parameters('_artifactsLocationSasToken'))]",
                "contentVersion": "1.0.0.0"
            }
        }    
    }],
"outputs": {}

다음 단계