Amazon S3 예외 : “지정된 키가 없습니다.” specified key

Amazon S3 버킷에서 이미지를 다운로드하기 위해 getObject 요청을 사용하여 Android 앱에서 AmazonS3Client를 사용하고 있습니다.

현재이 예외가 발생합니다.

com.amazonaws.services.s3.model.AmazonS3Exception:
The specified key does not exist.
 (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey;

내 S3 버킷에서 지정된 키가있는 객체를 볼 수 있지만.



답변

이 오류는 실제로 다소 간단합니다. 단순히 파일이 S3 버킷 내에 존재하지 않음을 의미합니다. 몇 가지 문제가있을 수 있습니다.

  1. 잘못된 파일을 참조하려고 할 수 있습니다. 검색하려는 경로를 다시 확인하십시오.

  2. 파일이 업로드 될 때마다 실패했을 것입니다. S3Sync 프로세스에 대한 로그를 확인하여 관련 출력을 찾을 수 있는지 확인하십시오.

출처


답변

나를 위해 객체는 확실히 존재하고 올바르게 업로드되었지만 s3 URL은 여전히 ​​같은 오류를 던졌습니다.

<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>

그 이유는 내 파일 이름에 #기호가 포함되어 있기 때문이라는 것을 알았고 특정 문자 나 기호도이 오류를 일으킬 것 같습니다.

이 문자를 제거하고 새 s3 URL을 생성하면 문제가 해결되었습니다.


답변

이는 s3의 최종 일관성 모델 로 인해 파일 경로가 올바른 경우에도 발생할 수 있습니다 . 기본적으로 객체가 작성된 후 읽을 수있는 데 약간의 지연이있을 수 있습니다. 자세한 정보는 이 문서 를 참조하십시오.


답변

제 경우에는 파일 이름에 공백이 포함되어 있었기 때문입니다. 이 문서 덕분에 해결되었습니다 (문제와 관련이 없음).

from urllib.parse import unquote_plus
key_name = unquote_plus(event['Records'][0]['s3']['object']['key'])

또한 urllib를 해당 버전의 레이어로 업로드해야합니다 (람다가 Python 3.7 인 경우 Python 3.7 환경에서 urllib를 패키징해야 함).

그 이유는 AWS가 ”를 ‘+'(왜 …)로 변환하기 때문입니다.


답변

제 경우에는 웹 사이트 파일을 포함하는 전체 폴더를 컨테이너에 업로드했기 때문에 오류가 나타났습니다.

폴더 외부의 모든 파일을 컨테이너로 바로 이동하여 문제를 해결했습니다.


답변

버킷은 지역별로 다릅니다. 문제가 될 수 있습니다.

또한 S3 콘솔을 사용하여 실제 객체로 이동 한 다음을 클릭 Copy Path하면 다음과 같은 결과가 나타납니다.

s3://<bucket-name>/<path>/object.txt

당신이 그것을 올바르게 파싱하기 위해 전달하는 한 그것이 가장 안전한 일이라고 생각합니다.


답변

문제의 원인이 잘못되었거나 버킷 / 키 이름의 오타입니다. 제공하는 버킷 또는 키 이름이 있는지 확인하십시오.