Amazon S3 からの HTTP 404 エラー「NoSuchKey」をトラブルシューティングする方法を教えてください。

最終更新日: 2019 年 12 月 17 日

ユーザーが Amazon Simple Storage Service (Amazon S3) バケットのオブジェクトにアクセスしようとしています。しかし、Amazon S3 が「HTTP 404 NoSuchKey」というエラーを返します。このエラーをトラブルシューティングする方法を教えてください。 

解決方法

Amazon S3 は、要求されたオブジェクトがそのバケットにない場合、一般的に HTTP 404 エラーを返します。ユーザーがオブジェクトの GET または HEAD リクエストを行う前に、そのオブジェクトが作成され、バケットで使用可能であることを確認してください。オブジェクトがバケットで使用可能かどうかを確認するには、Amazon S3 コンソールからバケットの内容を確認します。あるいは、AWS コマンドラインインターフェイス (AWS CLI) を使用して、head-object コマンドを実行します。 

aws s3api head-object --bucket awsexamplebucket --key object.jpg

オブジェクトが最近アップロードされた場合にも、Amazon S3 は「NoSuchKey」エラーを返すことがあります。オブジェクトをアップロードすると、Amazon S3 はデータを複数のサーバーにレプリケートするため、新しくアップロードされたオブジェクトは、オブジェクトが複数のサーバーに完全にレプリケートされるまで検出されないことがあります。Amazon S3 は、オブジェクトのアップロード前に GET または HEAD オブジェクト呼び出しが行われた場合、書き込み後の読み込みの結果整合性を提供します。新しくアップロードされたオブジェクトに対する「NoSuchKey」エラーを回避するには、PUT リクエスト後数秒待ってから、オブジェクトへの最初のアクセスを試みます。

リクエストされたオブジェクトがバケットで使用可能で、引き続き Amazon S3 から HTTP 404 エラー「NoSuchKey」を返される場合には、以下を確認してください。

  • リクエストがオブジェクト名の大文字を含むオブジェクト名と正確に一致しているか確認します。S3 オブジェクトリクエストでは、大文字と小文字が区別されます。たとえば、オブジェクト名が myimage.jpg で、Myimage.jpg をリクエストしている場合、リクエスターは HTTP 404: NoSuchKey エラーを受け取ります。
  • リクエストされたパスが、オブジェクトへのパスと一致することを確認します。たとえば、オブジェクトへのパスが awsexamplebucket/Downloads/February/Images/image.jpg で、リクエストされたパスが awsexamplebucket/Downloads/February/image.jpg の場合、リクエスターは HTTP 404: NoSuchKey エラーを受け取ります。
  • オブジェクトへのパスに空白が含まれている場合は、リクエストがパスを認識するための正しい構文を使用していることを確認してください。たとえば AWS CLI を使用して Windows マシンにオブジェクトをダウンロードする場合は、aws s3 cp "s3://awsexamplebucket/Backup Copy Job 4/3T000000.vbk" のようにオブジェクトパスの前後に引用符を使用する必要があります。
  • オブジェクト名に、キャリッジリターン (\r) や改行 (\n) など、見づらい特殊文字または URL エンコード文字がないか確認してください。たとえば、最後にキャリッジリターンがあるオブジェクト名のテストは、Amazon S3 コンソールで test%0A と表示されます。オブジェクト名に特殊文字がないか確認するには、list-objects-v2 コマンドを パラメーター --output json を指定して実行します。JSON 出力では、戻り値 (\r) のような文字が表示されます。オブジェクト名に常に表示されない特殊文字が含まれている場合は、オブジェクト名からその文字を削除し、オブジェクトにもう一度アクセスしてください。
  • あるいは、サーバーアクセスログを有効にし、HTTP 404 エラーの原因となっている可能性のある問題についてリクエストレコードをさらに詳しく確認します。

注意: オブジェクトがバケットに存在せず、リクエスターに s3:ListBucket アクセス権がない場合、リクエスターは HTTP 404 エラーではなく HTTP 403: Access Denied エラーを受け取ります。この場合には、HTTP 403 Access Denied エラーに対処するため、見つからないオブジェクトに関連する問題を解決する必要があります。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合