메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

Amazon S3 문제 해결

이 단원에서는 Amazon S3 문제를 해결하는 방법과 AWS Support에 연락할 때 사용해야 하는 요청 ID를 받는 방법에 대해 설명합니다.

증상별 Amazon S3 문제 해결

다음 주제는 Amazon S3 작업 시 발생할 수 있는 문제 중 일부를 해결하는 데 도움이 되는 증상을 나열한 것입니다.

버전 관리를 사용하는 버킷에 대한 Amazon S3 요청에 대해 HTTP 503 응답이 크게 증가

버전 관리를 사용하는 버킷에 대한 Amazon S3 PUT 또는 DELETE 객체 요청에서 받은 HTTP 503 속도 저하 응답의 횟수가 크게 증가한다면 버전이 무수히 많은 객체가 하나 이상 버킷에 있을 수 있습니다. 객체에 버전이 무수히 많을 경우 Amazon S3가 자동으로 버킷에 대한 요청을 제한하여 과도한 요청 트래픽으로부터 고객을 보호합니다. 과도한 트래픽은 동일한 버킷에 다른 요청이 만들어지는 것을 지연시킬 수 있습니다.

무수히 많은 버전이 있는 S3 객체를 파악하려면 Amazon S3 인벤토리 도구를 사용합니다. 인벤토리 도구는 버킷에 있는 객체의 플랫 파일 목록을 제공하는 보고서를 생성합니다. 자세한 내용은 Amazon S3 인벤토리 단원을 참조하십시오.

Amazon S3 팀은 같은 S3 객체를 반복적으로 덮어써서 해당 객체에 수백만 개 버전이 생성될 가능성이 있는 응용 프로그램을 조사할 것을 권장합니다. 조사를 통해 응용 프로그램이 의도한 대로 작동하는지 판단할 수 있습니다. 하나 이상의 S3 객체에 수백만 개 버전이 필요한 사용 사례가 있는 경우, AWS 지원 팀(AWS Support)에 연락하여 사용 사례를 논의하고 귀사의 사용 사례 시나리오에 맞는 최적의 솔루션을 찾는 데 필요한 도움을 받으십시오.

CORS로 버킷 세트에 액세스할 때 예상하지 못한 동작

CORS(cross-origin 리소스 공유) 구성으로 버킷 세트에 액세스할 때 예상하지 못한 동작이 발생할 경우 CORS 문제 해결을 참조하십시오.

AWS Support용 Amazon S3 요청 ID 가져오기

Amazon S3에 오류나 예기치 않은 동작이 발생하여 AWS Support에 문의할 때는 실패한 작업과 연결된 요청 ID를 알아야 합니다. 이 요청 ID를 알면 AWS Support에서 해당 문제의 해결을 지원할 수 있습니다. 요청 ID는 쌍으로 되어 있고 Amazon S3에서 처리하는 모든 응답(잘못된 응답이라도)에 반환되며 상세 정보 로그를 통해 액세스할 수 있습니다. 여러 가지 일반적인 방법으로 요청 ID를 가져올 수 있습니다.

이 로그를 복구한 후에는 AWS Support에 문의할 때 필요하므로 두 값을 복사하여 보관하십시오. AWS Support 문의에 대한 내용은 문의처에서 확인하십시오.

HTTP를 이용한 요청 ID 가져오기

HTTP 요청이 대상 애플리케이션에 도달하기 전에 이 요청을 기록하여 요청 ID x-amz-request-idx-amz-id-2를 가져올 수 있습니다. HTTP 요청의 상세 정보 로그를 복구할 수 있는 다양한 타사 도구가 있습니다. 그중 신뢰할 수 있는 도구를 선택하여 다른 Amazon S3 HTTP 요청을 보낼 때 Amazon S3 트래픽이 통과하는 포트에서 수신 대기하며 도구를 실행합니다.

HTTP 요청의 경우 요청 ID 쌍은 다음 예와 같이 표시됩니다.

Copy
x-amz-request-id: 79104EXAMPLEB723 x-amz-id-2: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

참고

HTTPS 요청은 암호화되어 대부분의 패킷 캡처에서 숨겨집니다.

웹 브라우저를 이용한 요청 ID 가져오기

대부분의 웹 브라우저에는 요청 헤더를 볼 수 있게 해주는 개발자 도구가 있습니다.

오류를 반환하는 웹 브라우저 기반 요청의 경우 요청 ID 쌍이 다음 예와 같이 표시됩니다.

Copy
<Error><Code>AccessDenied</Code><Message>Access Denied</Message> <RequestId>79104EXAMPLEB723</RequestId><HostId>IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km</HostId></Error>

성공적인 요청에서 요청 ID 쌍을 가져오려면 개발자 도구를 사용하여 HTTP 응답 헤더를 봐야 합니다. 특정 브라우저의 개발자 도구에 대한 자세한 정보는 AWS 개발자 포럼에서 Amazon S3 문제 해결 - S3 요청 ID 복구 방법을 참조하십시오.

AWS SDK를 이용한 요청 ID 가져오기

다음 단원에는 AWS SDK를 사용한 로깅 구성에 대한 정보가 있습니다. 모든 요청과 응답에서 로깅을 상세 정보 로깅을 활성화할 수 있지만 하려면 대량 요청/응답은 애플리케이션 속도를 크게 떨어뜨릴 수 있으므로 프로덕션 시스템에서는 로깅을 활성화하지 마십시오.

AWS SDK 요청의 경우 요청 ID 쌍은 다음 예와 같이 표시됩니다.

Copy
Status Code: 403, AWS Service: Amazon S3, AWS Request ID: 79104EXAMPLEB723 AWS Error Code: AccessDenied AWS Error Message: Access Denied S3 Extended Request ID: IOWQ4fDEXAMPLEQM+ey7N9WgVhSnQ6JEXAMPLEZb7hSQDASK+Jd1vEXAMPLEa3Km

PHP용 SDK를 이용한 요청 ID 가져오기

PHP를 사용하여 로깅을 구성할 수 있습니다. 자세한 정보는 네트워크를 통해 전송되는 데이터를 확인하는 방법(출처: PHP용 AWS SDK의 FAQ)을 참조하십시오.

Java용 SDK를 이용한 요청 ID 가져오기

특정 요청이나 응답에 대한 로깅을 활성화하여 관련 헤더만 포착하고 반환할 수 있습니다. 그러려면 com.amazonaws.services.s3.s3ResponseMetadata 클래스를 가져오십시오. 그런 다음 실제 요청을 수행하기 전에 변수에 요청을 저장할 수 있습니다. getCachedResponseMetadata(AmazonWebServiceRequest request).getRequestID()를 호출하여 로깅된 요청이나 응답을 가져옵니다.

Copy
PutObjectRequest req = new PutObjectRequest(bucketName, key, createSampleFile()); s3.putObject(req); S3ResponseMetadata md = s3.getCachedResponseMetadata(req); System.out.println("Host ID: " + md.getHostId() + " RequestID: " + md.getRequestId());

그 대신 모든 Java 요청 및 응답의 상세 정보 로깅을 사용할 수 있습니다. 자세한 정보는 AWS SDK for Java Developer Guide의 Logging AWS SDK for Java Calls 단원에서 Verbose Wire Logging 부분을 참조하십시오.

.NET용 AWS SDK를 이용한 요청 ID 가져오기

기본 제공된 System.Diagnostics 로깅 도구를 사용하여 .NET용 AWS SDK에서 로깅을 구성할 수 있습니다. 자세한 내용은 Logging with the AWS SDK for .NET AWS 개발자 블로그 게시물을 참조하십시오.

참고

반환되는 정보에는 기본적으로 오류 정보만 포함됩니다. 구성 파일에는 AWSLogMetrics(및 선택적으로 AWSResponseLogging)가 포함되어 있어야 요청 ID를 가져올 수 있습니다.

SDK for Python을 이용한 요청 ID 가져오기

디버그 정보를 파일에 출력하기 위해 코드에 다음 줄을 추가하여 Python으로 로깅을 구성할 수 있습니다.

Copy
import logging logging.basicConfig(filename="mylog.log", level=logging.DEBUG)

AWS용 Boto Python 인터페이스를 사용하는 경우 Boto 문서(여기)에 따라 디버그 수준을 2로 설정할 수 있습니다.

Ruby용 SDK를 이용한 요청 ID 가져오기

Ruby용 SDK - 버전 1 또는 버전 2를 사용하여 요청 ID를 가져올 수 있습니다.

  • Ruby용 SDK - 버전 1 사용 - 다음 코드 줄을 사용하여 HTTP 유선 로깅을 전역적으로 활성화할 수 있습니다.

    Copy
    s3 = AWS::S3.new(:logger => Logger.new($stdout), :http_wire_trace => true)
  • Ruby용 SDK - 버전 2 사용 - 다음 코드 줄을 사용하여 HTTP 유선 로깅을 전역적으로 활성화할 수 있습니다.

    Copy
    s3 = Aws::S3::Client.new(:logger => Logger.new($stdout), :http_wire_trace => true)

AWS CLI를 이용한 요청 ID 가져오기

명령에 --debug를 추가하여 AWS CLI에서 요청 ID를 가져올 수 있습니다.

그 밖의 문제 해결 및 지원 항목은 다음을 참조하십시오.

타사 도구와 관련된 문제 해결 정보는 AWS 개발자 포럼의 Amazon S3 요청 ID 가져오기를 참조하십시오.