Skip to content

s3cmdとs3syncをさわってみる

mechamogera edited this page Apr 3, 2013 · 17 revisions
  • s3cmdとs3syncでs3をさわってみる

導入環境

  • rvm 1.10.3
  • ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-darwin10.8.0]
  • aproxacs-s3sync-1.3.6

s3cmdとs3syncの導入、初期設定

  1. gemの導入
# Ruby1.9系
$ gem install aproxacs-s3sync
# Ruby1.8系ならこれ?
$ gem install s3sync
  1. 環境設定
export AWS_CALLING_FORMAT="SUBDOMAIN" # これをしておかないとAWS_CALLING_FORMATにSUBDOMAINを指定しろというエラーになる場合がある
export AWS_ACCESS_KEY_ID=[任意の値]
export AWS_SECRET_ACCESS_KEY=[任意の値]
# proxyを利用する場合
# export HTTP_PROXY_HOST=[任意の値]
# export HTTP_PROXY_PORT=[任意の値]
# export HTTP_PROXY_USER=[任意の値]
# export HTTP_PROXY_PASSWORD=[任意の値]
  • 以下のファイルを下記のような内容で保存しても良い
$S3CONF/s3config.yml
$HOME/.s3conf/s3config.yml
/etc/s3conf/s3config.yml
AWS_CALLING_FORMAT : "SUBDOMAIN"
AWS_ACCESS_KEY_ID : [任意の値]
AWS_SECRET_ACCESS_KEY : [任意の値]
# proxyを利用する場合
# HTTP_PROXY_HOST : [任意の値]
# HTTP_PROXY_PORT : [任意の値]
# HTTP_PROXY_USER : [任意の値]
# HTTP_PROXY_PASSWORD : [任意の値]
  1. コードの修正
  • このままs3cmdを実行するとエラーが出るので修正
/Users/hoge/.rvm/gems/ruby-1.9.3-p125@aws/gems/aproxacs-s3sync-1.3.6/lib/s3sync/HTTPStreaming.rb:53:in `<module:S3sync>': uninitialized constant S3sync::SimpleDelegator (NameError)
$ vi [aproxacs-s3sync gemのhome]/lib/s3sync/HTTPStreaming.rb
# 以下を追加
require 'delegate'

s3synの使用例

  • ローカルからs3へ
rails hoge --database sqlite3
s3sync -r --delete hoge [bucket名]:data/
  • s3からローカルへ(-nでドライラン)
s3sync --delete -r [bucket名]:data/hoge /var --exclude='(/\.bundle)|(/vendor/bundle)|(/log/[^/]*\.log)|(/db/[^/]*\.sqlite3)'

メモ

  • s3syncでのユーザ権限について
  • どうもアップロードしたファイルには、メタ情報としてユーザー、グループのID情報を保持していて、ダウンロード時にアップロード時の状態を再現しようとするみたいである
  • このためユーザが存在しなかったりするとエラーになる
Clone this wiki locally