サイバーマンデー開催間近!商品レビューまとめ記事

【AWS】みんな大好きS3のアップロードツールを試してみた!

本記事対象
AWSのS3アップロードツールについて知りたい方

ども。あいしんくいっと(@ithinkitnet)です。

AWSを利用する上で外す事の出来ないS3(Simple Storage Service)へのデータアップロードツールを試してみたいと思います。
S3へデータアップロードを行う方法として、パッと思いつくだけでも下記があると思います。

S3へのアップロード方法
  1. AWSコンソール
  2. Cyberduck、Cloudberry、S3Browser
  3. awscli
  4. s3cmd
  5. s3fs
  6. AWS SDK(JAVA、Ruby、PHP等々)

まだありそうですが、私が思いつくのは上に挙げたもの達ですね。
データファイルを一つ、二つS3にアップロードするならAWSコンソールを使えば良いとは思うのですが、データが増えるとCLIを使った方が便利であると思います。

ですので、S3へのアップロードをCLIで出来るものを幾つか試してみたいと思います。

S3のアップロードツールを試してみた!

awscli

まず、私が普段愛用しているawscliを使ったS3アップロードを試してみたいと思います。
awscliのインストールについては下記のエントリを参照してください。

参考 【AWS】awscliを入れてみた(CentOS7)

では、実際にawscliを使ったS3アップロードを試してみたいと思います。
awscliには「s3 cp」と「s3 sync」の2種類が用意されています。

1GBのデータファイル作成

# dd if=/dev/zero of=1GB.dat bs=1024 count=1000000
1000000+0 records in
1000000+0 records out
1024000000 bytes (1.0 GB) copied, 20.4377 s, 50.1 MB/s

S3へデータアップロード(s3 cp)

s3 cp
# time aws s3 cp /root/work/1GB.dat s3://i-think-it.net
upload: ./1GB.dat to s3://i-think-it.net/1GB.dat

real 0m16.268s
user 0m5.050s
sys 0m1.435s

1GBファイルが30秒程度でアップロードする事が出来ました。

S3へデータアップロード(s3 sync)

このsyncオプションは更新があったデータのみをアップロードしてくれるので、複数のデータをS3にアップロードするのに便利です。
ただし、タイムスタンプしか見ていないっぽく、純粋な差分コピーでは無いのがたまにキズですが・・・。

s3 sync
# time aws s3 sync /root/work s3://i-think-it.net

real 0m0.542s
user 0m0.215s
sys 0m0.046s

ファイルを削除して再度実行

s3 rm
# aws s3 rm s3://i-think-it.net/1GB.dat
delete: s3://i-think-it.net/1GB.dat
# time aws s3 sync /root/work s3://i-think-it.net
upload: ./1GB.dat to s3://i-think-it.net/1GB.dat

real 0m15.890s
user 0m4.575s
sys 0m1.286s

s3cmd

次にs3cmdを試してみたいと思います。
awscliとは別のコマンドになるため、s3cmdは別途インストールが必要になりますので、適当なディレクトリにwgetして簡単にインストールします。

s3cmdダウンロード
# wget http://sourceforge.net/projects/s3tools/files/s3cmd/1.5.2/s3cmd-1.5.2.tar.gz
# tar zxvf s3cmd-1.5.2.tar.gz
# cd s3cmd-1.5.2 && python setup.py install
s3cmdセットアップ
# s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: <span style="color: #ff0000;"><アクセスキー></span>
Secret Key: <span style="color: #ff0000;"><シークレットキー></span>
Default Region [US]: <span style="color: #ff0000;">ap-northeast-1</span>

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:
Path to GPG program [/bin/gpg]:

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [No]:

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:

New settings:
Access Key: <span style="color: #ff0000;"><アクセスキー></span>
Secret Key: <span style="color: #ff0000;"><シークレットキー></span>
Default Region: ap-northeast-1
Encryption password:
Path to GPG program: /bin/gpg
Use HTTPS protocol: False
HTTP Proxy server name:
HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n]
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] <span style="color: #ff0000;">y</span>
Configuration saved to '/root/.s3cfg'

S3へデータアップロード

s3cmdでデータアップロード
# time s3cmd put -r 1GB.dat s3://i-think-it.net
1GB.dat -> s3://i-think-it.net/1GB.dat [part 1 of 66, 15MB]
15728640 of 15728640 100% in 0s 21.83 MB/s done
1GB.dat -> s3://i-think-it.net/1GB.dat [part 2 of 66, 15MB]
15728640 of 15728640 100% in 0s 17.01 MB/s done
~以下、略~
real 1m5.880s
user 0m12.950s
sys 0m2.287s

s3アップロードツールを試してみて

今回はawscliとs3cmdを試しましたが、両者であればawscliの方が早いという結果でした。

  • awscli ・・・ 0m16.268s
  • s3cmd・・・ 1m5.880s

※1GBのデータをアップロードした場合

awscliはマルチアップロードが効いているのでアップロード速度が速いのだと推測されます。
しかも、AWSが出しているCLIツールなので安定感もあります。
なので、CLIコマンドを使う場合はawscliを使った方が良いように思います。

以上、あいしんくいっとでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)