[ruby-on-rails] AWS S3 : 액세스하려는 버킷은 지정된 엔드 포인트를 사용하여 해결해야합니다.

AWS-SDK-Core Ruby Gem으로 업로드 된 이미지 파일을 삭제하려고합니다.

다음 코드가 있습니다.

require 'aws-sdk-core'

def pull_picture(picture)
    Aws.config = {
        :access_key_id => ENV["AWS_ACCESS_KEY_ID"],
        :secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
        :region => 'us-west-2'
    }

    s3 = Aws::S3::Client.new

    test = s3.get_object(
        :bucket => ENV["AWS_S3_BUCKET"],
        :key => picture.image_url.split('/')[-2],   
    )
end

그러나 다음과 같은 오류가 발생합니다.

액세스하려는 버킷은 지정된 엔드 포인트를 사용하여 해결해야합니다. 향후 모든 요청을이 엔드 포인트로 보내십시오.

로 변경 us-east-1하면 다음 오류가 표시 되므로 지역이 올바른지 알고 있습니다 .

지정된 키가 존재하지 않습니다.

내가 여기서 뭘 잘못하고 있니?



답변

이 버킷은 다른 지역에서 생성 된 것 같습니다. IE는 us-west-2가 아닙니다. “내가 액세스하려는 버킷을 지정된 엔드 포인트를 사용하여 해결해야합니다. 향후 모든 요청을이 엔드 포인트로 보내십시오.”

미국 표준은 us-east-1


답변

콘솔에서 버킷 위치를 확인한 다음 사용할 엔드 포인트에 대한 참조로이를 사용 하십시오 .
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region


답변

버킷이 지역에 us-west-2있고 URL 패턴에 경로에 bucketname 이 있기 때문에 비슷한 오류 가 발생했습니다. 일단 URL 패턴을 URL 하위 도메인으로 버킷 이름을 갖도록 파일을 가져 와서 변경했습니다.

예를 들어 이전 URL은

https://s3.amazonaws.com/bucketname/filePath/filename

그런 다음으로 교체했습니다.

https://bucketname.s3.amazonaws.com/filePath/filename


답변

많은 S3 API 패키지의 경우 (최근 에이 문제가 npm s3 패키지 인 경우 ) 리전이 미국 표준으로 간주되는 문제가 발생할 수 있으며 버킷을 호스팅하도록 선택한 경우 이름별로 조회하려면 리전을 명시 적으로 정의해야합니다 그 지역 밖에서.


답변

S3Client를 작성하는 동안 특정 리젼에 대한 엔드 포인트 맵핑을 지정할 수 있습니다. 기본값 이 노스 버지니아 인 s3.amazonaws.com버킷이 생성됩니다 us-east-1.

AWS의 문서에서 S3 엔드 포인트 및 지역에 대한 자세한 내용은 다음과 같습니다 http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region .

따라서 S3Client를 생성 할 때 항상 엔드 포인트 / 리전을 확인하고 동일한 리전에서 동일한 클라이언트를 사용하여 S3 리소스에 액세스하십시오.

버킷이 AWS S3 콘솔에서 생성 된 경우 콘솔에서 해당 버킷의 리전을 확인한 다음 위 링크에 언급 된 엔드 포인트 세부 정보를 사용하여 해당 리전에서 S3 클라이언트를 생성하십시오.


답변

위의 답변 중 어느 것도 내 문제를 해결하지 못했습니다.

위의 답변은 아마도 문제의 원인 일 가능성이 높지만 내 문제는 잘못된 버킷 이름을 사용하고 있다는 것입니다. 유효한 버킷 이름이었고 내 버킷이 아닙니다.

내가 가리키는 버킷은 람다 기능과 다른 지역에 있었으므로 버킷 이름을 확인하십시오!


답변

다른 AWS 프로파일을 사용할 때이 문제가 발생했습니다. 관리자 권한이있는 계정을 사용할 때 오류가 발생하여 권한 문제가 발생할 가능성이 거의 없었습니다.

실제로 AWS는 사용자 관점에서 필요한 조치와 관련이 거의없는 오류 메시지를 발행하는 경향이 있습니다.