Amazon S3 Error

S3를 사진 업로드를 위해 사용중인데 클라이언트 개발하시는 분에게 연락이 왔다.

사진에 접근하려고 하면 이런 에러가 뜬다.
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.

왠지 '니가 접속하려는 주소가 틀린 것 같다'는 느낌. 에러를 가만히 보니 '다음에 접속할 때는 이거 말고 저 아래의 엔드포인트를 사용해라' 라는 얘기 같다.
지금까지 사용하던 URL은 https://s3.amazonaws.com 이런 형태로 뒤에 bucket이름과 folder/file이름 순으로 나열되고 있었다.
그런데 에러 메시지가 알려주는 엔드포인트는 dottegiprofile.s3.amazonaws.com 뭔가 다르다. 사실 저 s3뒤에 사용하는 bucket의 위치(미국, 아시아 등)도 붙여줘야 하지만 저렇게만 바꿔주면 되더라.
그래서 설정에 있던 s3 url을 dottegiprofile.s3.amazonaws.com 으로 바꿔줬다. 풀어보면

.s3.amazonaws.com 이라는 얘기. 자세한 endpoint를 보기 위해서는 이 링크를 참조할 것.

하여간 저렇게 바꿔서 해봤다. 그랬더니 이번에는 다른 에러.

NoSuchKey
The specified key does not exist.

어쩌고 하는 에러가 발생한다.
주소로 접근을 아무리 해봐도 안되고 ACL 정책이 틀렸다는 얘기도 있어서 봤더니 내가 파일을 업로드 하기 전에 객체에 설정을 publicread로 제대로 해주고 있었다.
핵심은 '저 위치에 저 파일이 없다.'라는 것. 아무리 봐도 uri/bucket/folder/file 순으로 틀린 것이 하나도 없다는 생각이었지만 위의 endpoint가 힌트였다.
앞에 이미 bucketname을 명시해 주고 있기 때문에 실제 full url에서는 뒤에 bucket을 다시 명시하면 안된다. 그러니까 내가 사용했던.

http://.s3.amazonaws.com/// 은 틀렸다는 얘기.
여기서 중간의 bucketname을 제거하면 잘 읽어온다.

http://.s3.amazonaws.com//

그러니 연결되는 url을 db에 저장할 때 url 세팅을 제대로 해줘야 한다.
이제는 모든게 해결됨.

댓글 없음:

댓글 쓰기