ARM 템플릿에서 Azure DevTest Labs 환경 만들기
이 문서에서는 ARM(Azure Resource Manager) 템플릿에서 Azure DevTest Labs 환경을 만드는 방법을 알아봅니다. DevTest Labs 환경을 사용하여 여러 VM(가상 머신) 또는 PaaS(Platform-as-a-Service) 리소스를 사용하여 랩을 쉽고 일관되게 프로비전할 수 있습니다. 이 방식을 사용하여 다중 계층 웹 애플리케이션 또는 SharePoint 팜을 위한 랩을 만들 수 있습니다.
DevTest Labs 환경의 리소스는 동일한 수명 주기를 공유하며 함께 관리할 수 있습니다. 개별 랩 VM에 대한 비용을 추적하는 것과 동일한 방식으로 랩 환경 및 PaaS 리소스의 비용을 추적할 수 있습니다.
Azure DevTest Labs를 구성하여 공용 또는 프라이빗 GitHub 리포지토리의 ARM 템플릿을 사용할 수 있습니다. 다음 다이어그램은 공용 또는 사용자 지정 템플릿 리포지토리의 ARM 템플릿에서 DevTest Labs를 사용하여 환경을 만드는 방법을 보여 줍니다. 랩용 템플릿 리포지토리 섹션에서는 이 프로세스를 자세히 설명합니다.
참고 항목
ADE(Azure 배포 환경)는 환경을 만드는 데 매우 권장됩니다. ADE를 통해 개발자는 프로젝트 기반 템플릿을 사용하여 앱 인프라를 신속하게 배포하여 개발 팀의 일관되고 안전한 환경을 보장합니다.
Azure 배포 환경에 대한 자세한 내용은 Azure 배포 환경 설명서를 참조 하세요.
필수 조건
- DevTest Labs에서 랩 환경을 구성해 본 환경이 있으면 도움이 됩니다. 랩 작업이 처음이라면 먼저 공용 환경 설정 구성 섹션의 지침을 검토합니다. 템플릿 리포지토리를 구성하고, 공용 환경을 사용 또는 사용하지 않도록 설정하고, 템플릿을 선택하여 랩을 만드는 방법을 이해해야 합니다.
제한 사항
DevTest Labs의 ARM 템플릿에서 랩을 만들 때 염두에 두어야 할 몇 가지 제한 사항이 있습니다.
DevTest Labs는 ARM 템플릿에서 만들어진 PaaS 리소스에 대해 VM(가상 머신) 자동 종료 기능을 지원하지 않습니다.
DevTest Labs는 ARM 템플릿을 배포할 때 모든 랩 정책을 평가하지 않습니다. 다음 정책은 평가되지 않습니다.
- 랩 사용자당 VM 수
- 사용자당 프리미엄 VM 수
- 사용자당 프리미엄 데스크 수
각 사용자가 최대 5개의 VM을 만들 수 있도록 허용하는 랩 정책이 있다고 가정해 보겠습니다. DevTest Labs에서 각 사용자는 수십 개의 VM을 만드는 ARM 환경 템플릿을 배포할 수 있습니다.
템플릿에서 환경 만들기
Azure DevTest Labs 공용 템플릿 리포지토리에서 환경을 만들거나 랩에 프라이빗 템플릿 리포지토리를 추가할 수 있습니다.
다음 단계에 따라 템플릿에서 환경을 만듭니다.
Azure Portal에서 DevTest Labs 랩 리소스로 이동합니다.
랩 개요 페이지에서 왼쪽 메뉴의 내 랩 섹션을 확장하고 내 환경을 선택합니다.
내 환경 페이지의 도구 모음에서 추가를 선택합니다.
기본 선택 페이지에서 사용할 ARM 환경 템플릿을 선택합니다.
추가 창에서 환경 이름을 입력하고 다른 매개 변수 설정을 구성합니다.
매개 변수의 형식과 수는 각 ARM 템플릿마다 고유합니다. 빨간색 별표(*)는 필수 설정을 나타냅니다. 모든 필수 설정에 대한 값을 입력해야 합니다.
ARM 템플릿 파일(azuredeploy.parameters.json)의 일부 매개 변수 값은 추가 창에 빈 설정 필드를 생성합니다(기본값 없음). 이러한 매개 변수 값에는
GEN-UNIQUE
,GEN-UNIQUE-[N]
,GEN-SSH-PUB-KEY
및GEN-PASSWORD
가 포함됩니다.암호와 같은 보안 문자열 매개 변수의 경우 Azure Key Vault의 비밀을 사용할 수 있습니다. 키 자격 증명 모음에 비밀을 저장하고 랩 리소스를 만들 때 이를 사용하는 방법을 알아보려면 Azure Key Vault에 비밀 저장을 참조하세요.
추가를 선택하여 환경을 만듭니다. 환경은 즉시 프로비저닝을 시작합니다.
참고 항목
환경을 프로비전하는 프로세스는 시간이 오래 걸릴 수 있습니다. 총 시간은 DevTest Labs가 랩 환경의 일부로 만드는 서비스 인스턴스, VM 및 기타 리소스의 수에 따라 달라집니다.
프로비전 상태를 모니터링하려면 랩의 내 환경 페이지로 돌아가세요.
프로비전이 진행되는 동안 환경 상태는 만드는 중입니다. 프로비전이 완료되면 준비상태로 바뀝니다. 도구 모음에서 새로 고침을 선택하면 페이지 뷰를 업데이트하고 현재 상태를 확인할 수 있습니다.
환경이 준비되면 내 환경 목록에서 환경을 확장하여 템플릿으로 프로비전된 VM을 확인할 수 있습니다.
배포에서는 ARM 템플릿에 정의된 모든 환경 리소스를 프로비전하기 위한 새 리소스 그룹을 만듭니다. 리소스 그룹과 템플릿에 의해 만들어진 모든 리소스를 보려면 내 환경 목록에서 환경 이름을 선택합니다.
구성, 일정, 정책 관리 등 VM에 사용 가능한 작업을 보려면 목록에서 환경 VM을 선택합니다.
템플릿 리포지토리 살펴보기
DevTest Labs에서 환경을 만들기 위한 ARM 템플릿은 두 가지 원본에서 사용할 수 있습니다.
DevTest Labs에는 Azure Web Apps, Azure Service Fabric 클러스터 및 개발 SharePoint 팜용으로 미리 작성된 환경 템플릿이 포함된 공용 ARM 템플릿 리포지토리가 있습니다. 템플릿에는 PaaS 리소스를 원활하게 시작하기 위해 최소한의 입력 매개 변수가 있습니다. 공용 환경 템플릿을 있는 그대로 사용하거나 필요에 맞게 사용자 지정할 수 있습니다. GitHub 공용 템플릿 리포지토리에 대한 끌어오기 요청을 제출하여 공용 템플릿에 대한 수정 버전이나 추가를 제안할 수도 있습니다.
또한 사용자 고유의 공용 또는 프라이빗 GitHub 리포지토리에 환경 템플릿을 저장하고 해당 리포지토리를 랩에 추가하여 모든 랩 사용자가 템플릿을 사용할 수 있도록 할 수 있습니다.
공용 환경 설정 구성
공용 템플릿 GitHub 리포지토리의 템플릿을 사용할 수 있도록 랩을 구성할 수 있습니다. 랩에 공용 템플릿 리포지토리를 사용하도록 설정하면 사용자는 랩에서 VM을 만드는 방법과 유사하게 Azure Portal에서 직접 이러한 템플릿을 선택하여 랩 환경을 빠르게 만들 수 있습니다. 또한 사용자가 랩 환경을 만들 수 있는 템플릿을 선택할 수 있습니다.
새 랩에 대한 공용 환경 액세스 설정
다음 단계에 따라 새 랩에 대한 공용 환경 리포지토리 액세스를 구성합니다.
DevTest Labs 리소스 만들기 과정에서 기본 설정 탭을 선택합니다.
공용 환경 옵션을 켜기로 설정합니다.
기존 랩에 대한 공용 환경 액세스 설정
기존 랩 또는 ARM 템플릿을 사용하여 만든 랩의 경우 공용 환경이 활성화되지 않을 수 있습니다. 이 랩에 공용 환경 사용 옵션을 사용하면 기존 랩의 공용 환경 리포지토리에 대한 액세스를 제어할 수 있습니다.
기존 랩에 대한 공용 환경 리포지토리 액세스를 사용하거나 사용하지 않도록 설정하려면 다음 단계를 따릅니다.
Azure Portal에서 공용 환경 액세스를 설정하려는 DevTest Labs 랩 리소스로 이동합니다.
랩 개요 페이지에서 왼쪽 메뉴의 설정 섹션을 확장하고 구성 및 정책을 선택합니다.
구성 및 정책 페이지에서 왼쪽 메뉴의 가상 머신 기반 섹션을 확장하고 공용 환경을 선택합니다.
공용 환경 페이지에서 이 랩에 공용 환경 사용 옵션을 예로 설정합니다.
저장을 선택합니다.
사용 가능한 공용 환경 템플릿 선택
랩의 공용 환경에 대한 액세스를 제어하기 위해 이 랩에 공용 환경 사용 옵션을 설정하면 기본적으로 모든 환경 템플릿이 선택됩니다. 옵션 설정은 선택 사항에 따라 모든 환경에 대한 액세스를 허용하거나 허용하지 않습니다. 목록의 선택 확인란을 사용하여 사용자가 액세스할 수 있는 환경을 지정할 수 있습니다.
랩의 특정 환경에만 액세스를 허용하려면 다음 단계를 따릅니다.
환경 사용자 권한 구성
기본적으로 랩 사용자에게는 공용 환경 리포지토리의 읽기 권한자 역할이 할당됩니다. 환경 리소스를 변경할 수 없으며 리소스를 중지하거나 시작할 수도 없습니다.
랩 사용자에게 기여자 역할을 부여하고 환경 리소스를 편집할 수 있도록 하려면 다음 단계를 따릅니다.
Azure Portal에서 사용자 역할 할당을 조정하려는 DevTest Labs 랩 리소스로 이동합니다.
랩 개요 페이지에서 왼쪽 메뉴의 설정 섹션을 확장하고 구성 및 정책을 선택합니다.
구성 및 정책 페이지에서 왼쪽 메뉴의 설정 섹션을 확장하고 랩 설정을 선택합니다.
랩 설정 페이지에서 환경 액세스>리소스 그룹 사용자 권한 옵션을 기여자로 설정합니다.
저장을 선택합니다.
환경 생성 자동화
개발 또는 테스트 시나리오를 위해 여러 환경을 만들어야 하는 경우 Azure PowerShell 또는 Azure CLI를 사용하여 환경 배포를 자동화할 수 있습니다.
랩 소유자 및 관리자는 Azure PowerShell을 사용하여 ARM 템플릿에서 VM 및 환경을 만들 수 있습니다. 또한 az distribution group create 명령을 사용하여 환경을 만들어 Azure CLI를 통해 배포를 자동화할 수도 있습니다. 자세한 내용은 ARM 템플릿 및 Azure CLI를 사용하여 리소스 배포를 참조하세요.
참고 항목
Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.
다음 단계에 따라 Azure PowerShell을 사용하여 ARM 환경 템플릿 배포를 자동화합니다.
다음 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."
고유의 랩 값으로 스크립트에서 다음 자리 표시자를 업데이트합니다.
SubscriptionId
LabName
ResourceGroupName
RepositoryName
TemplateName
(GitHub 리포지토리의 템플릿 폴더)EnvironmentName
다음 코드 조각은 예제 매개 변수 값을 사용하여 스크립트를 실행하는 방법을 보여 줍니다.
./deployenv.ps1 -SubscriptionId "000000000-0000-0000-0000-0000000000000" -LabName "mydevtestlab" -ResourceGroupName "mydevtestlabRG000000" -RepositoryName "myRepository" -TemplateName "ARM template folder name" -EnvironmentName "myNewEnvironment"
스크립트를 실행합니다.