ユーザーが Amazon Simple Storage Service (Amazon S3) バケットにアクセスすると、404 NoSuchKey エラーが発生します。
解決策
リクエストされたオブジェクトがバケットにない場合、Amazon S3 から 404 エラーが返される場合があります。ユーザーがオブジェクトに対して GET または HEAD リクエストを行う前に、そのオブジェクトが作成されており、S3 バケットで使用可能であることを確認してください。
Amazon S3 コンソールでバケットの内容をレビューし、オブジェクトがバケット内にあるかどうかを確認します。AWS コマンドラインインターフェイス (AWS CLI) を使用して head-object コマンドを実行することも可能です。
aws s3api head-object --bucket awsexamplebucket --key object.jpg
**注:**AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
Amazon S3 では、すべてのアプリケーションで強力な書き込み後読み取りの一貫性を実現しています。新しいオブジェクトの書き込みが成功するか、既存のオブジェクトの上書きまたは削除が成功すると、それ以降の読み取りリクエストは、すぐにオブジェクトの最新バージョンを取得します。Amazon S3 では、強力なリスト操作の一貫性も実現しています。書き込み後、バケット内のオブジェクトのリストを作成できます。Amazon S3 における一貫性の詳細については、「Amazon S3 における強力な一貫性」を参照してください。
リクエストされたオブジェクトが S3 バケットにあるが、404 NoSuchKey エラーが再度表示される場合は、次のことを確認してください。
- リクエストがオブジェクト名と完全に一致していることを確認します。S3 オブジェクトのリクエストでは、大文字と小文字が区別されます。たとえば、オブジェクトの名前が myimage.jpg であり、Myimage.jpg がリクエストされた場合、リクエスト元に 404 NoSuchKey エラーが返されます。
- 要求されたパスがオブジェクトへのパスと一致していることを確認します。一致しない場合、リクエスト元に 404 NoSuchKey エラーが返されます。
- オブジェクトへのパスにスペースが含まれている場合は、リクエストが正しい構文を使用してパスを認識していることを確認します。たとえば、AWS CLI を使用して Windows マシンにオブジェクトをダウンロードする場合、オブジェクトパスを引用符で囲む必要があります。オブジェクトパスは、aws s3 cp "s3://awsexamplebucket/Backup Copy Job 4/3T000000.vbk" のような形式である必要があります。
- オブジェクト名に、キャリッジリターン (\r) や改行 (\n) など、見づらい特殊文字や URL エンコード文字がないかどうかを確認します。たとえば、末尾にキャリッジリターンが付いたオブジェクト名 test は、Amazon S3 コンソールでは test%0A と表示されます。オブジェクト名に特殊文字が含まれているかどうかを確認するには、パラメータ --output json を指定して list-objects-v2 コマンドを実行します。JSON 出力では、戻り値 (\r) などの文字が可視化されます。オブジェクト名に可視化されない場合がある特殊文字が含まれている場合は、その文字をオブジェクト名から削除します。オブジェクトに再度アクセスしてみてください。
- (オプション) サーバーアクセスログを有効にすることで、404 NoSuchKey エラーの原因となる場合がある問題の有無について、リクエストレコードをさらに詳細に確認できます。
注: バケットにオブジェクトがなく、リクエスト元に s3:ListBucket アクセス許可がない場合、リクエスト元には 403 Access Denied エラーが返されます。403 Access Denied エラーが表示された場合は、見つからないオブジェクトに関連する問題を解決してください。
関連情報
Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング