리소스가 없는 리소스 그룹 찾기
리소스가 없는 모든 리소스 그룹을 삭제하는 것이 좋은 시작이라고 생각했습니다. 자원이 없습니까? 글쎄요, 아마도 더 이상 필요하지 않을 것입니다(비싼 리소스를 삭제했을 가능성이 있지만 전체 정리를 수행하지 않았습니다).
그러나 포털을 통해 클릭하지 않고 어떻게 찾을 수 있습니까?
음,
shell.azure.com
부터 시작하여 스크립팅을 시작하겠습니다.이 작업을 수행하려면 모든 리소스 그룹의 이름과 해당 리소스 그룹의 항목 수라는 두 가지 정보가 필요합니다.
모든 리소스 그룹의 이름을 얻는 것은 간단합니다.
az group list | jq 'map(.name)'
그러면 다음이 출력됩니다.
[
"aaron-cloud-cli",
"dddsydney",
"httpstatus",
"personal-website",
"restream-streamdeck",
"NetworkWatcherRG",
"stardust-codespace"
]
불행히도 이것은 그룹에 얼마나 많은 리소스가 있는지 알려주지 않습니다(예,
name
속성만 가져오고 있지만 전체 JSON에는 포함되어 있지 않습니다). 실제로 az group
로는 전혀 얻을 수 없으며 az group show --name <name>
도 제공하지 않습니다. 이 문제를 다르게 처리해야 합니다. 대신 모든 리소스를 가져와 리소스 그룹별로 그룹화합니다. , az resource list
로 할 수 있는 작업:az resource list | jq 'map(.resourceGroup) | group_by(.) | map({ name: .[0], length: length }) | sort_by(.length) | reverse'
이
jq
명령은 약간 복잡하지만 분석하면 가장 먼저 map(.resourceGroup)
가 포함된 각 리소스에서 리소스 그룹 이름을 선택하여 리소스 그룹 이름의 배열을 제공합니다. 다음으로 group_by(.)
를 사용하여 그룹화하고 자원 그룹의 이름(인덱스의 첫 번째 항목에서 가져옴)과 길이(자원이 얼마나 많은지 리소스 그룹). 마지막으로 map
및 sort_by
로 정렬하고 주문하여 다음과 같은 출력을 제공합니다.[
{
"name": "httpstatus",
"length": 11
},
{
"name": "personal-website",
"length": 3
},
{
"name": "stardust-codespace",
"length": 1
},
{
"name": "restream-streamdeck",
"length": 1
},
{
"name": "dddsydney",
"length": 1
},
{
"name": "aaron-cloud-cli",
"length": 1
}
]
엄청난! 예외는... 리소스가 있는 리소스 그룹만 포함합니다.
따라서 모든 리소스 그룹 이름을 가져오려면 원래 쿼리가 필요하고 두 배열 사이의 음의 교차점을 찾을 수 있습니다. 나머지는 우리가 버릴 수 있는 리소스 그룹입니다.
항목이 있는 모든 리소스 그룹을 bash 변수로 푸시하여 시작합니다.
RG_NAMES=$(az resource list | jq -r 'map(.resourceGroup) | group_by(.) | map(.[0])')
다음으로
reverse
에 대한 쿼리의 대체 항목으로 $RG_NAMES
를 사용합니다.az group list | jq -r "map(.name) | map(select(. as \$NAME | $RG_NAMES | any(. == \$NAME) | not)) | sort"
다시 한 번 이 더 복잡한 jq 문을 분해해 보겠습니다.
az group list
를 사용하여 리소스 그룹의 이름을 가져오는 것으로 시작합니다(우리에게 필요한 전부이므로). 그런 다음 map(.name)
호출로 연결되어 배열의 각 항목에 대해 작업할 수 있습니다. 두 번째map
에서 항목을 변수map
(환경 변수$NAME
로 대체하기 때문에 이스케이프 처리함)에 항목을 할당하고 $RG_NAMES
변수로 파이프하므로 파이프할 수 있습니다. 그것을 $RG_NAMES
로 변경하고 any
의 항목이 $RG_NAMES
와 일치하는지 확인합니다. $NAME
의 결과는 any
를 통해 파이핑되어 반전되고 결과는 not
에 제공되어 리소스가 없는 리소스 그룹 이름으로만 필터링됩니다!["NetworkWatcherRG"]
두 줄의 코드를 성공적으로 실행했으며 비어 있고 삭제할 수 있는 리소스 그룹을 다시 얻었습니다.
요약
다시 그 두 줄이 있습니다.
RG_NAMES=$(az resource list | jq -r 'map(.resourceGroup) | group_by(.) | map(.[0])')
az group list | jq -r "map(.name) | map(select(. as \$NAME | $RG_NAMES | any(. == \$NAME) | not)) | sort"
예,
select
는 특히 실행 중인 파이프 수를 고려할 때 약간 벅차게 보일 수 있지만 대체로 광고된 대로 수행하고 항목이 없는 리소스 그룹 목록을 반환합니다.그리고 예, 모든 것을 클릭하는 것보다 이것을 알아 내려고 노력하는 데 더 많은 시간을 할애했을 수 있지만 적어도 다음에는 준비가되어 있습니다! 🤣
Reference
이 문제에 관하여(리소스가 없는 리소스 그룹 찾기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/azure/finding-resource-groups-with-no-resources-557j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)