Azure Resource Group 일괄 삭제 및 생성 스크립트

PowerShell Script

지정된 String으로 시작하는 리소스 그룹을 일괄 삭제 후, 같은 이름으로 생성하는 스크립트이다. 매일 검증 작업에 사용할 리소스 그룹을 생성 및 삭제하는 작업이 귀찮았다.

Tip. 리소스 그룹은 Subscription에 동일한 이름이 존재하는 경우, 생성이 불가능하다.

# 'chanpu-'로 시작하는 모든 리소스 그룹의 이름을 가져옵니다.
$rgsToDelete = az group list --query "[?starts_with(name, 'chanpu-')].name" --output tsv

# 각 리소스 그룹을 순회하며 삭제하고, 동일한 이름으로 새 리소스 그룹을 생성합니다.
foreach ($rg in $rgsToDelete)
{
    # 리소스 그룹을 삭제합니다.
    az group delete --name $rg --yes --no-wait

    # 삭제가 완료될 때까지 기다립니다.
    Do {
        Start-Sleep -Seconds 5
        $status = az group exists --name $rg
    } While ($status -eq "true")

    # 삭제 후, 동일한 이름으로 새 리소스 그룹을 생성합니다.
    az group create --name $rg --location japaneast
}

스크립트 개요

위 스크립트는 두 가지 주요 작업을 수행한다.

  1. 특정 패턴을 가진 리소스 그룹을 일괄적으로 삭제
  2. 삭제된 리소스 그룹과 동일한 이름으로 새 리소스 그룹을 생성

스크립트 구성

–query “–query “[?starts_with(name, ‘String’)].name””

# chanpu-'로 시작하는 모든 리소스 그룹의 이름을 가져옵니다.
$rgsToDelete = az group list --query "[?starts_with(name, 'chanpu-')].name" --output tsv

리소스 그룹을 만들 때, 사용자를 특정하기 위해서 이름을 붙이는 경우가 많은데 나 같은 경우에는 chanpu-를 사용한다.

위 코드는 chanpu-로 시작하는 리소스 그룹을 $rgsToDelete 함수에 저장한다.

TIM. 일본인 택배 기사가 내 이름을 잘못 발음한 이후로 친구들에게 그 에피소드를 얘기했더니 그 뒤로 내 별명은 챤뿌가 되었다.

foreach ($rg in $rgsToDelete) {}

foreach ($rg in $rgsToDelete)
{
  ...
}

foreach 로 반복 작업을 수행한다.

Tip. $rgsToDelete의 값을 순서대로 $rg에 전달하여 작업을 수행한다.

az group delete –name $rg –yes –no-wait

 # 리소스 그룹을 삭제합니다.
    az group delete --name $rg --yes --no-wait

az group delete --nage $rg 를 실행하면, 삭제 확인을 묻는 프롬프트가 출력되므로 --yes 옵션을 추가한다.

Do { Start-Sleep -Seconds 5 $status = az group exists –name $rg } While ($status -eq “true”)

    # 삭제가 완료될 때까지 기다립니다.
    Do {
        Start-Sleep -Seconds 5
        $status = az group exists --name $rg
    } While ($status -eq "true")

리소스 그룹의 경우, 동일한 구독(Subscription)에서 같은 이름의 리소스 그룹은 생성할 수 없으므로, 삭제가 완료될 때까지 대기한다. Tip. 리소스 그룹의 리소스 양에 따라서 삭제가 완료될 때까지 시간이 걸리는 경우가 있으므로 Static 값으로 시간을 지정하면 경우에 따라 실패할 가능성이 존재한다.

az group create –name $rg –location japaneast

# 삭제 후, 동일한 이름으로 새 리소스 그룹을 생성합니다.
    az group create --name $rg --location japaneast

삭제가 완료되면 동일한 이름($rg value)으로 리소스 그룹을 생성한다.

주의 사항

  • 리소스 그룹을 삭제할 때 하당 그룹 안의 모든 리소스도 삭제된다.
  • 리소스 그룹의 리소스 종류 및 수에 따라 스크립트 실행 시간이 오래 걸릴 수 도 있다.
    ex) Azure SQL Managed Instance의 경우 생성도 오래 걸리지만, 삭제도 오래 걸린다.