가상을 사용하여 배포가 수행할 작업을 예측합니다.

완료됨

환경에서 리소스를 배포하거나 수정하는 모든 사용자는 다음과 같은 점을 궁금해합니다.

  • 무언가 중단되는지,
  • 무엇이든 삭제되나요?
  • 배포가 기존 리소스에 어떤 영향을 미치는지,
  • 배포 단추를 누르기 전에 배포가 생각대로 실제로 이뤄질지 확인할 수 있나요?

배포한 후에 최고를 기대하는 것은 좋은 접근 방식이 아닙니다. 대신에 가상 작업을 수행하는 것이 보다 효과적입니다. 이 작업은 시도해 보는 경우, 새 배포의 결과를 예측할 수 있도록 도와줍니다.

Azure Resource Manager는 템플릿 배포 시 변경 내용을 강조 표시하는 가상 작업을 제공합니다. 가상 작업은 기존 리소스를 변경하지 않습니다. 대신, 지정된 템플릿이 리소스 그룹 및 구독 수준에서 배포되는 경우 변경 내용을 예측합니다.

참고

가상 작업은 변경이 실제로 발생하지 않았는데 리소스가 변경될 것으로 보여 주는 경우가 있습니다. 관련 문제를 줄이기 위해 노력하고 있지만 여러분의 도움이 필요합니다. 관련 문제를 신고해 주세요.

가상 작업은 현재 상태 모델과 기대하는 상태 모델을 비교합니다. 가상 작업은 템플릿을 통한 변경 내용을 실제 리소스 또는 해당 리소스의 상태에 적용하지 않고 변경 내용이 예상과 일치하는지 확인합니다.

가상 결과의 형식 제어

New-AzResourceGroupDeployment Azure PowerShell cmdlet은 리소스 그룹에 새 배포를 만듭니다. 이 명령에 -Whatif 매개 변수를 추가하면 해당 명령은 배포를 수행하는 명령에서 배포를 수행하는 경우 발생할 상황의 ‘미리 보기’를 단순히 보고하는 명령으로 전환됩니다.

az deployment group what-if 명령은 배포를 수행하는 경우 발생할 결과의 미리 보기를 제공합니다.

다음과 같은 결과 형식 중 하나를 사용하여 가상 작업의 텍스트 출력 양을 제어할 수 있습니다.

  • FullResourcePayloads. 이 매개 변수를 포함하면 변경될 리소스 목록으로 구성된 자세한 정보 표시 출력을 얻을 수 있습니다. 출력에는 템플릿에 따라 변경되는 모든 속성에 대한 세부 정보도 표시됩니다.
  • ResourceIdOnly. 이 모드는 모든 세부 정보가 아니라 변경될 리소스 목록을 반환합니다.

예를 들어 기존 환경에 단일 스토리지 계정을 배포하는 템플릿에서 스토리지 유형을 변경한다고 가정해 보세요.

다음 PowerShell 코드를 실행하고 전체 리소스 페이로드를 제공하도록 Resource Manager에 요청할 수도 있습니다.

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat FullResourcePayloads
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format FullResourcePayloads

위의 명령은 다음과 같은 결과를 생성합니다.

Resource and property changes are indicated with this symbol:
  ~ Modify

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ~ Microsoft.Storage/storageAccounts/bz64gjjpidbuvi [2019-06-01]
    ~ sku.name: "Standard_LRS" => "Standard_GRS"

Resource changes: 1 to modify.

그런 다음, 명령을 다시 실행하지만 리소스 ID만 요청할 수도 있습니다.

New-AzResourceGroupDeployment `
  -ResourceGroupName ToyStorage `
  -TemplateFile $templateFileName `
  -WhatIf `
  -WhatIfResultFormat ResourceIdOnly
az deployment group what-if \
  --resource-group ToyStorage \
  --template-file $templateFile \
  --result-format ResourceIdOnly

위의 명령은 다음과 같은 결과를 생성합니다.

Resource and property changes are indicated with this symbol:
  ! Deploy

The deployment will update the following scope:

Scope: /subscriptions/f0750bbe-ea75-4ae5-b24d-a92ca601da2c/resourceGroups/ToyStorage

  ! Microsoft.Storage/storageAccounts/bz64gjjpidbuvi

Resource changes: 1 to deploy.

가상 작업에서 검색하는 변경의 유형

가상 작업을 사용하면 다음과 같은 6가지 변경 형식이 나열됩니다.

Type 설명 영향
생성 리소스가 현재는 없지만 템플릿에 정의되어 있습니다. 리소스가 생성됩니다.
DELETE 이 변경 형식은 배포에 전체 모드를 사용하는 경우에만 적용됩니다. 리소스가 있지만 템플릿에 정의되어 있지 않습니다. 증분 모드를 사용하여 배포하면 리소스가 삭제되지 않습니다. 전체 모드를 사용하여 배포하면 리소스가 삭제됩니다. 이 변경 유형은 전체 모드를 통한 삭제를 지원하는 리소스에 대해서만 반환됩니다.
무시 리소스가 있지만 템플릿에 정의되어 있지 않습니다. 기본 배포 모드인 증분 모드를 사용하면 리소스가 배포되거나 수정되지 않습니다. 전체 모드를 사용하여 배포하는 경우 리소스가 삭제됩니다.
NoChange 리소스가 있고 템플릿에 정의되어 있습니다. 리소스가 다시 배포되지만 리소스의 속성이 변경되지 않습니다. 이 변경 유형은 결과 형식이 기본 결과 형식인 FullResourcePayloads로 설정된 경우 반환됩니다.
수정 리소스가 있고 템플릿에 정의되어 있습니다. 리소스가 다시 배포되고 리소스의 속성이 변경됩니다. 이 변경 유형은 결과 형식이 기본 결과 형식인 FullResourcePayloads로 설정된 경우 반환됩니다.
배포 리소스가 있고 템플릿에 정의되어 있습니다. 리소스가 다시 배포됩니다. 리소스의 속성은 변경되거나 변경되지 않을 수 있습니다. 해당 작업은 속성이 변경될지 여부를 확인할 충분한 정보가 없는 경우 이 변경 형식을 반환합니다. 결과 형식이 ResourceIdOnly로 설정된 경우에만 이 조건이 표시됩니다.

모든 변경 유형을 알 필요가 없는 경우 -WhatIfExcludeChangeType 인수를 사용하여 관심 없는 유형을 생략할 수 있습니다.

모든 변경 유형을 알 필요가 없는 경우 --what-if-exclude-change-types 인수를 사용하여 관심 없는 유형을 생략할 수 있습니다.

스크립트에서 가상 결과 사용

스크립트 내에서 또는 자동화된 배포 프로세스의 일부로 가상 작업의 출력을 사용하는 것이 좋습니다.

Get-AzResourceGroupDeploymentWhatIfResult cmdlet을 사용하여 결과를 얻을 수 있습니다. 그런 다음, 스크립트에서 결과를 구문 분석하고 필요한 사용자 지정 논리를 수행할 수 있습니다.

CLI 명령에 --no-pretty-print 인수를 추가하면 원시 JSON 결과를 얻을 수 있습니다. 그런 다음, 스크립트에서 결과를 구문 분석하고 필요한 사용자 지정 논리를 수행할 수 있습니다.

배포 모드 및 리소스 삭제

템플릿을 배포할 때 리소스 삭제를 확인해야 할 때가 있습니다. 이를 위해 가상 작업은 사용하는 배포 모드를 고려합니다. 전체 배포 모드를 사용하는 경우 Resource Manager는 배포에 정의되지 않았기 때문에 삭제할 리소스를 보고합니다.

기존 리소스를 업데이트하고 전체 모드로 배포되는 템플릿의 예를 살펴보겠습니다.

Diagram showing change types for three resources, some of which already exist.

다음은 이 예제에서 발생하는 일에 대한 설명입니다.

  • 템플릿이 이미 배포된 storage-1이라는 스토리지 계정을 업데이트하고 있습니다. SKU가 LRS에서 GRS변경되고 태그가 owner 값을 팀 A변경합니다. what-if 출력에는 이 리소스에 대한 변경 형식 수정이 표시됩니다.
  • 템플릿은 리소스 그룹에 아직 존재하지 않는 cosmos-db-1이라는 새 Azure Cosmos DB 계정을 만듭니다. 가상 출력에 이 리소스에 대해 Create 변경 유형이 표시됩니다.
  • 템플릿에는 리소스 그룹에 이미 존재하는 Azure SQL 논리 서버가 포함되지 않습니다. 배포에서 전체 모드를 사용하기 때문에 가상 출력에 이 리소스에 대해 Delete 변경 유형이 표시됩니다. 배포에 전체 모드 대신 증분 모드를 사용한 경우 Ignore 변경 유형이 됩니다.

배포 확인

템플릿을 배포하기 전에 변경 내용을 미리 보려면 배포 명령에서 -Confirm 매개 변수를 사용합니다. 변경이 예상과 같으면 확인하여 배포를 완료합니다.

특히 전체 모드로 배포하는 경우 -Confirm 스위치를 사용하여 배포 명령을 실행하는 것이 좋습니다. -Confirm 스위치를 사용하는 경우 제안된 변경 내용이 마음에 들지 않으면 작업을 중지할 수 있습니다.

템플릿을 배포하기 전에 변경 내용을 미리 보려면 배포 명령에서 --confirm-with-what-if 인수를 사용합니다. 변경이 예상과 같으면 확인하여 배포를 완료합니다.

특히 전체 모드로 배포하는 경우 --confirm-with-what-if 인수를 사용하여 배포 명령을 실행하는 것이 좋습니다. --confirm-with-what-if 스위치를 사용하는 경우 제안된 변경 내용이 마음에 들지 않으면 작업을 중지할 수 있습니다.