ラベル S3 の投稿を表示しています。 すべての投稿を表示
ラベル S3 の投稿を表示しています。 すべての投稿を表示

2017-06-27

AWS Management ConsoleのS3新UIで、deletedなオブジェクトをprefix指定でフィルタリング表示する

バージョン管理をenableにしたS3バケットで、大量のdeletedなオブジェクトの中からprefix指定でオブジェクトをピックアップしようとしてみたところ

No keys were found for prefix search.


と言われてしまい、deletedなオブジェクトに対してprefix指定での検索ができませんでした(´・ω・`)



ブラウザ上の操作では

Type a prefix and press Enter to search. Press ESC to clear.

と書かれているフォームにprefixを指定してみても、deletedではない現行バージョンに対して検索してしまうようです。



ワークアラウンドとして、次のように直接URLで指定してあげるとdeletedなオブジェクトに対して検索することができましたよヽ(´ー`)/
https://console.aws.amazon.com/s3/buckets/<バケット名>/<prefix>?showdeleted=true

2013-10-31

S3でディレクトリのファイル一覧を表示する

設置すべきファイルは3つ

<html lang="ja">
<head>

S3 File List



</head>
<body onload="loadXML();">
<div id="result"style="white-space:nowrap;" >
</div>
</body>
</html>

S3のバケットポリシーを設定する
ここでは、ListとGetをxxx.xxx.xxx.xxx/32のアドレスのアクセスのみに絞って許可
{
 "Version": "2008-10-17",
 "Statement": [
  {
   "Sid": "AllowUser",
   "Effect": "Allow",
   "Principal": {
    "AWS": "*"
   },
   "Action": [
    "s3:List*",
    "s3:Get*"
   ],
   "Resource": [
    "arn:aws:s3:::s3-bucket-name",
    "arn:aws:s3:::s3-bucket-name/*"
   ],
   "Condition": {
    "IpAddress": {
     "aws:SourceIp": ["xxx.xxx.xxx.xxx/32"]
    }
   }
  }
 ]
}

これでhttpでhtmlファイルにアクセスすると一覧が表示される

2013-08-28

S3とCloudfrontのapache benchによるベンチマーク

条件
S3バケット、apache benchを動作させるEC2インスタンス共に東京リージョン
EC2インスタンスはc1.medium
独自ドメインはR53で管理

1. S3バケットポリシーでアクセス許可をしたtest.txtにS3のURLでアクセス
2. S3バケットポリシーでアクセス許可をしたtest.txtにStatic Website HostingのURLでアクセス
3. S3上のtest.txtにCloudfront経由での配信を設定しCloudfrontのURLでアクセス
4. S3上のtest.txtにCloudfront経由での配信を設定、独自ドメインを割り当て独自ドメインのURLでアクセス

Document Path: /test.txt
Document Length: 10 bytes

結論からいくと平均レスポンスタイムは

良い                                  悪い

パターン3≦パターン4<<超えられない壁(3~4倍の差)<<パターン1≦パターン2

な感じの模様
結果の詳細は以下の通り

1. $ ab -n 10000 -c 10 http://xxx.s3.amazonaws.com/test.txt
1回目
Concurrency Level: 10
Time taken for tests: 33.292 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 3780000 bytes
HTML transferred: 100000 bytes
Requests per second: 300.37 [#/sec] (mean)
Time per request: 33.292 [ms] (mean)
Time per request: 3.329 [ms] (mean, across all concurrent requests)
Transfer rate:  110.88 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 3   12 31.1   5    3017
Processing: 8   21 90.4  22    3024
Waiting: 8   21 90.4  22    3024
Total:        11   33 96.2  38    3044

Percentage of the requests served within a certain time (ms)
  50%   38
  66%   44
  75%   45
  80%   47
  90%   49
  95%   52
  98%   55
  99%   60
 100% 3044 (longest request)
2回目
Concurrency Level: 10
Time taken for tests: 19.364 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 3780000 bytes
HTML transferred: 100000 bytes
Requests per second: 516.41 [#/sec] (mean)
Time per request: 19.364 [ms] (mean)
Time per request: 1.936 [ms] (mean, across all concurrent requests)
Transfer rate:  190.63 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 3    6  3.4   9  40
Processing: 5   13 79.5  12    3012
Waiting: 5   13 79.5  12    3011
Total:  8   19 79.7  21    3021

Percentage of the requests served within a certain time (ms)
  50%   21
  66%   23
  75%   23
  80%   23
  90%   24
  95%   25
  98%   30
  99%   37
 100% 3021 (longest request)

2. $ ab -n 10000 -c 10 xxx.s3-website-ap-northeast-1.amazonaws.com
1回目
Concurrency Level: 10
Time taken for tests: 36.137 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 3560000 bytes
HTML transferred: 100000 bytes
Requests per second: 276.73 [#/sec] (mean)
Time per request: 36.137 [ms] (mean)
Time per request: 3.614 [ms] (mean, across all concurrent requests)
Transfer rate:  96.21 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 4    9 52.1  11    3009
Processing:    10   27 156.2  19    3062
Waiting:       10   27 156.2  19    3061
Total:        14   36 164.7  30    3074

Percentage of the requests served within a certain time (ms)
  50%   30
  66%   32
  75%   33
  80%   33
  90%   35
  95%   40
  98%   58
  99%   73
 100% 3074 (longest request)

2回目
Concurrency Level: 10
Time taken for tests: 31.559 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 3560000 bytes
HTML transferred: 100000 bytes
Requests per second: 316.86 [#/sec] (mean)
Time per request: 31.559 [ms] (mean)
Time per request: 3.156 [ms] (mean, across all concurrent requests)
Transfer rate:  110.16 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 3    8 42.6   4    3007
Processing:    10   23 116.4  19    3021
Waiting:       10   23 116.4  19    3021
Total:        14   31 124.0  30    3033

Percentage of the requests served within a certain time (ms)
  50%   30
  66%   32
  75%   32
  80%   33
  90%   34
  95%   37
  98%   49
  99%   66
 100% 3033 (longest request)

3. $ ab -n 10000 -c 10 http://xxx.cloudfront.net/test.txt
1回目
Concurrency Level: 10
Time taken for tests: 7.469 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 4161358 bytes
HTML transferred: 100000 bytes
Requests per second: 1338.85 [#/sec] (mean)
Time per request: 7.469 [ms] (mean)
Time per request: 0.747 [ms] (mean, across all concurrent requests)
Transfer rate:  544.09 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 2    3  0.5   3  12
Processing: 3    4  3.2   4 137
Waiting: 3    4  3.2   4 137
Total:  5    7  3.3   7 140

Percentage of the requests served within a certain time (ms)
  50%    7
  66%    8
  75%    8
  80%    8
  90%    9
  95%   10
  98%   11
  99%   14
 100%  140 (longest request)
2回目
Concurrency Level: 10
Time taken for tests: 8.182 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 4190808 bytes
HTML transferred: 100000 bytes
Requests per second: 1222.17 [#/sec] (mean)
Time per request: 8.182 [ms] (mean)
Time per request: 0.818 [ms] (mean, across all concurrent requests)
Transfer rate:  500.18 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 2    3  0.7   3  23
Processing: 3    5  2.0   5  41
Waiting: 3    5  2.0   5  41
Total:  5    8  2.2   8  44

Percentage of the requests served within a certain time (ms)
  50%    8
  66%    8
  75%    9
  80%    9
  90%   10
  95%   11
  98%   13
  99%   16
 100%   44 (longest request)

4. $ ab -n 10000 -c 10 http://xxx.hoge.com/test.txt
1回目
Concurrency Level: 10
Time taken for tests: 7.836 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 4190014 bytes
HTML transferred: 100000 bytes
Requests per second: 1276.15 [#/sec] (mean)
Time per request: 7.836 [ms] (mean)
Time per request: 0.784 [ms] (mean, across all concurrent requests)
Transfer rate:  522.18 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 2    3  1.8   3  27
Processing: 3    5  2.5   4  39
Waiting: 3    4  2.4   4  39
Total:  5    8  3.2   7  53

Percentage of the requests served within a certain time (ms)
  50%    7
  66%    8
  75%    8
  80%    8
  90%    9
  95%   12
  98%   20
  99%   21
 100%   53 (longest request)
2回目
Concurrency Level: 10
Time taken for tests: 8.473 seconds
Complete requests: 10000
Failed requests: 0
Write errors:  0
Total transferred: 4191311 bytes
HTML transferred: 100000 bytes
Requests per second: 1180.20 [#/sec] (mean)
Time per request: 8.473 [ms] (mean)
Time per request: 0.847 [ms] (mean, across all concurrent requests)
Transfer rate:  483.07 [Kbytes/sec] received

Connection Times (ms)
       min  mean[+/-sd] median max
Connect: 2    3  0.6   3  17
Processing: 3    5  5.7   4 198
Waiting: 3    5  5.7   4 198
Total:  5    8  5.7   8 201

Percentage of the requests served within a certain time (ms)
  50%    8
  66%    8
  75%    9
  80%    9
  90%   11
  95%   13
  98%   17
  99%   23
 100%  201 (longest request)

2013-08-05

S3上でのオブジェクトコピーにはサイズ制限があるっぽい

S3上で大きなオブジェクトのコピーをしようとしたらこんなエラーが・・・
InvalidRequest
The specified copy source is larger than the maximum allowable size for a copy source: 5368709120
5*2^30=5368709120なので丁度5GBがリミットのようです

S3に5GB以上のファイルをアップロードしてみた

普段はs3cmdを愛用しているのですが、stable版では5GBのファイルのアップロードに対応していないのでs4cmdというのを利用してみました

https://github.com/bloomreach/s4cmd

実験に利用したファイルは約7.5GB
$ ls -hl /mnt/ephemeral/xxx.gz 
-rw-r--r-- 1 root root 7.5G Aug  5 17:03 /mnt/ephemeral/xxx.gz

2回アップロードを試してみました

1回目
$ time s4cmd put /mnt/ephemeral/xxx.gz s3://yyy/
/mnt/ephemeral/xxx.gz => s3://yyy/xxx.gz
         
real 1m40.491s
user 0m35.970s
sys 0m16.281s

2回目
$ time s4cmd put /mnt/ephemeral/xxx.gz s3://yyy/
/mnt/ephemeral/xxx.gz => s3://yyy/xxx.gz
         
real 1m35.689s
user 0m35.726s
sys 0m17.057s

いずれも2分掛からずに終了しました

アップロード中のグラフを見てみると800Mbpsぐらいは出てる模様です
※インスタンスタイプはm2.4xlargeというお高いやつですが・・・

2013-01-24

S3バケットをアカウントを跨いでコピーしてみた

この方法は同じアカウント内でも利用できるので
バケット名の変更、リージョンの変更っていうことも別のバケットを作成してコピーすることで実現可能

利用したツールはDragonDiskというS3に対応したクライアントツール
まずは、コピー先となるアカウントのAWS Management ConsoleのS3の項目で、コピー元のアカウントに対してアクセス権限を付与
  1. 設定するバケット名をクリック
  2. Permissionsのところをクリックして開く
  3. Edit bucket policyをクリック
  4. bucket policyを入力してSaveをクリック
  5. PermissionsのところのSAveをクリック
bucket policyはこんな感じ
{
 "Version": "2008-10-17",
 "Id": "2c08cdf1-ddfc-4765-ac19-26b03a8e8b5e",
 "Statement": [
  {
   "Sid": "AllowUser",
   "Effect": "Allow",
   "Principal": {
    "AWS": "arn:aws:iam::<12桁の数字からなるAWSのユーザID>:root"
   },
   "Action": "s3:*",
   "Resource": [
    "arn:aws:s3:::[S3 bucket name]/*",
    "arn:aws:s3:::[S3 bucket name]"
   ]
  }
 ]
}
今回は、コピー先のS3バケットとその中のオブジェクトに対する全権限を付与しました
そして、いよいよDragonDiskの出番
DragonDiskにはコピー元のアカウントだけ登録されていればOK
  1. Rootのプルダウンからコピー元のアカウントを選択
  2. アクティブになったAdd external bucketをクリック
  3. コピー先になるS3バケット名を入力してOKをクリック
  4. 右ペインでもRootのプルダウンからコピー元のアカウントを選択
  5. ∞みたいなアイコンで追加されたコピー先のS3バケットを選択
  6. 左ペインでコピー元のS3バケットを選択
  7. コピー元のバケットのオブジェクトを選択し右ペインへドラッグアンドドロップ
以上で完了
約119.59GB
6,176ファイル
2,274フォルダ
のコピーが約1分で行えましたよヾ(*・ω・)シ
ちなみに、1ファイルで1GBぐらいあるとそれだけで1分ぐらい
52MBぐらいのファイルを東京→us-eastへのコピーだと70秒ぐらいを要しました

その際、Tools -> Options -> OperationsでMaximum number of concurrent operationsの値を256に
InterfaceのところでMaximum number of concurrent operationsの値を10に
変更して同時に行える処理量を増やしています

2012-08-02

s3cmd syncで既にあるファイルまで同期されてしまう

s3cmdの同期機能であるs3cmd syncなのですが
既に存在しているファイルまでご丁寧にダウンロードしてくれてしまい嵌まったのでメモ。
2. Conditional transfer — only files that don’t exist at the destination in the same version are transferred by the s3cmd sync command. By default a md5 checksum and file size is compared. This is similar to a unix rsync command, with some exceptions outlined below.
Filenames handling rules and some other options are common for both these methods.
と書かれているので設計的には既に存在している同じ内容のファイルについてはスキップしてくれるはずなのです。
ところが実際test.bucketというS3上のバケットから/mntというローカルディレクトリに同期させてみると何度やっても同じ結果でした。
s3cmd sync -v --no-progress s3://test.bucket/ /mnt
INFO: Compiling list of local files...
INFO: Retrieving list of remote files for s3://test.bucket/ ...
INFO: Found 5 remote files, 4 local files
INFO: Applying --exclude/--include
INFO: Verifying attributes...
INFO: Summary: 5 remote files to download, 4 local files to delete
リモート(S3)にダウンロードすべきファイルが5個ファイルが見つかって、ローカルには4つ削除すべきファイルが見つかりました…と。
5個のうち1はディレクトリのダミーファイル(S3にはディレクトリという概念がないのでダミーファイルでディレクトリを表現している)なので、実ファイル4つ全てが削除されて新たにダウンロードされることになってます。
・・・もしやと思い、ローカルディレクトリ指定の最後に/を追加してみました
s3cmd sync -v --no-progress s3://test.bucket/ /mnt/
INFO: Compiling list of local files...
INFO: Retrieving list of remote files for s3://test.bucket/ ...
INFO: Found 5 remote files, 4 local files
INFO: Applying --exclude/--include
INFO: Verifying attributes...
INFO: Summary: 1 remote files to download, 0 local files to delete
削除されるファイルは無く、ディレクトリのダミーファイル1つだけがダウンロード対象になりましたよ!
これで、解決ですヾ(*・ω・)シ

2011-07-29

S3のバージョン管理機能を試す

フリーのS3管理ツールであるDragonDiskを利用して試してみました。

まずはバケットを右クリックしてプロパティを開いてVersioningのチェックボックスをONにしてバージョン管理機能を有効にします。

続いて、HTTPで確認できるようにアップロードしたファイルを右クリックしてプロパティを開、SecurityタブでAddをクリックしてAll Usersを追加してDownloadのチェックボックスをONにしてやります。

ファイルを変更して、上書きすると変更前後のバージョンが維持されます。
ファイル名を右クリックしてプロパティを開いてやるとVersionsに2つの日時が確認でき、
古い方の日付を選択してWeb URLタブで確認できるURLにアクセスすると変更前の内容が確認できました。

削除は、最新版を削除しても古いバージョンは削除できず、ファイルのVersionsから消したいバージョンの日付を右クリックしてDeleteを選択することで明示的に削除する必要がありました。
最新版を削除してしまった場合は、DragonDiskからは削除できなくなってしまいます。
その時は、同じファイル名のオブジェクトを再度アップロードしてやると、そのプロパティから過去のバージョンが確認できます。

2011-07-13

Object#tapってなんやねん!

DEPRECATION WARNING: Object#returning has been deprecated in favor of Object#tap.

なんて警告が出たので調べてみるとAWS::S3の中で警告がでるような処理をしているようですね。
Gemfilesのaws-s3の部分を以下のように書き換えてbundle updateしてあげれば警告でなくなりましたよヾ(*・∀・)ノ"

gem 'aws-s3', :git => 'git://github.com/emk/aws-s3.git', :require => 'aws/s3'
gem 'xml-simple'

2011-06-23

別アカウントのIAMアカウントに対してs3へのアクセス権限を与える

IAM Policyの方は単純に
{
 "Statement": [
  {
   "Action": "s3:*",
   "Effect": "Allow",
   "Resource": "arn:aws:s3:::*"
  }
 ]
}
とかしちゃえば、s3に関してはなんでもOKになります。

あとは、対象のバケット側のACLで設定しちゃえば良いかと思ったのですが、IAMアカウントにはcanonical user IDが割り当てられていないので無理でした(´・ω・`)

さて、どうするか・・・
s3 Bucket Policyを使えば出来ましたヾ(*・∀・)ノ"
こんな感じ
{
  "Version": "2008-10-17",
  "Id": "2c08cdf1-ddfc-4765-ac19-26b03a8e8b5e",
  "Statement": [
    {
      "Sid": "AllowMyUser",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:user/iam-user-name"
      },
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::bucket-name/*",
        "arn:aws:s3:::bucket-name"
      ]
    }
  ]
}

Resourceにはarn:aws:s3:::bucket-name/*だけではなく、arn:aws:s3:::bucket-nameも設定しておくのがミソです。
これがないと、アイテムの一覧を取得することができません。

2011-06-02

s3cmdコマンドを使う

何も設定せずに実行すると
You didn't set up your environment variables; see README.txt
と怒られてしまうので、環境変数をセットしてあげればおーけーヾ(*・∀・)ノ"
export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxxxx
export AWS_CALLING_FORMAT=SUBDOMAIN

2011-05-16

s3fsで"通信端点が接続されていません"というエラーになる

しばらくマウントしたまま放置していたら読み書きできなくなったのでdfでマウント状況を見てみると
df: `/mnt/s3': 通信端点が接続されていません
てな感じのエラーがでていました。

以下のコマンドで一度アンマウントしてまたマウントしてあげれば正常に使えるようになりましたよヾ(*・∀・)ノ"
$ umount /mnt/s3
$ s3fs backet-name /mnt/s3

2011-04-18

s3バケットをファイルシステムとしてマウントする

s3fsってのがあるのでこれを使いました

tar zxvf s3fs-1.40.tar.gz
cd s3fs-1.40
./configure
とかやると
No package 'fuse' found
No package 'libcurl' found
No package 'libxml-2.0' found
No package 'libcrypto' found
てな感じで怒られます(´・ω・‘)
そんな訳でパッケージをインストール
ここからfuseをダウンロードしてきてインストール
tar zxvf fuse-2.8.5.tar.gz
cd fuse-2.8.5
./configure
make
make install
あとはyumで足りないパッケージをインストール
yum -y install curl-devel livxml2-devel

これで足りないものは揃ったのでリトライ
cd s3fs-1.40
./configure
make
make install

あとは、AWSのAccesskeyとSecretkeyを設定してやる必要があります
echo "[Accesskey]:[Secretkey]" > /etc/passwd-s3fs
chmod 640 /etc/passwd-s3fs

いざマウント!
mkdir /mnt/hoge
/usr/local/bin/s3fs mybacket /mnt/hoge
と・・・
/usr/local/bin/s3fs: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory
な感じで怒られました(´・ω・‘)
シンボリックリンクを張ってやります
ln -s /usr/local/lib/libfuse.so.2 /usr/lib/libfuse.so.2
/usr/local/bin/s3fs mybacket /mnt/hoge
と、今度は
/usr/local/bin/s3fs mybacket /mnt/hoge
fuse: device not found, try 'modprobe fuse' first
と言われたので言われた通りに
modprobe fuse
/usr/local/bin/s3fs mybacket /mnt/hoge

これで無事マウントできましたよヾ(*・∀・)ノ"
ただ、他のツールから作成したディレクトリは認識できないものがあるようです(´・ω・‘)

2011-03-23

S3バケット内のファイル総サイズ、ファイル数などを調べる

S3バケット内のファイル総サイズ、ファイル数などを簡単に調べる方法は無いかと探っていたらありましたっ!
公式サイトはS3 Browserで調べられるんですねヾ(*・ω・)シ

こんな感じで表示できました。

IAM(Identity and Access Management)あれこれ

※えらー
iam-useruploadpolicy -u xxx -p xxx -p xxx
で、ポリシーファイルサイズが2048 byte以下なのに次のようなエラーが出るときは
409 LimitExceeded Maximum policy size of 2048 bytes exceeded for user xxx
次のコマンドで一度ポリシーを消してからiam-useruploadpolicyしてやれば幸せになれるみたいヾ(*・∀・)ノ"
iam-userdelpolicy -u xxx -p xxx

※s3ブラウザで確認できるように
リード権限のみ付与しようと次のようなポリシーを設定するとS3用の汎用ツールだと上の階層から辿っていかないとならないのでアクセスできない。
"Effect":"Allow",
"Action":["s3:List*","s3:Get*"],
"Resource":"arn:aws:s3:::hoge/*"
そこでこんな感じの設定も追加したら行けましたよ。
"Effect":"Allow",
"Action":"s3:List*",
"Resource":["arn:aws:s3:::","arn:aws:s3:::hoge"]