LoginSignup
2
2

More than 5 years have passed since last update.

Amazon s3でオブジェクトの内容を標準出力に出すスクリプト

Posted at

Unix系OSのコマンドラインシェルでは,パイプを用いた処理が頻発します.
そのため,s3 で作業をしていても,バケット内のオブジェクトを標準出力に出し,パイプで処理をしたい場合があるかと思います.
aws-cli は,オブジェクトをローカルファイルシステムにコピーするコマンドがありますが,cat コマンドに相当する処理は無いようです.

このような時,AWS SDK を使って,簡単なスクリプトを書いて解決できます.

require 'inifile'
require 'aws-sdk'

ini = IniFile.load(ENV['HOME'] + "/.aws/config")
section = 'default'

uri = URI.parse(ARGV[0])
raise 'Scheme must be "s3"' if uri.scheme != 's3'

#==============================================================
s3 = AWS::S3.new(
  :access_key_id => ini[section]['aws_access_key_id'],
  :secret_access_key => ini[section]['aws_secret_access_key'],
  :region => ini[section]['region']
)

bucket = s3.buckets[uri.host]
object = bucket.objects[uri.path[1..-1]]

object.read { |chunk|
  print chunk
}

上記の例では,認証関係の情報は,aws-cli と同じini形式であることを期待しています.
ARGV[0] には URI 形式でバケットとプレフィックスを指定します.scheme は s3 であることを期待しています.
この辺りは,aws-cli と同じですので,戸惑うことはないと思います.

このような簡単な記述で,catコマンドの基本機能に相当するものを実現できます.

上記ソースコードは,ライセンスを設定するほどのものではありませんが,一応MITライセンスとしました.
最新版ソースコードは,Bitbucketで保守 しています.

2
2
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
2
2