11

Amazon S3 にフォルダを含むバケットがあります。aws-sdk gemを介して次の方法でアクセスしようとしています。

s3 = AWS::S3.new(
    :access_key_id => "KEY",
    :secret_access_key => "SECRET"
)

bucket = s3.buckets["my_bucket/my_folder"]
bucket.do_stuff....

次のエラーが返されます。

アクセスしようとしているバケットは、指定されたエンドポイントを使用してアドレス指定する必要があります。今後のすべてのリクエストをこのエンドポイントに送信してください。

私が間違っているかもしれないアイデアはありますか?

4

5 に答える 5

23

おそらく、使用しようとしている S3 バケットは US-EAST (デフォルトの場所) の外にあるため、これが役立つはずです。

s3 = AWS::S3.new(
    :access_key_id => "KEY",
    :secret_access_key => "SECRET"
    :s3_endpoint => 's3-eu-west-1.amazonaws.com'
)

次のリストから S3 エンドポイントを選択します。

US Standard *                           s3.amazonaws.com(default)
US West (Oregon) Region                 s3-us-west-2.amazonaws.com
US West (Northern California) Region    s3-us-west-1.amazonaws.com
EU (Ireland) Region                     s3-eu-west-1.amazonaws.com
Asia Pacific (Singapore) Region         s3-ap-southeast-1.amazonaws.com
Asia Pacific (Tokyo) Region             s3-ap-northeast-1.amazonaws.com
South America (Sao Paulo) Region        s3-sa-east-1.amazonaws.com

オブジェクト アクセスに関しては、バケット名はmy_bucketですが、my_folderは object の一部である必要があります。

于 2012-10-16T06:23:10.147 に答える
6

バケット (バケットが作成された場所) の地域固有のエンドポイントを構成する必要があります。これは次の方法で実行できます。

AWS.config(:s3_endpoint => '...')
s3 = AWS::S3.new

また

s3 = AWS::S3.new(:s3_endpoint => '...')

今後は、DNS 互換のバケット名を使用することでこれを回避できます (バケット名にドットも使用しないでください)。バケット名が有効なサブドメインである場合、リージョン固有のエンドポイントを構成せずにバケットをアドレス指定できます。次の点を考慮してください。

http:://bucket-name.s3.amazonaws.com/path/to/object.txt

バケットの名前は「bucket-name」で、オブジェクト キーは「path/to/object.txt」です。このバケットはどのリージョンにも存在する可能性がありますが、「デフォルト」リージョンを使用してアクセスできます。バケット名が dns 互換でない場合、URL は次のようになります。

http://s3.amazon.com/bucket/name/path/to/object.txt

上記の例では、バケットは「bucket/name」であり、DNS と互換性がありません。これはパスの一部になり、s3.amazon.com をリージョン固有のエンドポイントに置き換える必要があります (バケットがクラシック リージョンで作成されていない場合)。

他の誰かが述べたように、パスはバケット名ではなく、オブジェクト キーの一部である必要があります。これにより、共通のプレフィックスでオブジェクトをグループ化できます。「/」は仮想フォルダーとして使用されます (慣例のみ)。

# print the key of every object with the given prefix
s3.buckets['bucket-name'].objects.with_prefix('path/to/').each do |object|
  puts object.key
end
于 2012-10-19T04:15:58.983 に答える