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

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

このセクションでは、Amazon S3 をトラブルシューティングする方法と、AWS サポートに連絡する際に必要なリクエスト ID を取得する方法について説明します。

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

以下のトピックでは、Amazon S3 を使用する際に発生する可能性があるいくつかの問題のトラブルシューティングに役立つ症状を示します。

バージョニングな有効なバケットへの Amazon S3 リクエストに対する HTTP 503 レスポンスが著しく増加する

HTTP 503 の数が著しく増加し、バージョニングを有効にしたバケットへの Amazon S3 PUT または DELETE オブジェクトリクエストに対して受信されるレスポンスが低下する場合は、数百万のバージョンがあるバケットに 1 つ以上のオブジェクトがある可能性があります。数百万のバージョンを持つオブジェクトがある場合、Amazon S3 は、過剰なリクエストトラフィックからお客様を保護するため (同じバケットに対して行われた他のリクエストを妨害する可能性があります)、バケットへのリクエストを自動的に調整します。

数百万のバージョンがある S3 オブジェクトを確認するには、Amazon S3 インベントリツールを使用します。インベントリツールは、バケット内のオブジェクトのフラットファイルリストを提供するレポートを生成します。詳細については、「 Amazon S3 ストレージインベントリ」を参照してください。

Amazon S3 チームでは、同じ S3 オブジェクトを繰り返し上書きし、そのオブジェクトに対して数百万のバージョンを作成する可能性のあるアプリケーションを調査して、アプリケーションが意図どおり動作しているかどうか調査することをお客様にお勧めしています。1 つ以上の S3 オブジェクトに対して数百万のバージョンを必要とするユースケースがある場合は、ユースケースのシナリオに対する最適なソリューションを当社が支援できるよう、AWS サポートの AWS サポートチームに連絡してそのユースケースについて話し合ってください。

CORS によりバケットセットにアクセスするときの予期しない動作

Cross-Origin Resource Sharing (CORS) によるバケットへのアクセスの際に予期しない動作が発生する場合は、「CORS の問題のトラブルシューティング」を参照してください。

AWS サポートの Amazon S3 リクエスト ID の取得

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

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

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

ターゲットアプリケーションに到達する前に 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 の取得

ほとんどのウェブブラウザには、リクエストヘッダーを確認できるようにする開発者ツールがあります。

ウェブブラウザに基づくリクエストでエラーが返される場合、リクエスト 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 を使って行うことができます。詳細については、「送信されるデータを表示する方法」(AWS SDK for PHP のよくある質問)を参照してください。

SDK for Java を使用したリクエスト 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』の「AWS SDK for Java の呼び出しの記録」トピックの「詳細なワイヤログ記録」を参照してください。

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

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

注記

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

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 開発者フォーラムの「Getting Amazon S3 request IDs」を参照してください。