Amazon Simple Queue Service(Amazon SQS) 대기열에 API 호출을 했는데 “QueueDoesNotExist” 오류가 발생했습니다.
해결 방법
GetQueueAttributes, SendMessage 및 DeleteMessage와 같은 일부 Amazon SQS API 호출은 QueueDoesNotExist 오류를 유발할 수 있습니다. 이 오류를 해결하려면 다음 단계를 따르세요.
대기열 URL이 올바른지 확인합니다.
요청에 제공된 대기열 URL이 올바르고 오타가 없는지 확인합니다.
중요: 대상 대기열 유형이 선입선출(FIFO)인 경우에는 대기열 URL에 .fifo 접미사를 추가해야 합니다.
올바른 리전 설정
잘못된 AWS 리전에 요청을 보내는 경우 QueueDoesNotExist 오류가 발생합니다. SDK 및 AWS Command Line Interface(AWS CLI)는 대기열 URL에서 대상 리전을 가져오지 않습니다. 대신에 클라이언트 구성이 리전을 설정합니다.
API 호출을 하기 전에 Amazon SQS 클라이언트에서 올바른 리전을 설정하세요. Amazon SQS 클라이언트 구성을 검토하여 클라이언트에 올바른 리전을 구성했는지 확인하세요. 클라이언트에서 리전을 구성하지 않으면 SDK 또는 AWS CLI가 구성 파일 또는 환경 변수에서 리전을 선택합니다. SDK가 구성 파일에서 리전을 찾지 못하면 SDK가 기본적으로 리전을 us-east-1로 설정합니다.
자세한 내용은 AWS 리전, 구성 및 자격 증명 파일 설정을 참조하세요.
AWS CloudTrail이 실패한 API 호출을 지원하는 경우, AWS 계정의 모든 리전에서 실패한 Amazon SQS 작업이 있는지 확인하세요. 이를 통해 리전이 문제의 원인인지 확인할 수 있습니다.
SDK 또는 AWS CLI에서 디버그 로그를 활성화하여 요청 리전을 확인할 수도 있습니다. 디버그 로그에는 요청의 대상 호스트가 표시됩니다. 다음은 그 예입니다. 호스트: sqs.us-east-1.amazonaws.com.
다음은 추가 디버그 로그 리소스입니다.
참고: 리전, 계정 또는 대기열 이름을 확인하려면 전체 대기열 세부 정보를 로그해야 합니다.
최근에 삭제한 대기열 확인
대기열이 최근에 삭제된 경우, QueueDoesNotExist 오류가 발생할 수 있습니다. 실패한 API 호출의 타임스탬프를 식별한 다음, 오류 발생 시점에 CloudTrail에서 PurgeQueue 작업이 있는지 확인하세요. 메시지 삭제 프로세스에는 최대 60초가 걸립니다.
대기열이 AWS CloudFormation 또는 기타 배포 스택의 일부이고 대기열이 삭제된 경우에도 오류가 발생할 수 있습니다. 스택을 업데이트하거나 삭제하면 대기열이 삭제되고 다시 생성될 수 있습니다. 삭제 시 대기열에 대한 API 호출을 수행하면 요청이 실패할 수 있습니다. 오류가 발생한 시점에 DeleteQueue 작업이 있는지 CloudTrail에서 확인합니다.
GetQueueUrl을 사용할 때 대상 대기열 계정 번호를 지정합니다.
API 호출의 경우 SDK 또는 AWS CLI는 일반적으로 대기열 URL에서 대상 대기열 계정 번호를 가져옵니다. 하지만 GetQueueUrl API 호출은 요청에 대기열의 계정을 제공하지 않으므로 기본적으로 호출자 계정에 대해 요청이 이루어집니다.
요청이 교차 계정 대기열을 대상으로 하는 경우, 대상 대기열 계정 번호를 API 호출 QueueOwnerAWSAccountId 파라미터로 지정해야 합니다.
타임아웃 기간 내에 DLQ로 이동된 메시지 삭제
DLQ(Dead Letter Queue)로 구성된 표준 SQS 대기열의 경우 재시도 후 메시지가 DLQ로 이동됩니다. 메시지가 DLQ로 이동된 후 기본 대기열에서 이전 ReceiptHandle을 사용하여 DeleteMessage 작업을 수행하는 경우, QueueDoesNotExist 오류가 발생할 수 있습니다. 구성된 VisibilityTimeout 기간 내에 메시지를 삭제해야 합니다.
요청자가 필요한 IAM 권한을 가지고 있는지 확인하세요.
요청하는 AWS Identity and Access Management(IAM)사용자 또는 역할에 필요한 권한이 없는 경우, 다음과 같은 오류가 발생할 수 있습니다. "The specified queue does not exist or you do not have access to it."
GetCallerIdentity API 호출을 사용하여 IAM 엔터티에 필요한 권한이 있는지 확인하세요.
Boto3 Python에서 GetCallerIdentity API 호출 예시:
import boto3
sts = boto3.client('sts')
print(sts.get_caller_identity())
Amazon SQS 정책의 예로는 Amazon SQS 정책의 기본 예시를 참조하세요.
Amazon SQS 권한에 대한 자세한 내용은 Amazon SQS 대기열에 액세스하려면 어떤 권한이 필요한가요?를 참조하세요.
AWS Support를 통한 문제 해결
위의 문제 해결 단계로 문제가 해결되지 않으면 AWS Support에 문의하세요. 실패한 API 호출의 timezone와 함께 RequestId 및 timestamp를 포함하세요.