VM에 연결된 공용 IP 주소를 기본에서 표준으로 업그레이드

Important

2025년 9월 30일에 기본 SKU 공용 IP가 사용 중지됩니다. 자세한 내용은 공식 공지를 참조하세요. 현재 기본 SKU 공용 IP를 사용하는 경우 사용 중지 날짜 전에 표준 SKU 공용 IP로 업그레이드해야 합니다. 이 문서는 업그레이드 프로세스를 안내하는 데 도움이 됩니다.

기본 SKU 공용 IP의 사용 중지 및 표준 SKU 공용 IP의 이점에 대한 자세한 내용은 여기를 참조하세요.

업그레이드 개요

이 스크립트는 VM에 연결된 모든 공용 IP 주소를 기본 SKU에서 표준 SKU로 업그레이드합니다. 업그레이드를 수행하기 위해 공용 IP 주소 할당 방법은 VM에서 연결이 분리되기 전에 정적으로 설정됩니다. 연결이 분리되면 공용 IP SKU가 표준으로 업그레이드된 다음, IP가 VM과 다시 연결됩니다.

VM에서 분리되기 전에 공용 IP 할당이 '고정'으로 설정되어 있으므로 업그레이드 프로세스 중에 스크립트 오류가 발생하는 경우에도 IP 주소가 변경되지 않습니다. 모듈은 VM에서 공용 IP를 분리하기 전에 공용 IP 할당 방법이 '고정'인지 다시 확인합니다.

모듈은 기본적으로 모든 업그레이드 작업을 모듈이 실행된 동일한 위치에 만든 PublicIPUpgrade.log라는 파일에 로그합니다.

제약 조건/지원되지 않는 시나리오

  • Load Balancer와 연결된 NIC가 있는 VM: Load Balancer와 VM과 연결된 공용 IP SKU가 일치해야 하므로 백 엔드 풀 또는 NAT 풀 멤버 자격을 통해 VM의 NIC도 Load Balancer와 연결되어 있는 경우 VM과 연결된 인스턴스 수준 공용 IP 주소를 업그레이드할 수 없습니다. 스크립트 기본 Load Balancer를 표준 SKU로 업그레이드를 사용하여 Load Balancer와 공용 IP를 동시에 업그레이드합니다.

  • 네트워크 보안 그룹이 없는 VM: 업그레이드할 IP가 있는 VM에는 공용 IP가 있는 각 IP 구성의 서브넷과 연결되거나 NIC와 직접 연결된 NSG(네트워크 보안 그룹)가 있어야 합니다. 이는 표준 SKU 공용 IP가 "기본적으로 안전"하기 때문입니다. 즉, VM에 도달하려면 공용 IP에 대한 모든 트래픽이 NSG에서 명시적으로 허용되어야 합니다. 기본 SKU 공용 IP는 기본적으로 모든 트래픽을 허용합니다. NSG 없이 공용 IP SKU를 업그레이드하면 마이그레이션 후 기본 SKU가 차단된 상태에서 이전에 허용된 공용 IP에 대한 인바운드 인터넷 트래픽이 발생합니다. 참조: 공용 IP SKU

  • 공용 IP 구성이 포함된 Virtual Machine Scale Sets: 인스턴스당 공용 IP 구성이 포함된 가상 머신 확장 집합(균일 모델)이 있는 경우 이러한 구성은 공용 IP 리소스가 아니므로 업그레이드할 수 없습니다. 대신, 기본 IP 구성을 제거하고 SKU 속성을 사용하여 여기와 같이 각 가상 머신 확장 집합 인스턴스에서 표준 IP 구성을 요구하도록 지정할 수 있습니다.

필수 조건

  • 최신 버전의 PowerShell 설치
  • 최신 Az PowerShell 모듈이 설치되어 있는지 확인하고, 그렇지 않은 경우 최신 Az PowerShell 모듈을 설치합니다.

스크립트 다운로드

PowerShell 갤러리에서 마이그레이션 스크립트를 다운로드합니다.

PS C:\> Install-Module -Name AzureVMPublicIPUpgrade -Scope CurrentUser -Repository PSGallery -Force

모듈 사용

  1. Connect-AzAccount를 사용하여 필요한 Microsoft Entra 테넌트 및 Azure 구독에 연결

    PS C:\> Connect-AzAccount -Tenant <TenantId> -Subscription <SubscriptionId>
    
  2. 업그레이드하려는 기본 공용 IP가 연결된 VM을 찾습니다. 이름 및 리소스 그룹 이름을 기록합니다.

  3. 모듈 매개 변수를 검사합니다.

    • VMName [string] Required - 이 매개 변수는 VM의 이름입니다.
    • ResourceGroupName [string] Required - 이 매개 변수는 업그레이드하려는 기본 공용 IP가 연결된 VM에 대한 리소스 그룹입니다.
  4. 업그레이드 명령을 실행합니다.

스크립트 사용 예제

단일 VM을 업그레이드하려면 VM 이름과 리소스 그룹 이름을 매개 변수로 전달합니다.

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG'

변경하지 않고 단일 VM 업그레이드를 평가하려면 -WhatIf 매개 변수를 추가합니다.

    Start-VMPublicIPUpgrade -VMName 'myVM' -ResourceGroupName 'myRG' -WhatIf

리소스 그룹의 모든 VM을 업그레이드하려면 네트워크 보안 그룹이 없는 VM을 건너뜁니다.

    Get-AzVM -ResourceGroupName 'myRG' | Start-VMPublicIPUpgrade -skipVMMissingNSG

실패한 마이그레이션 복구

네트워크 중단 또는 클라이언트 시스템 문제와 같은 일시적인 문제로 인해 마이그레이션이 실패하는 경우 마이그레이션을 다시 실행하여 VM 및 공용 IP를 목표 상태로 구성할 수 있습니다. 실행 시 스크립트는 VM이 제대로 다시 구성되었는지 확인하는 데 사용되는 복구 로그 파일을 출력합니다. 스크립트가 실행된 위치에 만든 PublicIPUpgrade.log 로그 파일을 검토합니다.

실패한 업그레이드를 복구하려면 다음 예제와 같이 -recoverFromFile 매개 변수를 사용하여 복구 로그 파일 경로를 스크립트에 전달하고 -VMName, -VMResourceGroup 또는 -VMResourceID 매개 변수를 사용하여 복구할 VM을 식별합니다.

    Start-VMPublicIPUpgrade -RecoverFromFile ./PublicIPUpgrade_Recovery_2020-01-01-00-00.csv -VMName myVM -VMResourceGroup -rg-myrg

일반적인 질문

마이그레이션을 수행하는 데 걸리는 데 시간과 공용 IP에서 내 VM에 액세스할 수 없는 기간은 얼마나 되나요?

VM의 공용 IP를 업그레이드하는 데 걸리는 시간은 VM과 연결된 공용 IP 및 네트워크 인터페이스의 수에 따라 달라집니다. 테스트에서 단일 NIC와 공용 IP가 있는 VM을 업그레이드하는 데 1~2분 정도 걸립니다. VM의 각 NIC에 대해 약 1분이 추가되고 각 공용 IP에 대해 각각 몇 초가 추가됩니다.

기본 SKU 공용 IP로 롤백할 수 있나요?

공용 IP 주소를 표준에서 기본으로 다운그레이드할 수 없습니다.

마이그레이션을 실행하기 전에 테스트할 수 있나요?

작업을 완료하지 않고 공용 IP 업그레이드를 평가할 수 있는 방법은 없습니다. 그러나 이 스크립트에는 VM에서 업그레이드를 지원하는지 확인하고 작업을 수행하지 않고 단계를 안내하는 -whatif 매개 변수가 포함되어 있습니다.

스크립트에서 영역 기본 SKU 공용 IP를 지원하나요?

예, 영역 기본 SKU 공용 IP를 영역 표준 SKU 공용 IP로 업그레이드하는 프로세스는 동일하며 스크립트에서 작동합니다.

Resource Graph를 사용하여 업그레이드가 필요한 공용 IP가 있는 VM 나열

기본 SKU 공용 IP 주소를 사용하여 가상 머신을 나열하는 쿼리

이 쿼리는 기본 SKU 공용 IP 주소가 연결된 가상 머신 ID의 목록을 반환합니다.

Resources
| where type =~ 'microsoft.compute/virtualmachines'
| project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces
| join (
  Resources |
  where type =~ 'microsoft.network/networkinterfaces' |
  project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations)
  on $left.vmId == $right.nicVMId
| join (
  Resources
  | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id)
  | where sku.name == 'Basic' // exclude to find all VMs with Public IPs
  | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0])))
  on $left.allVMNicID == $right.pipAssociatedNicId
| project vmId, pipId, pipSku
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | project vmId = tolower(id), vmNics = properties.networkProfile.networkInterfaces | join (Resources | where type =~ 'microsoft.network/networkinterfaces' | project nicVMId = tolower(tostring(properties.virtualMachine.id)), allVMNicID = tolower(id), nicIPConfigs = properties.ipConfigurations) on \$left.vmId == \$right.nicVMId | join ( Resources | where type =~ 'microsoft.network/publicipaddresses' and isnotnull(properties.ipConfiguration.id) | where sku.name == 'Basic' | project pipId = id, pipSku = sku.name, pipAssociatedNicId = tolower(tostring(split(properties.ipConfiguration.id, '/ipConfigurations/')[0]))) on \$left.allVMNicID == \$right.pipAssociatedNicId | project vmId, pipId, pipSku"

다음 단계