View a markdown version of this page

AWS Support에 대한 Amazon S3 요청 ID 가져오기 - Amazon Simple Storage Service

AWS Support에 대한 Amazon S3 요청 ID 가져오기

Amazon S3에서 오류나 예기치 않은 동작이 발생하여 AWS Support에 문의할 때는 실패한 작업과 관련된 요청 ID를 제공해야 합니다. AWS Support이 요청 ID를 사용하여 해당 문제의 해결을 지원합니다.

요청 ID는 쌍으로 되어 있고 Amazon S3에서 처리하는 모든 응답(잘못된 응답이라도)에 반환되며 상세 정보 로그를 통해 액세스할 수 있습니다. 요청 ID를 가져오는 데는 S3 서버 액세스 로그 및 AWS CloudTrail 이벤트 또는 데이터 이벤트 등의 여러 가지 일반적인 방법을 사용할 수 있습니다.

이 로그를 복구한 후에는 에 문의할 때 필요하므로 두 값을 복사하여 보관하세요AWS Support AWS Support에 문의하는 방법에 대한 자세한 내용은 AWS 문의 또는 AWS Support 설명서를 참조하세요.

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

AWS Command Line Interface(AWS CLI)를 사용할 때 요청 ID를 가져오려면 명령에 --debug를 추가하세요. 예를 들어 아래와 같이 디버그 로그에 x-amz-request-idx-amz-id-2가 표시되어야 합니다.

... 2025-04-30 14:35:28,572 - MainThread - botocore.parsers - DEBUG - Response headers: {'x-amz-id-2': 'a+zm50vDJH3LLmCiXvwEo0u0PtPS/qCJaBvB2ZMH9dzyzTiJhiLZkBFFoRfsPfOKztUKT/garCI=', 'x-amz-request-id': 'N4NMN0MJ4VDFZMX9', 'Date': 'Wed, 30 Apr 2025 21:35:29 GMT', 'Content-Type': 'application/xml', 'Transfer-Encoding': 'chunked', 'Server': 'AmazonS3'} ...

Windows PowerShell을 사용하여 요청 ID 가져오기

Windows PowerShell을 사용한 로그 복구에 대한 자세한 내용은 AWS 개발자 도구 블로그에서 AWS Tools for Windows PowerShell의 응답 로깅을 참조하세요.

AWS CloudTrail 데이터 이벤트를 이용한 요청 ID 가져오기

S3 객체 수준 API 작업을 로깅하도록 CloudTrail 데이터 이벤트를 사용하여 구성된 Amazon S3 버킷은 Amazon S3의 사용자, 역할 또는 AWS 서비스가 수행한 작업의 세부 정보를 제공합니다. Athena를 사용하여 CloudTrail 이벤트를 쿼리함으로써 S3 요청 ID를 식별할 수 있습니다.

자세한 내용은 Amazon Simple Storage Service 사용 설명서CloudTrail을 사용하여 Amazon S3 요청 식별을 참조하세요.

S3 서버 액세스 로깅을 이용한 요청 ID 가져오기

S3 서버 액세스 로깅에 대해 구성된 Amazon S3 버킷은 버킷에 수행된 각 요청에 대한 상세 레코드를 제공합니다. Athena를 사용하여 서버 액세스 로그를 쿼리함으로써 S3 요청 ID를 식별할 수 있습니다.

자세한 내용은 Amazon Simple Storage Service 사용 설명서Amazon Athena를 사용하여 요청에 대한 액세스 로그 쿼리를 참조하세요.

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

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

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

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

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

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

대부분의 웹 브라우저에는 요청 헤더를 보는 데 사용할 수 있는 개발자 도구가 있습니다.

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

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

성공적인 요청에서 요청 ID 쌍을 가져오려면 브라우저의 개발자 도구를 사용하여 HTTP 응답 헤더를 확인합니다.

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

다음 섹션에는 다양한 AWS SDK를 사용한 로깅 구성에 대한 정보가 있습니다.

참고

모든 요청과 응답에서 상세 정보 로깅을 활성화할 수 있지만 대량 요청 또는 응답은 애플리케이션 속도를 크게 떨어뜨릴 수 있으므로 프로덕션 시스템에서는 로깅을 활성화하지 않는 것이 좋습니다.

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

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
C++

로거 유형 및 세부 수준은 SDK 초기화 중에 SDKOptions 인수에서 지정됩니다. 다음 예제에서는 세부 수준을 LogLevel::Debug로 지정합니다.

기본 로거는 파일 시스템에 로그를 쓰고 파일은 다음 규칙 aws_sdk_YYYY-MM-DD-HH.log를 사용하여 이름이 지정됩니다. 로거는 매 시간 새 파일을 생성합니다.

Aws::SDKOptions options; options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Debug; Aws::InitAPI(options); // ... Aws::ShutdownAPI(options);

자세한 내용은 GitHub의 AWS SDK for C++ wiki에서 How do I turn on logging?을 참조하세요.

Go

SDK for Go를 사용하여 로깅을 구성할 수 있습니다. 자세한 내용은 AWS SDK for Go v2 개발자 안내서로깅을 참조하세요.

Java

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

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 개발자 안내서의 상세 유선 로깅을 참조하세요.

JavaScript

AWS SDK for JavaScript에는 기본 제공 로거가 있으므로, 이를 통해 수행하는 API 직접 호출을 로깅할 수 있습니다. 콘솔에서 이 로거를 켜고 로그 항목을 인쇄하려면 코드에 다음 명령문을 추가하세요.

AWS.config.logger = console;

자세한 내용은 AWS SDK for JavaScript 개발자 안내서AWS SDK for JavaScript 직접 호출 로깅을 참조하세요.

Kotlin

AWS SDK for Kotlin을 사용하면 코드 또는 환경 설정을 사용하여 유선 수준 메시지에 대한 로그 모드를 지정할 수 있습니다. HTTP 요청 및 HTTP 응답에 대한 로그 모드를 설정할 수 있습니다.

추가 로깅을 옵트인하려면 서비스 클라이언트를 구성할 때 logMode 속성을 설정합니다.

import aws.smithy.kotlin.runtime.client.LogMode // ... val client = S3Client { // ... logMode = LogMode.LogRequestWithBody + LogMode.LogResponse }

또는 환경 변수를 사용하여 로그 모드를 설정할 수 있습니다.

export SDK_LOG_MODE=LogRequestWithBody|LogResponse

자세한 내용은 AWS SDK for Kotlin 개발자 안내서로깅을 참조하세요.

.NET

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

참고

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

PHP

클라이언트 생성자에서 디버그 옵션을 true로 설정하여 네트워크를 통해 전송되는 데이터를 비롯한 디버그 정보를 가져올 수 있습니다.

$s3Client = new Aws\S3\S3Client([ 'region' => 'us-standard', 'version' => '2006-03-01', 'debug' => true ]);

자세한 내용은 AWS SDK for PHP 개발자 안내서의 네트워크를 통해 전송되는 데이터를 확인하려면 어떻게 해야 하나요?를 참조하세요.

Python (Boto3)

AWS SDK for Python (Boto3)을 사용하여 특정 응답을 로깅할 수 있습니다. 이 기능을 사용하여 관련 헤더만 캡처할 수 있습니다. 다음 코드에서는 응답의 일부를 파일에 로깅하는 방법을 보여줍니다.

import logging import boto3 logging.basicConfig(filename='logfile.txt', level=logging.INFO) logger = logging.getLogger(__name__) s3 = boto3.resource('s3') response = s3.Bucket(bucket_name).Object(object_key).put() logger.info("HTTPStatusCode: %s", response['ResponseMetadata']['HTTPStatusCode']) logger.info("RequestId: %s", response['ResponseMetadata']['RequestId']) logger.info("HostId: %s", response['ResponseMetadata']['HostId']) logger.info("Date: %s", response['ResponseMetadata']['HTTPHeaders']['date'])

예외가 발생할 때 예외를 확인하고 관련 정보를 기록할 수도 있습니다. 자세한 내용은 AWS SDK for Python(Boto) API 참조의 오류 응답에서 유용한 정보 식별을 참조하세요.

또한 다음 코드를 사용하여 자세한 디버깅 로그를 출력하도록 Boto3를 구성할 수 있습니다.

import logging import boto3 boto3.set_stream_logger('', logging.DEBUG)

자세한 내용은 AWS SDK for Python(Boto) API 참조의 set_stream_logger 섹션을 참조하세요.

Ruby

SDK for Ruby 버전 3을 사용하여 요청 ID를 가져올 수 있습니다. 다음 코드를 사용하여 클라이언트에서 HTTP 유선 로깅을 활성화할 수 있습니다.

s3 = Aws::S3::Client.new(http_wire_trace: true)
참고

유선 로깅에는 액세스 키 ID와 같은 민감한 정보가 포함될 수 있습니다. 민감한 정보는 AWS Support와 공유하기 전에 제거해야 합니다.

요청 응답 또는 오류에서도 요청 컨텍스트 객체의 요청 ID를 찾을 수 있습니다.

# Finding the request ID from an error: begin s3.put_object(bucket: 'bucket', key: 'key', body: 'test') rescue Aws::S3::Errors::ServiceError => e puts e.context[:request_id] puts e.context[:s3_host_id] end # Finding the request ID from a successful call: resp = s3.put_object(bucket: 'bucket', key: 'key', body: 'test') puts resp.context[:request_id] puts resp.context[:s3_host_id]

자세한 내용은 AWS SDK for Ruby 개발자 안내서AWS SDK for Ruby 클라이언트의 유선 추적 정보를 사용하여 디버깅을 참조하세요.

Rust

로깅을 활성화하려면 tracing-subscriber 크레이트를 추가하고 Rust 애플리케이션에서 초기화합니다.

추적 라이브러리를 Cargo.toml 파일에 추가합니다.

tracing-subscriber = { version = "0.3", features = ["env-filter"] }

그런 다음 SDK 작업을 직접적으로 호출하기 전에 Rust 코드에서 기본 함수의 로거를 초기화합니다.

tracing_subscriber::fmt::init();

자세한 내용은 AWS SDK for Rust 개발자 안내서AWS SDK for Rust에서 로깅 구성 및 사용을 참조하세요.