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 イベントまたはデータイベントなどがあります。

これらのログを回復したら、2 つの値をコピーして記録しておきます。この値は、 連絡するとき必要になりますAWS Support AWS Support へのお問い合わせの詳細については、AWS Support ドキュメントの「AWS へのお問い合わせ」を参照してください。

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 re:Post の「Amazon S3 のトラブルシューティング - S3 リクエスト ID の復旧方法」を参照してください。

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

SDK for PHP を使用したリクエスト ID の取得

ログ記録の設定は、PHP を使用して行うことができます。詳細については、AWS SDK for PHP デベロッパーガイドの「送信されるデータを表示する方法」を参照してください。

SDK for Java を使用したリクエスト ID の取得

特定のリクエストまたは応答のログ記録を有効にして、関連するヘッダーのみを取得して返すことができます。これを行うには、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 デベロッパーガイドで「詳細なワイヤログ記録」を参照してください。

AWS SDK for .NET を使用したリクエスト ID の取得

組み込みの System.Diagnostics ログ作成ツールを使用して、AWS SDK for .NET のログ記録を設定できます。詳細については、AWS デベロッパーブログの投稿である「AWS SDK for .NET によるログ記録」を参照してください。

注記

デフォルトでは、返されたログにはエラー情報のみが含まれます。リクエスト ID を取得するには、設定ファイルに AWSLogMetrics (およびオプションで AWSResponseLogging) を追加する必要があります。

SDK for Python (Boto3) を使用したリクエスト ID の取得

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 boto3 boto3.set_stream_logger('', logging.DEBUG)

詳細については、AWS SDK for Python (Boto) API リファレンスの「set_stream_logger」を参照してください。

SDK for Ruby を使用したリクエスト ID の取得

SDK for Ruby バージョン 1、2、または 3 を使用して、リクエスト ID を取得できます。

  • SDK for Ruby - バージョン 1 の使用 – 次のコードで、HTTP ワイヤログをグローバルに有効にすることができます。

    s3 = AWS::S3.new(:logger => Logger.new($stdout), :http_wire_trace => true)
  • SDK for Ruby - バージョン 2 またはバージョン 3 の使用 – 次のコードで、HTTP ワイヤログをグローバルに有効にすることができます。

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

AWS クライアントからワイヤ情報を取得するためのヒントについては、「デバッグのヒント: ワイヤトレース情報をクライアントから取得」を参照してください。

AWS CLI を使用したリクエスト ID の取得

AWS Command Line Interface(AWS CLI) を使用してリクエスト ID を取得するには、--debug を コマンドに追加してください。

Windows PowerShell を使用してリクエスト ID を取得する

Windows PowerShell を使用してログを回復する方法については、.NET 開発ブログの投稿の「AWS Tools for Windows PowerShell における応答ログ」を参照してください。

AWS CloudTrail データイベントを使用してリクエスト ID を取得する

S3 オブジェクトレベルの API オペレーションをログに記録するように CloudTrail データイベントで設定された Amazon S3 バケットは、Amazon S3 でユーザー、ロール、または AWS サービスによって実行されるアクションに関する詳細情報を提供します。Athena で CloudTrail イベントをクエリすることで、S3 リクエスト ID を特定できます

S3 サーバーアクセスログ記録を使用してリクエスト ID を取得する

S3 サーバーアクセスログ用に設定された Amazon S3 バケットは、バケットに対して行われた各リクエストの詳細な記録を提供します。Athena を使用してサーバーアクセスログをクエリすることで、S3 リクエスト ID を特定できます。