メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

Amazon S3 のトラブルシューティング

このセクションでは、Amazon S3 の作業中に起こりうる一般的な問題について説明します。

全般: Amazon S3 リクエスト ID の取得

Amazon S3 でエラーまたは予期しない動作が発生したために、AWS サポートに連絡する必要があるときは、失敗したアクションに関連するリクエスト ID を取得する必要があります。このリクエスト ID を取得することにより、AWS サポートは発生している問題を解決しやすくなります。リクエスト ID はペアになっていて、Amazon S3 が処理するすべての応答で返され(エラーの応答を含む)、詳細なログを通じてアクセスできます。リクエスト ID を取得するには、多くの一般的な方法があります。

これらのログを回復したら、2 つの値をコピーして記録しておきます。このペアは、AWS サポートに連絡するとき必要になります。

HTTP の使用

ターゲットアプリケーションに到達する前に HTTP リクエストのビットを記録することで、リクエスト ID、x-amz-request-id、および x-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 のペアは次の例のようになります。

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 の使用

以下のセクションでは、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 の使用

ロギングの設定は、PHP を使って行うことができます。詳細については、「送信されるデータを表示する方法」(AWS SDK for PHP のよくある質問)を参照してください。

SDK for Java の使用

特定のリクエストまたは応答のロギングを有効にすることができます。これにより、関連するヘッダーのみを取得して返すことができます。これを行うには、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 開発者ガイド』の「AWS SDK for Java の呼び出しの記録」トピックの「詳細なワイヤログ記録」を参照してください。

AWS SDK for .NET の使用

組み込みの System.Diagnostics ログ作成ツールを使用して、AWS SDK for .NET のロギングを設定できます。詳細については、.NET 開発ブログの投稿「Logging with the AWS SDK for .NET」を参照してください。

注記

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

SDK for Python の使用

コードに次の行を追加し、デバッグ情報をファイルに出力することで、Python のロギングを設定できます。

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

AWS 用の Boto Python インターフェイスを使用している場合、Boto のドキュメント(こちら)に従って、デバッグレベルを 2 に設定できます。

Ruby の SDK の使用

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 の使用

コマンドに --debug を追加することで、AWS CLI でリクエスト ID を取得できます。

Windows PowerShell の使用

Windows PowerShell を使用したログ復元の詳細については、.NET 開発ブログの投稿「Response Logging in AWS Tools for Windows PowerShell」を参照してください。

トラブルシューティングとサポートに関するその他のトピックについては、以下を参照してください。

CORS の問題のトラブルシューティング

REST エラーと SOAP エラーの処理

AWS サポートに関するドキュメント

サードパーティ製ツールに関するトラブルシューティング情報については、AWS 開発者フォーラムの「Getting Amazon S3 request IDs」を参照してください。