web-dev-qa-db-ja.com

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に変更した場合、次のエラーが表示されるため、領域が正しいことがわかります。

指定されたキーが存在しません。

私はここで何をしていますか?

156
user3575214

このバケットは別の地域で作成された可能性があります。IEはus-west-2ではありません。 「アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。今後のリクエストはすべてこのエンドポイントに送信してください。」

米国標準はus-east-1です

268
Marcus Walser

コンソールでバケットの場所を確認してから、使用するエンドポイントへの参照としてこれを使用します。 http://docs.aws.Amazon.com/general/latest/gr/rande.html#s3_region

17
Jay Q.

バケットがリージョンus-west-2にあり、URLパターンのパスにbucketnameがあるため、同様のエラーが発生しました。かつて、ファイルを取得するためにURLパターンをURLサブドメインとしてbucketnameを持つように変更しました。

例えば以前のURLは

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

それから私はそれを交換しました

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

多くのS3 APIパッケージ(私は最近この問題--- npm s3パッケージ )を使っていますその地域外でバケットをホストすることを選択した場合。

1
Duncan

まだこの問題に直面しているpplの場合は、次のようにs3_Hostを設定ハッシュに追加してみてください。

   :storage => :s3,
   :s3_credentials => {:access_key_id => access key,
   :secret_access_key => secret access key},
   :bucket => bucket name here,
   :s3_Host_name => s3-us-west-1.amazonaws.com or whatever comes as per your region}.

これで問題は解決しました。

0
RamanSM

存在しないバケットにアクセスしようとしたときにこのエラーが発生しました。

誤ってパス変数をバケット名変数に切り替えたため、バケット名はファイルパス値になりました。あなたのリクエストで設定したバケット名が正しいかどうか、ダブルチェックしてください。

0
Sven Möhring

私は同じ問題に直面しました。多くの闘争の後、私は本当の問題はcom.amazonawsの依存関係にあることがわかりました。依存関係を追加した後、このエラーは消えました。

0

上記の答えのどれも私の問題を解決しませんでした。

上記の答えはおそらくあなたの問題の原因と思われますが、私の問題は私が間違ったバケット名を使用していたということでした。それは有効なバケツの名前でした、それはちょうど私のバケツではありませんでした。

私が指していたバケットは、私のラムダ関数とは異なる地域にあったので、あなたのバケット名をチェックしてください!

0
Peter Grainger

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クライアントを作成します。

0
Rathan

私は同じエラーがありました。 s3クライアントがバケットの作成中にセットアップされたものとは異なるエンドポイントで作成されたときに発生しました。

  • エラーコード - バケットはEAST Regionで設定されています。

s3Client =新しいAmazonS3Client(AWS_ACCESS_KEY、AWS_SECRET_KEY、RegionEndpoint.USWest2)

  • FIX

s3Client =新しいAmazonS3Client(AWS_ACCESS_KEY、AWS_SECRET_KEY、RegionEndpoint。SEast1

0
Tushar