AWS サポート の Amazon S3 リクエスト ID の取得
Amazon S3 でエラーまたは予期しない動作が発生したために、AWS サポート に問い合わせるときは、失敗したアクションに関連するリクエスト ID を提供する必要があります。 AWS サポート はこれらのリクエスト ID を使用して、発生している問題を解決します。
リクエスト ID はペアになっていて、Amazon S3 が処理するすべての応答で返され (エラーの応答を含む)、詳細なログを通じてアクセスできます。リクエスト ID を取得するための一般的な方法がいくつかあります。例えば、S3 サーバーアクセスログや AWS CloudTrail イベントまたはデータイベントなどがあります。
これらのログを回復したら、2 つの値をコピーして記録しておきます。この値は、 連絡するとき必要になりますAWS サポート AWS サポート へのお問い合わせの詳細については、AWS サポート ドキュメントの「AWS へのお問い合わせ」を参照してください。
AWS CLI を使用したリクエスト ID の取得
AWS Command Line Interface (AWS CLI) を使用してリクエスト ID を取得するには、--debug をコマンドに追加してください。例えば、次のようにデバッグログに x-amz-request-id と x-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-id、および x-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++
-
ロガーのタイプと詳細度は、SDKOptions 引数で SDK 初期化中に指定されます。次の例では、詳細レベルを LogLevel::Debug として指定します。
デフォルトのロガーはファイルシステムに書き込み、ファイルは次の規則 aws_sdk_YYYY-MM-DD-HH.log を使用して名前が付けられます。ロガーは 1 時間ごとに新しいファイルを作成します。
Aws::SDKOptions options;
options.loggingOptions.logLevel = Aws::Utils::Logging::LogLevel::Debug;
Aws::InitAPI(options);
// ...
Aws::ShutdownAPI(options);
詳細については、AWS GitHub の SDK for C++ Wiki の「ログ記録を有効にするには」を参照してください。
- 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 のログ記録を設定できます。詳細については、AWS デベロッパーブログの投稿である「SDK for .NET によるログ記録」を参照してください。
デフォルトでは、返されたログにはエラー情報のみが含まれます。リクエスト 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'])
例外を発生時にキャッチし、関連情報をログに記録することもできます。詳細については、AWSSDK 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 サポートと共有する前にサニタイズする必要があります。
リクエスト context オブジェクトのリクエスト 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
-
ログ記録を有効にするには、Rust アプリケーションで tracing-subscriber クレートを追加して初期化します。
トレースライブラリを Cargo.toml ファイルに追加します。
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
次に、Rust コードで、SDK オペレーションを呼び出す前に、メイン関数でロガーを初期化します。
tracing_subscriber::fmt::init();
詳細については、「AWS SDK for Rust デベロッパーガイド」の「AWS SDK for Rust におけるログ記録の設定と使用」を参照してください。