AWS S3:アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります


185

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、次のエラーが表示されるため、リージョンが正しいことがわかります。

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

ここで何が悪いのですか?


6
これは、指定したバケットに誤ったリージョンを誤って指定したときに発生しました。
マフィンマン

これは、誤ったAWSリージョン名が使用されていることが原因である可能性があります。
Dattatray

回答:


311

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

米国標準は us-east-1


30
そんなことは考えたことはなかったでしょうが、私にはうまくいきました!AWS SDKでは、「米国標準」リージョンはAWSRegionUSEast1のようです。
Nerrolken 2015年

地域の設定方法についての答えを探していました。ありがとう!
Sylar 2015年

6
Rubyクライアントを使用している場合は、クライアントを初期化する前に、バケットにENV["AWS_REGION"]正しい値(例"us-east-1"
:)を

複数のバケットを使用する必要がある場合はどうなりますか(例:dev / staging / productionなど)?
yekta 2016年

1
Javaでも同じ問題がありました。あなたのソリューションが役立ちました。彼らはS3で奇妙な名前を使用しています。リージョンのエンドポイント、リポジトリ内のオブジェクト名のキー ...
Gangnus

21

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


2
どのように説明できますか?region: 'us-west-1',何に置き換えますか?
アーミルアフリディ

@AamirAfridi使用しているSDKによって異なります。私はiOS SDKを使用しており、資格情報プロバイダーには、地域を設定できるパラメーターがあります。使用する地域に設定しました。
ジェイQ.

バケットのリージョンを最適化する同様の例がありますが、ドメイン名の更新は省略しました。修正は、そのバケットのS3コンソールのエンドポイント参照にあるように、以前のドメイン名を新しいドメイン名に置き換えることでした。例:私は交換しhttps://s3.amazonaws.com/mybucket/myasset.jpghttps://mybucket.s3-ap-southeast-2.amazonaws.com/myasset.jpgそのエラーを修正します。
Fabien Haddadi、

19

バケットが地域にあるため、同様のエラーに直面していました us-west-2あり、URLパターンのパスにていました。一度、私はファイルを取得するためにURLサブドメインとしてバケット名を持つようにURLパターンを変更し、それは機能しました。

たとえば、以前のURLは

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

それから私はそれを

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

完全に修飾された名前を付けることは私にとってはうまくいきました。シンガポールの可用性ゾーンにあるバケットのs3-ap-southeast-1.amazonaws.com/ng-spark/Java8.json
Nilesh

1

多くのS3 APIパッケージ(この問題は最近npm s3パッケージで発生しました)では、リージョンが米国標準であると想定されている問題が発生する可能性があります。バケットをホストすることを選択した場合、名前によるルックアップではリージョンを明示的に定義する必要がありますその地域外。


1

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


1

上記の回答のどれも私の問題を修正しませんでした。

上記の答えがおそらく問題の原因である可能性が高いですが、私の問題は、間違ったバケット名を使用していたことでした。これは有効なバケット名でしたが、私のバケットではありませんでした。

私が指していたバケットは、ラムダ関数とは異なるリージョンにあったので、バケット名を確認してください!


1

別のAWSプロファイルを使用しているときにこの問題が発生しました。管理者権限を持つアカウントを使用しているときにエラーが表示されたため、権限の問題が発生する可能性は低いと思われました。

ユーザーの観点から見ると、AWSが必要なアクションとの関連性がほとんどないエラーメッセージを発行する傾向があるのは、本当にうんざりです。


0

まだこの問題に直面している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

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

パス変数とバケット名変数を誤って切り替えたため、バケット名にファイルパス値が含まれていました。したがって、リクエストで設定したバケット名が正しいかどうか、もう一度確認してください。


0

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

  • エラーコード-バケットはEAST地域で設定されました。

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

  • 修正

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


0

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


0

私はイギリスに住んでいて、 'us-west-2'リージョンを探し続けていました。したがって、「eu-west-2」にリダイレクトされます。S3の正しいリージョンは「eu-west-2」です。


0

これは、s3バケットを作成するためにユーザーが使用するポリシー(アクセスキー/シークレットキー)にソースIP制約があるときに発生しました。私のIPは正確でしたが、何らかの理由で機能せず、このエラーが発生しました。


0

長い調査の末、私は実用的な解決策を見つけました。問題は間違っていたためでしたregion-code

以下は地域コードのリストです。適切なものを設定すると、問題が解決します。

Code                         Name
US East (Ohio)               us-east-2

US East (N. Virginia)       us-east-1

US West (N. California)     us-west-1

US West (Oregon)            us-west-2

Asia Pacific (Hong Kong)    ap-east-1

Asia Pacific (Mumbai)       ap-south-1

Asia Pacific (Osaka-Local)  ap-northeast-3

Asia Pacific (Seoul)        ap-northeast-2

Asia Pacific (Singapore)    ap-southeast-1

Asia Pacific (Sydney)       ap-southeast-2

Asia Pacific (Tokyo)        ap-northeast-1

Canada (Central)            ca-central-1

Europe (Frankfurt)          eu-central-1

Europe (Ireland)            eu-west-1

Europe (London)             eu-west-2

Europe (Paris)             eu-west-3

Europe (Stockholm)         eu-north-1

Middle East (Bahrain)      me-south-1

South America (São Paulo)   sa-east-1

バケット名の右隅をクリックすると、地域コードが見つかります。

ここに画像の説明を入力してください

モードの詳細についてはをクリックします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.