리소스를 찾을 수 없는 오류 해결

이 문서에서는 작업 중에 리소스를 찾을 수 없을 때 발생할 수 있는 오류에 대해 설명합니다. 일반적으로 Bicep 파일 또는 ARM 템플릿(Azure Resource Manager 템플릿)을 사용하여 리소스를 배포할 때 이 오류가 표시됩니다. 또한 관리 작업을 수행할 때 오류가 표시되며, Azure Resource Manager가 필요한 리소스를 찾을 수 없습니다. 예를 들어, 존재하지 않는 리소스에 태그를 추가하려고 하면 이러한 오류가 표시됩니다.

증상

리소스를 찾을 수 없음을 나타내는 두 가지 오류 코드가 있습니다. NotFound 오류는 다음과 유사한 결과를 반환합니다.

Code=NotFound;
Message=Cannot find ServerFarm with name exampleplan.

ResourceNotFound 오류는 다음과 유사한 결과를 반환합니다.

Code=ResourceNotFound;
Message=The Resource 'Microsoft.Storage/storageAccounts/{storage name}' under resource
group {resource group name} was not found.

원인

Resource Manager에서 리소스에 대한 속성을 검색해야 하지만, 구독에서 해당 리소스를 찾을 수 없습니다.

해결 방법 1: 리소스 속성 확인

관리 작업을 수행하는 동안 이러한 오류가 표시되면, 리소스에 제공되는 값을 확인합니다. 확인할 세 가지 값은 다음과 같습니다.

  • 리소스 이름
  • 리소스 그룹 이름
  • 구독

PowerShell 또는 Azure CLI를 사용하는 경우 리소스가 포함된 구독에서 명령을 실행하고 있는지 확인합니다. Set-AzContext 또는 az account set를 사용하여 구독을 변경할 수 있습니다. 많은 명령은 현재 컨텍스트와 다른 구독을 지정할 수 있는 구독 매개 변수를 제공합니다.

속성을 확인할 수 없으면 Microsoft Azure Portal에 로그인합니다. 사용하려는 리소스를 찾아서 리소스 이름, 리소스 그룹 및 구독을 검사합니다.

해결 방법 2: 종속성 설정

템플릿을 배포할 때 이러한 오류가 발생하는 경우, 종속성을 추가해야 할 수 있습니다. Resource Manager는 가능한 경우 리소스를 병렬로 만들어 배포를 최적화합니다.

예를 들어 웹앱을 배포할 때 App Service 요금제가 있어야 합니다. 웹앱이 App Service 계획에 종속된다고 지정하지 않으면 Resource Manager에서 두 리소스를 모두 만듭니다. App Service 요금제 리소스가 아직 없기 때문에 찾을 수 없다는 오류와 함께 웹앱이 실패합니다. 웹앱에서 종속성을 설정하여 이 오류를 방지할 수 있습니다.

resourceId 함수 대신 암시적 종속성을 사용합니다. 종속성은 리소스의 기호 이름 및 ID 속성을 사용하여 만들어집니다.

예를 들어 웹앱의 serverFarmId 속성은 servicePlan.id를 사용하여 App Service 요금제에 대한 종속성을 만듭니다.

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  properties: {
    serverFarmId: servicePlan.id
  }
}

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' = {
  name: hostingPlanName
  ...

대부분의 배포에서는 dependsOn을 사용하여 명시적 종속성을 만들 필요가 없습니다.

필요하지 않은 종속성을 설정하지 마세요. 리소스가 병렬로 배포되지 않기 때문에 불필요한 종속성은 배포 기간을 연장합니다. 또한 배포를 차단하는 순환 종속성을 만들 수 있습니다.

배포 순서

종속성 문제가 발생하는 경우 리소스 배포 순서를 간파할 필요가 있습니다. 포털을 사용하여 배포 작업 순서를 볼 수 있습니다.

  1. 포털에 로그인합니다.

  2. 리소스 그룹의 개요에서 배포 기록에 대한 링크를 선택합니다.

    Screenshot of Azure portal highlighting the link to a resource group's deployment history in the Overview section.

  3. 검토하려는 배포 이름에 대해 관련 이벤트를 선택합니다.

    Screenshot of Azure portal showing a deployment name with the Related events link highlighted in the deployment history.

  4. 각 리소스에 대한 이벤트의 시퀀스를 검사합니다. 각 작업의 상태와 타임스탬프에 주의합니다. 예를 들어 다음 이미지는 병렬로 배포된 3개의 스토리지 계정을 보여 줍니다. 3개의 스토리지 계정 배포가 동시에 시작되었습니다.

    Screenshot of Azure portal activity log displaying three storage accounts deployed in parallel, with their timestamps and statuses.

    다음 이미지는 동시에 배포되지 않은 3개의 스토리지 계정을 보여줍니다. 두 번째 스토리지 계정은 첫 번째 스토리지 계정에 종속되고 세 번째 스토리지 계정은 두 번째 스토리지 계정에 종속됩니다. 첫 번째 스토리지 계정은 다음 계정이 시작되기 전에 시작, 승인성공이라는 레이블이 지정됩니다.

    Screenshot of Azure portal activity log displaying three storage accounts deployed in sequential order, with their timestamps and statuses.

해결 방법 3: 외부 리소스 가져오기

Bicep은 기호 이름을 사용하여 다른 리소스에 대한 암시적 종속성을 만듭니다. 기존 키워드는 배포된 리소스를 참조하세요. 기존 리소스가 배포하려는 리소스와 다른 리소스 그룹에 있는 경우 scope을 포함하고 resourceGroup 함수를 사용합니다.

이 예제에서는 다른 리소스 그룹의 기존 App Service 요금제를 사용하는 웹앱이 배포됩니다.

resource servicePlan 'Microsoft.Web/serverfarms@2022-03-01' existing = {
  name: hostingPlanName
  scope: resourceGroup(rgname)
}

resource webApp 'Microsoft.Web/sites@2022-03-01' = {
  name: siteName
  properties: {
    serverFarmId: servicePlan.id
  }
}

해결 방법 4: 리소스에서 관리 ID 가져오기

관리 ID로 리소스를 배포하는 경우 관리 ID에서 값을 검색하기 전에 해당 리소스가 배포될 때까지 기다려야 합니다. ID가 적용되는 리소스에 대해 암시적 종속성을 사용합니다. 이 접근 방식은 Resource Manager가 종속성을 사용하기 전에 리소스와 관리 ID가 배포되도록 합니다.

가상 머신에 적용되는 관리 ID에 대한 보안 주체 ID 및 테넌트 ID를 가져올 수 있습니다. 예를 들어 가상 머신 리소스의 기호 이름이 vm인 경우 다음 구문을 사용합니다.

vm.identity.principalId

vm.identity.tenantId

해결 방법 5: 함수 검사

리소스의 기호 이름을 사용하여 리소스에서 값을 가져올 수 있습니다. 기호 이름을 사용하여 동일한 리소스 그룹 또는 다른 리소스 그룹의 스토리지 계정을 참조할 수 있습니다. 배포된 리소스에서 값을 가져오려면 existing 키워드를 사용합니다. 리소스가 다른 리소스 그룹에 있는 경우 resourceGroup 함수와 함께 scope을 사용합니다. 대부분의 경우 reference 함수는 필요하지 않습니다.

다음 예제에서는 다른 리소스 그룹에서 기존 스토리지 계정을 참조합니다.

resource stgAcct 'Microsoft.Storage/storageAccounts@2022-05-01' existing = {
  name: stgname
  scope: resourceGroup(rgname)
}

해결 방법 6: 리소스 삭제 후

리소스를 삭제할 때 리소스가 포털에 나타나지만 사용할 수 없는 시간이 잠시 있을 수 있습니다. 리소스를 선택하면 리소스가 찾을 수 없음이라는 오류가 표시됩니다.

Screenshot of Azure portal showing a deleted resource with a 'Not found' error message in the resource's Overview section.

포털을 새로 고치면 삭제된 리소스가 사용 가능한 리소스 목록에서 제거되어야 합니다. 삭제된 리소스가 몇 분 이상 계속 사용 가능한 것으로 표시되면 지원에 문의합니다.