리소스를 배포할 때 배포를 증분 업데이트 또는 전체 업데이트할지 지정합니다. 이러한 두 모드 간 차이점은 Resource Manager가 템플릿에 없는 리소스 그룹에서 기존 리소스를 처리하는 방식입니다.
두 모드 모두에서 Resource Manager는 템플릿에 지정된 모든 리소스를 만들려고 시도합니다. 리소스 그룹에 리소스가 이미 있고 해당 설정이 변경되지 않은 경우 해당 리소스에 대한 작업이 수행되지 않습니다. 리소스의 속성 값을 변경하면 리소스가 해당 새 값으로 업데이트됩니다. 기존 리소스의 위치 또는 유형을 업데이트하려고 하면 오류와 함께 배포가 실패합니다. 대신 필요한 위치 또는 형식을 사용하여 새 리소스를 배포합니다.
기본 모드는 증분입니다.
증분 모드
증분 모드에서 Resource Manager는 리소스 그룹에 있지만 템플릿에 지정되지 않은 변경되지 않은 리소스를 남깁니다 . 템플릿의 리소스가 리소스 그룹에 추가됩니다 .
중요합니다
증분 모드는 권장되는 배포 모드입니다. Bicep 파일 또는 ARM JSON 템플릿의 일부로 리소스를 삭제해야 하는 경우 배포 스택을 사용합니다.
증분 모드에서 기존 리소스를 다시 배포하면 모든 속성이 다시 적용됩니다. 속성은 증분 방식으로 추가되지 않습니다. 일반적인 오해는 템플릿에 지정되지 않은 속성이 변경되지 않은 상태로 유지된다는 것입니다. 특정 속성을 지정하지 않으면 Resource Manager는 배포를 해당 값을 덮어쓰는 것으로 해석합니다. 템플릿에 포함되지 않은 속성은 기본값으로 다시 설정됩니다. 업데이트하는 값뿐만 아니라 리소스에 대한 기본값이 아닌 모든 값을 지정합니다. 템플릿의 리소스 정의에는 항상 리소스의 최종 상태가 포함됩니다. 기존 리소스에 대한 부분 업데이트를 나타낼 수 없습니다.
경고
드문 경우에서 리소스 또는 해당 자식 리소스 중 하나에 속성을 지정할 수 있습니다. 두 가지 일반적인 예는 가상 네트워크의 서브넷 과 웹앱에 대한 사이트 구성 값입니다. 이러한 경우 증분 업데이트를 신중하게 처리해야 합니다.
서브넷의 경우 subnets
리소스의 속성을 통해 값을 지정합니다. 자식 리소스 Microsoft.Network/virtualNetworks/서브넷을 통해 값을 정의하지 마세요. 서브넷이 가상 네트워크에 정의되어 있는 한 가상 네트워크를 다시 배포하고 서브넷을 잃지 않을 수 있습니다.
사이트 구성 값의 경우 값은 자식 리소스 유형 Microsoft.Web/sites/config
으로 구현됩니다. 웹앱을 다시 배포하고 사이트 구성 값에 빈 개체를 지정하면 자식 리소스가 업데이트되지 않습니다. 그러나 새 사이트 구성 값을 제공하는 경우 자식 리소스 종류가 업데이트됩니다.
전체 모드
경고
전체 모드는 권장되지 않습니다. Bicep 또는 ARM 템플릿 배포를 사용하여 삭제를 수행하려면 배포 스택을 사용합니다.
전체 모드에서 Resource Manager는 리소스 그룹에 있지만 템플릿에 지정되지 않은 리소스를 삭제 합니다.
비고
템플릿을 전체 모드로 배포하기 전에 가상 시나리오 연산을 항상 사용합니다. 가상은 삭제 또는 수정되는 리소스를 표시합니다. 리소스를 실수로 삭제하지 않도록 하려면 가상을 사용합니다.
조건이 false로 평가되기 때문에 템플릿에 배포되지 않은 리소스가 포함된 경우 결과는 템플릿을 배포하는 데 사용하는 REST API 버전에 따라 달라집니다. 2019-05-10 이전 버전을 사용하는 경우 리소스 가 삭제되지 않습니다. 2019-05-10 이상에서는 리소스 가 삭제됩니다. 최신 버전의 Azure PowerShell 및 Azure CLI는 리소스를 삭제합니다.
복사 루프와 함께 전체 모드를 사용할 때 주의하십시오. 복사 루프를 확인한 후 템플릿에 지정되지 않은 리소스는 모두 삭제됩니다.
템플릿에서 둘 이상의 리소스 그룹에 배포하는 경우 배포 작업에 지정된 리소스 그룹의 리소스를 삭제할 수 있습니다. 보조 리소스 그룹의 리소스는 삭제되지 않습니다.
리소스 종류가 전체 모드 삭제를 처리하는 방법에는 몇 가지 차이점이 있습니다. 부모 리소스는 전체 모드로 배포된 템플릿에 없는 경우 자동으로 삭제됩니다. 템플릿에 없는 경우 일부 자식 리소스는 자동으로 삭제되지 않습니다. 그러나 부모 리소스가 삭제되면 이러한 자식 리소스가 삭제됩니다.
예를 들어 리소스 그룹에 DNS 영역(Microsoft.Network/dnsZones
리소스 종류) 및 CNAME 레코드(리소스 종류)가Microsoft.Network/dnsZones/CNAME
포함된 경우 DNS 영역은 CNAME 레코드의 부모 리소스입니다. 전체 모드로 배포하고 템플릿에 DNS 영역을 포함하지 않으면 DNS 영역과 CNAME 레코드가 모두 삭제됩니다. 템플릿에 DNS 영역을 포함하지만 CNAME 레코드를 포함하지 않으면 CNAME이 삭제되지 않습니다.
리소스 종류가 삭제를 처리하는 방법에 대한 목록은 전체 모드 배포에 대한 Azure 리소스 삭제를 참조하세요.
리소스 그룹이 잠겨 있으면 전체 모드에서 리소스를 삭제하지 않습니다.
비고
루트 수준 템플릿만 전체 배포 모드를 지원합니다. 연결된 템플릿 또는 중첩된 템플릿의 경우 증분 모드를 사용해야 합니다.
구독 수준 배포는 전체 모드를 지원하지 않습니다.
현재 포털은 전체 모드를 지원하지 않습니다.
결과 예제
증분 모드와 전체 모드의 차이점을 설명하기 위해 다음 시나리오를 고려합니다.
리소스 그룹에 는 다음이 포함됩니다.
- 리소스 A
- 리소스 B
- 리소스 C
템플릿 에는 다음이 포함됩니다.
- 리소스 A
- 리소스 B
- 리소스 D
증분 모드로 배포되는 경우 리소스 그룹에는 다음이 있습니다.
- 리소스 A
- 리소스 B
- 리소스 C
- 리소스 D
전체 모드로 배포되면 리소스 C가 삭제됩니다. 리소스 그룹에는 다음이 있습니다.
- 리소스 A
- 리소스 B
- 리소스 D
배포 모드 설정
PowerShell을 사용하여 배포할 때 배포 모드를 설정하려면 매개 변수를 Mode
사용합니다.
New-AzResourceGroupDeployment `
-Mode Complete `
-Name ExampleDeployment `
-ResourceGroupName ExampleResourceGroup `
-TemplateFile c:\MyTemplates\storage.json
Azure CLI를 사용하여 배포할 때 배포 모드를 설정하려면 매개 변수를 mode
사용합니다.
az deployment group create \
--mode Complete \
--name ExampleDeployment \
--resource-group ExampleResourceGroup \
--template-file storage.json
다음 예제에서는 증분 배포 모드로 설정된 연결된 템플릿을 보여줍니다.
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2020-10-01",
"name": "linkedTemplate",
"properties": {
"mode": "Incremental",
<nested-template-or-external-template>
}
}
]
다음 단계
- Resource Manager 템플릿을 만드는 방법에 대해 알아보려면 ARM 템플릿의 구조 및 구문 이해를 참조하세요.
- 리소스 배포에 대한 자세한 내용은 ARM 템플릿 및 Azure PowerShell을 사용하여 리소스 배포를 참조하세요.
- 리소스 공급자에 대한 작업을 보려면 Azure REST API를 참조하세요.