ARM 템플릿에서 Azure DevTest Labs 환경 만들기

이 문서에서는 ARM(Azure Resource Manager) 템플릿에서 Azure DevTest Labs 환경을 만드는 방법을 알아봅니다. DevTest Labs 환경을 사용하여 여러 VM(가상 머신) 또는 PaaS(Platform-as-a-Service) 리소스를 사용하여 랩을 쉽고 일관되게 프로비전할 수 있습니다. 예를 들어 다중 계층 웹 애플리케이션 또는 SharePoint 팜에 대한 랩을 만듭니다.

환경의 리소스는 동일한 수명 주기를 공유하며 함께 관리할 수 있습니다. 개별 랩 VM의 비용을 추적하는 것처럼 랩 환경 및 PaaS 리소스의 비용을 추적할 수 있습니다.

Azure DevTest Labs를 구성하여 공용 또는 프라이빗 Git 리포지토리의 ARM 템플릿을 사용할 수 있습니다. 랩의 템플릿 리포지토리에 대해 자세히 알아봅니다.

Diagram that shows how to create an environment with Azure DevTest Labs from an ARM template in a public or custom template repository.

ARM 템플릿을 사용하여 Azure DevTest Labs 리소스를 만들려면 빠른 시작: ARM 템플릿을 사용하여 DevTest Labs에서 랩 만들기를 참조하세요.

제한 사항

DevTest Labs의 ARM 템플릿에서 랩을 만들 때 다음 제한 사항을 고려합니다.

  • VM 자동 종료는 PaaS 리소스에 적용되지 않습니다.

  • ARM 템플릿을 배포할 때 모든 랩 정책이 평가되는 것은 아닙니다. 평가되지 않는 정책에는 랩 사용자당 VM 수, 사용자당 프리미엄 VM 수, 사용자당 프리미엄 데스크 수가 포함됩니다. 예를 들어 랩 정책은 사용자당 VM 5개로 제한할 수 있습니다. 그러나 사용자는 수십 개의 VM을 만드는 ARM 환경 템플릿을 배포할 수 있습니다.

템플릿에서 환경 만들기

Azure DevTest Labs 공용 템플릿 리포지토리에서 환경을 만들거나 랩에 프라이빗 템플릿 리포지토리를 추가할 수 있습니다.

랩에 대한 환경을 구성하는 방법을 알아봅니다. 예를 들어 템플릿 리포지토리를 구성하고, 공용 환경을 사용하거나 사용하지 않도록 설정하고, 랩을 만들기 위한 특정 템플릿을 선택하는 방법입니다.

템플릿에서 환경을 만들려면:

  1. Azure Portal에서 랩 리소스를 선택합니다.

  2. 랩의 개요 페이지 상단 도구 모음에서 추가를 선택합니다.

  3. 기본 선택 페이지에서 사용할 ARM 환경 템플릿을 선택합니다. 사용 가능한 환경 템플릿이 베이스 목록에서 먼저 나타납니다.

    Screenshot that shows public environment templates.

  4. 추가 화면에서 환경 이름을 입력하고 다른 입력 필드를 채웁니다.

    입력 필드의 수와 형식은 ARM 템플릿에 정의되어 있습니다. 필요에 따라 템플릿 azuredeploy.parameters.json 파일이 공백 또는 기본값으로 정의하는 입력 필드의 값을 입력합니다.

    • secure string 매개 변수의 경우 Azure Key Vault의 비밀을 사용할 수 있습니다. Key Vault에 비밀을 저장하고 랩 리소스를 만들 때 사용하는 방법을 알아보려면 Azure Key Vault에 비밀 저장을 참조하세요.

    • ARM 템플릿 파일에서 GEN-UNIQUE, GEN-UNIQUE-[N], GEN-SSH-PUB-KEYGEN-PASSWORD 매개 변수 값은 사용자가 값을 입력할 수 있도록 빈 입력 필드를 생성합니다.

    Screenshot that shows the Add pane for a SharePoint environment.

  5. 추가를 선택하여 환경을 만듭니다.

    환경은 즉시 프로비저닝을 시작합니다. 랩 개요 페이지의 내 환경에서 프로비저닝 상태를 확인할 수 있습니다. 환경을 프로비저닝하는 데에는 시간이 오래 걸릴 수 있습니다.

  6. 환경이 만들어지면 내 환경에서 환경을 확장하여 템플릿이 프로비저닝한 VM 목록 및 기타 리소스를 확인합니다.

    Screenshot that shows the list of VMs under an environment.

    배포 시 ARM 템플릿이 정의한 모든 환경 리소스를 프로비저닝하는 새 리소스 그룹이 만들어집니다. 내 환경에서 환경 이름을 선택하여 템플릿이 만들어진 리소스 그룹과 모든 리소스를 봅니다.

    Screenshot that shows the resource group with all the environment resources.

  7. 구성, 일정 및 정책 관리와 같이 VM에 대해 사용 가능한 작업을 보려면 환경 VM을 선택합니다.

    Screenshot that shows available actions for an environment VM.

환경 템플릿 리포지토리

Azure DevTest Labs를 사용하면 ARM 템플릿에서 환경을 만들 수 있습니다. ARM 템플릿은 다음 두 소스에서 사용할 수 있습니다.

공용 템플릿에 대한 수정 또는 추가를 제안하려면 오픈 소스 GitHub 공용 템플릿 리포지토리에 대한 끌어오기 요청을 제출합니다.

랩에 대한 공용 환경 설정 구성

공용 템플릿 리포지토리에서 템플릿을 사용하도록 랩을 구성할 수 있습니다. 랩에 공용 템플릿 리포지토리를 사용하도록 설정하면 사용자는 랩에서 VM을 만드는 방법과 유사하게 Azure Portal에서 직접 이러한 템플릿을 선택하여 환경을 빠르게 만들 수 있습니다.

또한 사용자가 환경을 만들 수 있는 템플릿을 선택할 수 있습니다.

랩을 만들 때 공용 환경을 사용하도록 설정

랩을 만들 때 랩에 대한 공용 환경 리포지토리 액세스를 사용하도록 설정하려면 다음을 수행합니다.

  1. DevTest Labs 리소스를 만들기본 설정 탭을 선택합니다.

  2. 공용 환경 필드에서 켜기를 선택합니다.

    Screenshot that shows enabling public environments for a new lab.

기존 랩에 대한 공용 환경을 사용하거나 사용하지 않도록 설정

기존 랩 또는 ARM 템플릿을 사용하여 만든 랩의 경우 공용 환경이 활성화되지 않을 수 있습니다. 기존 랩에 대한 공용 환경 리포지토리를 사용하거나 사용하지 않도록 설정하려면:

  1. Azure Portal에서 랩 리소스를 선택합니다.

  2. 왼쪽 메뉴에서 구성 및 정책을 선택합니다.

  3. 왼쪽 탐색 메뉴에 있는 가상 머신 기반에서 공용 환경을 선택합니다.

  4. 이 랩에 대해 공용 환경 사용에서 를 선택하여 랩에 대한 공용 환경을 사용하거나 아니요를 선택하여 사용하지 않도록 설정합니다.

  5. 저장을 선택합니다.

사용 가능한 공용 환경 템플릿 선택

공용 환경을 사용하도록 설정하면 리포지토리의 모든 환경 템플릿을 사용하여 환경을 만들 수 있습니다. 랩에 특정 환경만 허용하려면 다음을 수행합니다.

  1. Azure Portal에서 랩 리소스를 선택합니다.

  2. 왼쪽 메뉴에서 구성 및 정책을 선택합니다.

  3. 왼쪽 탐색 메뉴에 있는 가상 머신 기반에서 공용 환경을 선택합니다.

  4. 목록에서 특정 환경을 선택 취소하여 랩 사용자가 사용할 수 없도록 한 다음, 저장을 선택합니다.

    Screenshot that shows the list of public environments for a lab.

환경 사용자 권한 구성

기본적으로 랩 사용자는 환경에서 읽기 권한자 역할을 가지므로 환경 리소스를 변경할 수 없습니다. 예를 들어 사용자는 리소스를 중지하거나 시작할 수 없습니다. 랩 사용자에게 환경 리소스를 편집할 수 있도록 기여자 역할을 부여하려면 다음을 수행합니다.

  1. Azure Portal에서 랩 리소스를 선택합니다.

  2. 왼쪽 메뉴에서 구성 및 정책을 선택합니다.

  3. 왼쪽 탐색 메뉴에서 랩 설정을 선택합니다.

  4. 환경 액세스>리소스 그룹 사용자 권한에서 기여자를 선택한 다음, 저장을 선택합니다.

    Screenshot that shows configuring lab user Contributor permissions.

환경 생성 자동화

개발 또는 테스트 시나리오를 위해 여러 환경을 만들어야 하는 경우 Azure PowerShell 또는 Azure CLI를 사용하여 환경 배포를 자동화할 수 있습니다.

Azure CLI 명령 az deployment group create를 사용하여 환경을 만들 수 있습니다. 자세한 내용은 Resource Manager 템플릿과 Azure CLI로 리소스 배포를 참조하세요.

랩 소유자 및 관리자는 Azure PowerShell을 사용하여 ARM 템플릿에서 VM 및 환경을 만들 수 있습니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

Azure PowerShell을 사용하여 ARM 환경 템플릿 배포를 자동화하려면:

  1. ARM 환경 템플릿을 Git 리포지토리에 체크인하고 리포지토리를 랩에 추가합니다.

  2. 다음 PowerShell 스크립트를 컴퓨터에 deployenv.ps1로 저장합니다. 이 스크립트는 ARM 템플릿을 호출하여 랩 환경을 만듭니다.

    #Requires -Module Az.Resources
    
    [CmdletBinding()]
    
    param (
    # ID of the Azure subscription for the lab
    [string] [Parameter(Mandatory=$true)] $SubscriptionId,
    
    # Name of the lab in which to create the environment
    [string] [Parameter(Mandatory=$true)] $LabName,
    
    # Name of the template repository connected to the lab
    [string] [Parameter(Mandatory=$true)] $RepositoryName,
    
    # Name of the template (folder name in the Git repository)
    [string] [Parameter(Mandatory=$true)] $TemplateName,
    
    # Name of the environment to create in the lab
    [string] [Parameter(Mandatory=$true)] $EnvironmentName,
    
    # The parameters to be passed to the template. Each parameter is prefixed with "-param_".
    # For example, if the template has a parameter named "TestVMName" with a value of "MyVMName",
    # the string in $Params will be "-param_TestVMName MyVMName".
    # This convention allows the script to dynamically handle different templates.
    [Parameter(ValueFromRemainingArguments=$true)]
        $Params
    )
    
    # Sign in to Azure, or comment out this statement to completely automate environment creation.
    Connect-AzAccount
    
    # Select the subscription that has the lab.  
    Set-AzContext -SubscriptionId $SubscriptionId | Out-Null
    
    # Get the user ID to use later in the script.
    $UserId = $((Get-AzADUser -UserPrincipalName ((Get-AzContext).Account).Id).Id)
    
    # Get the lab location.
    $lab = Get-AzResource -ResourceType "Microsoft.DevTestLab/labs" -Name $LabName
    if ($lab -eq $null) { throw "Unable to find lab $LabName in subscription $SubscriptionId." }
    
    # Get information about the repository connected to the lab.
    $repository = Get-AzResource -ResourceGroupName $lab.ResourceGroupName `
        -ResourceType 'Microsoft.DevTestLab/labs/artifactsources' `
        -ResourceName $LabName `
        -ApiVersion 2016-05-15 `
        | Where-Object { $RepositoryName -in ($_.Name, $_.Properties.displayName) } `
        | Select-Object -First 1
    if ($repository -eq $null) { throw "Unable to find repository $RepositoryName in lab $LabName." }
    
    # Get information about the ARM template base for the environment.
    $template = Get-AzResource -ResourceGroupName $lab.ResourceGroupName `
        -ResourceType "Microsoft.DevTestLab/labs/artifactSources/armTemplates" `
        -ResourceName "$LabName/$($repository.Name)" `
        -ApiVersion 2016-05-15 `
        | Where-Object { $TemplateName -in ($_.Name, $_.Properties.displayName) } `
        | Select-Object -First 1
    if ($template -eq $null) { throw "Unable to find template $TemplateName in lab $LabName." }
    
    # Build the template parameters by using parameter names and values.
    $parameters = Get-Member -InputObject $template.Properties.contents.parameters -MemberType NoteProperty | Select-Object -ExpandProperty Name
    $templateParameters = @()
    
    # Extract the custom parameters from $Params and format them as name/value pairs.
    $Params | ForEach-Object {
        if ($_ -match '^-param_(.*)' -and $Matches[1] -in $parameters) {
            $name = $Matches[1]                
        } elseif ( $name ) {
            $templateParameters += @{ "name" = "$name"; "value" = "$_" }
            $name = $null #reset name variable
        }
    }
    
    # Create an object to hold the necessary template properties.
    $templateProperties = @{ "deploymentProperties" = @{ "armTemplateId" = "$($template.ResourceId)"; "parameters" = $templateParameters }; }
    
    # Deploy the environment in the lab by using the New-AzResource command.
    New-AzResource -Location $Lab.Location `
        -ResourceGroupName $lab.ResourceGroupName `
        -Properties $templateProperties `
        -ResourceType 'Microsoft.DevTestLab/labs/users/environments' `
        -ResourceName "$LabName/$UserId/$EnvironmentName" `
        -ApiVersion '2016-05-15' -Force
    
    Write-Output "Environment $EnvironmentName completed."
    
  3. 고유한 값을 사용하여 스크립트를 실행하여 다음에 대한 예제 값을 바꿉니다.

    • SubscriptionId
    • LabName
    • ResourceGroupName
    • RepositoryName
    • TemplateName(Git 리포지토리의 템플릿 폴더)
    • EnvironmentName
    ./deployenv.ps1 -SubscriptionId "000000000-0000-0000-0000-0000000000000" -LabName "mydevtestlab" -ResourceGroupName "mydevtestlabRG000000" -RepositoryName "myRepository" -TemplateName "ARM template folder name" -EnvironmentName "myNewEnvironment"
    

다음 단계