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サブドメインとしてbucketnameを持つように変更しました。
例えば以前のURLは
https://s3.amazonaws.com/bucketname/filePath/filename
それから私はそれを交換しました
https://bucketname.s3.amazonaws.com/filePath/filename
多くのS3 APIパッケージ(私は最近この問題--- npm s3パッケージ )を使っていますその地域外でバケットをホストすることを選択した場合。
まだこの問題に直面している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}.
これで問題は解決しました。
存在しないバケットにアクセスしようとしたときにこのエラーが発生しました。
誤ってパス変数をバケット名変数に切り替えたため、バケット名はファイルパス値になりました。あなたのリクエストで設定したバケット名が正しいかどうか、ダブルチェックしてください。
私は同じ問題に直面しました。多くの闘争の後、私は本当の問題はcom.amazonawsの依存関係にあることがわかりました。依存関係を追加した後、このエラーは消えました。
上記の答えのどれも私の問題を解決しませんでした。
上記の答えはおそらくあなたの問題の原因と思われますが、私の問題は私が間違ったバケット名を使用していたということでした。それは有効なバケツの名前でした、それはちょうど私のバケツではありませんでした。
私が指していたバケットは、私のラムダ関数とは異なる地域にあったので、あなたのバケット名をチェックしてください!
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クライアントを作成します。
私は同じエラーがありました。 s3クライアントがバケットの作成中にセットアップされたものとは異なるエンドポイントで作成されたときに発生しました。
s3Client =新しいAmazonS3Client(AWS_ACCESS_KEY、AWS_SECRET_KEY、RegionEndpoint.USWest2)
s3Client =新しいAmazonS3Client(AWS_ACCESS_KEY、AWS_SECRET_KEY、RegionEndpoint。SEast1)