LoginSignup
1
1

More than 5 years have passed since last update.

tarのstreamをFogを使ってRiakCSにアップロードする

Last updated at Posted at 2013-10-10

xtrabackupのオプションの--stream-tarのようにtarで固めたものを
diskに書かず、全体をメモリに読み込んだりせずにRiakCS(S3)にuploadする

アップロード

put_from_stdin.rb
#!/usr/bin/env ruby

require 'fog'

YOUR_KEY_ID = 'aws_access_key_id'
YOUR_SECRET_KEY = 'aws_secret_access_key'
YOUR_HOST = 'riakcs.localdomain'
YOUR_BUCKET = 'test_bucket'
YOUR_OBJECT_KEY = 'object_key'
MULTIPART_CHUNK_SIZE = 1024 * 1024 * 20

storage = Fog::Storage.new(
  :provider => 'AWS',
  :aws_access_key_id     => 'YOUR_KEY_ID',
  :aws_secret_access_key => 'YOUR_SECRET_KEY',
  :host                  => YOUR_HOST,    # 今回はローカルのriakcsだったため
  :scheme                => 'http'                  # defaultはhttps
)

bucket = storage.directories.get(YOUR_BUCKET)
$stdin.instance_eval { undef :rewind }
file = bucket.files.new(
  :key  => 'YOUR_OBJECT_KEY',
  :body => $stdin
)
file.multipart_chunk_size = MULTIPART_CHUNK_SIZE
file.save()

あとは

tar -cO ./directory - | ./upload_from_stdin.rb

みたいな感じでtarに固めてアップロード完了

ダウンロード

ダウンロードするときも一回tarをとってきてとくとか面倒なので、

get_to_stdout.rb
#!/usr/bin/env ruby

require 'fog'

YOUR_KEY_ID = 'aws_access_key_id'
YOUR_SECRET_KEY = 'aws_secret_access_key'
YOUR_HOST = 'riakcs.localdomain'
YOUR_BUCKET = 'test_bucket'
YOUR_OBJECT_KEY = 'object_key'

storage = Fog::Storage.new(
  :provider => 'AWS',
  :aws_access_key_id     => AWS_KEY_ID,
  :aws_secret_access_key => AWS_SECRET_KEY,
  :host                  => YOUR_HOST,
  :scheme                => 'http'
)

bucket = storage.directories.get(YOUR_BUCKET)
bucket.files.get(YOUR_OBJECT_KEY) do |chunk, remaining_bytes, total_bytes|
  print chunk
end

これで標準出力にはかれるので、

bundle exec ./riak_stdout_get.rb | tar xvfi -

みたいな感じでダウンロードしつつ、展開。

間に暗号を挟んだりはCPUと相談。ただし、ファイル全体が必要になる圧縮は...

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1