Amazon S3 のエラーに関するベストプラクティス
Amazon S3 と連携するアプリケーションを設計するときは、Amazon S3 のエラーを適切に処理することが重要です。このセクションでは、アプリケーションの設計時に考慮すべき問題について説明します。
InternalError の場合は再試行する
内部エラーとは、Amazon S3 内で発生するエラーです。
InternalError レスポンスを受け取った場合、リクエストが処理されていない可能性があります。たとえば、PUT リクエストが InternalError を返す場合、それ以降の GET は古い値を取得することもあれば、更新された値を取得することもあります。
Amazon S3 が InternalError レスポンスを返す場合は、リクエストを再試行してください。
SlowDown エラーを繰り返すアプリケーションを調整する
S3 は分散システムの常として、意図的であるかどうかに関係なくリソースの過剰な消費を検出して対応する保護メカニズムを備えています。SlowDown エラーは、リクエストレートが高いためにこのようなメカニズムのいずれかが引き起こされた場合に発生することがあります。リクエストレートを低くすると、この種のエラーは減るかなくなります。一般に、ほとんどのユーザーはこのようなエラーを日常的に経験することはありません。ただし、詳細を知りたい場合や、SlowDown エラーが頻繁にまたは予期せず発生する場合は、Amazon S3 デベロッパーフォーラム
エラーを分離する
注記
SOAP のサポートは HTTP 経由では廃止されましたが、HTTPS 経由では引き続き利用可能です。Amazon S3 の新機能は SOAP でサポートされていません。SOAP の代わりに、REST API か AWS SDK を使用することをお勧めします。
Amazon S3 には、SOAP と REST API の両方で使用されるエラーコードが用意されています。SOAP API は標準の Amazon S3 エラーコードを返します。REST API は標準の HTTP サーバーのように見え、既存の HTTP クライアント (例: ブラウザ、HTTP クライアントライブラリ、プロキシ、キャッシュなど) を操作するように設計されています。HTTP クライアントがエラーを適切に処理できるように、各 Amazon S3 エラーは HTTP ステータスコードにマッピングされています。
HTTP ステータスコードは Amazon S3 エラーコードよりも内容がおおまかであるため、エラーに関する情報は少なくなります。たとえば、NoSuchKey
と NoSuchBucket
という Amazon S3 エラーはどちらも HTTP 404 Not
Found
ステータスコードにマッピングされます。
HTTP ステータスコードに含まれるエラー情報は少なくなりますが、クライアントが HTTP を認識できて Amazon S3 API を認識できない場合も、通常はエラーが適切に処理されます。
このため、エラーを処理するときや Amazon S3 エラーをエンドユーザーに報告するときは、HTTP ステータスコードではなく、エラーに関する情報が多く含まれる Amazon S3 エラーコードを使用します。さらに、アプリケーションをデバッグするときは、人が読み取り可能な XML エラーレスポンスの <Details> 要素も参照してください。