다음을 통해 공유


ARM 템플릿에서 환경 만들기

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

DevTest Labs 환경의 리소스는 동일한 수명 주기를 공유합니다. 개별 VM에 대한 비용을 추적하는 것처럼 랩 환경에서 이러한 리소스를 함께 관리하고 개별 PaaS 리소스의 비용을 추적할 수 있습니다.

공용 또는 프라이빗 Git 템플릿 리포지토리의 ARM 환경 템플릿을 사용하도록 랩을 구성할 수 있습니다. 다음 다이어그램에서는 DevTest Labs가 공용 또는 프라이빗 리포지토리의 ARM 템플릿을 사용하여 VM 및 기타 리소스가 포함된 환경을 배포하는 방법을 보여 줍니다.

Git 리포지토리에서 ARM 템플릿을 가져오고 이를 사용하여 PaaS 리소스를 사용하여 환경을 배포하는 방법을 보여 주는 다이어그램

참고 항목

배포 단계 및 애플리케이션 간에 엔터프라이즈 수준의 PaaS 리소스, 정책 및 보안 설정 또는 CI/CD 통합을 관리해야 하는 경우 ADE(Azure Deployment Environment)를 사용하여 환경을 만드는 것이 좋습니다. ADE를 사용하면 개발자가 프로젝트 기반 템플릿을 사용하여 앱 인프라를 신속하게 배포하여 개발 팀의 일관되고 안전한 환경을 보장할 수 있습니다. 자세한 내용은 Azure 배포 환경 설명서를 참조하세요.

필수 조건

  • 랩에 템플릿 리포지토리를 추가하거나 구성하려면 랩에서 적어도 기여자 권한이 있어야 합니다.
  • 사용 가능한 ARM 템플릿에서 Azure DevTest 환경을 만들려면 적어도 랩에서 DevTest 사용자 권한을 부여합니다.
  • 환경 만들기 자동화에서 PowerShell 스크립트를 실행하려면 모듈이 설치된 Azure PowerShell을 사용해야 합니다Az.Resources.

제한 사항

DevTest Labs의 ARM 환경 템플릿에서 만든 환경에는 다음과 같은 제한 사항이 있습니다.

  • VM에 대한 자동 종료 기능은 지원되지 않습니다.

  • 다음 랩 정책은 적용되거나 평가되지 않습니다.

    • 랩 사용자당 VM 수
    • 사용자당 프리미엄 VM 수
    • 사용자당 프리미엄 디스크 수

    예를 들어 랩 정책에서 각 사용자가 최대 5개의 VM을 만들 수 있도록 허용하더라도 사용자는 수십 개의 VM을 만드는 ARM 환경 템플릿을 배포할 수 있습니다.

랩에 대한 템플릿 리포지토리 구성

DevTest Labs 공용 ARM 템플릿 리포지토리 및 다른 공용 또는 프라이빗 Git 리포지토리에서 ARM 환경 템플릿을 사용하도록 랩을 구성할 수 있습니다. 템플릿 리포지토리에 대한 랩 액세스를 사용하도록 설정하면 랩 사용자는 VM을 만드는 것과 유사하게 Azure Portal에서 템플릿을 선택하여 환경을 빠르게 만들 수 있습니다.

DevTest Labs 공용 ARM 템플릿 리포지토리 에는 Azure Web Apps, Azure Service Fabric 클러스터 및 개발 SharePoint 팜에 대한 사전 인증된 환경 템플릿이 포함되어 있습니다. PaaS 리소스를 사용하여 원활한 시작 환경을 위해 템플릿에는 최소한의 입력 매개 변수가 있습니다.

공용 환경 템플릿을 있는 그대로 사용하거나 필요에 맞게 사용자 지정할 수 있습니다. GitHub 공용 템플릿 리포지토리에 대한 끌어오기 요청을 제출하여 공용 템플릿에 대한 수정 버전이나 추가를 제안할 수도 있습니다.

다른 공용 또는 프라이빗 Git 리포지토리에 환경 템플릿을 저장하고 랩에 해당 리포지토리를 추가하여 모든 랩 사용자가 템플릿을 사용할 수 있도록 할 수도 있습니다. 지침은 Git 리포지토리에 ARM 템플릿 저장랩에 템플릿 리포지토리 추가를 참조하세요.

공용 환경 설정 구성

새 랩 또는 기존 랩에 대해 DevTest Labs 공용 템플릿 리포지토리 에 대한 랩 액세스를 사용하도록 설정할 수 있습니다. 리포지토리에 대한 액세스를 사용하도록 설정하면 랩 사용자가 사용할 수 있는 환경 템플릿을 선택할 수 있습니다.

새 랩에 대한 공용 환경 액세스 구성

새 랩을 만들 때 공용 환경 리포지토리 액세스를 구성하려면 기본 설정 탭에서 공용 환경 옵션을 설정 또는 해제로 설정합니다. 이 옵션은 기본적으로 On 으로 설정됩니다.

랩 만들기 프로세스 중에 랩에 대한 공용 환경 리포지토리를 사용하도록 설정하는 방법을 보여 주는 스크린샷.

기존 랩에 대한 공용 환경 액세스 구성

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

  1. 랩의 Azure Portal개요 페이지에서 왼쪽 탐색 메뉴의 설정 아래에서 구성 및 정책을 선택합니다.

  2. 구성 및 정책 페이지의 왼쪽 메뉴에서 가상 머신 기반을 확장하고 공용 환경을 선택합니다.

  3. 공용 환경 페이지에서 이 랩에 대해 공용 환경 사용 옵션을 또는 아니요로 설정합니다.

    기존 랩 리소스에 대해 모든 공용 환경 리포지토리를 사용하도록 설정하는 방법을 보여 주는 스크린샷.

  4. 저장을 선택합니다.

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

랩에 공용 환경 리포지토리를 사용하도록 설정하면 기본적으로 랩 사용자가 리포지토리의 모든 환경 템플릿을 사용할 수 있습니다. 선택한 템플릿에 대한 액세스를 사용하지 않도록 선택할 수 있습니다. 비활성화된 템플릿은 사용자가 만들 수 있는 환경 목록에 더 이상 표시되지 않습니다.

특정 환경 템플릿에 대한 액세스를 허용하지 않는 경우:

  1. 랩의 Azure Portal 구성 및 정책>가상 머신 기반>공용 환경 페이지에서 사용하지 않도록 설정할 환경 옆에 있는 확인란의 선택을 취소합니다.

  2. 저장을 선택합니다.

사용자의 액세스를 사용하지 않도록 설정하기 위해 랩의 공용 환경 리포지토리의 선택을 취소하는 방법을 보여 주는 스크린샷.

환경 사용자 권한 구성

기본적으로 랩 사용자는 만든 환경에서 읽기 권한자 역할에 할당됩니다. 판독기는 SQL 서버 또는 데이터베이스와 같은 환경 리소스를 중지, 시작 또는 수정할 수 없습니다. 랩 사용자가 해당 환경에서 리소스를 편집할 수 있도록 하려면 해당 환경에 대한 리소스 그룹에서 기여자 역할을 부여할 수 있습니다.

  1. 랩의 Azure Portal개요 페이지에서 왼쪽 탐색 메뉴의 설정 아래에서 구성 및 정책을 선택합니다.

  2. 구성 및 정책 페이지의 왼쪽 메뉴에서 설정을 확장하고 랩 설정을 선택합니다.

  3. 환경 액세스 아래의 랩 설정 페이지에서 리소스 그룹 사용자 권한 옵션을 참가자로 설정합니다.

  4. 저장을 선택합니다.

DevTest Labs에서 랩 사용자에 대한 기여자 역할 권한을 설정하는 방법을 보여 주는 스크린샷.

템플릿에서 환경 만들기

랩이 공용 또는 프라이빗 템플릿 리포지토리를 사용하도록 구성된 경우 VM(가상 머신)을 만드는 것과 유사하게 사용 가능한 ARM 템플릿을 선택하여 환경을 만들 수 있습니다. 템플릿에서 환경을 만들려면 다음 단계를 수행합니다.

  1. 랩의 Azure Portal개요 페이지에서 왼쪽 탐색 메뉴의 내 랩에서 내 환경을 선택합니다.

  2. 내 환경 페이지에서 추가를 선택합니다.

  3. 기본 선택 페이지에서 만들 환경을 선택합니다.

    DevTest Labs 랩 리소스에 사용할 수 있는 공용 환경 ARM 템플릿을 보여 주는 스크린샷.

  4. 추가 창에서 환경 이름을 입력하고 다른 매개 변수 설정을 구성합니다.

    SharePoint 환경에 대해 구성할 설정이 포함된 추가 창을 보여 주는 스크린샷.

    • 각 ARM 환경 템플릿에는 고유한 매개 변수가 포함됩니다. 환경을 추가할 때 빨간색 별표로 표시된 모든 필수 매개 변수에 대한 값을 입력해야 합니다.
    • azuredeploy.parameters.json ARM 템플릿 파일의 일부 매개 변수 값은 추가 창에 기본값이 없는 빈 설정 필드를 생성합니다. 이러한 값에는 GEN-UNIQUE, GEN-UNIQUE-[N]GEN-SSH-PUB-KEYGEN-PASSWORD.
    • 암호와 같은 보안 문자열 매개 변수에 Azure Key Vault의 비밀을 사용할 수 있습니다. 자세한 내용은 Azure Key Vault에 비밀 저장을 참조하세요.
  5. 추가를 선택합니다. 환경은 즉시 프로비저닝을 시작합니다.

환경을 프로비전하는 프로세스는 시간이 오래 걸릴 수 있습니다. 총 시간은 DevTest Labs가 랩 환경의 일부로 만드는 서비스 인스턴스, VM 및 기타 리소스의 수에 따라 달라집니다.

내 환경 페이지에서 프로비전 상태를 모니터링할 수 있습니다. 도구 모음에서 새로 고침 을 선택하여 페이지 보기를 업데이트하고 현재 상태를 확인합니다. 프로비전이 진행되는 동안 환경 상태는 만드는 중입니다. 프로비전이 완료되면 준비상태로 바뀝니다.

랩 환경의 프로비전 상태를 확인하는 방법을 보여 주는 스크린샷.

환경이 준비되면 내 환경 목록에서 환경을 확장하여 템플릿이 프로비전된 VM을 볼 수 있습니다.

새로 프로비전된 환경에 대해 만들어진 VM 목록을 보여 주는 스크린샷.

배포는 ARM 템플릿이 정의한 모든 환경 리소스를 프로비전하는 새 리소스 그룹을 만듭니다. 내 환경 목록에서 환경을 선택하여 템플릿에서 만든 리소스 그룹 및 모든 리소스를 봅니다.

VM, 디스크, 가상 네트워크 등을 포함한 모든 환경 리소스가 포함된 리소스 그룹을 보여 주는 스크린샷.

목록에서 VM(가상 머신)을 선택하여 VM 속성 및 사용 가능한 작업(예: 구성, 일정 및 정책 관리)을 확인합니다.

선택한 환경 VM에 대한 사용 가능한 작업을 보여 주는 스크린샷.

환경 생성 자동화

개발 또는 테스트 시나리오를 위해 여러 환경을 만들어야 하는 경우 Azure PowerShell 또는 Azure CLI를 사용하여 ARM 템플릿에서 환경 배포를 자동화할 수 있습니다. 다음 단계에서는 Azure PowerShell New-AzResource 명령을 사용하여 ARM 환경 템플릿 배포를 자동화하는 방법을 보여 줍니다.

Azure CLI az deployment group create 명령을 사용하여 배포를 자동화할 수도 있습니다. 자세한 내용은 ARM 템플릿 및 Azure CLI를 사용하여 리소스 배포를 참조하세요.

  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 GitHub repository)
    [string] [Parameter(Mandatory=$true)] $TemplateName,
    
    # Name of the environment to create in the lab
    [string] [Parameter(Mandatory=$true)] $EnvironmentName,
    
    # The parameters to pass 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 is "-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 for your 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 your 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 your 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. 스크립트를 사용하려면 다음 명령을 실행합니다. 명령의 자리 표시자를 본인의 랩 값으로 업데이트합니다.

    .\DeployLabEnvironment.ps1 `
        -SubscriptionId "<Subscription ID>" `
        -LabName "<LabName>" `
        -ResourceGroupName "<LabResourceGroupName>" `
        -RepositoryName "<TemplateRepoName>" `
        -TemplateName "<TemplateFolderName>" `
        -EnvironmentName "<EnvironmentName>"